翔鹰帝国网|帝国时代论坛|帝国时代系列|神话时代
 找回密码
 注册翔鹰会员(昵称)
搜索
查看: 2706|回复: 13

[交流] 【大唐复兴】AORT AI计划与直播贴

 关闭 [复制链接]

38

主题

0

精华

5066

积分

国王

耕战
933
鹰币
4
天龙币
0
回帖
249

三级嘉禾勋章

附庸关系0
发表于 2013-9-4 00:28:40 | 显示全部楼层 |阅读模式
本帖最后由 tankant 于 2013-9-8 13:09 编辑

大家好,我是tankant。

鉴于AORT的数据工作趋于完善,现在开始着眼于AI的制作。本帖动态更新。希望能激发更多人对AI的兴趣。
借此机会,完善自己的AI代码生成工具对UserPatch1.3和AORT的支持。
我会把我用到的技术毫无保留的奉献给大家,让大家共同进步。

编辑此帖的目的,是希望自己的思路保存到这里,分享经验。

当然,这里有部分技术可能是一些比较难以掌握的技术(比如vi编辑器的使用和后期会涉及到的Linux的shell命令),我不会有时间和精力去一一详解,具体请百度相关文章。使用这些技术的原因不是为了卖弄,而是为了劳动果实的重用性。我将利用这些工具,打造可以直接将AOFE的AI转化为AORT的AI的程序代码。该代码也附带转化AOFE的AI代码之后的修改记录。这也就是搞图像跟编程序的不同之处。图像不可以投机取巧,只能一点点来,然而程序总可以想到更少的方法,创造更多的价值。当我完成之后,会把直接将AOFE的AI转化为AORT的AI的程序代码的使用方法总结出来并公布。

工欲善其事,必先利其器。我在做的工作是打造一系列有利于日后工作的工具以及规范。你可以想象,为了简略AI的开发与单元测试难度,我开发过这个
https://www.hawkaoe.net/bbs/forum.php?mod=viewthread&tid=108858
可以证明我对AI的热爱。

虽然这个当初并不是特意为AORT打造的(因为当时也没有AORT),但是现在有意去兼容。

相信我的努力能吸引到更多的人加入到大唐复兴MOD的制作当中。

以下是具体工作:
期待特色AOC!!!!!
回复

使用道具 举报

38

主题

0

精华

5066

积分

国王

耕战
933
鹰币
4
天龙币
0
回帖
249

三级嘉禾勋章

附庸关系0
 楼主| 发表于 2013-9-4 00:39:16 | 显示全部楼层
本帖最后由 tankant 于 2013-9-14 14:54 编辑


总体计划方案:移植AOFE的AI代码,在此基础上修改,并设计AI代码生成工具。

移植AOFE的AI代码
==================
第一步,也是最基础的一步,研究AOFE的AI的框架(文件布局,代码风格),构思AORT的单位的名称并与ID建立联系。之后完成defconst语句。野猪填表的方式并非我预期的那样易懂,需要好好理解。

第二步,通过vi(或者vim/Gvim)等纯文本编辑器编辑,利用正则表达式做出相应的替换,增加新的rule。重点工作在于完善AI脚本更改的过程代码。之所以使用vi,是因为AOFE的AI不断在更新。为了留有余地,有必要保存AI修改的方法。该方法程序写好后,可以不用担心AOFE的AI最新升级。因为利用该程序就可以完成瞬间升级。重复工作从此说拜拜。

移植AOFE的AI代码的基础上修改
==================
这一步需要资深的有经验的对战者的参与,我一个人肯定无法完成。重点在于新兵种的运用。由于新兵种消耗资源种类和数量的创新,合理的设计这些士兵的使用就是个很大的课题。

设计AI代码生成工具
==================
预计重新设计以下表:
unit表
building表
等。。。。。








期待特色AOC!!!!!
回复

使用道具 举报

38

主题

0

精华

5066

积分

国王

耕战
933
鹰币
4
天龙币
0
回帖
249

三级嘉禾勋章

