/* * Seven Kingdoms: Ancient Adversaries * * Copyright 1997,1998 Enlight Software Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ //Filename : OAI_DEFE.CPP //Description: AI on defense #include #include #include //----- Begin of function Nation::ai_defend -----// // // attackerUnitRecno - unit recno of the attacker. // int Nation::ai_defend(int attackerUnitRecno) { //--- don't call for defense too frequently, only call once 7 days (since this function will be called every time our king/firm/town is attacked, so this filtering is necessary ---// if( info.game_date < ai_last_defend_action_date+7 ) return 0; ai_last_defend_action_date = info.game_date; //---------- analyse the situation first -----------// Unit* attackerUnit = unit_array[attackerUnitRecno]; err_when( attackerUnit->nation_recno == nation_recno ); int attackerXLoc = attackerUnit->next_x_loc(); int attackerYLoc = attackerUnit->next_y_loc(); int hasWar; int enemyCombatLevel = mobile_defense_combat_level( attackerXLoc, attackerYLoc, attackerUnit->nation_recno, 0, hasWar ); // 0-don't return immediately even if there is war around this town //-- the value returned is enemy strength minus your own strength, so if it's positive, it means that your enemy is stronger than you, otherwise you're stronger than your enemy --// int attackCombatLevel = ai_attack_target(attackerXLoc, attackerYLoc, enemyCombatLevel, 1); // 1-defense mode //------ request military aid from allies ----// if( attackCombatLevel < enemyCombatLevel && attackerUnit->nation_recno ) { ai_request_military_aid(); } return 1; } //----- End of function Nation::ai_defend -----// //----- Begin of function Nation::ai_request_military_aid -----// // // Request allied nations to provide immediate military aid. // int Nation::ai_request_military_aid() { return 0; //**BUGHERE, multiplayer sync error, disabled temporarily for( int i=nation_array.size() ; i>0 ; i-- ) { if( nation_array.is_deleted(i) ) continue; if( get_relation(i)->status != NATION_ALLIANCE ) continue; if( should_diplomacy_retry(TALK_REQUEST_MILITARY_AID, i) ) { talk_res.ai_send_talk_msg(i, nation_recno, TALK_REQUEST_MILITARY_AID); return 1; } } return 0; } //----- End of function Nation::ai_request_military_aid -----//