设为首页收藏本站

塞爱维(CIV)文明联盟

 找回密码
 注册
楼主: Olemi

[原创] [已完成]Civ5DLL解析之小野营地生成及营地生成单位相关规则小考

[复制链接]
 楼主| 发表于 2012-11-5 00:59:00 | 显示全部楼层

回复 19# 的帖子

DLL就是这么写的,如果你认为坑爹的话请直接找2k程序员理论
回复 支持 反对

使用道具 举报

发表于 2012-11-5 03:25:11 | 显示全部楼层

回复 19# 的帖子

字面上看似乎不是"开局10回合内不会出小野"而是"开局10回合内小野营地不会刷出新单位"
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-5 04:51:27 | 显示全部楼层

回复 22# 的帖子

是的,确实如此……这个类就是控制和营地相关的产生工作的
也算是我没说清,我再改一下标题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-5 05:01:48 | 显示全部楼层

回复 18# 的帖子

其实是给MOD制作者改的……
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-5 12:24:17 | 显示全部楼层

回复 20# 的帖子

C++
回复 支持 反对

使用道具 举报

发表于 2012-11-5 13:32:38 | 显示全部楼层
0回合的时候地图上已有小野营地,但新的小野营地在10回合后才会产生
根据一开始就会看到小野和小野营地,或许是这样的吧
回复 支持 反对

使用道具 举报

发表于 2012-11-5 15:01:15 | 显示全部楼层
受教了
回复 支持 反对

使用道具 举报

发表于 2012-11-5 15:03:49 | 显示全部楼层
之前还在想dll会用什么语言写,没想到居然是c++,咱唯一一个用的勉强顺手的语言啊
学生党表示认真看还是能看懂,就是不知道做mod和改dll有啥联系,难不成是直接在visual studio里做c++编程吗

