Board logo

标题: 阻止AI使用假情报系策略 [打印本页]

作者: TommyChampion    时间: 2011-1-22 01:06     标题: 阻止AI使用假情报系策略

AI使用假情报系策略比较鸡肋,对我军没有伤害,而且一般假情报成功率不高而且容易恢复,因此假情报系策略和炎龙2里面的麻痹术和祛麻术系统无法相比,作用相当小,而且AI在LV12至LV18经常用这一鸡肋策略,极大的降低了游戏的难度。不客气的说是一种BUG。

修改方法:用WINHEX打开MAIN.EXE,修改位于2FF4C的2个字节:初始值2C 01,修改成00 00。

修改原理:根据龙吟的行动价值分析,如果计算策略成功,混乱策略价值 = 随机数(0~299)+ 300 ÷ 16,修改这个常数300,使假情报系策略的行动价值计算无论如何都是0,经数次试验后相当的成功。

[ 本帖最后由 TommyChampion 于 2011-4-20 18:18 编辑 ]
作者: TommyChampion    时间: 2011-1-22 01:11     标题: 参考配合修改

根据自己需要配合修改,以下修改由本人根据周瑜大人的自选补丁以及某人的必然反击补丁推敲出来的修改方法:

★ 非攻策略必成功:【2CE7D】76 05 → 90 90
★ 非攻策略必失败:【2CE7D】76 05 → EB 05

★ 混乱必然恢复:【2AC82】73 29 → 90 90
★ 混乱必不恢复:【2AC82】73 29 → EB 29
作者: heyou    时间: 2011-1-26 11:09     标题: 回复 #1 TommyChampion 的帖子

如果步兵無法攻擊別人,也因為下雨無法使用攻擊性策略,也不會使用假情報嗎?
還是在這ˋ種情況有可能使用假情報?

如果想修改300為別的數字,邏輯是?
作者: 阿尔法孝直    时间: 2011-1-26 11:45

具体算法是:

QUOTE:
混乱?加权值=0
没混乱?计算一次假情报是否成功,
成功则:
ax=1,si=0xFFFF
不成功则:
ax=0,si=0x0000

ax=300                //(*)
si=si and ax                //这个and是按位与
ax=random(ax)        //计算0~ax-1的随机数,特例:random(0)=0
si=si+ax
最后:加权值=si

所以,如果把(*)处的300改为0,那么最后加权值固定为0,即使步兵只能用假情报,那也不会用。
作者: TommyChampion    时间: 2011-1-26 11:45

这个修改的原理就是把龙吟的公式“混乱策略价值 = 随机数(300)+ 300 ÷ 16”中的常数300变成0,也就是说假情报对于AI来说无论如何价值都是0,记得所有会假情报策略的兵种和等级里面,至少还有其他牵制或者攻击性策略的,而这2种策略无论如何也不会是0,所以理论上AI是不会用的了

即使假设所有行动的价值都是0,AI似乎也会先考虑攻击,然后再考虑策略。

假如将300改成其他数字,那么理论上就是行动价值有所改变。有兴趣可以试试。因为我觉得假情报策略意义不大,很多时候半个回合就苏醒了等于没用,所以我就改成0了。
作者: heyou    时间: 2011-1-26 15:31     标题: 回复 #4 阿尔法孝直 的帖子

謝謝

"即使步兵只能用假情报,那也不会用"  

其實我想要知道的ˋ是要將300改成其他數字,如150或50,要改成甚麼?
作者: TommyChampion    时间: 2011-1-26 15:38



QUOTE:
原帖由 heyou 于 2011-1-26 15:31 发表
謝謝

"即使步兵只能用假情报,那也不会用"  

其實我想要知道的ˋ是要將300改成其他數字,如150或50,要改成甚麼?

这个要根据公式计算了,改小了降低几率,改大了增加几率。具体比较可以看龙吟的完全公式。
作者: 阿尔法孝直    时间: 2011-1-26 18:43



QUOTE:
原帖由 heyou 于 2011-1-26 15:31 发表
謝謝

"即使步兵只能用假情报,那也不会用"  

其實我想要知道的ˋ是要將300改成其他數字,如150或50,要改成甚麼?

那就把0x3A928处的两个字节改成你要的数就行。
作者: 周瑜    时间: 2011-4-16 00:33

最近在研究彭城赵何为何不使用牵制而只用假情报时,发现AI模拟假情报时有一个BUG。

根据龙吟的公式:
非军乐队运输队妖术师受假情报攻击时策略闪避为:
策略闪避=(智力×等级÷100+智力)÷2

策略命中为:
策略命中=(智力×等级÷100+智力)

然后产生一个范围为 [0, 策略命中-1] 的随机数,如果该随机数大于策略闪避则策略成功,否则策略失败。

当计算实际命中时,以上公式是正确的。可惜模拟假情报时,计算策略闪避的除数2,变成了130(0x82),导致策略闪避变得非常小,模拟策略几乎必然成功。因此假情报的行动价情永远都会加上300,必然大于牵制的行动价值,赵何也就不会对未混乱的我方队员使用牵制。

[ 本帖最后由 周瑜 于 2011-4-15 09:35 编辑 ]
作者: heyou    时间: 2011-4-17 06:25     标题: 回复 #9 周瑜 的帖子

都督的意思是 程式原本設計時,趙何應該是有機率使用牽制,也有可能使用假情報嗎?

如果是這樣,使用此補丁,將300的數字調低,是否比較合理
讓敵軍有使用牽制或假情報的機會!
這樣應該會改變許多走位
作者: heyou    时间: 2011-4-17 06:56     标题: 回复 #5 TommyChampion 的帖子

