//--------- Begin of function FirmBase::next_day ---------// // void FirmBase::next_day() { //----- call next_day() of the base class -----// Firm::next_day(); //--------------------------------------// calc_productivity(); //--------------------------------------// if( info.game_date%15 == firm_recno%15 ) // once a week { train_unit(); recover_hit_point(); } //------- increase pray points --------// if( overseer_recno && pray_points < MAX_PRAY_POINTS ) { // ###### patch begin Gilbert 21/1 #######// if( config.fast_build ) pray_points += productivity/10; else pray_points += productivity/100; // ###### patch end Gilbert 21/1 #######// if( pray_points > MAX_PRAY_POINTS ) pray_points = (float) MAX_PRAY_POINTS; } //------ validate god_unit_recno ------// if( god_unit_recno ) { if( unit_array.is_deleted(god_unit_recno) ) god_unit_recno = 0; #ifdef DEBUG if( god_unit_recno ) { err_when( !unit_array[god_unit_recno]->is_visible() ); err_when( unit_array[god_unit_recno]->nation_recno != nation_recno ); } #endif } }
//--------- Begin of function FirmCamp::next_day ---------// // void FirmCamp::next_day() { //----- call next_day() of the base class -----// Firm::next_day(); //----- update the patrol_unit_array -----// validate_patrol_unit(); //--------------------------------------// if( info.game_date%15 == firm_recno%15 ) // once a week { train_unit(); recover_hit_point(); } //--- if there are weapons in the firm, pay for their expenses ---// pay_weapon_expense(); }
//--------- Begin of function Nation::ai_assign_spy --------// // // Try to locate an existing spy for use. // // <int> targetXLoc, targetYLoc - the target location // [int] spyRaceId - if specified, only spies of this race // will be located. (default:0) // [int] mobileOnly - get mobile spies only. (default:0) // int Nation::ai_assign_spy(int targetXLoc, int targetYLoc, int spyRaceId, int mobileOnly) { int unitRecno=0; //---- try to find an existing spy ----// Spy* spyPtr = ai_find_spy( targetXLoc, targetYLoc, spyRaceId, mobileOnly ); if( spyPtr ) unitRecno = spyPtr->mobilize_spy(); //--- if not successful, then try to hire one ---// if( !unitRecno ) unitRecno = hire_unit(SKILL_SPYING, spyRaceId, targetXLoc, targetYLoc); //--- if cannot hire one, try to train one ----// int trainTownRecno=0; if( !unitRecno ) unitRecno = train_unit(SKILL_SPYING, spyRaceId, targetXLoc, targetYLoc, trainTownRecno); if( !unitRecno ) return 0; //------ get the spy object of the unit ------// Unit* unitPtr = unit_array[unitRecno]; err_when( !unitPtr->spy_recno ); spyPtr = spy_array[unitPtr->spy_recno]; //------- get the nation of the assign destination -----// Location* locPtr = world.get_loc(targetXLoc, targetYLoc); int cloakedNationRecno; if( locPtr->is_firm() ) { Firm* firmPtr = firm_array[locPtr->firm_recno()]; err_when( firmPtr->nation_recno==0 ); // cannot assign to a monster firm cloakedNationRecno = firmPtr->nation_recno; } else if( locPtr->is_town() ) { Town* townPtr = town_array[locPtr->town_recno()]; cloakedNationRecno = townPtr->nation_recno; } else { return 0; // the original firm or town has been destroyed or sold } //------- Add the assign spy action --------// int actionRecno = add_action( targetXLoc, targetYLoc, -1, -1, ACTION_AI_ASSIGN_SPY, cloakedNationRecno, 1, unitRecno ); if( !actionRecno ) return 0; //------ if the unit is under training ------// if( trainTownRecno ) town_array[trainTownRecno]->train_unit_action_id = get_action(actionRecno)->action_id; return 1; }