[ 本帖最后由 jrnjsyx 于 2012-11-5 15:07 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-5 18:33:36 | 显示全部楼层

回复 26# 的帖子

什么?0回合的时候后就有营地了?!?- -
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-5 18:34:45 | 显示全部楼层

回复 28# 的帖子

DLL可以用很多语言来写,只要按规则摆出接口就行
回复 支持 反对

使用道具 举报

发表于 2012-11-6 10:43:59 | 显示全部楼层
0回合开始的时候会产生一次营地,数目是地图允许的营地数量的1/3。其他的回合有1/2的机会在全地图范围内刷出一个营地。
DoCamp()中
  1. // First turn of the game add 1/3 of the Target number of Camps
  2. if(kGame.getElapsedGameTurns() == 0)
  3. {
  4.         iNumCampsToAdd *= /*33*/ GC.getBARBARIAN_CAMP_FIRST_TURN_PERCENT_OF_TARGET_TO_ADD();
  5.         iNumCampsToAdd /= 100;
  6. }
  7. // Every other turn of the game there's a 1 in 2 chance of adding a new camp if we're still below the target
  8. else
  9. {
  10.         if(kGame.getJonRandNum(/*2*/ GC.getBARBARIAN_CAMP_ODDS_OF_NEW_CAMP_SPAWNING(), "Random roll to see if Barb Camp spawns this turn") > 0)
  11.         {
  12.                 iNumCampsToAdd = 1;
  13.         }
  14.         else
  15.         {
  16.                 iNumCampsToAdd = 0;
  17.         }
  18. }
复制代码
原帖由 Olemi 于 2012-11-5 18:33 发表
什么?0回合的时候后就有营地了?!?- -

[ 本帖最后由 landice 于 2012-11-6 10:53 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2012-11-6 12:26:25 | 显示全部楼层

回复 29# 的帖子

零回合看到一个遗迹,同回合踩下去哗啦哗啦发现3个小野营地
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-6 22:41:23 | 显示全部楼层

回复 31# 的帖子

我还没有看DoCamp,太长了,等我有时间的时候看看……

另外有可能不是1/3,33被注释掉了,这个要取决于BARBARIAN_CAMP_FIRST_TURN_PERCENT_OF_TARGET_TO_ADD

另外我那句话是在吐槽文明V的蛮族设计→_→,我还没怎么玩儿过

[ 本帖最后由 Olemi 于 2012-11-6 22:43 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2012-11-7 02:50:15 | 显示全部楼层
爆米花饮料起上   虽然不明白在说些什么 但是好厉害 的样子
回复 支持 反对

使用道具 举报

发表于 2012-11-7 21:06:44 | 显示全部楼层
这个挺不错的
回复 支持 反对

使用道具 举报

发表于 2012-11-7 21:36:49 | 显示全部楼层
高手,慢慢看结论
回复 支持 反对

使用道具 举报

发表于 2012-11-8 11:02:10 | 显示全部楼层
BARBARIAN_CAMP_FIRST_TURN_PERCENT_OF_TARGET_TO_ADD这种最后是读取在XML里面定义的值,被注掉的应该是开发者建议的值或者调试的时候用过的值之类
源码里面有很多这样的,我翻着找了几个跟注释掉的值都是相同的,应该差异不大

原帖由 Olemi 于 2012-11-6 22:41 发表
我还没有看DoCamp,太长了,等我有时间的时候看看……

另外有可能不是1/3,33被注释掉了,这个要取决于BARBARIAN_CAMP_FIRST_TURN_PERCENT_OF_TARGET_TO_ADD

另外我那句话是在吐槽文明V的蛮族设计→_→,我还没 ...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-8 11:07:18 | 显示全部楼层

回复 37# 的帖子

其实我也是这么推测的,只是没有XML不敢确定罢了
我们的老师曾经提过一句“程序里出现数字就是失败的”,虽然很极端但是这话没错→_→
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-8 21:47:51 | 显示全部楼层
2012.11.8 解决部分错误,补充XML数据
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-8 23:03:24 | 显示全部楼层
6、营地的产生规律
这段代码在DoCamps()函数中,总第259-493行,代码太长久不贴了……
它执行以下操作:
1.如果有“无野蛮人”选项
  (1)退出
2.计算地图上蛮族营地总数X和不能被除野蛮人玩家以外任一玩家所见的非水域地块总数Y
3.计算地图上应有的蛮族营地总量M=FogTilesPerBarbarianCamp/Y,FogTilesPerBarbarianCamp和地图大小有关,其值为(从小到大):13/18/23/27/30/35
4.如果M-X不大于0则跳至
5.如果此回合是游戏开始回合
  (1)此回合所要产生的蛮族营地数T=33/100
否则
  (1) 此回合所要产生的蛮族营地数T=0或1(几率各%50)
6.取随机数,“临海倾向”从0~6间取值,
7.随机选取地图上一个地块,若满足以下条件:
  (1)非水域
  (2)可通行
  (3)非山脉
  (4)不属于任何玩家且任何玩家不可见
  (5)无资源
  (6)不在单地块岛屿上
  (7)地块临海或者“临海倾向”为0
  (8)未达到地块所在大陆允许的营地最大值(值为M*此大陆占全部陆地的比例+1)
  (9)无设施或营地
  (10)4格内无(非城邦)首都,7格内无其他营地
  (11)4格内无地块的m_aiPlotBarbCampSpawnCounter值小于-1,即向前追溯15回合,4格以内没有营地被摧毁(IsPlotValidForBarbCamp函数执行此功能)
则建立一个营地,否则重复执行此段代码
8.T减1,并重新生成“临海倾向”值
9.返回7执行,直到T=0


结论:
1.营地在一开始会产生最大数量的33%;
2.营地在任意回合都有可能产生;
3.出开始游戏的回合,营地每回合产生0个或1个,几率为50%;
4.5/6以上的营地出现在临海地块
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 12:33

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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