|
楼主 |
发表于 2011-2-26 18:03:36
|
显示全部楼层
手段分析4:破产解散部队
原理:
如果非野蛮人玩家在任一回合初的现金为负数那么将会进入罢工状态(同时金钱涨到0)
罢工累计总回合数超过1后,每回合解散罢工总回合数/2(向下取整)的单位,解散过程中如果收入变回正数则终止(CvPlayer::doGold [17])
什么单位会被解散呢?(CvPlayer::disbandUnit [17])
首先载着兵的、能开黄金时代的、生产花费为0的兵不能被解散
然后每城中最后一个能用做压红脸的兵不能被解散(bMilitaryHappiness == 1的)。能用做压红脸的兵是除了侦察兵、探险家、武装直升机所有的地面战斗单位 [11]
最后所有符合条件的兵会计算价值,价值最低的被解散掉
解散价值 = (10000+-0~1000的随机数) * (生产花费*5) * (经验*20) * (等级*100) * (2 如果在城市里且能防御) * (3 如果在本组队的境内) * (兵种的AI任务修正) / (兵种的ExtraCost + 1)
其中兵种AI任务修正
2 UNITAI_ATTACK, UNITAI_ATTACK_CITY, UNITAI_COLLATERAL, UNITAI_PILLAGE, UNITAI_RESERVE, UNITAI_COUNTER
3 UNITAI_DEFENSE_AIR, UNITAI_CARRIER_AIR, UNITAI_MISSILE_AIR
4 UNITAI_ICBM
5 UNITAI_ASSAULT_SEA, UNITAI_SETTLER_SEA, UNITAI_MISSIONARY_SEA, UNITAI_SPY_SEA, UNITAI_CARRIER_SEA, UNITAI_MISSILE_CARRIER_SEA
6 UNITAI_CITY_DEFENSE, UNITAI_CITY_COUNTER, UNITAI_CITY_SPECIAL, UNITAI_PARADROP
8 UNITAI_MISSIONARY
10 UNITAI_WORKER
12 UNITAI_SPY
15 UNITAI_EXPLORE
18 UNITAI_WORKER_SEA
20 UNITAI_SETTLE
25 UNITAI_EXPLORE_SEA
另外兵种的ExtraCost全都是0 [11]
由于解散过程中如果收入变回正数则终止,AI的最低收入又是多少呢?(CvPlayer::calculateGoldRate及其调用的一系列函数)
金钱收入 = 每回合所有城市金钱产出 + 每回合贸易所得 - 总维护费 * (1+通胀)
总维护费由部队维护费、部队补给费、城市维护费、政策维护费、其他花费组成
城市金钱产出的公式比较复杂,但有一点:暴动中的城市产出永远为0
分析:
如果每回合所有城市金钱产出为0,那么金钱收入 = 每回合贸易所得 - 总维护费 * (1+通胀)。AI的每回合贸易所得不可见,很可惜,不过根据经验AI不会卖唯一的资源,所以能得到的钱终归有限;而总维护费由于有城市和内政部分,所以肯定不是0,AI城市越多人口越多,维护费越高,即使是神级的打折毕竟不是0。大帝国资源多能贸易得到的钱多单维护费也高得多,小国家恐怕没有贸易所得。所以所有城市金钱产出为0的时候,AI的金钱收入应该必为负数,解散多少部队都不够。
怎么让所有城市金钱产出为0?暴动!
于是,只要暴动时间足够长,最终每个城市将只剩下一个兵
那么如何暴动?间谍!(好吧,其实间谍暴动每一个城市是唯一选择。因为检查CvCity::isDisorder的调用树后暴动只有5种可能:玩家全国无政府状态(非虔诚换政策换宗教)、事件、新打下的城市、文化暴动、间谍暴动城市。其中间谍转政策对方不会无政府、事件不靠谱、新城市暴动不持续、要是能文化暴动我就不用废话这么多了……)
间谍暴动所有城市就是间谍点花费过高,但不管怎样——
结论:想兵不血刃杀AI的兵,就需要用间谍让他们所有的城市暴动足够长的时间
----------------------------
参考:
[11] \Civ4\Beyond the Sword\Assets\XML\Units\CIV4UnitInfos.xml
[17] \Civ4\Beyond the Sword\CvGameCoreDLL\CvPlayer.cpp
[ 本帖最后由 CCX_CX_D 于 2011-2-26 18:31 编辑 ] |
|