附庸关系0
 楼主| 发表于 2013-9-4 00:39:41 | 显示全部楼层
本帖最后由 tankant 于 2013-9-7 19:27 编辑


这期间做抽样测试,Barbarian_2.0不可用Crusade 4.42可以直接用(原id兵种可以正常生产,部分兵种不可以生产,比如投矛骑兵,象兵,陌刀兵。设计多个统一的系列兵种还是挨个设计行为模式有待商榷。其他运行时的问题有待测试。不过发现部分问题,比如玛雅代替剑士的步兵一个也没有生产,这个可能不是bug。不知道别的AI是否也是这样的。不能让图像白白制作,得让他们都有出场机会。这是我的目标。)
standard ai也能用。这个AI很像1.0C原版ai,一开始就建造城墙,部分AI主动对计算机玩家中立。具体是不是原版ai还是其增强版,有待进一步测试。
Principality不可用

所有AI不会杀野猪。不能使用的AI报错也都跟UserPatch1.3的函数、策略有关。
目前怀疑没有安装UserPatch1.3。
安装UserPatch1.3。安装提示成功,但是实际1000人口没有打上,ai错误依旧。郁闷中。。。。


xp虚拟机上运行成功,AOFE的所有脚本运行正常可以调试AI了。
看来问题的原因是Ubuntu系统的wine没有识别出UserPatch1.3
所有的AI都能选择了。并且AI可以自行杀猪,很兴奋。
下一步就是测试AI是否随机选取AI的测试。

gdzjlzh说,如果想让电脑随机选取ai,需要最后把ai放到drs文件里。这是最后要做的。
期待特色AOC!!!!!
回复

使用道具 举报

38

主题

0

精华

5066

积分

国王

耕战
933
鹰币
4
天龙币
0
回帖
249

三级嘉禾勋章

附庸关系0
 楼主| 发表于 2013-9-4 00:45:47 | 显示全部楼层

正在编辑

本帖最后由 tankant 于 2013-9-8 21:19 编辑

根据野猪填的单位id对照表,我整理出自己能够看懂的表。
经过抽样测试,锁定几个变量不能定义到新id上:

my-unique-unit
my-elite-unique-unit
my-unique-unit-line

解决方案就是定义6个新变量:

my-unique-unit1
my-elite-unique-unit1
my-unique-unit-line1

my-unique-unit2
my-elite-unique-unit2
my-unique-unit-line2

#!/usr/bin/env python
import os,re
file_list=[]
def get_all_file(floder_path):
    file_list=[]
    if floder_path is None:
        raise Exception("floder_path is None")
    for dirpath, dirnames, filenames in os.walk(floder_path):
        for name in filenames:
            file_list.append(dirpath + '/' + name)
    return file_list
file_list_result=get_all_file("/media/926bfa98-9eb6-414d-ab62-88b3fd1ba801/geli/HawKAoC/AI")
for i in file_list_result:
    i=re.sub(r'\s+','\\ ',i)
    stmt="sed -i 's/my-unique-unit-line/aort-my-unique-unit-line1/g' "+i
    stmt2="sed -i 's/my-unique-unit/aort-my-unique-unit1/g' "+i
    os.system(stmt)
    os.system(stmt2)


对应每个民族的新特色兵种。
这样就应该把所有AOFE原来的变量名利用#load-if-define来定义my-unique-unit1等变量的值


然后替换原来的my-unique-unit-line等变量。
以my-unique-unit-line为例,运行自己写的查找脚本:
import os

def is_file_contain_word(file_list, query_word):
    for _file in file_list:
        if query_word in open(_file).read():
            print _file
            #os.system('notepad '+_file)

    print("Finish searching.")
    #www.orayes.com
def get_all_file(floder_path):
    file_list = []
    if floder_path is None:
        #www.orayes.com
        raise Exception("floder_path is None")
    for dirpath, dirnames, filenames in os.walk(floder_path):
        for name in filenames:
            file_list.append(dirpath + '/' + name)
    return file_list
    #www.orayes.com
