收起左侧

[求助] 关于帝国时代3决定版地图编辑器触发器的问题

[复制链接]
ocean2age发表于 2024-12-3 20:06:15
朋友们,帝国3决定版的历史地图挺好玩的,我试了试地图编辑但是编辑好剧情条件己方获胜方式及敌人获胜条件测试时发现不起作用即使敌人完全被消灭也不获胜不结束游戏啊!(条件敌方All buildings dead,效果是bill教的you win)
如何像小规模战争里一样让AI会投降么?
还有怎么像历史地图一样在建筑里添加可建造的单位?
希望朋友能提供图文或视频教程,谢谢!
我还发现个问题就是在地图编辑器编辑的地图不能使用战役及小规模战争模式主城建立的卡牌组只能用默认的且无法再地图编辑器里建立新的卡片!
可能是我玩的是Steam上的帝国3决定版它的主城等级卡牌组保存文件存放地址,和其它的平台的帝国3决定版文件位置不一样。
こはね发表于 2024-12-3 23:38:20
1.All buildings dead包括了敌方所有建筑物,漏一个也不会获胜
2.理论上没办法让AI投降
3.在建筑里添加可建造的单位应该是使用了科技
4.“地图编辑器编辑的地图不能使用战役及小规模战争模式主城建立的卡牌组只能用默认的且无法再地图编辑器里建立新的卡片”前面是祖传bug,建立好的卡组要联机才会看见,后面是决定版独有bug,只能建立一次卡组。
单机不能使用自建卡组可参考https://www.aoebbs.net/thread-1902-1-1.html
1.首先找到自己之前玩时各个国家的主城文件夹。我的保存在C:\Users\Administrator\Games\Age of Empires 3 DE\76561198090411671\Savegame 这里,应该大多数电脑差不多吧,可能那串数字有区别。
2. 以法国为例子,homecityfrench.xml(这个是自制地图法国巴黎的主城文件,中国就是.homecitychinese..这个主城只有1级。卡片为官方推荐,自制地图就读取的这个文件,可以直接修改,网上有方法,但我觉得麻烦,没试这个方法)
3. 在下面找到 sp_French_homecity.xml(这个是之前玩官方地图的主城文件,主城等级卡片什么的与steam一致,每次登陆会与steam同步的,玩官方地图就读取的此文件)
4.将sp_French_homecity.xml 复制到E:\steam\steamapps\common\AoE3DE\Game\Campaign(steam帝国3安装目录)再重命名为 homecityfrench.xml
5.在自制地图里选择 场景-玩家数据-设置主城 选择刚刚的 homecityfrench.xml


或者参考https://www.aoebbs.net/thread-692-1-1.html
辑器里没法编辑剧情里的家乡城市卡牌是帝国时代3的固有bug,不是你操作的问题,唯一的解决方法是修改对应的data里的homecity文件,从而达到修改默认卡牌组的目的。
以中国舰队为例。如果你想在剧情里使用这个文明,你只能修改homecitySPC_CC.xml文件。想让你想要的卡牌进入默认卡牌组,获取对应卡牌的调用名后(调用名可以先从stringtabley.xml通过显示的中文字查询其stringID,再通过该ID在techtreey.xml里获取),将其调用名添加到homecitySPC_CC.xml里的cards、decks、obtainabletechs、activetechs里(如果原来的homecitySPC_CC.xml的cards、decks、obtainabletechs、activetechs里没有该卡牌的话就这么添加。如果某一项里有就不用重复添加)。注意,同一个科技需要分别在cards、decks、obtainabletechs、activetechs里录入四遍才行
这样修改默认卡牌组后。每一次载入剧情就会看到你想要的卡牌组。


  • ocean2age : 太感谢了!我在百度贴吧,游侠论坛帝国3决定版和帝国时代专区,3DM论坛帝国3决定版专区没人理我估计是没人会弄。
こはね发表于 2024-12-3 23:44:52
第一个胜利的我可以提供图文,但现在没时间,明天再搞,其他的自行研究
  • ocean2age : 制定触发器,比如胜利条件是否勾选立即执行?
ocean2age发表于 2024-12-4 11:37:29
诶,要是有详细的帝国时代3决定版地图编辑器触发器详细教学视频或图文就好了!
触发的条件和效果有好多不起作用,如set player defeated or player defeated无效且玩家列表也不现实出局。
bill上的教学视频不详细,切有误。
こはね发表于 2024-12-4 20:32:38
说句实话,我完全不想用这决定版搞测试,3060显卡光是一句循环输出就可以搞到卡个1分钟又或者无响应
for(i=1;<15){trChatSendSpoofed(0,i+":"+kbIsPlayerValid(i));}

屏幕截图 2024-12-04 202920.jpg

亚洲王朝无论怎样输出都没问题,我甚至还试过16分钟输出48万次
屏幕截图 2024-12-04 204426.png

