设为首页收藏本站

塞爱维(CIV)文明联盟

 找回密码
 注册
查看: 10669|回复: 14

[原创] Civilization:Colonization游戏机制研究IV - Price, Tax, Recruit Unit, Immigrant

[复制链接]
发表于 2008-10-2 19:08:54 | 显示全部楼层 |阅读模式
本文将从以下4方面来解释Europe界面(F2)中显示的各项信息是如何确定的。

1. 商品价格(Yield Price)
2. 税率(Tax Rate)
3. 购买单位(Recruit Units)
4. 移民(Immigrant)




[ 本帖最后由 Khyron 于 2008-10-4 19:50 编辑 ]
 楼主| 发表于 2008-10-2 19:09:20 | 显示全部楼层
1. 商品价格
本节将论述欧洲殖民者和其宗主国之间商品的卖价和买价是如何制定的。

1.1 游戏开始时商品定价
(1) 对于每一个玩家,在此商品的初始最低买价(iBuyPriceLow)和最高买价(iBuyPriceHigh)之间(包含边界)随机选取一数值作为此玩家眼中的买价。如果比1小,则设为1。
<iBuyPriceLow>和<iBuyPriceHigh>由Civ4YieldInfos.xml决定,可参见附表。
欧洲殖民者眼中的卖价和买价就是其宗主国眼中的买价和卖价,相反宗主国眼中的买价和卖价是其下属殖民者眼中的卖价和买价。
宪法如果选了"Monarchy",革命开始后仍能和欧洲交易,但此交易的对象实质上仍是原宗主国,这时欧洲殖民者眼中的卖价和买价仍就是其原宗主国制定的买价和卖价。
注1:当两家殖民者的宗主国是同一个国家时,他们眼中的商品的买价卖价永远是相同的。当然如果未开Unrestricted Leaders,正常情况下一个欧洲国家下只有一个殖民地。

(2) 每种商品的卖价由此商品的买价决定,即一种商品的卖价和买价之差是固定的,不随时间变化。这个差值由Civ4YieldInfos.xml中<iSellPriceDifference>决定。

1.2 游戏中商品定价的更新
由于游戏中是从欧洲宗主国的角度来制定商品的价格的,为了使叙述和游戏代码保持一致性,以下讨论是从欧洲宗主国的角度展开的。
所以请注意,如无特别声明,以下的买价和卖价是F2 Europe Advisor中的卖价和买价

(1) 欧洲宗主国每回合开始时重新审定商品买价,每种商品的买价的增长(或降低)受2个因素影响
a. 商品自身的属性
b. 此宗主国与其下属殖民者在这个商品上的贸易顺差(或逆差)


(2) 对于一种商品,其新的预期买价按以下方法确定
a. 确定基础阀值(iBaseThreshold)
此基础阀值等于此商品的价格变化阀值(iPriceChangeThreshold)和游戏难度对价格修正乘子(iEuropePriceThresholdMultiplier)之积再除以100,即
iBaseThreshold = iPriceChangeThreshold * iEuropePriceThresholdMultiplier / 100

其中<iPriceChangeThreshold>由Civ4YieldInfos.xml决定,可参见附表
<iEuropePriceThresholdMultiplier>由Civ4HandicapInfo.xml决定,对于不同难度,分别为:
PILGRIM/PIONEER/EXPLORER/CONQUISTADOR/GOVERNOR/PATRIOT/REVOLUTIONARY
200/120/100/90/80/70/60

b. 确定宗主国与殖民者在这个商品上的贸易顺差或逆差(YieldBoughtTotal)
先说明此数值的符号,宗主国是顺差,则为正;逆差则为负。即殖民者在欧洲买的越多,此数值越大;卖的越多,此数值越小。
比如殖民者卖了400烟草,买了100烟草,则烟草的此数值为-300。

另外此数值还受领袖特性修正, 拥有Mercantile的领袖,上述数值要折半。
比如Peter Stuyvesant领导的殖民者买了600匹马,卖了100匹马,则马匹的此数值为500/2=250。