while 1:
    query_word = raw_input("Please input the key word that you want to search:")
    basedir = raw_input("Please input the directory:")
    is_file_contain_word(get_all_file(basedir), query_word)
    raw_input("Press Enter to quit.")


定位结果如下:

Please input the key word that you want to search:my-unique-unit-line
Please input the directory:.
./Principality.ai
./Principality.per
./Barbarian.per
./The Horde.per
./STD AI DM FIX/elite petersen deathmatch.per
./STD AI DM FIX/elite petersen full tech.per
./STD AI DM FIX/elite petersen supplement.per
./Barbarian_2.0/Castles.per
./Barbarian_2.0/RaidTheCamps.per
./Barbarian_2.0/MonksAndTrebs.per
./Barbarian_2.0/WallAndBoom.per
./Barbarian_2.0/HeavySkirms.per
./Barbarian_2.0/OnlyMeso.per
./Barbarian_2.0/WonderAssault.per
./Barbarian_2.0/DeathMatch.per
./Barbarian_2.0/TheGrowlOfTheJaguar.per
./Barbarian_2.0/Strategies/MONGOLBOOM.per
./Barbarian_2.0/Strategies/CASTLESLING.per
./Crusade 4.42/Army Selection.per

./tools/AORT的AI代码生成工具雏形/t/orayes.db3
./tools/附件/帝国时代2征服者AI脚本官方文档/1.0c官方文档数据整理/parameter/unit.csv
./tools/代码/t/orayes.db3
Finish searching.
Press Enter to quit.

绿色的都是带有my-unique-unit-line字样的文件,必须全部替换成my-unique-unit-line1和my-unique-unit-line2。由于一个关键词替换成2个,无法用批量替换脚本orayes.sh。这时候必须手动翻看这些文件然后一一处理。

原来不需要的单位也应该替换成新单位:

包含诸葛弩的文件:
Please input the key word that you want to search:chu-ko-nu
Please input the directory:.
./Barbarian.per
./The Horde.per
./STD AI DM FIX/elite petersen upgrades.per
./STD AI DM FIX/elite petersen deathmatch.per
./STD AI DM FIX/elite petersen supplement.per
./STD AI DM FIX/elite wonder kill.per
./Barbarian_2.0/SuicidalKnightRush.per
./Barbarian_2.0/MonksAndTrebs.per
./Barbarian_2.0/Strategies1v1.per
./Barbarian_2.0/StrategiesTG.per
./Barbarian_2.0/DeathMatch.per
./Barbarian_2.0/TheGrowlOfTheJaguar.per
./Barbarian_2.0/Strategies/WarGalleys.per
./Crusade 4.42/Unit Training.per
./Crusade 4.42/Main Upgrades.per
./Crusade 4.42/Threat rules.per

./tools/AORT的AI代码生成工具雏形/t/orayes.db3
./tools/附件/帝国时代2征服者AI脚本官方文档/1.0c官方文档数据整理/parameter/unit.csv
./tools/附件/帝国时代2征服者AI脚本官方文档/1.0c官方文档数据整理/parameter/research_item.csv
./tools/代码/t/orayes.db3
Finish searching.
Press Enter to quit.

批量替换诸葛弩为陌刀兵的脚本:
#!/usr/bin/env python
import os,re
file_list=[]
def get_all_file(floder_path):
    file_list=[]
    if floder_path is None:
        raise Exception("floder_path is None")
    for dirpath, dirnames, filenames in os.walk(floder_path):
        for name in filenames:
            file_list.append(dirpath + '/' + name)
    return file_list
file_list_result=get_all_file("/media/926bfa98-9eb6-414d-ab62-88b3fd1ba801/HawKAoC/AI")
for i in file_list_result:
    i=re.sub(r'\s+','\\ ',i)
    stmt="sed -i 's/chu-ko-nu/modaobing/g' "+i
    os.system(stmt)


运行成功,再次运行搜索脚本,结果如下

Please input the key word that you want to search:chu-ko-nu
Please input the directory:.

