- UID
- 296861
- 阅读权限
- 255
- 注册时间
- 2017-6-12
- 最后登录
- 2021-5-28
- 在线时间
- 910 小时
- 性别
- 男
教皇
- 耕战
- 3329
- 鹰币
- 16939
- 天龙币
- 0
- 回帖
- 1200
|
鄙人认为,在不久的将来,利用字符串表mod来替换掉游戏自带的文本的战役会越来越多。事实上cxt的DE战役《火杯守护者》等战役已经大规模使用了替换的文本,实现了更多效果!比如对改过名的英雄使用自定义科技,修改各种单位的训练说明、科技的研发说明等。
对于战役汉化者而言,你可以联系原作者,利用字符串表mod来提供多语种支持,直接整合到原作者的战役模组里。
但是这会带来一个致命的问题——
由于字符串表mod必须通过重启游戏、开一局标准游戏或者测试一次场景才能真正生效,所以心急不看提示的玩家可能会直接进入战役开玩,结果所有文本都是游戏原版的,根本没法玩下去(鄙人在第一次玩《火杯守护者》时就遇到这种问题)
现在这个致命问题已经可以解决,请诸位认真看看下面的方法:
1、创建一对AI文件
(1)新建2个文本文档
(2)其中一个拓展名改为.ai,另一个改为.per(如何修改文件拓展名请自行百度)
(3)两个文件必须同名
(4)放到你的游戏根目录ai文件夹里↓
C:\Program Files\Steam\steamapps\common\AoE2DE\resources\_common\ai
└AItest-new.ai
└AItest-new.per
|
|
2、做一套字符串表mod(按照上面的整合教程)
我这里先假设你的字符串表mod里的内容是:
zh(简体中文):
en(英文):
29001 "Zhangfei"
29002 "ZhaoYun"
|
|
3、在.per文件中写入以下代码,然后另存为文件,选择UTF-8编码。
保存文件示意图:
;///////////////////////////////////////////////////////////
;// 检测字符串表mod是否成功载入 //
;///////////////////////////////////////////////////////////
;=====常数定义=====
;给modded-text-X的中文、英文分别指定内容。稍后用于判断字符串内容是否与它们相符合。
(defconst modded-text-1-zh "张飞")
(defconst modded-text-1-en "ZhangFei")
(defconst modded-text-2-zh "赵云")
(defconst modded-text-2-en "ZhaoYun")
;变量目标(ID=100)。记录有多少条字符串是正确的。(特别注意,这个#100别和其他目标的ID冲突了~)
(defconst corrects 100)
;=====初始化(先把计数归零)=====
(defrule
(true)
=>
(set-goal corrects 0)
(disable-self)
)
;===========检验字符串#29001是否正确===========
(defrule
(true)
=>
;把字符串内容存到缓冲区。如果玩家用英文,会存英文内容;中文则会存中文内容。
(up-store-text c: 29001)
(disable-self)
)
(defrule
;判断缓冲区里,有没有“张飞”或“ZhangFei”。二者中有一个即可。
(or (up-compare-text c: modded-text-1-zh c:>= 0)
(up-compare-text c: modded-text-1-en c:>= 0))
=>
;字符串正确,那么计数+1
(up-modify-goal corrects c:+ 1)
(disable-self)
)
;===========检验字符串#29002是否正确===========
(defrule
(true)
=>
;把字符串内容存到缓冲区
(up-store-text c: 29002)
(disable-self)
)
(defrule
;判断缓冲区里,有没有“赵云”或“ZhaoYun”。二者中有一个即可。
(or (up-compare-text c: modded-text-2-zh c:>= 0)
(up-compare-text c: modded-text-2-en c:>= 0))
=>
;内容符合,那么计数+1
(up-modify-goal corrects c:+ 1)
(disable-self)
)
;===========检验字符串#29003是否正确(以此类推)===========
;===========检验字符串#29004是否正确(以此类推)===========
;===========最终判断:是否所有字符串都正确===========
(defrule
;如果字符串正确的数量达到2个……
(up-compare-goal corrects c:== 2)
=>
;发送AI信号#1。用于告知触发系统。
(set-signal 1)
;注:如果不希望AI说这句话,可以用分号将其转为注释。
(chat-to-all "字符串表mod已成功载入!")
(chat-to-all "String Table mod successfully imported!")
(disable-self)
)
(defrule
;如果正确数量为0……则不发送AI信号。
(up-compare-goal corrects c:== 0)
=>
(chat-to-all "字符串表mod未载入, 请回到战役选关界面查看说明!")
(chat-to-all "String Table mod hasn't imported, please return to scenario selection screen to check the tips!")
(disable-self)
)
(defrule
;如果正确数量为0~2……则不发送AI信号。
(up-compare-goal corrects c:> 0)
(up-compare-goal corrects c:< 2)
=>
(chat-to-all "字符串表mod与其他mod冲突了, 请将本战役mod置于最高优先级!")
(chat-to-all "String Table mod conflicts with other mods, please give this campaign mod top priority!")
(disable-self)
)
|
|
如果你想多核对几条字符串,可以自行拓展。
如果你的AI里已经用过了100号目标(goal),那请务必更换其他目标编号,以免造成冲突。
4、有些人的记事本编辑出来的AI文件,测试时反而会出问题(原因及解决方法见这个贴)
5、在编辑器里写下触发:
触发0 || 初始开启 不循环
条件0 || 收到AI信号 AI信号1
效果0 || 显示指南 “触发收到AI信号0,字符串mod已成功载入,请开始游戏吧!”
效果1 || 关闭触发器 触发1
效果2 || (其他你想要的效果,比如允许玩家继续游戏)
触发1 || 初始开启 不循环
条件0 || 收到AI信号 [反向条件] AI信号1
效果0 || 显示指南 “检测到字符串mod没有成功载入。请:1、将本战役的模组优先级提到最高,2、开任意一局标准游戏,3、重新进入本战役。”
效果1 || 关闭触发器 触发0
效果2 || (其他你想要的效果,比如禁止玩家继续游戏)
|
|
6、在编辑器里,给任意一个电脑玩家设置上面写好的AI
(若列表里未出现那个ai,测试一下再返回编辑器即可)
7、测试:三种效果如下:
成功载入:
未载入:
载入成功一部分,另一部分被其他字符串表mod占用:
|
|