注2:上述商品输入输出差值其实还受一个因素影响,即欧洲市场相关度(EUROPE_MARKET_CORRELATION_PERCENT)
其它殖民地和其对应的宗主国交易时,产生的商品输入输出会按照此欧洲市场相关度算进你的输入输出中去。
但标准游戏里,此常数为0。所以此项影响不存在。
EUROPE_MARKET_CORRELATION_PERCENT由GlobalDefines.xml决定。
注3:此数值是从属于欧洲宗主国的,当其下有多个殖民地时,每个殖民者产生的输入输出差值都要被算进来。

c. 此商品由于输入输出引起的价格波动等于基础阀值除以上述商品输入输出差值, 即
YieldBoughtTotal / iBaseThreshold

d. 在此商品的初始最低买价(iBuyPriceLow)和最高买价(iBuyPriceHigh)之间(包含边界)随机选取一数值,设为iTempPrice。

e. 新的预期买价等于d.中iTempPrice和c.中的波动值之和,设其为iNewPrice。

(3) 新的预期买价不是最终的买价,它有2个作用
a. 确定价格要真正变化的概率
此概率 = iPriceCorrectionPercent * |新的预期买价 - 此商品的原买价| / 100
<iPriceCorrectionPercent>由Civ4YieldInfos.xml决定,可参见附表

b. 确定新的买价是涨是跌还是不变
当价格要真正变化时,每回合变化的幅度固定为1,是涨是跌由新的预期买价是高于还是低于原买价决定。
如果新的预期买价等于此商品的原买价,价格不会变化。


例子:REVOLUTIONARY难度下,你卖了400银,银的iPriceChangeThreshold=100,iEuropePriceThresholdMultiplier=60,能引起相应的波动 = [-400/(100*60/100)] = -6
由于银的最低最高初始买价价格均为19,所以银的新的预期买价等于13。
假设上回合银价为18,银的iPriceCorrectionPercent为5。
那么银价要跌的概率为 5 * |13 - 18| / 100, 即有25%的可能性要跌。如果随机数真的使银价跌了的话,那么新的银的买价为17。
由于银的买卖价之差为1,所以新的银的卖价为18。
换成玩家的角度,新的银的卖价为17;买价为18。
看到银的iPriceChangeThreshold=100,iPriceCorrectionPercent=5,就明白为什么银价的快速下跌了。


附录:Civ4YieldInfos.xml中与商品价格相关的元素
  
 iBuyPriceLowiBuyPriceHighiSellPriceDifferenceiPriceChangeThresholdiPriceCorrectionPercentbCargo
Food028100011
Lumber013100011
Silver1919110051
Cotton352100011
Fur462100011
Sugar462100011
Tobacco352100011
Ore243100011
Cloth8121150011
Coats8121150011
Rum8121150011
Cigars8121150011
Tools12160011
Muskets35360011
Horses12160011
Trade Goods12160011


[ 本帖最后由 Khyron 于 2008-10-4 19:42 编辑 ]
 楼主| 发表于 2008-10-2 19:09:43 | 显示全部楼层
2. 税率

为了便于讨论,先列举决定税率时的相关重要常数。它们分别由以下XML文件决定,对应的元素和属性为:
GlobalDefines.xml
TAX_TRADE_THRESHOLD_TAX_RATE_PERCENT1000
TAX_TRADE_THRESHOLD_ATTITUDE_PERCENT 100
TAX_TRADE_THRESHOLD 200
TAX_INCREASE_CHANCE 20
TAX_RATE_MAX_INCREASE 5
SCORE_TAX_FACTOR 100

Civ4GameSpeedInfo.xml
QuickNormal
Epic
Marathon
iGrowthPercent 75100 150
300

Civ4TraitInfos.xml
TRAIT_CHARISMATIC 其余
iTaxRateThresholdModifier 100 0

