void Firm::detect_spy_button() { if( player_spy_count>0 ) { if( button_spy_menu.detect() ) { firm_menu_mode = FIRM_MENU_SPY; info.disp(); } if( nation_recno != nation_array.player_recno ) // only display the bribe button for non-player towns { if( button_bribe.detect() ) { if( player_spy_count > 1 ) { firm_menu_mode = FIRM_MENU_SELECT_BRIBER; } else { action_spy_recno = get_player_spy_recno(firm_recno); // the player has only one spy in this firm firm_menu_mode = FIRM_MENU_SET_BRIBE_AMOUNT; } info.disp(); } } } //-----------------------------------------// if( button_capture.detect() && can_worker_capture(nation_array.player_recno) ) { // ##### begin Gilbert 24/6 ##########// if( !remote.is_enable() ) { capture_firm(nation_array.player_recno); // update RemoteMsg::firm_capture } else { // packet structure <firm recno> <capturer's nation recno> short *shortPtr = (short *)remote.new_send_queue_msg(MSG_FIRM_CAPTURE, 2*sizeof(short) ); *shortPtr = firm_recno; shortPtr[1] = nation_array.player_recno; } // ##### end Gilbert 24/6 ##########// } }
//------- Begin of function Firm::think_capture -----------// // int Firm::think_capture() { Nation* nationPtr; int i; for( i=nation_array.size() ; i>0 ; i-- ) { if( nation_array.is_deleted(i) ) continue; nationPtr = nation_array[i]; if( nationPtr->is_ai() && can_worker_capture(i) ) break; } if( i==0 ) return 0; //------- capture the firm --------// capture_firm(i); //------ order troops to attack nearby enemy camps -----// Firm *firmPtr, *bestTarget=NULL; int curDistance, minDistance=0x1000; for( i=firm_array.size() ; i>0 ; i-- ) { if( firm_array.is_deleted(i) ) continue; firmPtr = firm_array[i]; //----- only attack enemy camps -----// if( firmPtr->nation_recno != nation_recno || firmPtr->firm_id != FIRM_CAMP ) { continue; } curDistance = misc.points_distance(center_x, center_y, firmPtr->center_x, firmPtr->center_y ); //--- only attack camps within 15 location distance to this firm ---// if( curDistance < 15 && curDistance < minDistance ) { minDistance = curDistance; bestTarget = firmPtr; } } if( bestTarget ) { int useAllCamp = nationPtr->pref_military_courage > 60 || misc.random(3)==0; nationPtr->ai_attack_target( bestTarget->loc_x1, bestTarget->loc_y1, ((FirmCamp*)bestTarget)->total_combat_level(), 0, 0, 0, 0, useAllCamp ); } return 1; }