tankant 发表于 2013-10-2 20:35:20

【大唐复兴】把加工过的AOFE重新打包成默认AI

本帖最后由 tankant 于 2013-10-14 13:44 编辑

摘要:
通过这篇文章,您将学到如下内容:
1.抽取AOFE等帝国时代2的AI自动分配代码的方法。
2.让多个AI科学有效地自动分配的方法。
3.每次修改了AI文件后,可以自动转化为默认AI

正文:
前几天野猪发布了任务,要求我把AI设置为默认AI。一直很忙没有做。
今天突然来了兴趣,我们开始尝试:
首先我拥有下面的帖子作为技术资料
https://www.hawkaoe.net/bbs/forum.php?mod=viewthread&tid=24798
通过这个帖子我们知道,AOFE的AI控制文件存在于这个文件里:gamedata_x1.drs
我们用vim打开这个文件看看,发现了49312行代码。我们尝试找关键的代码:
/Barbarian
......
43467 ;------------------------------^M
43468 ;Load AI^M
43469 ;------------------------------^M
43470 (load-random^M
43471 +barbarian-load-value "Barbarian"^M
43472 +khanate-load-value "The Khanate"^M
43473 +horde-load-value "The Horde"^M
43474 +crusade-load-value "Crusade"^M
43475 +principality-load-value "Principality"^M
43476 );
......
发现barbarian又是关键词,然后我们找barbarian
gg/barbarian
......
42571 ;------------------------------^M
42572 ;Define Random Map Constants^M
42573 ;------------------------------^M
42574 #load-if-not-defined DEATH-MATCH^M
42575 #load-if-not-defined DEFEND-WONDER^M
42576 #load-if-not-defined KING-OF-THE-HILL^M
42577 #load-if-not-defined TURBO-RANDOM-MAP^M
42578 #load-if-not-defined REGICIDE^M
42579 #load-if-not-defined WONDER-RACE^M
42580 #load-if-defined ARABIA-MAP^M
42581 #load-if-not-defined POPULATION-CAP-200^M
42582 (defconst horde-load-value 40)^M
42583 (defconst barbarian-load-value 40)^M
42584 (defconst crusade-load-value 0)^M
42585 (defconst khanate-load-value 20)^M
42586 #else^M
......
很显然,通过代码的注释我们应该找到了控制合理分配AI的代码。
但是,我们进一步发现,这个文件里有49312行,远远小于AOFE的代码行数。
set nu
gg/defrule
gg/defconst
我们发现AI是从25503才开始行出现的,一直到文件末尾。
我们把从这一行到最后截取,放到新建文件:游戏目录/AI/random.per里面。然后我们再在创建文件:游戏目录/AI/random.ai。然后把游戏目录/AI下所有内容放到游戏目录/Data/Load下面。

下一步我们开始使用工具反复尝试,发现只有42571到43476行是有效代码,其余都是自动生成的。
我们只把这些内容放到random.per文件中,重新用工具尝试,最终成功。

这样,我们的gamedata_x1.drs和/Load文件夹下的所有文件就是能够自动选择AI的成果。

我可以提交给野猪了,呵呵~~

==================================
这是后来,我做的自动转化成默认AI的批处理脚本convert.bat:

rd ..\data\load /s /q
mkdir ..\data\load
xcopy * ..\data\load\/e /c /y
move ..\data\gamedata_x1.drs ..\data\gamedata_x1.drs.bak
move ..\data\load\gamedata_x1.drs.bak ..\data\gamedata_x1.drs
cd ..\data\
aochack .\load\random.per
del gamedata_x1.drs
move gamedata.new gamedata_x1.drs

很方便,每次编辑完AI只要运行该文件就能转化为默认AI,再也不用一步步来了。

levin 发表于 2013-10-2 21:18:22

这是巨制的节奏呐 期待一下

tankant 发表于 2013-10-2 23:06:15

levin 发表于 2013-10-2 21:18 static/image/common/back.gif
这是巨制的节奏呐 期待一下

感谢对我的支持~~~

小小木偶师 发表于 2013-11-26 00:07:37

怎么改联机的AI呢!?想和朋友一起打变态的AI~
页: [1]
查看完整版本: 【大唐复兴】把加工过的AOFE重新打包成默认AI