与商品价格不同,税率是从属于殖民者的一个数据。即当一个欧洲宗主国下有多个殖民地时,每个殖民地都有自己的税率。
税率初始为0,不会下降,范围为0% - 99%。

2.1 税率的提高
在游戏中每当殖民地玩家的回合开始时,如果没有革命,则会判断是否提高此殖民地被国王征收的税率。本小节将介绍税率提高的前提条件和幅度。

(1) 税率提高的前提条件
a. 首先确定此殖民地与宗主国的总累计交易量(iTotalTraded),这个数值等于所有商品(yield)的累计交易总量(YieldTradedTotal)之和。
比如这个殖民地向宗主国卖了400银,买了100银;卖了200烟草,买了400烟草。那么银的累计交易总量为500,烟草的累计交易总量为600,总累计交易量为1100。
注4:拥有Mercantile特性的领袖,对此数值没有修正。
注5:与制定商品价格时用到的商品输入输出差值不同,输入输出不会抵消。另外总累计交易量是跟着殖民地的,如若此殖民地的宗主国还有另外一个殖民地,宗主国与那个殖民地的交易不会算进来,这也与制定商品价格时不同。

b. 其次确定一修正乘子(iMultiplier)
这个乘子初始值为100,还要经过以下3个修正:
i) 拥有Charismatic特性的领袖的修正(iTaxRateThresholdModifier)
ii) 当前税率
iii) 宗主国的外交态度
公式为:
iMultiplier = 100 + 当前税率百分比 * TAX_TRADE_THRESHOLD_TAX_RATE_PERCENT / 100 + 宗主国的外交态度 * TAX_TRADE_THRESHOLD_ATTITUDE_PERCENT + 领袖修正

iMultiplier = 100 + 当前税率百分比 * 10 + 宗主国的外交态度 * 100 + 100(如果领袖拥有Charismatic)

c. 计算总累计交易量是否超标,公式为:
iTotalTraded * 10000 > TAX_TRADE_THRESHOLD * max(100, iMultiplier) * iGrowthPercent

iTotalTraded * 10000 > 200 * max(100, iMultiplier) * iGrowthPercent
简化为:
iTotalTraded * 50 > max(100, iMultiplier) * iGrowthPercent
特别地,当游戏速度是普通时,判别式为:
iTotalTraded > 2 * max(100, iMultiplier)

d. 如果总累计交易量超标,即iTotalTraded * 50 > max(100, iMultiplier)时,国王要提高税率的可能性等于TAX_INCREASE_CHANCE/100,即有20%的可能性

例子: 普通游戏速度下,Adriaen van der Donck领导的殖民地,与国王的关系是-2,当前税率是25%,由于他有Charismatic特性则
iMultiplier = 100 + 25 * 10 + (-2) * 100 + 100 = 250
那么总累计交易量大于250*2=500时,未革命时,每回合国王有20%的可能性提高税率。

(2) 税率提高的幅度
当国王决定提高一殖民地的税率时,提高的百分比将为1到TAX_INCREASE_CHANCE之间的一个数,即税率的提高幅度为1% - 5%
注6: 由于税率最高为99%, 上述随机幅度还应和(99-旧税率百分比)取小。

2.2 税率提高的后果
电脑总是无条件的接受税率的提高,而人类玩家可以选择接受还受拒绝。这2种情况的后果是:
(1) 如果接受
a. 税率做相应提高
b. 殖民地的所有商品的累计交易总量清零,从而总累计交易量清零

(2) 如果拒绝
a. 税率不变
b. 选取某一种商品,然后殖民地将无法在欧洲交易此商品;此商品的累计交易总量清零;某一城市的此商品的库存清零
c. 与国王的关系变差
注7:拒绝提高税率导致的某种商品在欧洲无法交易是永久性的,特别是革命后选了"Monarchy"后仍无法交易。所以拒绝提高税率时要千万想清楚。


