//-------- Begin of function Nation::mobilize_capturer ------// // // Mobilize the capturer unit if he isn't mobilized yet. // int Nation::mobilize_capturer(int unitRecno) { //--- if the picked unit is an overseer of an existng camp ---// Unit* unitPtr = unit_array[unitRecno]; if( unitPtr->unit_mode == UNIT_MODE_OVERSEE ) { Firm* firmPtr = firm_array[unitPtr->unit_mode_para]; Town* townPtr; //-- can recruit from either a command base or seat of power --// //-- train a villager with leadership to replace current overseer --// int i; for( i=0 ; i<firmPtr->linked_town_count ; i++ ) { townPtr = town_array[ firmPtr->linked_town_array[i] ]; if( townPtr->nation_recno != nation_recno ) continue; //--- first try to train a unit who is racially homogenous to the commander ---// int unitRecno = townPtr->recruit( SKILL_LEADING, firmPtr->majority_race(), COMMAND_AI ); //--- if unsucessful, then try to train a unit whose race is the same as the majority of the town ---// if( !unitRecno ) unitRecno = townPtr->recruit( SKILL_LEADING, townPtr->majority_race(), COMMAND_AI ); if( unitRecno ) { add_action(townPtr->loc_x1, townPtr->loc_y1, -1, -1, ACTION_AI_ASSIGN_OVERSEER, FIRM_CAMP); break; } } if( i==firmPtr->linked_town_count ) // unsuccessful return 0; //------- mobilize the current overseer --------// firmPtr->mobilize_overseer(); } return 1; }
//--------- Begin of function Nation::recruit_peasant --------// // // <int> raceId - the race the selected unit should have // (0 for any races) // <short> destX - the x location the unit will move to // <short> destY - the y location the unit will move to // // <int&> recruitTownRecno - the recno of the town where this unit is recruited. // // return: <int> recno of the unit recruited. // int Nation::recruit_peasant(int raceId, short destX, short destY, int& recruitTownRecno) { //----- locate the best town for training the unit -----// int i; Town *townPtr; int curDist, curRating, bestRating=0; int destRegionId = world.get_loc(destX, destY)->region_id; recruitTownRecno = 0; for(i=0; i<ai_town_count; i++) { townPtr = town_array[ai_town_array[i]]; if( !townPtr->jobless_population || // no jobless population or currently a unit is being trained !townPtr->can_recruit_peasant() ) { continue; } if( townPtr->region_id != destRegionId ) continue; if( raceId && townPtr->race_id != raceId ) continue; //--------------------------------------// curDist = m.points_distance(townPtr->center_x, townPtr->center_y, destX, destY); curRating = 100-100*curDist/MAX_WORLD_X_LOC; if( curRating > bestRating ) { bestRating = curRating; recruitTownRecno = townPtr->town_recno; } } if( !recruitTownRecno ) return 0; //--- if the chosen race is not recruitable, pick any recruitable race ---// townPtr = town_array[recruitTownRecno]; if( !townPtr->can_recruit_peasant() ) { //---- if the loyalty is too low to recruit, grant the town people first ---// if( cash > 0 && townPtr->accumulated_reward_penalty < 10 ) townPtr->reward(COMMAND_AI); //---- if the loyalty is still too low, return now ----// if( !townPtr->can_recruit_peasant() ) return 0; } return townPtr->recruit(0, COMMAND_AI); // 0-not recruit wagon }