暂时记录一下数据:
rule _Debug70 minInterval 2 active runImmediately {
if((trTime()-cActivationTime) >= 1.00000000){
xsSetContextPlayer(1);
for(i=1;<=8){trChatSendSpoofed(0,"kbIsPlayerValid"+i+":"+kbIsPlayerValid(i));}
for(i=1;<=8){trChatSendSpoofed(0,"kbIsPlayerEnemy"+i+":"+kbIsPlayerEnemy(i));}
for(i=1;<=8){trChatSendSpoofed(0,"kbIsPlayerAlly"+i+":"+kbIsPlayerAlly(i));}
for(i=1;<=8){trChatSendSpoofed(0,"kbIsPlayerHuman"+i+":"+kbIsPlayerHuman(i));}
for(i=1;<=8){trChatSendSpoofed(0,"kbIsPlayerNeutral"+i+":"+kbIsPlayerNeutral(i));}
for(i=1;<=8){trChatSendSpoofed(0,"kbIsPlayerResigned"+i+":"+kbIsPlayerResigned(i));}
xsDisableSelf();
}}

kbIsPlayerValid若当前玩家存在返回1,不存在返回0
kbIsPlayerEnemy若当前对象玩家是敌人返回1,否则返回0;(需要用xsSetContextPlayer指定相对于哪个玩家)
kbIsPlayerAlly若当前对象玩家是盟友返回1,否则返回0;(需要用xsSetContextPlayer指定相对于哪个玩家)
kbIsPlayerResigned若当前对象玩家不存在或者已出局,返回1,否则返回0

无语,我彻底服了
注入式地图触发中while循环不能添加任何判断式,否则无法解析

aoebbs("rule _Debug70 minInterval 2 active runImmediately {");
aoebbs("if((trTime()-cActivationTime) >= 1.00000000){");
aoebbs("bool whilebool = true;");
aoebbs("int PlayerCount = 1;");
aoebbs("while(whilebool)");
aoebbs("{");
aoebbs("if(kbIsPlayerValid(PlayerCount))");
aoebbs("{");
aoebbs("PlayerCount = PlayerCount + 1;");
aoebbs("}");
aoebbs("else");
aoebbs("{");
aoebbs("whilebool = false;");
aoebbs("}");
aoebbs("}");

aoebbs("PlayerCount = PlayerCount - 1;");
aoebbs("trChatSendSpoofed(0,\"PlayerCount:\"+PlayerCount);");

aoebbs("for(PlayerID=1;<=PlayerCount)");
aoebbs("{");
aoebbs("xsSetContextPlayer(PlayerID);");
//aoebbs("for(EnemyAlive=0;<0){}");
aoebbs("static int EnemyAlive=0;");
aoebbs("for(i=1;<=PlayerCount)");
aoebbs("{");
aoebbs("if(kbIsPlayerEnemy(i)) ");
aoebbs("{");
aoebbs("if(trPlayerActive(i))");
aoebbs("{");
aoebbs("EnemyAlive = 1;");
aoebbs("}");
aoebbs("}");
aoebbs("}");

aoebbs("if(EnemyAlive == 0)");
aoebbs("{");
aoebbs("if(trCurrentPlayer() == PlayerID && trPlayerActive(PlayerID))");
aoebbs("{");
aoebbs("trYouWin(true);");
aoebbs("}");
aoebbs("}");
aoebbs("}");

  • ocean2age : 啊?这是做啥呢看不懂。
  • こはね 回复 ocean2age : 简单来说就是制作一个给所有玩家自动判断胜利的触发程序,该触发程序属于傻瓜式触发,无需手动设定参数;但是帝国3编译器的while循环有bug,害我测试了很久才搞好开头,你过几天再来吧
  • ocean2age 回复 こはね : 好吧,辛苦了!
  • ocean2age : 这个是用于你发的高级编辑器上的吧?
こはね发表于 2024-12-7 00:45:44
newtrigger[aoebbs.net_kohane].rar安装方法:将压缩包内文件夹整体拷贝至C:\Users\用户名\Games\Age of Empires 3 DE\一串数字(你的steamID,例如76561198212726208)\mods\local
屏幕截图 2024-12-07 003957.png

然后游戏内激活MOD(默认已激活,但优先级建议设最高)

触发程序效果那里找到*Advanced Standard Win
屏幕截图 2024-12-07 004201.jpg

然后把作用中以及循环打勾即可
屏幕截图 2024-12-07 004336.jpg
  • ocean2age : 哦,谢谢!
ocean2age发表于 2024-12-11 09:36:55
再麻烦请教一下各位,那个宝藏是在建筑里边儿还是单位里边儿?
还有如何能向历史地图一样,在交易站里添加可建造的单位?
如何添加单位技能?
  • こはね : 这些就在我知识范围之外了,感觉像是激活了techtreey的科技,而不是能随意添加上去的。这里提一个建议,你可以把历史地图的文件复制到剧情文件夹里面,然后就可以参考里面的触发程序了
  • ocean2age 回复 こはね : 好吧
跳转到