2.3 其它杂项
(1) 另一种税率提高的方式
当殖民地没有任何舰只时,其现金不能购买任何船,国王会免费提供一艘最便宜的船,在非模组游戏里是Caravel。当然是有代价的,就是提供一次税率,提高的幅度也是1%-5%,无法拒绝。

(2) 某些Founding Fathers能根据税率提供额外产出

(3) 税率对得分的修正
你当前的得分会按税率,扣去相应比例的得分,扣去的百分比为SCORE_TAX_FACTOR * 当前税率 = 100 * 当前税率
比如你基础得分为2000,税率为10%, 那么你的分数为2000*(1 - 10%)=1800

[ 本帖最后由 Khyron 于 2008-10-4 19:42 编辑 ]
 楼主| 发表于 2008-10-2 19:10:05 | 显示全部楼层
3. 购买单位

先列举和本节及下一节相关的重要常数。XML,Tag, Value分别为:
Civ4GameSpeedInfo.xml

Quick Normal Epic Marathon
iGrowthPercent 75 100 150 300
iTrainPercent 75 100
150 300

Civ4EraInfos.xml

Discovery Expansion ColonialIndependence
iGrowthPercent 100 100 100 100
iTrainPercent 100 100 100 100


Civ4TraitInfos.xml
TRAIT_PETER_MINUIT TRAIT_TOLERANT 其余
Founding Father/Leader/Colonies
Peter Minuit
New England
其余
iRecruitPriceDiscount 25 0 0
iImmigrationThresholdModifier 0 -25 0

Civ4HandicapInfo.xml
Pilgrim Pioneer Explorer Conquistador GovernorPatriot
Revolutionary
iAIGrowthPercent
160 110 100 90 75 60 50
iAITrainPercent 160 110 100 90 75 60 50
iAIPerEraModifier 0 0 0 -1 -2 -3 -4


在欧洲界面(F2)中购买单位的前提条件
a. 可以和欧洲交易
b. 此单位的初始售价大于等于0, 即iEuropeCost >= 0
c. 拥有足够的金钱

购买单位时,单位的售价由基础售价和修正乘子的联合作用决定
(1) 基础售价(iCost)
单位的基础售价 = 单位的初始售价 + 从欧洲购买的此单位的数量 * 单位的售价增量

iCost = iEuropeCost + 从欧洲购买的此单位的数量 * iEuropeCostIncrease
注8:从国王处购买的单位和国王赠送的单位也算从欧洲购买

(2) 基础售价受以下修正因素影响,大小分别为
a. 游戏速度修正
(Speed)iTrainPercent/100
b. 游戏开始年代修正
(Era)iTrainPercent/100
c. 领袖或Founding Father特性修正
(100 - iRecruitPriceDiscount)/100

如果是电脑玩家,还有:
d. AI难度修正
iAITrainPercent/100
e. AI时代修正
(100 + iAIPerEraModifier * 当前时代数)/100
以上a-e五项修正的关系是叠乘

(3) 最终售价
最终售价公式为:
(iEuropeCost + 从欧洲购买的此单位的数量 * iEuropeCostIncrease) * (Speed)iTrainPercent / 100 * (Era)iTrainPercent / 100 * (100 - iRecruitPriceDiscount) / 100 * iAITrainPercent / 100 / (100 + iAIPerEraModifier * 当前时代数) / 100

由于(Era)iTrainPercent全是100,当游戏速度是普通时,Peter Minuit加入前,人类玩家从购买单位的花费为:
(iEuropeCost + 从欧洲购买的此单位的数量 * iEuropeCostIncrease)

附录:Civ4UnitInfos.xml中与单位的购买移民有关的元素
  
 iEuropeCostiEuropeCostIncreaseiImmigrationWeightiImmigrationWeightDecay
