如何实现亚洲文明重建奇观?
想实现亚洲文明重建奇观的功能,自己新建了一个奇观马车单位,并使得奇观马车可以建造所有帝王时代属性的奇观。但测试发现一个问题:只要建造过2次帝王时代属性的奇观(包括升帝王时代而建造的奇观),所有奇观选项全部变为灰色。
尝试新建一个科技重新启用奇观,但不能解决此问题,effect部分代码如下(尝试过了Absolute或Assign,都不行):
<effect type="Data" amount="1.00" subtype="Enable" relativity="Assign">
<target type="ProtoUnit">ypWCPorcelainTower5</target>
</effect>
我应该怎么写代码才能解决这个问题?
帝王时代开局,第二行的是上面提到的,重新启用奇观的科技:
建造任意两个帝王时代属性奇观后,变为灰色无法继续建造,即使没有达到建造限制:
除了日本奇观都可以https://www.aoebbs.net/thread-577-1-1.html圣典2-2也有详细例子:https://www.aoebbs.net/tutorial-2-2.html
复制原来的奇观,然后重命名,删除<UnitType>AbstractWonder</UnitType>与<UnitType>AbstractPoliticalWonder</UnitType>;添加<flag>ShowTactics</flag>
关于日本奇观:
找半天都找不到,原来在这里{:4_89:}
本帖最后由 狼雨歌 于 2024-4-15 21:21 编辑
こはね 发表于 2024-4-15 19:18
除了日本奇观都可以https://www.aoebbs.net/thread-577-1-1.html圣典2-2也有详细例子:https://www.aoebbs. ...
圣典2-2我是看过了的,当时没在意这个,因为当时我以为只要引用一下就可以了,没必要搞个新的代码,结果现在被打脸了{:4_89:}
仔细看了你给的解决方案以及链接,我很快想到一个方法,能通过科技的方式移除unitype实现重建奇观,并保留日本奇观的被动(已实践并证明这方法完全可行):
1、通过科技移除<UnitType>AbstractWonder</UnitType>、<UnitType>AbstractPoliticalWonder</UnitType>:
下面的代码摘自法国革命科技,将森林酷民转变为桑斯库洛特并移除村民相关标签的代码:
<effect type="Data" amount="0.00" subtype="SetUnitType" unittype="AbstractVillager" relativity="Assign">
<target type="ProtoUnit">Coureur</target>
</effect>
参照上面的例子可以这么写,其他奇观同理:
<effect type="Data" amount="0.00" subtype="SetUnitType" unittype="AbstractWonder" relativity="Assign">
<target type="ProtoUnit">ypWCPorcelainTower5</target>
</effect>
<effect type="Data" amount="0.00" subtype="SetUnitType" unittype="AbstractPoliticalWonder" relativity="Assign">
<target type="ProtoUnit">ypWCPorcelainTower5</target>
</effect>
2、通过科技移除unittype的话,这一条<flag>ShowTactics</flag>完全没必要了,依然正常显示按钮。
3、需要设置为帝王时代才能研究此科技,因为如你说的那样,移除了unittype后,无法升时代。
最后非常感谢大佬,如果没有大佬的指导和启发,我根本不会想到这样的解决方法。
补充内容 (2024-4-16 11:21):
订正一些错误,请参见楼下 以下内容均以“通过科技移除unittype”为前提:
1、<UnitType>AbstractWonder</UnitType>必须移除,这一条会阻碍重建奇观功能,但也会导致无法升时代,所以最好是帝王时代再移除此条。
<UnitType>AbstractPoliticalWonder</UnitType>无需移除,已单独测试,没有任何影响。
2、日本奇观的被动能力失效问题已找到,判定条件应该是相应奇观是否存活,并且相应奇观带有<UnitType>AbstractWonder</UnitType>,若两者都不能同时满足,不会改变被动能力的生效/失效状态。
测试部分:1)先建造幕府、鸟居、东照宫,被动能力生效,之后拆除,被动能力失效。
2)先建造幕府、鸟居、东照宫,被动能力生效,之后移除unittype,再拆除,被动能力仍然生效。
3)移除unittype,之后建造幕府、鸟居、东照宫,被动能力均不生效。
不止日本,中国的白塔也是这个问题,好在这个影响并不大,并且按照2)的方法就可以留下白塔的被动能力了(想要帝王属性的被动能力就只能在升帝王时代时建造)。
日本奇观的被动能力不和时代挂钩,所以帝王时代前把这三都造出来,在被摧毁/拆除前移除unittype就可以全部留下了。
印度的老鼠神庙是类似非洲谷仓的机制,所以不存在此问题。
3、以上,若有错误请指出。 建造完成建筑后立刻用0秒科技把生命值改成0,再用DeadReplacement生成奇观测试,实测不行,就连编辑器直接放置东照宫也没有任何变化tutorial_folder/video/RebuildToshoguShrine//ypWJToshoguShrine.mp4
又搞了几次测试如下:
进入时代似乎会绑定当前奇观,目前不明是直接绑定还是判断xxx是否存在,我觉得像是直接绑定,然后当调用名相同的奇观被摧毁时,会减一次加成,也就是我上面说到的神社又被扣了一次加成变成0.07,再继续摧毁则变成0;
测试过程:
①时代5东照宫升级-->神社+0.07
②编辑器放置时代5东照宫或deadreplacement-->神社不变
③科技变回时代1
④时代2东照宫升级神社+0.07
⑤编辑器放置时代2东照宫或deadreplacement-->神社不变
⑥删除正常建造的东照宫-->神社-0.07
⑦删除非正常建造的东照宫-->神社-0.07
⑧再删除一次-->神社-0.07,收集速率变0
改良YPWonderJapaneseToshoguShrineX(x=2~5)任意一个即可激活一次加成,但加成不会叠加
激活对应科技后对应调用名将会被检测(首先先检测是否有AbstractWonder存在,然后判断被摧毁的单位是否为对应奇观);当对应的奇观被摧毁后,减去加成,摧毁多少个就减多少次,持续到游戏结束
tutorial_folder/video/RebuildToshoguShrine//ToshoguShrine_test1.mp4
看上面的视频直接用active科技是可以获得加成的,但是摧毁后再次active无法再次获得加成,下面的视频已证实;如果同时激活两个例YPWonderJapaneseToshoguShrine2,YPWonderJapaneseToshoguShrine5,后面两个奇观ypWJToshoguShrine3与ypWJToshoguShrine5被摧毁,再次激活科技也可能无法再次获得加成tutorial_folder/video/RebuildToshoguShrine//ToshoguShrine_test2.mp4
如果要重复获得加成,流程必须是激活YPWonderJapaneseToshoguShrine5(x=2~5,设x=5),然后ypWJToshoguShrine5被摧毁,激活YPWonderJapaneseToshoguShrine5-->ypWJToshoguShrine5被摧毁-->激活YPWonderJapaneseToshoguShrine5-->ypWJToshoguShrine5被摧毁...;如果流程错了的话,可能会导致无法再次获得加成;1:52开始加成失效,初步判断是连续改良两个"HP->0"的问题
tutorial_folder/video/RebuildToshoguShrine//ToshoguShrine_test3.mp4
视频4从4:23开始加成失效,确定为连续改良两个"HP->0"的问题
tutorial_folder/video/RebuildToshoguShrine//ToshoguShrine_test4.mp4
以下是我用到的科技techtreey.xml
<!--HP=>0-->
<Tech name="test203" type="Normal">
<displaynameid>999701</displaynameid>
<DBID>5290</DBID>
<ResearchPoints>1.0000</ResearchPoints>
<Status>OBTAINABLE</Status>
<Icon>ui\units\ironclad_icon</Icon>
<Flag>CheckLandHCGatherPoint</Flag>
<Flag>CountsTowardMilitaryScore</Flag>
<Flag>YPNeverObtainableAfterUse</Flag>
<Flag>YPCheckPopCap</Flag>
<Flag>Shadow</Flag>
<Flag>YPNoTextMessage</Flag>
<Effects>
<Effect type ='Data' amount ='0.00' subtype ='Hitpoints' relativity ='Assign'>
<Target type ='ProtoUnit'>ypWJToriiGates1</Target></Effect>
<Effect type ='Data' amount ='0.00' subtype ='BuildPoints' relativity ='Assign'>
<Target type ='ProtoUnit'>ypWJToshoguShrine5</Target></Effect>
<Effect type ='TextOutput'>999701</Effect>
<Effect type ='SetAge'>Age4</Effect>
<Effect type ='Data' amount ='7.00' subtype ='FreeHomeCityUnit' unittype ='Grenadier' relativity ='Absolute'>
<Target type ='Player'></Target></Effect>
<Effect type ='TechStatus' status ='unobtainable'>YPWonderJapaneseToshoguShrine5</Effect>
<Effect type ='TechStatus' status ='obtainable'>YPWonderJapaneseToshoguShrine5</Effect>
<Effect type ='TechStatus' status ='active'>YPWonderJapaneseToshoguShrine5</Effect>
</Effects>
</Tech>
<!--HP=>1000-->
<Tech name="test204" type="Normal">
<displaynameid>999702</displaynameid>
<DBID>5290</DBID>
<ResearchPoints>1.0000</ResearchPoints>
<Status>OBTAINABLE</Status>
<Icon>ui\units\ironclad_icon</Icon>
<Effects>
<Effect type ='Data' amount ='1000.00' subtype ='Hitpoints' relativity ='Assign'>
<Target type ='ProtoUnit'>ypWJToriiGates1</Target></Effect>
<Effect type ='Data' amount ='1000.00' subtype ='Hitpoints' relativity ='Assign'>
<Target type ='ProtoUnit'>ypWJToriiGates1</Target></Effect>
<Effect type="SetAge">Age0</Effect>
<Effect type ='TextOutput'>999702</Effect>
</Effects>
</Tech>
<!--active4-->
<Tech name="test304" type="Normal">
<displaynameid>999304</displaynameid>
<DBID>5290</DBID>
<ResearchPoints>1.0000</ResearchPoints>
<Status>OBTAINABLE</Status>
<Icon>ui\units\ironclad_icon</Icon>
<Flag>CheckLandHCGatherPoint</Flag>
<Flag>CountsTowardMilitaryScore</Flag>
<Flag>YPNeverObtainableAfterUse</Flag>
<Flag>YPCheckPopCap</Flag>
<Flag>Shadow</Flag>
<Flag>YPNoTextMessage</Flag>
<Effects>
<Effect type ='TechStatus' status ='unobtainable'>YPWonderJapaneseToshoguShrine4</Effect>
<Effect type ='TechStatus' status ='obtainable'>YPWonderJapaneseToshoguShrine4</Effect>
<Effect type ='TechStatus' status ='active'>YPWonderJapaneseToshoguShrine4</Effect>
<Effect type ='TextOutput'>999304</Effect>
</Effects>
</Tech>
<!--active3-->
<Tech name="test303" type="Normal">
<displaynameid>999303</displaynameid>
<DBID>5290</DBID>
<ResearchPoints>1.0000</ResearchPoints>
<Status>OBTAINABLE</Status>
<Icon>ui\units\ironclad_icon</Icon>
<Flag>CheckLandHCGatherPoint</Flag>
<Flag>CountsTowardMilitaryScore</Flag>
<Flag>YPNeverObtainableAfterUse</Flag>
<Flag>YPCheckPopCap</Flag>
<Flag>Shadow</Flag>
<Flag>YPNoTextMessage</Flag>
<Effects>
<Effect type ='TechStatus' status ='unobtainable'>YPWonderJapaneseToshoguShrine3</Effect>
<Effect type ='TechStatus' status ='obtainable'>YPWonderJapaneseToshoguShrine3</Effect>
<Effect type ='TechStatus' status ='active'>YPWonderJapaneseToshoguShrine3</Effect>
<Effect type ='TextOutput'>999303</Effect>
</Effects>
</Tech>
<!--active2-->
<Tech name="test302" type="Normal">
<displaynameid>999302</displaynameid>
<DBID>5290</DBID>
<ResearchPoints>1.0000</ResearchPoints>
<Status>OBTAINABLE</Status>
<Icon>ui\units\ironclad_icon</Icon>
<Flag>CheckLandHCGatherPoint</Flag>
<Flag>CountsTowardMilitaryScore</Flag>
<Flag>YPNeverObtainableAfterUse</Flag>
<Flag>YPCheckPopCap</Flag>
<Flag>Shadow</Flag>
<Flag>YPNoTextMessage</Flag>
<Effects>
<Effect type ='TechStatus' status ='unobtainable'>YPWonderJapaneseToshoguShrine2</Effect>
<Effect type ='TechStatus' status ='obtainable'>YPWonderJapaneseToshoguShrine2</Effect>
<Effect type ='TechStatus' status ='active'>YPWonderJapaneseToshoguShrine2</Effect>
<Effect type ='TextOutput'>999302</Effect>
</Effects>
</Tech>
<!--active5-->
<Tech name="test305" type="Normal">
<displaynameid>999305</displaynameid>
<DBID>5290</DBID>
<ResearchPoints>1.0000</ResearchPoints>
<Status>OBTAINABLE</Status>
<Icon>ui\units\ironclad_icon</Icon>
<Flag>CheckLandHCGatherPoint</Flag>
<Flag>CountsTowardMilitaryScore</Flag>
<Flag>YPNeverObtainableAfterUse</Flag>
<Flag>YPCheckPopCap</Flag>
<Flag>Shadow</Flag>
<Flag>YPNoTextMessage</Flag>
<Effects>
<Effect type ='TechStatus' status ='unobtainable'>YPWonderJapaneseToshoguShrine5</Effect>
<Effect type ='TechStatus' status ='obtainable'>YPWonderJapaneseToshoguShrine5</Effect>
<Effect type ='TechStatus' status ='active'>YPWonderJapaneseToshoguShrine5</Effect>
<Effect type ='TextOutput'>999305</Effect>
</Effects>
</Tech>
<!--unobtainable4-->
<Tech name="test404" type="Normal">
<displaynameid>999404</displaynameid>
<DBID>5290</DBID>
<ResearchPoints>1.0000</ResearchPoints>
<Status>OBTAINABLE</Status>
<Icon>ui\units\ironclad_icon</Icon>
<Flag>CheckLandHCGatherPoint</Flag>
<Flag>CountsTowardMilitaryScore</Flag>
<Flag>YPNeverObtainableAfterUse</Flag>
<Flag>YPCheckPopCap</Flag>
<Flag>Shadow</Flag>
<Flag>YPNoTextMessage</Flag>
<Effects>
<Effect type ='TechStatus' status ='unobtainable'>YPWonderJapaneseToshoguShrine4</Effect>
<Effect type ='TextOutput'>999404</Effect>
</Effects>
</Tech>
<!--unobtainable5-->
<Tech name="test405" type="Normal">
<displaynameid>999405</displaynameid>
<DBID>5290</DBID>
<ResearchPoints>1.0000</ResearchPoints>
<Status>OBTAINABLE</Status>
<Icon>ui\units\ironclad_icon</Icon>
<Flag>CheckLandHCGatherPoint</Flag>
<Flag>CountsTowardMilitaryScore</Flag>
<Flag>YPNeverObtainableAfterUse</Flag>
<Flag>YPCheckPopCap</Flag>
<Flag>Shadow</Flag>
<Flag>YPNoTextMessage</Flag>
<Effects>
<Effect type ='TechStatus' status ='unobtainable'>YPWonderJapaneseToshoguShrine5</Effect>
<Effect type ='TextOutput'>999405</Effect>
</Effects>
</Tech>
<!--unobtainable3-->
<Tech name="test403" type="Normal">
<displaynameid>999403</displaynameid>
<DBID>5290</DBID>
<ResearchPoints>1.0000</ResearchPoints>
<Status>OBTAINABLE</Status>
<Icon>ui\units\ironclad_icon</Icon>
<Flag>CheckLandHCGatherPoint</Flag>
<Flag>CountsTowardMilitaryScore</Flag>
<Flag>YPNeverObtainableAfterUse</Flag>
<Flag>YPCheckPopCap</Flag>
<Flag>Shadow</Flag>
<Flag>YPNoTextMessage</Flag>
<Effects>
<Effect type ='TechStatus' status ='unobtainable'>YPWonderJapaneseToshoguShrine3</Effect>
<Effect type ='TextOutput'>999403</Effect>
</Effects>
</Tech>
<!--unobtainable2-->
<Tech name="test402" type="Normal">
<displaynameid>999402</displaynameid>
<DBID>5290</DBID>
<ResearchPoints>1.0000</ResearchPoints>
<Status>OBTAINABLE</Status>
<Icon>ui\units\ironclad_icon</Icon>
<Flag>CheckLandHCGatherPoint</Flag>
<Flag>CountsTowardMilitaryScore</Flag>
<Flag>YPNeverObtainableAfterUse</Flag>
<Flag>YPCheckPopCap</Flag>
<Flag>Shadow</Flag>
<Flag>YPNoTextMessage</Flag>
<Effects>
<Effect type ='TechStatus' status ='unobtainable'>YPWonderJapaneseToshoguShrine2</Effect>
<Effect type ='TextOutput'>999402</Effect>
</Effects>
</Tech>stringtabley.xml
<String _locID="999302">active2</String>
<String _locID="999303">active3</String>
<String _locID="999304">active4</String>
<String _locID="999305">active5</String>
<String _locID="999402">unobtainable2</String>
<String _locID="999403">unobtainable3</String>
<String _locID="999404">unobtainable4</String>
<String _locID="999405">unobtainable5</String>
<String _locID="999997">Test046 Active</String>
<String _locID="999998">Test045 Active</String>
<!--因为帖内多次编辑会导致转义字符&_g_t;变成>,所以用CDATA-->
<String _locID="999701"><!]>0</String>
<String _locID="999702"><!]></String>
奇观复建大工程复杂流程(因为神话时代判断式的原因,决定版是否可行未知,别说决定版了,旧版是否可行也未知):
首先强调,要对每个时代每个升级做不同的处理;假设时代5奇观东照宫为例子,那么就给在YPWonderJapaneseToshoguShrine5处给他启用一个科技A
techtreey.xml
科技A设定0秒科技,条件利用神话时代判断式,判断ypWJToshoguShrine5存活数量是否<1;效果设定先禁用科技B再启用科技B,启用新建筑ypWJToshoguShrine51(随便命名吧,有多少个奇观你就要搞多少个。能不能用foreach+for循环循环?{:7_238:})
科技B默认状态为禁用↓
科技B同样设定0秒科技,条件利用神话时代判断式ypWJToshoguShrine51存活数量是否>0;效果将ypWJToshoguShrine51的生命值改成0,禁用科技A,ypWJToshoguShrine5的建造时间改成0,直接激活YPWonderJapaneseToshoguShrine5
protoy.xml
ypWJToshoguShrine51设定死亡后变成ypWJToshoguShrine5;把ypWJToshoguShrine51的死亡动画改成idle;DeadReplacement有时候可能会失效,可能是DeadReplacementLifespan设定0的问题?
<DeadReplacement>ypWJToshoguShrine5</DeadReplacement>
<DeadReplacement>1</DeadReplacementLifespan>
以上构成无限循环
假设决定版可用神话时代判断式
TypeCountAoM leftover. Checks whether or not the total count of units of the given type in the given state(s) for the player matches the expected condition.In Legacy AoE3, as prerequisite status updates are only triggered either when a technology is researched or the player total popcap is changed, TypeCount prerequisites can only work properly over buildings or units that change the player’s total popcap.In AoE3DE, from the Mexican Civilization release onwards, units and buildings can be assigned theForceFullTechUpdate protoUnitFlag, so they can trigger prereq updates once built/created and once destroyed/killed, and thus be properly accounted for this particular prerequisite type.unitUnit Type to be checked.<TypeCount unit='TownCenter' count='1' operator='gte' state='aliveState' />
countExpected unit count
operatorOperator to be used for condition checking.
stateExpected unit KB state (aliveState, deadState, buildingState, anyState, noneState). States can be combined, when separated by space or comma. If not set,defaults to anyState, in AoM and Legacy AoE3, or to noneState, in AoE3DE.
那就不需要新单位了,只需要两个0秒科技:科技A默认状态为禁用科技A检测ypWJToshoguShrine5是否大于1,禁用科技B再启用科技B,ypWJToshoguShrine5增加<UnitType>AbstractWonder</UnitType>,直接激活YPWonderJapaneseToshoguShrine5
科技B检测ypWJToshoguShrine5是否小于1,禁用科技A再启用科技A;ypWJToshoguShrine5移除<UnitType>AbstractWonder</UnitType>
大概可以构成无限循环
我开新帖了:https://www.aoebbs.net/thread-1858-1-1.html
页:
[1]