./empires2.EXE
./Data/gamedata_x1.drs
./Data/gamedata.drs
./age2_x1a/age2_x1.exe
./age2_x1/age2_x1.exe_bak
./age2_x1/aom.exe
./age2_x1/age2_x1.exe.setupaoc.backup
./age2_x1/age2_x1.exe
Finish searching.
Press Enter to quit.


发现确实诸葛弩chu-ko-nu确实都替换掉了。顺便发现,嵌入AI的drs文件应该在./Data/gamedata_x1.drs或者./Data/gamedata.drs里面。

以下是已经包含陌刀兵modaobing的文件:

Please input the key word that you want to search:modaobing
Please input the directory:.
./AI/Barbarian.per
./AI/The Horde.per
./AI/STD AI DM FIX/elite petersen upgrades.per
./AI/STD AI DM FIX/elite petersen deathmatch.per
./AI/STD AI DM FIX/elite petersen supplement.per
./AI/STD AI DM FIX/elite wonder kill.per
./AI/Barbarian_2.0/SuicidalKnightRush.per
./AI/Barbarian_2.0/MonksAndTrebs.per
./AI/Barbarian_2.0/Strategies1v1.per
./AI/Barbarian_2.0/StrategiesTG.per
./AI/Barbarian_2.0/DeathMatch.per
./AI/Barbarian_2.0/TheGrowlOfTheJaguar.per
./AI/Barbarian_2.0/Strategies/WarGalleys.per
./AI/Crusade 4.42/Unit Training.per
./AI/Crusade 4.42/Main Upgrades.per
./AI/Crusade 4.42/Threat rules.per

Finish searching.
Press Enter to quit.

我们可以重点研究这些文件
突然发现自己总结的文档也被替换掉了,必须手动修改这些文档然后转移。



./AI/Barbarian.per为例,
vim ./AI/Barbarian.per:
/modaobing
yypn:s/modaobing/gongjveweidui/g
pn:s/modaobing/sakesunchangqiangbing/g
pn:s/modaobing/beiouchangfubing/g
pn:s/modaobing/buluozhanshi/g
pn:s/modaobing/silafuyongshi/g
pn:s/modaobing/kehanweidui/g
pn:s/modaobing/toumaoqibing/g
pn:s/modaobing/liudima/g
pn:s/modaobing/lunbadenushou/g
pn
:s/modaobing/yinduxiangshe/g
pn
:s/modaobing/gaomianjianuzhanxiang/g
pn
:s/modaobing/hualangsheshou/g
pn
:s/modaobing/falankeqibing/g
pn
:s/modaobing/sashanqibing/g
pn
:s/modaobing/gaoyuanqibing/g
pn
:s/modaobing/subiqibing/g
pn
:s/modaobing/jinlangtuqi/g
pn
:s/modaobing/xuanjiaqibing/g


下一处modaobing的地方就很难批量修改,必须手动改:
#load-if-defined CHINESE-CIV
(defrule
        (up-compare-goal gl-current-age >= gv-feudal-up)
        (unit-type-count-total modaobing-line > 12)
        (strategic-number sn-allow-resource-spending > 2)
        (building-type-count-total archery-range < 1)
        (can-build archery-range)
=>
        (build archery-range)
)
#end-if

很显然,这个rule应该把所有archery-range换成barrack:
n/archery-range
:s/archery-range/barrack/g
n:s/archery-range/barrack/g
n:s/archery-range/barrack/g



脚本发展成:

vim ./AI/Barbarian.per<<EOF
:%s/teutonic-knight/gongjveweidui/g
:%s/jaguar-warrior/war-elephant/g

:%s/chu-ko-nu/modaobing/g
gg/modaobing
yypn:s/modaobing/sakesunchangqiangbing/g
pn:s/modaobing/beiouchangfubing/g
pn:s/modaobing/buluozhanshi/g
pn:s/modaobing/silafuyongshi/g
pn:s/modaobing/toumaoqibing/g
pn:s/modaobing/liudima/g
pn:s/modaobing/lunbadenushou/g
pn:s/modaobing/yinduxiangshe/g
pn:s/modaobing/gaomianjianuzhanxiang/g
pn:s/modaobing/hualangsheshou/g
pn:s/modaobing/falankeqibing/g
pn:s/modaobing/sashanqibing/g
pn:s/modaobing/subiqibing/g
pn:s/modaobing/jinlangtuqi/g
pn:s/modaobing/xuanjiaqibing/g