Free Colonist-1010010
Indentured Servant-101005
Petty Criminal-101000
Converted Native-1000
Expert Ore Miner80004515
Expert Lumberjack80004515
Expert Farmer80004515
Expert Fisherman80004515
Expert Silver Miner120004040
Expert Tobacco Planter-1000
Expert Cotton Planter-1000
Expert Sugar Planter-1000
Expert Trapper-1000
Master Blacksmith100004020
Master Gunsmith100004020
Master Carpenter100004020
Master Fur Trader100004040
Master Distiller120004040
Master Weaver120004040
Master Tobacconist120004040
Master Rancher120004040
Firebrand Preacher200004040
Elder Statesman200003030
Hardy Pioneer200004040
Seasoned Scout-1020075
Jesuit Missionary-105025
Veteran Soldier15003005025
Regular-1000
Cannon50010000
Caravel1000000
Merchantman2000000
Privateer300060000
Galleon3000000
Frigate5000100000
Ship of the Line8000150000


[ 本帖最后由 Khyron 于 2008-10-4 16:08 编辑 ]
 楼主| 发表于 2008-10-2 19:10:30 | 显示全部楼层
4. 移民
GlobalDefines.xml
IMMIGRATION_THRESHOLD 5
IMMIGRATION_THRESHOLD_INCREASE 25
DOCKS_NEXT_UNITS 3

Civ4HurryInfo.xml
HURRY_IMMIGRANT
iGoldPerCross 10
iFlatGold 50

每当积累的十字架产出超过移民阀值(immigrationThreshold)时,玩家将随机从移民候补队列中获得一个新的移民。本节将解释
(1) 此移民阀值是如何确定的
(2) 如果积累的十字架未满,用金钱加速所需的数量
(3) 获得一个移民后,移民候补队列中增补的下一个移民的单位类型(unit)是如何确定的
注9:移民候补队列的长度由DOCKS_NEXT_UNITS,标准游戏下是3。

4.1 移民阀值计算公式
(1) 移民阀值乘子(ImmigrationThresholdMultiplier)
移民阀值乘子初始值为100,每当产生新移民时,此乘子更新,
新移民阀值乘子 = 旧移民阀值乘子 * (100 + IMMIGRATION_THRESHOLD_INCREASE) / 100 = 旧移民阀值乘子 * 125 / 100
即此乘子以25%的速度递增,所以依次为:
100,125,156,195,………………

(2) 移民阀值基础值
移民阀值基础值 = IMMIGRATION_THRESHOLD * 移民阀值乘子 = 5 * 移民阀值乘子

(3) 移民阀值基础值受以下修正因素影响,大小分别为
a. 游戏速度修正
(Speed)iGrowthPercent/100
b. 游戏开始年代修正
(Era)iGrowthPercent/100
c. 领袖或Founding Father特性修正
(100 + iImmigrationThresholdModifier)/100
d. 如果是电脑玩家,还有 AI难度修正
iAIGrowthPercent/100
以上a-d四项修正的关系是叠乘
注10:Tolerant这一领袖特性是由殖民地是New England带来的,而不是George Washington或John Adams带来的

(4) 最终的移民阀值,也就是Europe界面最下方黄槽中第2个数字为:
immigrationThreshold = 5 * ImmigrationThresholdMultiplier * (Speed)iGrowthPercent / 100 * (Era)iGrowthPercent / 100 * (100 + iImmigrationThresholdModifier) / 100 * iAIGrowthPercent / 100
由于(Era)iTrainPercent全是100,再假设游戏速度是普通,人类玩家的移民阀值为:
对于New England以外的殖民地
5 * ImmigrationThresholdMultiplier
对于New England的殖民地
5 * ImmigrationThresholdMultiplier * 75%


4.2 加速移民花费计算公式
当十字架积累未满时,我们可以通过金钱来换取剩余不足的十字架,计算公式为:
加速移民花费 = 不足的十字架数量 * iGoldPerCross + iFlatGold * (Speed)iGrowthPercent / 100 = 不足的十字架数量 * 10 + 50 * (Speed)iGrowthPercent / 100
当游戏速度是普通时,公式简化为:
加速移民花费 = 不足的十字架数量 * 10 + 50


