123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- /*
- * 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 <http://www.gnu.org/licenses/>.
- *
- */
- //Filename : OAI_ECO.CPP
- //Description: AI economy functions
- #include <ALL.h>
- #include <OUNIT.h>
- #include <OFIRMALL.h>
- #include <ONATION.h>
- //--------- Begin of function Nation::think_reduce_expense --------//
- void Nation::think_reduce_expense()
- {
- if( true_profit_365days() > 0 || cash > 5000 * pref_cash_reserve / 100 )
- return;
- //-------- close down firms ---------//
- int curRating, bestRating=0;
- Firm *firmPtr, *bestFirm=NULL;
- for( int i=firm_array.size() ; i>0 ; i-- )
- {
- if( firm_array.is_deleted(i) )
- continue;
- firmPtr = firm_array[i];
- if( firmPtr->nation_recno != nation_recno )
- continue;
- if( firmPtr->firm_id == FIRM_WAR_FACTORY ||
- firmPtr->firm_id == FIRM_RESEARCH )
- {
- curRating = 100-(int)firmPtr->productivity;
- }
- else
- continue;
- if( curRating > bestRating )
- {
- bestRating = curRating;
- bestFirm = firmPtr;
- }
- }
- if( bestFirm )
- bestFirm->ai_del_firm();
- }
- //---------- End of function Nation::think_reduce_expense --------//
- //----- Begin of function Nation::ai_should_spend -----//
- //
- // This function returns whether this nation should make
- // a new spending.
- //
- // <int> importanceRating - how important is the spending to the
- // nation.
- // [float] spendAmt - if this is not given, then it will
- // consider generally - whether the
- // nation should spend money generally.
- //
- int Nation::ai_should_spend(int importanceRating, float spendAmt)
- {
- if( cash < spendAmt )
- return 0;
- float fixedExpense = fixed_expense_365days();
- float stdCashLevel = max(fixedExpense,2000) * (150+pref_cash_reserve) / 100;
- float trueProfit = true_profit_365days();
- //----- if we are losing money, don't spend on non-important things -----//
- if( trueProfit < 0 )
- {
- if( 400 * (-trueProfit) / fixedExpense > importanceRating )
- return 0;
- }
- //--------------------------------------//
- float curCashLevel = 100 * (cash-spendAmt) / (stdCashLevel*2);
- return importanceRating >= (100-curCashLevel);
- }
- //------ End of function Nation::ai_should_spend ------//
- //----- Begin of function Nation::ai_should_spend_war -----//
- //
- // This function returns whether the nation should spend money
- // or war.
- //
- // <int> enemyMilitaryRating - the military_rank_rating() of the enemy
- // [int] considerCeaseFire - whether this function is called when considering ceasing fire
- // (default:0)
- //
- int Nation::ai_should_spend_war(int enemyMilitaryRating, int considerCeaseFire)
- {
- int importanceRating = 30 + pref_military_development/5; // 30 to 50
- importanceRating += military_rank_rating() - enemyMilitaryRating*2;
- if( considerCeaseFire ) // only when we are very powerful, we will start a battle. So won't cease fire too soon after declaring war
- importanceRating += 20; // less eary to return 0, for cease fire
- return ai_should_spend(importanceRating);
- }
- //------ End of function Nation::ai_should_spend_war ------//
|