设为首页收藏本站

塞爱维(CIV)文明联盟

 找回密码
 注册
查看: 37416|回复: 54

[原创] BTS3.19下文化侵略的理论基础(另外本贴欢迎各种文化问题)(理论基本完成)

[复制链接]
发表于 2011-2-10 22:41:20 | 显示全部楼层 |阅读模式
所谓文化侵略,就是指不用战争(比如永久和平下),而是通过文化颠覆的方法兵不血刃地得到敌人的城市,甚至灭亡整个国家。

贵族较小图战报http://www.civclub.net/bbs/viewthread.php?tid=83717
其实类似的还有一篇摁钉的高难度战报http://www.civclub.net/bbs/viewthread.php?tid=42468,可惜TJ了
还有类似的战报欢迎大家提出来

目录:

题外话:


特别感谢zahlen对本文做出的讨论与实例示范!

[ 本帖最后由 CCX_CX_D 于 2011-3-6 17:14 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2011-2-10 22:42:23 | 显示全部楼层

结论:间谍文化流打法

本楼实际上是文章最后一节,如果内容有不懂的请先阅读 基础知识 和 手段分析,下面是摘要

基础知识1:城市文化和格子文化是两个不同概念
基础知识2:城市所在格子的文化所有者不同于城市所有者 且 驻留强度<反乱力的条件 才可能文化暴动,第二次文化暴动会叛变
手段分析1:格子受城市文化增长对敌边境文化小城比较有效,推掉第一圈城市后效果大减
手段分析2:大艺是渣
手段分析3:间谍渗透是快速增加敌方城市所在格子文化的有效手段
手段分析4:需要用间谍让他们所有的城市暴动足够长的时间
手段分析5:教皇宫用好有奇效(不过本楼不考虑开外交胜利的情况)

从以上分析可以看出,间谍是我们主要的依托手段。整个打法将是打大后期,间谍为主、文化为辅的打法。

----------------------------
攻略:
选图:
  • 记住文化不能过海,所以想征服必须只有一块陆地或者保证能在每个大陆上至少一城
  • 最好在大陆中央,这样多方文化推比较有效率
  • 地图最好适合爆铺
前期(开局~启蒙):
  • 要尽可能地多铺地,因为要打大后期,地盘越大后劲越大;铺城时如果可能,尽量跟对方边境城市距离4格(即中间差3格)横向位置相同或者+-1,这样城市5级文化(5000)能覆盖敌城市周围7-8格
  • 科技的话一定要首发一个宗教,因为需要得到一个国教圣城减间谍点花费
  • 在不影响工业的情况下地格多多出小镇,因为以后要靠间谍点
  • 外交尽可能和所有人开边,因为减间谍点花费且增加间谍存活率,不过离得远的公敌可以无视(打过去的时候估计已经绝对优势了)
  • 奇迹什么的抢不到就不要了,不过西斯廷教堂尽可能要抢到,其他奇迹为科技战略服务就行
  • 科技上建议以音乐线和自由线(可能的话自由点民主线)为目标
中期(启蒙~现代)
  • 内政使用小镇公司制
  • 伟人要留大商、大工、大艺各一个,争取抢到3个加文化的公司
  • 奇迹无所谓,量力而行,比较好的有埃菲尔铁塔、克林姆林宫、自由女神什么的
  • 科技以公司前置科技为目标(医学、内燃机、大众传媒,不过这几线不太配),工业时代走大众传媒线
  • 如果能抢到因特网,抢到之后停科技,其他情况下大众传媒停科技(健康顶不住可以考虑制冷)
  • 边境城市注重以下文化输出,比如传宗教造+50%文化大庙什么的
  • 于己有帮助的话跟敌人签个拿资源换钱的条约,这有助于加速后期罢工
后期(停科技~胜利)
  • 停科技后所有商业转间谍点,文化靠建筑和公司
  • 我方弱小时优先进攻开边的近点敌人,成功率高花费小
  • 用间谍前记得转到我方有圣城的国教,然后将该教传给地方城市(可以留敌后方一城不传,以防对方转教)
  • 间谍优先拆安全局、尽可能等满5回合再操作准备好足够多(包括预估的损失)的间谍后再行动
  • 先进行文化入侵,每个城市炸15次能和对方城市文化持平,目标是拿下城市周围8格,注意我方城市文化范围;敌后方城市只要有我方格子文化就能渗透
  • 注意第一次暴动的同时是要偷钱的,所以需要的间谍总数要比维持暴动需要的多
  • 要一直持续地暴动直到对方每城一兵,之后不要让敌人有机会造兵
  • 等待敌第一线城市叛变后,投入公司职员、关键文化建筑可以靠普选买,文化尽快升级后利用间谍渗透包围对方二线城市
  • 在适当的前线位置记得补城市
  • 重复此流程直到胜利
  • 要有耐心


这是打完贵族的感想和推测,针对高难度有待完善

[ 本帖最后由 CCX_CX_D 于 2011-3-6 17:12 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2011-2-10 22:59:52 | 显示全部楼层

回复 #2 CCX_CX_D 的帖子

支持,看看怎么颠覆AI!
回复 支持 反对

使用道具 举报

发表于 2011-2-10 23:54:38 | 显示全部楼层
理论基础不是应该领先于实践么 挂羊头卖狗肉!
回复 支持 反对

使用道具 举报

发表于 2011-2-10 23:56:28 | 显示全部楼层
先留名吧
回复 支持 反对

使用道具 举报

发表于 2011-2-11 00:02:07 | 显示全部楼层
支持
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-2-11 00:15:30 | 显示全部楼层

基础知识1:文明4里的两个文化概念[1][2]

1.城市的文化
  • 概念:游戏中每个城市都记录了所有玩家在城市中的文化值。特别注意:所有玩家对所有城市都有文化值,虽然一般情况下是0。非所有者的文化不为0一般是因为这个城市之前属于这个文明,或者被这个文明的间谍文化渗透了。
  • 显示:在城市界面中只有当前所有者的文化才能被显示,其他国文化的数值或者个各文明间的文化比例都是看不见的(注意界面上看到的比例实际上是城市所在格子的文化比例,不是城市的),但他们确实存在着。
  • 作用:城市的文化值决定这个城市文化的等级和影响范围,城市影响范围内的所有格子每回合会增加格子的文化,另外城市文化还增加城防。特别注意:因为所有国家都在城市中有文化值,所以所有国家都有等级和影响范围,这将在之后的大艺炸弹和间谍渗透中有重要意义! 另外只有在城市影响范围内的他国城市才有可能因为文化而暴动。

    在标准速度下,
    文化(0且从来没有占领或渗透过为第0级,城防0%、)
    0-9为第1级,城防0%、
    10-99为第2级,城防20%、
    100-499为第3级,城防40%、
    500-4999为第4级,城防60%、
    5000-49999为第5级,城防80%、
    50000以上为第6级,城防100%。
    快速每级花费为标准的50%、史诗为150%、马拉松为300%。[4]如果禁用了间谍点的话,文化所需翻倍(速度修正后再乘以1+100%, NO_ESPIONAGE_CULTURE_LEVEL_MODIFIER [5])。
    这里有一个非常有意思的地方:快速模式无论是回合数还是各种修正参数(黄金时代长度除外),都是正常速度的67%,但文化需求只有50%:同样的科技、文化产出、时代等条件下,快速下扩张速度要相对快于其他速度,所以快速下文化胜利更容易;不过由于各玩家的文化增长速度还是一样,这对于我们的文化侵略倒是没有直接的帮助。

    第X级的城市的影响范围为此公式:max(城市与目标格X坐标差, 城市与目标格Y坐标差) + min(城市与目标格X坐标差, 城市与目标格Y坐标差) / 2,向下取整,但最小为1。下面是直观一点的:
    // 4 | 4 | 3 | 3 | 3 | 4 | 4
    // -------------------------
    // 4 | 3 | 2 | 2 | 2 | 3 | 4
    // -------------------------
    // 3 | 2 | 1 | 1 | 1 | 2 | 3
    // -------------------------
    // 3 | 2 | 1 | 1 | 1 | 2 | 3
    // -------------------------
    // 3 | 2 | 1 | 1 | 1 | 2 | 3
    // -------------------------
    // 4 | 3 | 2 | 2 | 2 | 3 | 4
    // -------------------------
    // 4 | 4 | 3 | 3 | 3 | 4 | 4
    (CvCity::cultureDistance() [6], plotDistance() [7])
  • 增长:每回合只有城市的所有者会增加该城市的文化,具体数值在城市界面里可查,《后面手段分析1》里会给出详解。如果禁用了间谍点的话,普通游戏的间谍点增长会加给文化增长(两者各算各的加成,分别加)。非城市的所有者只能通过间谍渗透加别国城市的文化,《后面手段分析3》会详细解释。

2.格子的文化
  • 概念:和城市相似,游戏中每个陆地格子都记录了所有玩家在此格子上的文化值。
  • 显示:在世界地图上(或者有城市的格子的城市界面里),鼠标停在格子上就能看到该格子所有存活的玩家之间的文化比值。各玩家在该格子上的精确文化值是不可见的。
  • 作用:决定格子的文化所有者:有任何城市的文化影响范围覆盖本格、尚且存活、格子文化最多的玩家。这实际上还受附属国和组队的影响,不过对文化攻势没有影响,所以单开一楼分析。例子也会在同一楼举出,如果不明白可以去看: 基础知识1补充:格子文化所有者详细判定过程
    如果格子上没有城市,文化所有者即为格子的所有者;如果格子上有城市,城市的所有者是格子的所有者。
    城市所在格子如果有和城市所有者不同的文化,那么这个城市就有可能出红脸(我们想回归祖国),如果城市所在格子的文化所有者不是城市所有者,那么城市可能会暴动(见 基础知识2)
  • 增长:每回合每个城市的所有者会对其影响范围内所有的格子增加自己的文化,公式为([2], CvCity::doPlotCulture [7]):
    城市每回合增加的文化+20* (城市文化等级-该格所属的影响范围)+1
    20是CITY_FREE_CULTURE_GROWTH_FACTOR [5],该格所属的影响范围是参见上面的图
    在城市文化升级的回合,先升级后增加文化(就是里圈额外赚20点)
    把所有玩家玩家所有城对同一格的效果相加,就是这个格子本回合的最终增长量
    (唯一的例外是城市文化0输出0的城市不会给周围格子增加文化)
    最详细列表见后面的手段分析0


----------------------------
例子1([1]里例1针对BTS3.19的完全重算):
假设标准速,一片宽广的大陆上只有一个孤零零的首都,没有其他任何能加文化的方法,考虑200个回合。
  • 第0回合(回合初,下同):城市建立,城市文化0,等级1,程序自动送9格文化各1点。由于城市只有宫殿+2(注意宫殿没有千年文化翻倍的奖励,所以一直都是+2)的文化,所以每回合,城市的文化+2。由于城市文化级别是第1级,所以每回合影响范围为1的格子(9格)的文化+3 (2+20*(1-1)+1)
  • 第4回合:城市文化8,即将升为2级,9格文化为1+3*4=13
  • 第5回合:城市文化10,升为2级,文化扩张。从此刻起,每回合城市的文化+2,第1圈格子(9格)的文化+23 (2+20*(2-1)+1),第2圈格子的文化+3 (2+20*(2-2)+1)。所以最终第5回合初9格的格子文化为13+23=36,第2圈格子的文化为3
  • 第49回合:城市文化98,即将升3级,此时9格的格子文化为36+23*44=1048,第2圈格子的文化为3+3*44=135
  • 第50回合:城市文化100,升为3级,文化扩张。从此刻起,每回合城市文化+2,9格的文化+43,第2圈格子的文化+23,第3圈格子的文化+3。所以本回合9格的格子文化为1048+43=1091,第2圈格子的文化为135+23=158,第3圈格子的文化为3
  • 第200回合:城市文化400,依然是3级,9格的文化为1091+43*150=7541,第2圈格子的文化为3608,第3圈格子的文化为453
我们可以看到,尽管城市的文化仅有3级400点,但是城市所在的格子确积累了7541点文化(后面暴动原理会提到,让这个城市暴动需要的是7541点文化,而不是400点)!!这仅仅是一个+2的宫殿的效果。
结论:一个城市在一个地方呆的时间够长就有巨大产出。
抢9格/21格的关键是什么?尽量让你的城市文化等级升到下一级。

例子2
假设例1里的首都(叫P1吧)在第200回合被别人(P2)打掉了,这个文明在别的大陆上还有一座城,所以没被灭,考虑接下来的110个回合。
  • 第200回合:城市文化P1=400, P2=0,9格文化P1=7541, P2=1(送的),其他格子略。假设P2城市暴动11回合,于是在11回合里,P2在这个城市无法增加文化。P1因为不拥有这个城市,所以也没有文化增长。
  • 第210回合:城市文化P1=400, P2=0,9格文化P1=7541, P2=1(和第200回合一样)。下回合暴动结束,P2不造任何建筑,但是转了5个艺术家(文化+20)
  • 第211回合:城市文化P1=400, P2=20,P2的文化升级了,从此每回合P2城市的文化+20,9格的文化+41,第2圈格子文化+21。所以本回合9格文化P1=7541, P2=42,第2圈格子文化P1=3608, P2=21,第3圈格子P1=453, P2=0。
  • 第215回合:城市文化P1=400, P2=100,P2的文化升3级了,从此每回合P2城市的文化+20,9格的文化+61,第2圈格子文化+41,第3圈格子文化+21。所以本回合9格文化P1=7541, P2=226,第2圈格子文化P1=3608, P2=125,第3圈格子P1=453, P2=21
  • 第230回合:城市文化P1=P2=400追平了,但是城市所在格子(9格之一)的文化P1=7541, P2=1141,P2只拥有格子文化的13.1%(1141/8682),所以依然红脸一片
  • 第235回合:城市文化P1=400, P2=500,P2的文化升到4级了,从此每回合P2城市的文化+20,9格的文化81,第2圈格子文化+61,第3圈格子文化+41,第4圈格子文化+21。所以本回合初的9格文化P1=7541, P2=1466,第2圈格子文化P1=3608, P2=965,第3圈格子P1=453, P2=461,第4圈格子P1=0, P2=21
  • 第310回合:城市文化P1=400, P2=2000。9格文化P1=7541, P2=7541,第2圈格子文化P1=3608, P2=5540,第3圈格子P1=453, P2=3536,第4圈格子P1=0, P2=1596
为了追赶P1 200回合的产出,P2比P1投入了10倍的文化产出,缺依然花了整整100回合才刚好追平。哪怕少了一个回合,城市所在格子的文化就没有P1多,且不说红脸,如果这个城市在P1某城市范围内的话,那他依然有暴动的可能……
结论:一个城市在一个地方呆的时间够长就有巨大产出!

下一篇:基础知识2:暴动、叛变、与镇压
----------------------------
参考:
[1] Culture Mechanics Disassembled 作者 DerangedDuck
[2] 《间谍文化渗透辨析》 作者 西艾薇.L.镜
[4] \Civ4\Assets\XML\GameInfo\CIV4CultureLevelInfo.xml
[5] \Civ4\Beyond the Sword\Assets\XML\GlobalDefines.xml
[6] \Civ4\Beyond the Sword\Assets\XML\GameInfo\CIV4GameSpeedInfo.xml
[7] \Civ4\Beyond the Sword\CvGameCoreDLL\CvCity.cpp
[8] \Civ4\Beyond the Sword\CvGameCoreDLL\CvGameCoreUtils.h
[9] \Civ4\Beyond the Sword\CvGameCoreDLL\CvPlot.cpp

[ 本帖最后由 CCX_CX_D 于 2011-2-27 00:23 编辑 ]

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-2-11 00:18:44 | 显示全部楼层
一个基础知识怎么写了这么久
回复 支持 反对

使用道具 举报

发表于 2011-2-11 00:24:27 | 显示全部楼层
竟然还有references......
回复 支持 反对

使用道具 举报

发表于 2011-2-11 00:36:07 | 显示全部楼层
好功夫。 要加总结吗
回复 支持 反对

使用道具 举报

发表于 2011-2-11 06:21:05 | 显示全部楼层
强帖留名
回复 支持 反对

使用道具 举报

发表于 2011-2-11 10:17:47 | 显示全部楼层
我只能说,要用间谍颠覆AI的话,不到信息化时代间谍点是不够用的...

有那个心早把AI推平了...
回复 支持 反对

使用道具 举报

发表于 2011-2-11 10:29:55 | 显示全部楼层
我到现代以后就没啥心情打了……有啥能快速结束的方法就快速结束了……所以很多时候是外交胜利,小弟太多了……
回复 支持 反对

使用道具 举报

发表于 2011-2-13 16:41:58 | 显示全部楼层
发现文化挺有用的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2011-2-13 16:51:32 | 显示全部楼层
曾经有一段时间只玩文化胜利,支持一个
回复 支持 反对

使用道具 举报

发表于 2011-2-13 16:56:54 | 显示全部楼层
打下的城能还给谁是怎么判断的?,既然谈到了文化,请教一下这个问题跟文化有没有关系?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-2-16 15:47:43 | 显示全部楼层

回复 #16 daiqiang 的帖子

daiqiang这个问题太狠了,本来以为挺简单的,没想到居然看见一堆恶心的代码:函数指针绝对是小儿科了、发现一个逻辑上肯定不能成立的判断也算了、居然我还发现了一个Firaxis的bug

------------------
我这下2大了,自己把代码看错了,没有bug
趁着没人发现赶快改

[ 本帖最后由 CCX_CX_D 于 2011-2-16 22:27 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-2-16 15:48:28 | 显示全部楼层

BTS3.19 打下的城能还给谁是怎么判断的?

总共条件两个,限制两个(判断的先后顺序和下面的列表顺序一致):
  • 打下这座城的玩家如果之前解放过殖民地、而且这座城正好和这个殖民地小弟的首都在一个大陆上,还给这个殖民地小弟
  • 否则还给还给所有活着的、非OCC的玩家中,玩家在这座城的城市文化/首都到这座城的距离 最大的玩家
    公式受到以下修正:
        如果此城为武力占领城市的话(而不是文化吞并),本城的原本拥有者(m_eOriginalOwner,我猜测为最早拥有者,不过该变量的可能修改点太多,无法验证)的文化*1.5
        与打下这座城的玩家同队、宗主国队、附属国队的玩家的额外获得城市总文化的一半
        在这座城没有城市文化的玩家,文化都按1.00算
        首都如果跨洋,距离*2
    距离的具体算法和文化距离一样,可以参见7楼的图
  • 不过如果城市21格上有跟候选国交战的国家的非隐形单位的话,不能还
    (这3个条件在CvCity::getLiberationPlayer()里,CvCity.cpp的13351-13463行)
  • 如果存在满足上述条件的候选国,而且该国与打下这座城的玩家同队、附庸、或者开边的话,出现还城选项
    (CvPlayer::acquireCity()里,CvPlayer.cpp的1735-1742行)


[ 本帖最后由 CCX_CX_D 于 2011-2-16 22:43 编辑 ]

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-2-16 16:02:12 | 显示全部楼层
  1.         CvPlayer& kOwner = GET_PLAYER(getOwnerINLINE());
  2.         if (kOwner.canSplitEmpire() && kOwner.canSplitArea(area()->getID()))
  3.         {
  4.                 PlayerTypes ePlayer = GET_PLAYER(getOwnerINLINE()).getSplitEmpirePlayer(area()->getID());

  5.                 if (NO_PLAYER != ePlayer)
  6.                 {
  7.                         if (GET_PLAYER(ePlayer).isAlive())
  8.                         {
  9.                                 return ePlayer;
  10.                         }
  11.                 }
  12.         }
复制代码

CvPlayer::getSplitEmpirePlayer()里确保了其返回值的.isAlive()一定为false,我完全不能理解这段代码存在的意义,不知道是不是理解错了

另外第三个条件(CvPlot::isVisibleEnemyUnit())感觉和平时认识不同,而且里面用的函数指针并且跨越多个文件,有点不太确信,还请各位给予例证或反例

[ 本帖最后由 CCX_CX_D 于 2011-2-16 22:38 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-2-16 16:04:17 | 显示全部楼层
总之……这是代码:
CvPlayer::acquireCity()里,CvPlayer.cpp的1735-1742行
  1.                                 //popup raze option
  2.                                 eHighestCulturePlayer = pNewCity->getLiberationPlayer(true);
  3.                                 bRaze = canRaze(pNewCity);
  4.                                 bGift = ((eHighestCulturePlayer != NO_PLAYER)
  5.                                                 && (eHighestCulturePlayer != getID())
  6.                                                 && ((getTeam() == GET_PLAYER(eHighestCulturePlayer).getTeam())
  7.                                                         || GET_TEAM(getTeam()).isOpenBorders(GET_PLAYER(eHighestCulturePlayer).getTeam())
  8.                                                         || GET_TEAM(GET_PLAYER(eHighestCulturePlayer).getTeam()).isVassal(getTeam())));
复制代码


CvCity::getLiberationPlayer()里,CvCity.cpp的13351-13463行
  1. PlayerTypes CvCity::getLiberationPlayer(bool bConquest) const
  2. {
  3.         if (isCapital())
  4.         {
  5.                 return NO_PLAYER;
  6.         }

  7.         for (int iPlayer = 0; iPlayer < MAX_CIV_PLAYERS; ++iPlayer)
  8.         {
  9.                 CvPlayer& kLoopPlayer = GET_PLAYER((PlayerTypes)iPlayer);
  10.                 if (kLoopPlayer.isAlive() && kLoopPlayer.getParent() == getOwnerINLINE())
  11.                 {
  12.                         CvCity* pLoopCapital = kLoopPlayer.getCapitalCity();
  13.                         if (NULL != pLoopCapital)
  14.                         {
  15.                                 if (pLoopCapital->area() == area())
  16.                                 {
  17.                                         return (PlayerTypes)iPlayer;
  18.                                 }
  19.                         }
  20.                 }
  21.         }

  22.         CvPlayer& kOwner = GET_PLAYER(getOwnerINLINE());
  23.         if (kOwner.canSplitEmpire() && kOwner.canSplitArea(area()->getID()))
  24.         {
  25.                 PlayerTypes ePlayer = GET_PLAYER(getOwnerINLINE()).getSplitEmpirePlayer(area()->getID());

  26.                 if (NO_PLAYER != ePlayer)
  27.                 {
  28.                         if (GET_PLAYER(ePlayer).isAlive())
  29.                         {
  30.                                 return ePlayer;
  31.                         }
  32.                 }
  33.         }

  34.         PlayerTypes eBestPlayer = NO_PLAYER;
  35.         int iBestValue = 0;

  36.         int iTotalCultureTimes100 = countTotalCultureTimes100();

  37.         for (int iPlayer = 0; iPlayer < MAX_CIV_PLAYERS; ++iPlayer)
  38.         {
  39.                 CvPlayer& kLoopPlayer = GET_PLAYER((PlayerTypes)iPlayer);

  40.                 if (kLoopPlayer.isAlive())
  41.                 {
  42.                         if (kLoopPlayer.canReceiveTradeCity())
  43.                         {
  44.                                 CvCity* pCapital = kLoopPlayer.getCapitalCity();
  45.                                 if (NULL != pCapital)
  46.                                 {
  47.                                         int iCapitalDistance = ::plotDistance(getX_INLINE(), getY_INLINE(), pCapital->getX_INLINE(), pCapital->getY_INLINE());
  48.                                         if (area() != pCapital->area())
  49.                                         {
  50.                                                 iCapitalDistance *= 2;
  51.                                         }

  52.                                         int iCultureTimes100 = getCultureTimes100((PlayerTypes)iPlayer);

  53.                                         if (bConquest)
  54.                                         {
  55.                                                 if (iPlayer == getOriginalOwner())
  56.                                                 {
  57.                                                         iCultureTimes100 *= 3;
  58.                                                         iCultureTimes100 /= 2;
  59.                                                 }
  60.                                         }

  61.                                         if (GET_PLAYER((PlayerTypes)iPlayer).getTeam() == getTeam()
  62.                                                 || GET_TEAM(GET_PLAYER((PlayerTypes)iPlayer).getTeam()).isVassal(getTeam())
  63.                                                 || GET_TEAM(getTeam()).isVassal(GET_PLAYER((PlayerTypes)iPlayer).getTeam()))
  64.                                         {
  65.                                                 iCultureTimes100 *= 2;
  66.                                                 iCultureTimes100 = (iCultureTimes100 + iTotalCultureTimes100) / 2;
  67.                                         }

  68.                                         int iValue = std::max(100, iCultureTimes100) / std::max(1, iCapitalDistance);

  69.                                         if (iValue > iBestValue)
  70.                                         {
  71.                                                 iBestValue = iValue;
  72.                                                 eBestPlayer = (PlayerTypes)iPlayer;
  73.                                         }
  74.                                 }
  75.                         }
  76.                 }
  77.         }

  78.         if (NO_PLAYER != eBestPlayer)
  79.         {
  80.                 if (getOwnerINLINE() == eBestPlayer)
  81.                 {
  82.                         return NO_PLAYER;
  83.                 }

  84.                 for (int iPlot = 0; iPlot < NUM_CITY_PLOTS; ++iPlot)
  85.                 {
  86.                         CvPlot* pLoopPlot = ::plotCity(getX_INLINE(), getY_INLINE(), iPlot);

  87.                         if (NULL != pLoopPlot)
  88.                         {
  89.                                 if (pLoopPlot->isVisibleEnemyUnit(eBestPlayer))
  90.                                 {
  91.                                         return NO_PLAYER;
  92.                                 }
  93.                         }
  94.                 }
  95.         }

  96.         return eBestPlayer;
  97. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 14:08

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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