把龍吟的公式「混亂策略價值 = 隨機數(300)+ 300 ÷ 16」中的常數300變成0
=>如果調成0
步兵在下雨天,攻擊不到人,會使用假情報吧?
還是行動價值太低,不動?
作者: heyou    时间: 2011-4-17 06:59     标题: 回复 #1 TommyChampion 的帖子

修改方法:用WINHEX打开MAIN.EXE,修改位于3A928的2个字节:初始值2C 01,修改成00 00。
=>這是windows版的MAIN.EXE?
因為在DOS版的3A928的2个字节為FFFF
作者: 周瑜    时间: 2011-4-17 11:12



QUOTE:
原帖由 heyou 于 2011-4-16 15:25 发表
都督的意思是 程式原本設計時,趙何應該是有機率使用牽制,也有可能使用假情報嗎?

如果是這樣,使用此補丁,將300的數字調低,是否比較合理
讓敵軍有使用牽制或假情報的機會!
這樣應該會改變許多走位

似乎你没有明白我的意思。

9楼的公式是实际使用假情报时计算成功率的公式。但在确定是否加300时,有一次模拟假情报。这次模拟假情报在计算策略闪避时,除数不是2,而是130,使得策略闪避值非常低,模拟假情报成功率接近100%,其行动价值提升300。

如果要修复BUG,应该改的是把130恢复为2,而不是修改300。不过考虑再三,我决定不做任何修改,尽量维持游戏原貌,而不是去迎合玩家想象出来的所谓“原始设计”。
作者: heyou    时间: 2011-4-17 12:46     标题: 回复 #13 周瑜 的帖子



可是我覺得有機率使用牽制,也有可能使用假情報,這樣感覺比較合理?!
不過,有些關的確是因為敵人會使用假情報,而比較好過關
這部分要再想想
作者: fjshnan    时间: 2011-4-17 17:29

...
计算策略闪避的除数2,变成了130(0x82),
...

这个...写程序手误的机率很大~~或许“原始设计”真的是0x02
作者: TommyChampion    时间: 2011-4-20 18:21



QUOTE:
原帖由 heyou 于 2011-4-17 06:59 发表
修改方法:用WINHEX打开MAIN.EXE,修改位于3A928的2个字节:初始值2C 01,修改成00 00。
=>這是windows版的MAIN.EXE?
因為在DOS版的3A928的2个字节為FFFF

不好意思,可能是编辑是出现了复制错误,正确地址是2FF4C
作者: TommyChampion    时间: 2011-4-30 16:30



QUOTE:
原帖由 周瑜 于 2011-4-16 00:33 发表
最近在研究彭城赵何为何不使用牵制而只用假情报时,发现AI模拟假情报时有一个BUG。

根据龙吟的公式:
非军乐队运输队妖术师受假情报攻击时策略闪避为:
策略闪避=(智力×等级÷100+智力)÷2

策略命 ...

你指的是否2FF3F处的82(130)?

[ 本帖最后由 TommyChampion 于 2011-4-30 16:38 编辑 ]

图片附件: Tuzki.jpg (2011-4-30 16:38, 4.56 K) / 该附件被下载次数 168
http://xycq.org.cn/forum/attachment.php?aid=108548


作者: 周瑜    时间: 2011-4-30 22:23

是的,但不能简单改为02,因为最高位用于区分实际还是模拟的假情报。

如果要修正这个BUG,可以在2CE5C和2CE5D之间加入指令 and cl, 7F
当然,必须重新排列一下前后几条语句才能把这三个字节的指令加进去。

[ 本帖最后由 周瑜 于 2011-4-30 07:33 编辑 ]
作者: TommyChampion    时间: 2011-4-30 23:09



QUOTE:
原帖由 周瑜 于 2011-4-30 22:23 发表
是的,但不能简单改为02,因为最高位用于区分实际还是模拟的假情报。

如果要修正这个BUG,可以在2CE5C和2CE5D之间加入指令 and cl, 7F
当然,必须重新排列一下前后几条语句才能把这三个字节的指令加进去。

貌似这个BUG很严重……
作者: tigermark    时间: 2011-7-29 17:40

文科的同学表示压力:
修改方法:用WINHEX打开MAIN.EXE,修改位于2FF4C的2个字节:初始值2C 01,修改成00 00
我用WINHEX打开MAIN.EXE,只发现0002FF40,找不到2FF4C
作者: 阿尔法孝直    时间: 2011-7-29 19:18



QUOTE:
原帖由 tigermark 于 2011-7-29 17:40 发表
文科的同学表示压力:
修改方法:用WINHEX打开MAIN.EXE,修改位于2FF4C的2个字节:初始值2C 01,修改成00 00
我用WINHEX打开MAIN.EXE,只发现0002FF40,找不到2FF4C

是在0x2FF4C的地址处的值,不是查找2FF4C。
作者: 周瑜    时间: 2011-7-30 05:07



QUOTE:
原帖由 tigermark 于 2011-7-29 02:40 发表
文科的同学表示压力:
修改方法:用WINHEX打开MAIN.EXE,修改位于2FF4C的2个字节:初始值2C 01,修改成00 00
我用WINHEX打开MAIN.EXE,只发现0002FF40,找不到2FF4C

找到02FF40这一行,对应C的一列就是02FF4C
作者: tigermark    时间: 2011-7-31 15:04

谢谢两位大神的答复。原来“c”是横坐标,我懂了。
另外周大是5:07的回复,是还没睡呢,还是准备晨跑了?




欢迎光临 轩辕春秋文化论坛 (http://xycq.org.cn/forum/) Powered by Discuz! 5.0.0