/#load-if-defined CHINESE-CIV
/modaobing
/archery-range
:s/archery-range/barrack/g
n:s/archery-range/barrack/g
n:s/archery-range/barrack/g

/modaobing
/ri-fletching
:s/ri-fletching/forging/g
/ri-bodkin-arrow
:s/ri-bodkin-arrow/ri-iron-casting/g
/ri-bracer
:s/ri-bracer/ri-blast-furnace/g

/modaobing
/ri-fletching
:s/ri-fletching/forging/g
/ri-bodkin-arrow
:s/ri-bodkin-arrow/ri-iron-casting/g
/ri-bracer
:s/ri-bracer/ri-blast-furnace/g

/ri-fletching
:s/ri-fletching/forging/g
/ri-bodkin-arrow
:s/ri-bodkin-arrow/ri-iron-casting/g
/ri-bracer
:s/ri-bracer/ri-blast-furnace/g

/modaobing
/ri-chemistry
:s/ri-chemistry/1070/g
/ri-padded-archer-armor
:s/ri-padded-archer-armor/ri-scale-mail/g
/ri-leather-archer-armor
:s/ri-leather-archer-armor/ri-chain-mail/g
/ri-ring-archer-armor
:s/ri-ring-archer-armor/ri-plate-mail/g

/ri-chemistry
:s/ri-chemistry/1070/g
/ri-padded-archer-armor
:s/ri-padded-archer-armor/ri-scale-mail/g
/ri-leather-archer-armor
:s/ri-leather-archer-armor/ri-chain-mail/g
/ri-ring-archer-armor
:s/ri-ring-archer-armor/ri-plate-mail/g



/modaobing
/ri-ballistics
:s/ri-ballistics/ri-squires/g
/ri-thumb-ring
:s/ri-thumb-ring/ri-tracking/g

/ri-ballistics
:s/ri-ballistics/ri-squires/g
/ri-thumb-ring
:s/ri-thumb-ring/ri-tracking/g




:x
EOF



以下是除了诸葛弩之外的6个不用了的特种兵,马上除去还是最后统一除去待定。
conquistador
jaguar-warrior
janisarry
mangudai
teutonic-knight
woad-raider


打算这样搞:
:%s/teutonic-knight/gongjveweidui/g
:%s/jaguar-warrior/war-elephant/g

:s/conquistador/war-elephant/g
需要修改建筑:
:s/archery-range/stable

:s/mangudai/gaoyuanqibing/g
需要修改建筑
:s/archery-range/stable

:s/janisarry/kehanweidui/g
需要修改建筑
:s/barrack/stable

:s/woad-raider/war-elephant/g
需要修改建筑
:s/barrack/stable






以下四个新单位考虑到其特殊性,以后再安排位置。
gongchengta
yuntiche
yunbingmache
jiangjun





继续找modaobing
/modaobing
期待特色AOC!!!!!
回复

使用道具 举报

38

主题

0

精华

5066

积分

国王

耕战
933
鹰币
4
天龙币
0
回帖
249

三级嘉禾勋章

附庸关系0
 楼主| 发表于 2013-9-4 00:57:49 | 显示全部楼层
我要占10楼,都别跟我抢
期待特色AOC!!!!!
回复

使用道具 举报

38

主题

0

精华

5066

积分

国王

耕战
933
鹰币
4
天龙币
0
回帖
249

三级嘉禾勋章

附庸关系0
 楼主| 发表于 2013-9-4 01:02:05 | 显示全部楼层
tankant 发表于 2013-9-4 00:57
我要占10楼,都别跟我抢

我要占10楼,都别跟我抢
期待特色AOC!!!!!
回复