4.3 候补移民单位类型
获得一个移民后,移民候补队列中增补的下一个移民的单位类型是从所有单位类型中随机挑选的,被选中的概率为:
此单位类型的权重 / 所有单位类型的权重之和

对于一种单位,假设玩家已获得的移民中这种单位的数量为N,则其上述权重(iWeight)等于:
权重 = 初始移民权重 * ((100 - 移民权重衰减度) / 100)^N
iWeight = iImmigrationWeight * ((100 - iImmigrationWeightDecay) / 100)^N
所以iImmigrationWeight越大,iImmigrationWeightDecay越小,此种单位在移民候补队列中出现的几率越高。

注11:对于((100 - iImmigrationWeightDecay) / 100)^N,程序中实际上是乘以(100 - iImmigrationWeightDecay),再除以100,反复N次。

通过观察第3节最后的附表,我们可知Expert Tobacco Planter,Expert Cotton Planter,Expert Sugar Planter,Expert Trapper这4种单位在欧洲永远无法得到,只有通过新大陆上的土著城市培训才能得到。

例子:对于侦察兵(Seasoned Scout),其初始移民权重为200,移民权重衰减度为75, 如果已招募的移民中没有侦察兵,则其权重=200*((100-75)/100)^0=200;招募了1个,为200*25/100=50;2个,为200*25/100*25/100=12
这就是为什么开局侦察兵很容易出现,后来几乎就见不到了。
另外,也可以解释到了后期,常出现:Petty Criminal,Indentured Servant,Free Colonist。

[ 本帖最后由 Khyron 于 2008-10-4 21:27 编辑 ]
 楼主| 发表于 2008-10-2 19:10:53 | 显示全部楼层
杂项

其实你在在欧洲,进行的金钱交易都是单方面的,你掏了钱却没人收钱,你收了钱但没人交钱。金钱都是凭空而生,又化作空气而去。国王征税卖单位不会得到任何金钱。
所以不必担心你养肥了国王,革命时会更困难。REF的成长只与你积累的Liberty Bells有关。

另外,再强调一次,你在欧洲交易的对象永远是你的宗主国,即使革命后仍是这样。

[ 本帖最后由 Khyron 于 2008-10-4 21:26 编辑 ]
发表于 2008-10-2 20:20:18 | 显示全部楼层
按照顶楼的公式,操纵银价买贱卖贵是有可能的啊。
 楼主| 发表于 2008-10-2 20:29:51 | 显示全部楼层

回复 #7 我是Eager的马甲 的帖子

你说的没错,我曾经试了试,当银的买卖价是19/20时,以20的价格从欧洲买了600银子,等了若干回合,银价涨到了26/27。
不过这种方法赚钱需要大笔的启动资金,而且税率得不高。
发表于 2008-10-2 23:30:50 | 显示全部楼层
银价的变化幅度不是一般的快
发表于 2008-10-3 09:15:43 | 显示全部楼层

回复 #8 Khyron 的帖子

可以等银价跌到1的时候再做这件事嘛。。
反正银价跌得很快……
发表于 2008-10-3 14:58:04 | 显示全部楼层
也要有产银来卖,银价才会跌,玩了好几盘随机地图,从来没有遇到银矿
发表于 2008-10-5 12:24:33 | 显示全部楼层
有没想过,钱到底有什么用?

殖民地上,你要生产什么就有什么,学校建成后,更是如此
发表于 2008-10-5 12:44:42 | 显示全部楼层
铁做工具的
工具再做成武器的
发表于 2008-11-27 21:08:22 | 显示全部楼层

回复 #15 pindleskin 的帖子

请问下那为什么没有和宗主国进行过任何交易,宗主国的价格也在自行变动呢?

另外是不是在价格调整之后贸易顺逆差的效果也不会清零啊?
发表于 2010-5-4 12:59:49 | 显示全部楼层
受教 受教 受教 受教 受教 受教 受教 受教 受教
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|塞爱维(CIV)文明联盟    

GMT+8, 2024-4-29 07:36

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表