使用道具 举报

38

主题

0

精华

5066

积分

国王

耕战
933
鹰币
4
天龙币
0
回帖
249

三级嘉禾勋章

附庸关系0
 楼主| 发表于 2013-9-4 01:07:01 | 显示全部楼层
占楼等编辑
期待特色AOC!!!!!
回复

使用道具 举报

38

主题

0

精华

5066

积分

国王

耕战
933
鹰币
4
天龙币
0
回帖
249

三级嘉禾勋章

附庸关系0
 楼主| 发表于 2013-9-4 01:10:51 | 显示全部楼层
占楼待编辑
期待特色AOC!!!!!
回复

使用道具 举报

38

主题

0

精华

5066

积分

国王

耕战
933
鹰币
4
天龙币
0
回帖
249

三级嘉禾勋章

附庸关系0
 楼主| 发表于 2013-9-4 01:18:12 | 显示全部楼层
占楼待编辑
期待特色AOC!!!!!
回复

使用道具 举报

38

主题

0

精华

5066

积分

国王

耕战
933
鹰币
4
天龙币
0
回帖
249

三级嘉禾勋章

附庸关系0
 楼主| 发表于 2013-9-4 01:20:13 | 显示全部楼层
10楼占满,我去睡觉了。
期待特色AOC!!!!!
回复

使用道具 举报

59

主题

5

精华

3万

积分

征服者

耕战
6088
鹰币
30247
天龙币
0
回帖
1279

翔鹰建站十周年纪念章一级翔鹰勋章一级嘉禾勋章三级帝国勋章

附庸关系0
发表于 2013-9-4 17:48:54 | 显示全部楼层
强烈支持。火钳刘明。。
吃猪肉了
回复

使用道具 举报

12

主题

0

精华

1795

积分

侯爵

耕战
219
鹰币
18
天龙币
0
回帖
93

翔鹰建站十周年纪念章

附庸关系0
发表于 2013-9-6 18:56:02 本帖来自手机 | 显示全部楼层
开学才一个星期,就这么多事了
回复

使用道具 举报

132

主题

19

精华

13万

积分

教皇

耕战
24518
鹰币
362044
天龙币
0
回帖
1290

翔鹰建站十周年纪念章一级帝国勋章特级嘉禾勋章特级皇家勋章鹰之智者蛟龙勋章被遗忘的帝国引进功臣第八届雏鹰杯单人赛冠军神鱼勋章

附庸关系2
发表于 2013-9-22 23:06:52 | 显示全部楼层
tankant 发表于 2013-9-4 00:45
根据野猪填的单位id对照表,我整理出自己能够看懂的表。
经过抽样测试,锁定几个变量不能定义到新id上:
...

my-unique-unit
my-elite-unique-unit
my-unique-unit-line
只需要修改mod 的xml文件中的uniqueUnit eliteUniqueUnit uniqueUnitLine等就可以了。
会的不会不说,不会的不会乱说;用数据说话,用引文说话。
yty发布的资源、文章清单与索引
回复

使用道具 举报

38

主题

0

精华

5066

积分

国王

耕战
933
鹰币
4
天龙币
0
回帖
249

三级嘉禾勋章

附庸关系0
 楼主| 发表于 2013-10-31 22:28:10 | 显示全部楼层
yty 发表于 2013-9-22 23:06
my-unique-unit
my-elite-unique-unit
my-unique-unit-line

感谢,不过野猪没有采用UserPatch1.3来新增民族,我也绕开这定义新id的想法,只把同id兵种更换了。尽量避免使用my-unique-unit,my-elite-unique-unit,my-unique-unit-line。
期待特色AOC!!!!!
回复

使用道具 举报

本版积分规则

排行榜|小黑屋|翔鹰帝国

GMT+8, 2024-5-20 14:46 , Processed in 0.188432 second(s), 158 queries , File On.

Powered by Hawk Studio  QS Security Corp.® Licensed

Copyright © 2001-2023, Hawkaoe.net All Rights Reserved

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