请选择 进入手机版 | 继续访问电脑版
收起左侧

无限循环科技复刻奇观的特殊技能

[复制链接]
こはね发表于 2024-4-20 21:31:11
首先了解一下部分奇观的被动技能不是技能,而是科技,当奇观被摧毁时会回滚这个科技,去掉已获得的科技加成,具体参考可这个帖:如何实现亚洲文明重建奇观?https://www.aoebbs.net/thread-1856-1-1.html;最好还是去了解一下吧,为了能重复建造奇观,我搞了很多测试。



以东照宫为例子,至于为什么选东照宫,不用幕府、鸟居等奇观,是因为神社可以直接看出变化。
东照宫的技能:神社收集效率+50%;
复刻东照宫技能的难点:因为东照宫的技能不是技能,而是科技,并且还写在硬代码里面,除非反编译否则不可更改。
我们如何在建造东照宫的时候,激活一次科技?用0秒科技?把0秒科技放到新东照宫里面,然后进入游戏测试,开局自动改良,可以排除单纯的0秒科技。0秒科技都失败了,那接下来怎么办?我在0秒科技的基础上加上一个神话时代判段式,<typecount unit="GiantBuddha" count="1.00" state="noneState aliveState buildingState" operator="gte"/>,当GiantBuddha(东照宫的Unittype)大于等于1时,条件成立;在游戏实测建造完东照宫后,0秒科技自动改良,成功了一步。


接下来就是让这个0秒科技可以能重复改良,这又是一个难点。我已经测试过0秒科技自动改良后,关闭再重新开启,不会再次自动改良,所以要排除0秒科技。那么剩下的方法就只有创建十个、百个0秒科技了,1激活2,2激活3...这种绝对可以,但是因为数量过多考虑用需要其他方法。这时候就要用上<Flag>Volatile</Flag>了,这个flag是构成循环科技的重点,<Flag>Volatile</Flag>作用是满足条件就会自动改良,即使你不启用这个科技,但满足所有条件后就会自动改良。假如我们已经自动改良带有<Flag>Volatile</Flag>的科技,如果把这个科技调回未启用状态,那么这个科技在满足条件后又会改良一次。比如以下这个科技,所有玩家都会直到游戏结束前都会无限次改良该科技。这个科技正好可以利用来解除typecount的BUG(需要建造一个带有人口的的单位或者研究一个科技才会刷新条件)
	<Tech name="LoopTech" type="Normal">
<DBID>5290</DBID>
<ResearchPoints>0.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Flag>Volatile</Flag>
<Flag>YPInfiniteTech</Flag>
<Effects>
<Effect type ='TechStatus' status ='unobtainable'>LoopTech</Effect>
</Effects>
</Tech>

解决完重复改良科技后,那么接下来就是如何让奇观在被摧毁后扣掉已获得的加成?根据https://www.aoebbs.net/thread-1856-1-1.html此帖的资料,已知只要激活了相应的奇楼观升级科技后,只要对应调用名的奇观被摧毁那么就会无限次扣掉加成,我们可以利用这个特性,去建造同调用名奇观,具体方法可以看https://www.aoebbs.net/thread-1856-1-1.html的8楼,这里不再赘述。因为有多少个奇观就要搞多少次,还是需要抛弃用原有奇观的方法的。既然都可以用科技判断单位数量了,那我整个判断存活数量少于等于1不就可以了?<typecount unit="GiantBuddha" count="1.00" state="noneState aliveState deadState" operator="gte"/>

当升级时代的东照宫被摧毁后扣掉一次加成,而我判断东照宫的数量是用GiantBuddha(东照宫的unittype),如何让升级时代的东照宫在摧毁时不被扣掉一次加成又是一个问题。


最后就是把科技关联在一起了,重复一遍<Flag>Volatile</Flag>作用是满足条件就会自动改良,即使你不启用这个科技,但满足所有条件后就会自动改良。假如我们已经自动改良带有<Flag>Volatile</Flag>的科技,如果把这个科技调回未启用状态,那么这个科技在满足条件后又会改良一次。利用这个特性把增加加成与减少加成的科技联合起来。




整个流程是东照宫升级时代==>升级时代的东照宫被摧毁==>开启新东照宫的建造[CheckWJToshoguShrine2]==>新东照宫数量大于等于1[CheckWJToshoguShrine1]+增加加成[ypGiantBuddhaShrineBonus]==>新东照宫被摧毁==>东照宫数量小于1,开启新东照宫的建造[CheckWJToshoguShrine2]+减去加成[ResetGiantBuddhaShrineBonus]==>东照宫数量小于1,开启新东照宫的建造[CheckWJToshoguShrine2]==>新东照宫数量大于等于1[CheckWJToshoguShrine1]+增加加成[ypGiantBuddhaShrineBonus]==>新东照宫被摧毁==>东照宫数量小于1,开启新东照宫的建造[CheckWJToshoguShrine2]+减去加成[ResetGiantBuddhaShrineBonus]==>......;

以下是用到的科技代码,容易出不生效bug,具体作用请看注释:


<!--在原有的东照宫奖励中添加激活initCheckWJToshoguShrine2;作用是添加一把锁,防止在“检测东照宫数量是否小于1”后提前激活-->
<Tech name ='ypGiantBuddhaShrineBonus' type ='Normal'>
<DBID>4640</DBID>
<ResearchPoints>0.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Flag>Shadow</Flag>
<Effects>
<Effect type ='Data' action ='AutoGatherFood' amount ='1.50' subtype ='WorkRate' unittype ='Food' relativity ='BasePercent'>
<Target type ='ProtoUnit'>ypShrineJapanese</Target></Effect>
<Effect type ='Data' action ='AutoGatherCoin' amount ='1.50' subtype ='WorkRate' unittype ='Gold' relativity ='BasePercent'>
<Target type ='ProtoUnit'>ypShrineJapanese</Target></Effect>
<Effect type ='Data' action ='AutoGatherWood' amount ='1.50' subtype ='WorkRate' unittype ='Wood' relativity ='BasePercent'>
<Target type ='ProtoUnit'>ypShrineJapanese</Target></Effect>
<Effect type ='TechStatus' status ='active'>initCheckWJToshoguShrine2</Effect>
</Effects>
</Tech>


<!--用于激活initCheckWJToshoguShrine,因为奇观科技的特性,所有在奇观升级时激活科技,在奇观被摧毁后会回滚失效,已激活科技状态会被禁用,所以又套了一层激活科技-->
<Tech name="initCheckWJToshoguShrine2" type="Normal">
<ResearchPoints>0.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Flag>Shadow</Flag>
<Effects>
<Effect type ='TechStatus' status ='active'>initCheckWJToshoguShrine</Effect>
</Effects>
</Tech>
<Tech name="initCheckWJToshoguShrine" type="Normal">
<ResearchPoints>0.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Flag>Shadow</Flag>
</Tech>
激活的科技奇观被摧毁后会回滚测试可看下面的视频,左边已用聊天输出科技状态,格式为“游戏时间,科技调用名,科技状态”,科技状态0表示该科技被禁用或未启用,科技状态1表示该科技已启用,科技状态2表示该科技已激活也可以称为已改良。



<!--用于判断东照宫数量是否小于1,并且死亡数量大于1,减去加成,启用新的东照宫单位-->
<Tech name="CheckWJToshoguShrine2" type="Normal">
<DBID>5290</DBID>
<ResearchPoints>0.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Flag>Shadow</Flag>
<Flag>Volatile</Flag>
<Flag>YPInfiniteTech</Flag>
<Prereqs>
<!--检测initCheckWJToshoguShrine是否已激活。假如不这样设定会导致该科技被提前激活(虽然下面设定了检测死亡数量,但是在未完成奇观升级中摧毁未建造完成的东照宫也会算上死亡单位数量)。-->
<TechStatus status ='Active'>initCheckWJToshoguShrine</TechStatus>

<!--检测国家是否为日本,因为上面检测了initCheckWJToshoguShrine的存在,所以可有可无-->
<civilization>
<civname>Japanese</civname>
<civname>SPCJapanese</civname>
<civname>SPCJapaneseEnemy</civname>
</civilization>

<!--noneState aliveState检测GiantBuddha(东照宫unittype)的存活数量是否小于1-->
<typecount unit="GiantBuddha" count="1.00" state="noneState aliveState" operator="lt"/>

<!--noneState deadState检测GiantBuddha(东照宫unittype)的死亡是否大于等于1-->
<typecount unit="GiantBuddha" count="1.00" state="noneState deadState" operator="gte"/>

</Prereqs>
<Effects>
<!--这个激活科技效果又是用来上锁的,防止下一个检测CheckWJToshoguShrine1提前被激活,<Flag>Volatile</Flag>只要满足条件就会自动激活,不管是否启用。-->
<Effect type ='TechStatus' status ='active'>UnlockCheckWJToshoguShrine</Effect>

<!--禁用CheckWJToshoguShrine1科技,因为采用<Flag>Volatile</Flag>,被禁用后只要满足条件又会激活一次,CheckWJToshoguShrine1与当前科技构成无限循环--> <Effect type ='TechStatus' status ='unobtainable'>CheckWJToshoguShrine1</Effect>
<!--禁用ResetGiantBuddhaShrineBonus科技,因为采用<Flag>Volatile</Flag>,被禁用后只要满足条件又会激活一次,该科技用于减去加成-->
<Effect type ='TechStatus' status ='unobtainable'>ResetGiantBuddhaShrineBonus</Effect>

<!--输出提示,自动改良科技如果我不输出提示很难判断是否生效;该语句可删除-->
<Effect type ='TextOutput'>06001</Effect>

<!--启用新的东照宫单位-->
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Assign'>
<Target type ='ProtoUnit'>ypWJToshoguShrineDeadReplace</Target>
</Effect>

</Effects>
</Tech>



<!--用于判断东照宫数量是否大于等于1,然后增加加成-->
<Tech name="CheckWJToshoguShrine1" type="Normal">
<DBID>5290</DBID>
<ResearchPoints>0.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Flag>Shadow</Flag>
<Flag>Volatile</Flag>
<Flag>YPInfiniteTech</Flag>
<Prereqs>
<!--检测UnlockCheckWJToshoguShrine是否已激活,该科技已在CheckWJToshoguShrine2激活-->
<TechStatus status ='Active'>UnlockCheckWJToshoguShrine</TechStatus>

<!--检测国家是否为日本,因为上面检测了UnlockCheckWJToshoguShrine的存在,所以可有可无-->
<civilization>
<civname>Japanese</civname>
<civname>SPCJapanese</civname>
<civname>SPCJapaneseEnemy</civname>
</civilization>

<!--noneState aliveState检测GiantBuddha(东照宫unittype)的存活数量是否大于等于1-->
<typecount unit="GiantBuddha" count="1.00" state="noneState aliveState" operator="gte"/>

<!--noneState buildingState检测GiantBuddha(东照宫unittype)的建造中的数量是否小于1-->
<typecount unit="GiantBuddha" count="1.00" state="noneState buildingState" operator="lt"/>

<!--noneState deadState检测GiantBuddha(东照宫unittype)的死亡数量是否大于等于1-->
<typecount unit="GiantBuddha" count="1.00" state="noneState deadState" operator="gte"/>

</Prereqs>
<Effects>
<!--禁用CheckWJToshoguShrine2科技,因为采用<Flag>Volatile</Flag>,被禁用后只要满足条件又会激活一次,CheckWJToshoguShrine2与当前科技构成无限循环-->
<Effect type ='TechStatus' status ='unobtainable'>CheckWJToshoguShrine2</Effect>

<!--输出提示,自动改良科技如果我不输出提示很难判断是否生效;该语句可删除-->
<Effect type ='TextOutput'>06000</Effect>

<!--禁用新东照宫,以防止建造数量大于2,可有可无,因为你可以在protoy.xml中限制新东照宫的建造上限为1-->
<Effect type ='Data' amount ='0.00' subtype ='Enable' relativity ='Assign'>
<Target type ='ProtoUnit'>ypWJToshoguShrineDeadReplace</Target>
</Effect>

<!--以下两个语句是游戏中东照宫原有的加成,把它禁用后重新激活一遍-->
<Effect type ='TechStatus' status ='unobtainable'>ypGiantBuddhaShrineBonus</Effect>
<Effect type ='TechStatus' status ='active'>ypGiantBuddhaShrineBonus</Effect>

<!--这个激活科技效果还是是用来上锁的,防止带有<Flag>Volatile</Flag>的科技被提前激活,该科技用来防止升级时代的旧东照宫被摧毁后被减去两次加成。-->
<Effect type ='TechStatus' status ='active'>UnlockResetGiantBuddhaShrineBonus</Effect>

</Effects>
</Tech>



<!--用于判断新东照宫小于1后减去加成-->
<Tech name="ResetGiantBuddhaShrineBonus" type="Normal">
<ResearchPoints>0.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Flag>Shadow</Flag>
<Flag>Volatile</Flag>
<Flag>YPInfiniteTech</Flag>
<Prereqs>

<!--防止当前科技在CheckWJToshoguShrine1与CheckWJToshoguShrine2各激活一次前被激活-->
<!--假如不设定UnlockCheckWJToshoguShrine(在CheckWJToshoguShrine2激活),当升级时代的东照宫被摧毁两次后会被扣掉一次加成--> <TechStatus status ='Active'>UnlockCheckWJToshoguShrine</TechStatus>
<!--假如不设定UnlockResetGiantBuddhaShrineBonus(在CheckWJToshoguShrine1激活),当升级时代的东照宫被摧毁后会被扣掉一次加成,然而因为升级奇观的科技回滚,会变成扣掉两次加成-->

<TechStatus status ='Active'>UnlockResetGiantBuddhaShrineBonus</TechStatus>
<!--检测国家是否为日本,因为上面检测了UnlockCheckWJToshoguShrine与UnlockResetGiantBuddhaShrineBonus的存在,所以可有可无-->
<civilization>
<civname>Japanese</civname>
<civname>SPCJapanese</civname>
<civname>SPCJapaneseEnemy</civname>
</civilization>


<!--noneState aliveState检测GiantBuddha(东照宫unittype)的存活数量是否小于1-->
<typecount unit="GiantBuddha" count="1.00" state="noneState aliveState" operator="lt"/>

<!--noneState aliveState检测GiantBuddha(东照宫unittype)的死亡数量是否大于等于2,升级时代的奇观算一个,新建的奇观也算一个-->
<typecount unit="GiantBuddha" count="2.00" state="noneState deadState" operator="gte"/>

</Prereqs>
<Effects>
<!--输出提示,自动改良科技如果我不输出提示很难判断是否生效;该语句可删除-->
<Effect type ='TextOutput'>06002</Effect>

<!--与游戏自带的ypGiantBuddhaShrineBonus相反,用于减去东照宫加成-->
<Effect type ='Data' action ='AutoGatherFood' amount ='0.50' subtype ='WorkRate' unittype ='Food' relativity ='BasePercent'>
<Target type ='ProtoUnit'>ypShrineJapanese</Target></Effect>
<Effect type ='Data' action ='AutoGatherCoin' amount ='0.50' subtype ='WorkRate' unittype ='Gold' relativity ='BasePercent'>
<Target type ='ProtoUnit'>ypShrineJapanese</Target></Effect>
<Effect type ='Data' action ='AutoGatherWood' amount ='0.50' subtype ='WorkRate' unittype ='Wood' relativity ='BasePercent'>
<Target type ='ProtoUnit'>ypShrineJapanese</Target></Effect>

</Effects>
</Tech>


<!--剩下两个空科技是用来给<Flag>Volatile</Flag>上锁的,上面解释了,这里就不再解释了-->
<Tech name="UnlockResetGiantBuddhaShrineBonus" type="Normal">
<ResearchPoints>0.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Flag>Shadow</Flag>
</Tech>
<Tech name="UnlockCheckWJToshoguShrine" type="Normal">
<ResearchPoints>0.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Flag>Shadow</Flag>
</Tech>
回顾一下流程:东照宫升级时代==>升级时代的东照宫被摧毁==>开启新东照宫的建造[CheckWJToshoguShrine2]==>新东照宫数量大于等于1[CheckWJToshoguShrine1]+增加加成[ypGiantBuddhaShrineBonus]==>新东照宫被摧毁==>东照宫数量小于1,开启新东照宫的建造[CheckWJToshoguShrine2]+减去加成[ResetGiantBuddhaShrineBonus]==>东照宫数量小于1,开启新东照宫的建造[CheckWJToshoguShrine2]==>新东照宫数量大于等于1[CheckWJToshoguShrine1]+增加加成[ypGiantBuddhaShrineBonus]==>新东照宫被摧毁==>东照宫数量小于1,开启新东照宫的建造[CheckWJToshoguShrine2]+减去加成[ResetGiantBuddhaShrineBonus]==>......;
构成无限循环重点:<Flag>Volatile</Flag>,只要满足条件,无论是否启用状态,会自动激活,当被禁用后,只要满足条件又会重新激活一次。




以下是无注释版本。顺序与上面的不一样,上面的是被我重新排序的,而下面的则是经过实际测试,直接复制过来的代码,程序能运行就尽量不要再去动它了,不然bug满天飞
	<Tech name="CheckWJToshoguShrine1" type="Normal">
<DBID>5290</DBID>
<ResearchPoints>0.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Flag>Shadow</Flag>
<Flag>Volatile</Flag>
<Flag>YPInfiniteTech</Flag>
<Prereqs>
<TechStatus status ='Active'>UnlockCheckWJToshoguShrine</TechStatus>
<civilization>
<civname>Japanese</civname>
<civname>SPCJapanese</civname>
<civname>SPCJapaneseEnemy</civname>
</civilization>
<typecount unit="GiantBuddha" count="1.00" state="noneState aliveState" operator="gte"/>
<typecount unit="GiantBuddha" count="1.00" state="noneState buildingState" operator="lt"/>
<typecount unit="GiantBuddha" count="1.00" state="noneState deadState" operator="gte"/>
</Prereqs>
<Effects>
<Effect type ='TechStatus' status ='unobtainable'>CheckWJToshoguShrine2</Effect>
<Effect type ='TextOutput'>06000</Effect>
<Effect type ='Data' amount ='0.00' subtype ='Enable' relativity ='Assign'>
<Target type ='ProtoUnit'>ypWJToshoguShrineDeadReplace</Target>
</Effect>
<Effect type ='TechStatus' status ='unobtainable'>ypGiantBuddhaShrineBonus</Effect>
<Effect type ='TechStatus' status ='active'>ypGiantBuddhaShrineBonus</Effect>
<Effect type ='TechStatus' status ='active'>UnlockResetGiantBuddhaShrineBonus</Effect>
</Effects>
</Tech>

<Tech name="CheckWJToshoguShrine2" type="Normal">
<DBID>5290</DBID>
<ResearchPoints>0.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Flag>Shadow</Flag>
<Flag>Volatile</Flag>
<Flag>YPInfiniteTech</Flag>
<Prereqs>
<TechStatus status ='Active'>initCheckWJToshoguShrine</TechStatus>
<civilization>
<civname>Japanese</civname>
<civname>SPCJapanese</civname>
<civname>SPCJapaneseEnemy</civname>
</civilization>
<typecount unit="GiantBuddha" count="1.00" state="noneState aliveState" operator="lt"/>
<typecount unit="GiantBuddha" count="1.00" state="noneState deadState" operator="gte"/>
</Prereqs>
<Effects>

<Effect type ='TechStatus' status ='active'>UnlockCheckWJToshoguShrine</Effect>
<Effect type ='TechStatus' status ='unobtainable'>CheckWJToshoguShrine1</Effect>
<Effect type ='TechStatus' status ='unobtainable'>ResetGiantBuddhaShrineBonus</Effect>
<Effect type ='TextOutput'>06001</Effect>
<Effect type ='Data' amount ='1.00' subtype ='Enable' relativity ='Assign'>
<Target type ='ProtoUnit'>ypWJToshoguShrineDeadReplace</Target>
</Effect>
</Effects>
</Tech>

<Tech name="ResetGiantBuddhaShrineBonus" type="Normal">
<ResearchPoints>0.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Flag>Shadow</Flag>
<Flag>Volatile</Flag>
<Flag>YPInfiniteTech</Flag>
<Prereqs>
<TechStatus status ='Active'>UnlockCheckWJToshoguShrine</TechStatus>
<TechStatus status ='Active'>UnlockResetGiantBuddhaShrineBonus</TechStatus>
<civilization>
<civname>Japanese</civname>
<civname>SPCJapanese</civname>
<civname>SPCJapaneseEnemy</civname>
</civilization>
<typecount unit="GiantBuddha" count="1.00" state="noneState aliveState" operator="lt"/>
<typecount unit="GiantBuddha" count="2.00" state="noneState deadState" operator="gte"/>
</Prereqs>
<Effects>
<Effect type ='TextOutput'>06002</Effect>
<Effect type ='Data' action ='AutoGatherFood' amount ='0.50' subtype ='WorkRate' unittype ='Food' relativity ='BasePercent'>
<Target type ='ProtoUnit'>ypShrineJapanese</Target></Effect>
<Effect type ='Data' action ='AutoGatherCoin' amount ='0.50' subtype ='WorkRate' unittype ='Gold' relativity ='BasePercent'>
<Target type ='ProtoUnit'>ypShrineJapanese</Target></Effect>
<Effect type ='Data' action ='AutoGatherWood' amount ='0.50' subtype ='WorkRate' unittype ='Wood' relativity ='BasePercent'>
<Target type ='ProtoUnit'>ypShrineJapanese</Target></Effect>
</Effects>
</Tech>

<Tech name="UnlockResetGiantBuddhaShrineBonus" type="Normal">
<ResearchPoints>0.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Flag>Shadow</Flag>
</Tech>

<Tech name="UnlockCheckWJToshoguShrine" type="Normal">
<ResearchPoints>0.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Flag>Shadow</Flag>
</Tech>
<Tech name="initCheckWJToshoguShrine" type="Normal">
<ResearchPoints>0.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Flag>Shadow</Flag>
</Tech>
<Tech name="initCheckWJToshoguShrine2" type="Normal">
<ResearchPoints>0.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Flag>Shadow</Flag>
<Effects>
<Effect type ='TechStatus' status ='active'>initCheckWJToshoguShrine</Effect>
</Effects>
</Tech>



protoy.xml新东照宫,删掉<UnitType>AbstractPoliticalWonder</UnitType>与<UnitType>AbstractWonder</UnitType>,然后必须带有<UnitType>GiantBuddha</UnitType>与<Flag>Tracked</Flag>。<UnitType>AbstractPoliticalWonder</UnitType>与<UnitType>AbstractWonder</UnitType>会导致无法建造;<UnitType>GiantBuddha</UnitType>只有东照宫才有的unittype,用这个判断单位数量非常省事;<Flag>Tracked</Flag>据说被kb命令(函数)查找,盲猜统计数量,如果不添加可能会影响到判断单位数量,未实测
	<Unit id='1153' name='ypWJToshoguShrineDeadReplace'>
<DBID>1730</DBID>
<DisplayNameID>64760</DisplayNameID>
<EditorNameID>64761</EditorNameID>
<PopulationCapAddition>20</PopulationCapAddition>
<ObstructionRadiusX>6.0000</ObstructionRadiusX>
<ObstructionRadiusZ>5.0000</ObstructionRadiusZ>
<MaxVelocity>0.0000</MaxVelocity>
<MovementType>land</MovementType>
<AnimFile>buildings\wonders\toshogu_shrine\toshogu_shrine.xml</AnimFile>
<DeadReplacement>BuildingRubble4x4</DeadReplacement>
<DeadReplacementLifespan>15</DeadReplacementLifespan>
<ImpactType>Wood</ImpactType>
<PhysicsInfo>barracks</PhysicsInfo>
<PlacementFile>buildinglarge.xml</PlacementFile>
<Icon>buildings\wonders\toshogu_shrine\toshogu_shrine_icon_64</Icon>
<MinimapIcon>ui\minimap\wonder_16x16</MinimapIcon>
<PortraitIcon>buildings\wonders\toshogu_shrine\toshogu_shrine_icon_portrait</PortraitIcon>
<RolloverTextID>64759</RolloverTextID>
<ShortRolloverTextID>64758</ShortRolloverTextID>
<InitialHitpoints>5000.0000</InitialHitpoints>
<MaxHitpoints>5000.0000</MaxHitpoints>
<LOS>12.0000</LOS>
<BuildPoints>120.0000</BuildPoints>
<BuildLimit>1</BuildLimit>
<Bounty>240.0000</Bounty>
<Cost resourcetype='Food'>4000.0000</Cost>
<Cost resourcetype='Gold'>4000.0000</Cost>
<CarryCapacity resourcetype='Food'>999.0000</CarryCapacity>
<InitialResource resourcetype='Food'>100.0000</InitialResource>
<BuildingWorkRate>1.0000</BuildingWorkRate>
<AllowedAge>3</AllowedAge>
<Armor type='Siege' value='0.0000'/>
<GathererLimit>8</GathererLimit>
<BuilderLimit>8</BuilderLimit>
<UnitType>LogicalTypeValidSabotage</UnitType>
<UnitType>LogicalTypeMinimapFilterEconomic</UnitType>
<UnitType>LogicalTypeHandUnitsAutoAttack</UnitType>
<UnitType>LogicalTypeBuildingsNotWalls</UnitType>
<UnitType>LogicalTypeRangedUnitsAutoAttack</UnitType>
<UnitType>LogicalTypeVillagersAttack</UnitType>
<UnitType>LogicalTypeHandUnitsAttack</UnitType>
<UnitType>LogicalTypeShipsAndBuildings</UnitType>
<UnitType>LogicalTypeRangedUnitsAttack</UnitType>
<UnitType>LogicalTypeBuildingsNotWallsOrGroves</UnitType>
<UnitType>Building</UnitType>
<UnitType>Resource</UnitType>
<UnitType>BuildingClass</UnitType>
<UnitType>CountsTowardEconomicScore</UnitType>
<UnitType>HasBountyValue</UnitType>
<UnitType>AbstractPoliticalWonder</UnitType>
<UnitType>AbstractShrine</UnitType>
<UnitType>AbstractTypeHuntableMagnet</UnitType>
<UnitType>AbstractTypeHerdableMagnet</UnitType>
<UnitType>GiantBuddha</UnitType>
<UnitType>AbstractWonder</UnitType>
<UnitType>ConvertsHerds</UnitType>
<Flag>CollidesWithProjectiles</Flag>
<Flag>StartsAtFullEfficiency</Flag>
<Flag>Immoveable</Flag>
<Flag>NoBloodOnDeath</Flag>
<Flag>ObscuresUnits</Flag>
<Flag>NoIdleActions</Flag>
<Flag>NonAutoFormedUnit</Flag>
<Flag>Doppled</Flag>
<Flag>SelectWithObstruction</Flag>
<Flag>PaintTextureWhenPlacing</Flag>
<Flag>FlattenGround</Flag>
<Flag>HasGatherPoint</Flag>
<Flag>InitialGarrisonOnly</Flag>
<Flag>EnterHotkeyContext</Flag>
<Flag>UnlimitedSupply</Flag>
<Flag>Tracked</Flag>
<Command page='10' column='1'>Delete</Command>
<Command page='9' column='0'>TacticFood</Command>
<Command page='9' column='2'>TacticCoin</Command>
<Command page='9' column='1'>TacticWood</Command>
<Command page='9' column='3'>TacticXPShrine</Command>
<Command page='11' column='1'>Abilities</Command>
</Unit>


こはね发表于 2024-4-21 14:13:58
以上内容旧版本已经实测,决定版未测,假如决定版判断单位数量可用,可以稍微修改下流程,去掉unittype就不用制作新的单位了,但是我还是觉得上面的流程省事。
决定版有空再去测试
  • 狼雨歌 : 是巨佬狠狠学习了
  • こはね 回复 狼雨歌 : 哪是什么巨佬,应该是萌新
狼雨歌发表于 2024-5-8 15:16:09
 本帖最后由 狼雨歌 于 2024-5-8 18:57 编辑 

下列内容为决定版:
很抱歉现在才反馈,按照大佬的思路,设计好了一套循环科技(完整代码相关附在本文末尾,以东照宫ypWJToshoguShrine5为例子):
A:obtainable;前置:帝王时代、且奇观存在数量<1,需手动研究;效果为移除所有奇观的AbstractWonder;
B:unobtainable、Volatile、YPInfiniteTech;前置:A为active状态,且东照宫存在数量≥1;效果:C变更为unobtainable、ypGiantBuddhaShrineBonus变更为active、东照宫添加AbstractWonder;
C:unobtainable、Volatile、YPInfiniteTech;前置:A为active状态,且东照宫存在数量<1;效果:B变更为unobtainable、东照宫移除AbstractWonder。
如此设计原因(有更好的方案可以提出):
1)A必须是帝王时代才可研究,因为移除AbstractWonder后无法正常升时代;
2)A必须不存在任何奇观才能研究,因为若不如此做,会导致双倍奇观效果,甚至奇观效果无限叠加(先看完下面测试内容)。
——————————
测试结果:
1)选择东照宫升帝王时代:
存在东照宫时,被B检测到,自动启用ypGiantBuddhaShrineBonus,并添加AbstractWonder;
东照宫被摧毁时,因为有AbstractWonder,正常关闭ypGiantBuddhaShrineBonus,然后被C检测到,并移除AbstractWonder;
反复建造/摧毁东照宫,正常运作,正确启用和关闭奇观效果。
2)未选择东照宫升帝王时代:
存在东照宫时,被B检测到,自动启用ypGiantBuddhaShrineBonus,并添加AbstractWonder;
东照宫被摧毁时,由于未知原因,没有关闭ypGiantBuddhaShrineBonus,然后被C检测到,并移除AbstractWonder;
反复建造/摧毁东照宫,运作异常,奇观效果保持开启,没有关闭。
3)开局帝王时代:
存在东照宫时,被B检测到,自动启用ypGiantBuddhaShrineBonus,并添加AbstractWonder;
东照宫被摧毁时,由于未知原因,没有关闭ypGiantBuddhaShrineBonus,然后被C检测到,并移除AbstractWonder;
反复建造/摧毁东照宫,运作异常,奇观效果保持开启,没有关闭。
4)若在C科技里额外添加<effect type="TechStatus" status="unobtainable">ypGiantBuddhaShrineBonus</effect>且按1)来执行:
存在东照宫时,被B检测到,自动启用ypGiantBuddhaShrineBonus,并添加AbstractWonder;
东照宫被摧毁时,因为有AbstractWonder,正常关闭ypGiantBuddhaShrineBonus,然后被C检测到,并移除AbstractWonder;
反复建造/摧毁东照宫,正常运作,正确启用和关闭奇观效果。
5)若在C科技里额外添加<effect type="TechStatus" status="unobtainable">ypGiantBuddhaShrineBonus</effect>且按2)或3)来执行:
存在东照宫时,被B检测到,自动启用ypGiantBuddhaShrineBonus,并添加AbstractWonder;
东照宫被摧毁时,由于未知原因,没有关闭ypGiantBuddhaShrineBonus,然后被C检测到,并移除AbstractWonder;
反复建造/摧毁东照宫,运作异常,奇观效果保持开启,没有关闭,且无限叠加。
综上可得知:
1)ypGiantBuddhaShrineBonus可以被反复active从而让奇观效果无限叠加,前提是已经被unobtainable关闭(但游戏内实际效果却没有正常关闭,若没有这一步,就如2)3)那样只有一层奇观效果,不会出现像5)的无限叠加)推测其他奇观效果也是如此;
2)必须是相应时代且已经被建造过的奇观才能正常运作,推测是升时代启用相应检测,未被启用的相应检测,不会在相应奇观被摧毁时,自动关闭相应奇观效果;
3)由于知道通过unobtainable关闭奇观效果,游戏内没有正常生效,所以即使取消A要求的奇观存在数量<1,在B里先unobtainable再active只会像5)那样无限叠加。
关于奇观效果无限叠加:
已测试和AbstractWonder无关,只与是否通过科技unobtainable关闭相应奇观效果有关。
基于上面的测试,目前存疑的是建造奇观升时代的一句代码:
  1. <tech name="YPWonderJapaneseToshoguShrine2" type="Normal">————升殖民时代的东照宫科技(其他三个均有同样代码)
  2. <effect type="TechStatus" status="active" deactivate="true">ypGiantBuddhaShrineBonus</effect>
  3. </effects>
复制代码

这句多了deactivate="true",且只有白塔、东照宫升时代使用,圣典并没有相关内容,包括决定版mod英文指南内容,从字面理解是“使xx停止工作”,推测是开启相应检测;
但B科技里同样使用此代码,仍然和2)3)一样的结果,推测是跟升时代科技绑定的,无法更改。
——————————
以上,麻了。。。再怎么搞也依然有无法正常运作的问题。。。
目前可行的解法是直接复制像ypGiantBuddhaShrineBonus这类使用了deactivate="true"代码里的effect部分,另做一个新科技来实现,相应的循环科技也要做部分改动了;
已知白塔的4个,东照宫的1个,其他要么是写在升时代科技内,要么是被动能力的。
——————————
附所用完整代码(以东照宫为例):
  1. <tech name="UnlockWonder" type="Normal">————重建奇观科技
  2. <dbid>77805</dbid>
  3. <displaynameid>777827</displaynameid>
  4. <rollovertextid>777828</rollovertextid>
  5. <researchpoints>10.0000</researchpoints>
  6. <status>OBTAINABLE</status>
  7. <icon>resources\art\buildings\asian_civs\castle_regicide\shogun_castle_icon_64.png</icon>
  8. <prereqs>
  9. <techstatus status="Active">Imperialize</techstatus>————帝王时代
  10. <typecount unit="AbstractWonder" count="1.00" state="noneState aliveState" operator="lt"/>————奇观存在数量<1
  11. </prereqs>
  12. <effects>
  13. <effect type="Data" amount="1.00" subtype="Enable" relativity="Absolute">————个人制作的新单位,用来建造奇观的马车
  14. <target type="ProtoUnit">WonderWagon</target>
  15. </effect>
  16. <effect type="Data" amount="0.00" subtype="SetUnitType" unittype="AbstractWonder" relativity="Assign">————移除AbstractWonder,因为奇观都有Building,无需给每个奇观这么写,减少代码量
  17. <target type="ProtoUnit">Building</target>
  18. </effect>
  19. </effects>
  20. </tech>
  21. <tech name="ToshoguShrineEnable" type="Normal">————启用东照宫效果,只需给那些“伪”被动效果实则科技效果的奇观写相应代码即可,目前有白塔、天坛、幕府、鸟居、东照宫
  22. <dbid>88888</dbid>
  23. <researchpoints>0.0000</researchpoints>
  24. <status>UNOBTAINABLE</status>
  25. <Flag>Volatile</Flag>
  26. <Flag>YPInfiniteTech</Flag>
  27. <prereqs>
  28. <techstatus status="active">UnlockWonder</techstatus>
  29. <typecount unit="ypWJToshoguShrine5" count="1.00" state="noneState aliveState" operator="gte"/>————东照宫存在数量≥1
  30. </prereqs>
  31. <effects>
  32. <effect type="TechStatus" status="unobtainable">ToshoguShrineUnenable</effect>————关闭ToshoguShrineUnenable
  33. <effect type="TechStatus" status="unobtainable">ypGiantBuddhaShrineBonus</effect>————若A不要求奇观存在数量<1,则如5)那样无限叠加
  34. <effect type="TechStatus" status="active">ypGiantBuddhaShrineBonus</effect>————启用东照宫效果,这里写deactivate="true"没有起到任何作用
  35. <effect type="Data" amount="1.00" subtype="SetUnitType" unittype="AbstractWonder" relativity="Assign">————给东照宫添加AbstractWonder
  36. <target type="ProtoUnit">ypWJToshoguShrine5</target>
  37. </effect>
  38. </effects>
  39. </tech>
  40. <tech name="ToshoguShrineUnenable" type="Normal">————关闭东照宫效果
  41. <dbid>88888</dbid>
  42. <researchpoints>0.0000</researchpoints>
  43. <status>UNOBTAINABLE</status>
  44. <Flag>Volatile</Flag>
  45. <Flag>YPInfiniteTech</Flag>
  46. <prereqs>
  47. <techstatus status="active">UnlockWonder</techstatus>
  48. <typecount unit="ypWJToshoguShrine5" count="1.00" state="noneState aliveState" operator="lt"/>————东照宫存在数量<1
  49. </prereqs>
  50. <effects>
  51. <effect type="TechStatus" status="unobtainable">ToshoguShrineEnable</effect>————关闭ToshoguShrineEnable
  52. <effect type="TechStatus" status="unobtainable">ypGiantBuddhaShrineBonus</effect>————4)5)添加的位置
  53. <effect type="Data" amount="0.00" subtype="SetUnitType" unittype="AbstractWonder" relativity="Assign">————给东照宫移除AbstractWonder
  54. <target type="ProtoUnit">ypWJToshoguShrine5</target>
  55. </effect>
  56. </effects>
  57. </tech>
复制代码

评分

参与人数 1经验 +1800 收起 理由
こはね + 1800 解除编辑限制

查看全部评分

  • こはね : 
  • 狼雨歌 回复 こはね : 内容写好了,大佬可以看看了。目前可行的方案只有要求帝王时代且不存在任何奇观,使用复制过来的科技来实现重建奇观了。
  • 狼雨歌 回复 こはね : 啊对了1800经验可以扣了
  • こはね 回复 狼雨歌 : 那感觉还是我上面的单独检测比较好;deactivate="true"我也测试过,但是不添加deactivate="true"也会回滚已激活的科技
  • 狼雨歌 回复 こはね : 刚刚有个新发现,决定版似乎不能通过科技把active状态的科技变更为unobtainable来实现取消科技效果,奇观效果大概是特例属实给我整不会了,ypGiantBuddhaShrineBonus换成写的新科技,一样会出现测试里的2)3)5)现象,目前已通过添加俩个YPInfiniteTech但效果相反的科技,分别执行来实现,我现在有点怀疑人生了
  • こはね 回复 狼雨歌 : 我现在也怀疑人生了,明明旧版就可以,到了决定版就出问题;我上面那个<Tech name="LoopTech" type="Normal">通过输出得知,<Status>UNOBTAINABLE</Status>状态下;只有建造了奇观才会激活生效,就算你建造有人口建筑又或者改良科技也无效;改成<Status>OBTAINABLE</Status>又可以开局就无限执行
  • こはね 回复 狼雨歌 : 你可以试下用我那个方法,看楼下的文件;测试的时候最好输出一下文字,又或者运送几个好记的单位(例如wardog、settler、musketeer)
  • 狼雨歌 回复 こはね : 谢谢,我先学习一下
こはね发表于 2024-5-8 23:05:25
决定版测试成功了,不需要<Tech name="LoopTech" type="Normal">这个无限循环科技(旧版亚洲王朝还是需要的)
RebuildToshoguShrine.rar



protomods.xml
<?xml version="1.0" encoding="utf-8"?>

<protomods>
<unit id="900" name="Settler">
<train row="0" page="6" column="1">ypWJToshoguShrineDeadReplace</train>
</unit>
<unit id="1130" name="ypSettlerJapanese">
<train row="0" page="6" column="1">ypWJToshoguShrineDeadReplace</train>
</unit>
<unit id="928" name="ypSettlerAsian">
<train row="0" page="6" column="1">ypWJToshoguShrineDeadReplace</train>
</unit>
<unit id="1047" name="ypSettlerIndian">
<train row="0" page="6" column="1">ypWJToshoguShrineDeadReplace</train>
</unit>
<unit id="1153" name="ypWJToshoguShrineDeadReplace">
<dbid>1730</dbid>
<displaynameid>64760</displaynameid>
<editornameid>64761</editornameid>
<populationcapaddition>20</populationcapaddition>
<obstructionradiusx>6.0000</obstructionradiusx>
<obstructionradiusz>5.0000</obstructionradiusz>
<maxvelocity>0.0000</maxvelocity>
<movementtype>land</movementtype>
<animfile>buildings\wonders\toshogu_shrine\toshogu_shrine.xml</animfile>
<deadreplacement>BuildingRubble4x4</deadreplacement>
<deadreplacementlifespan>15</deadreplacementlifespan>
<impacttype>Wood</impacttype>
<physicsinfo>barracks</physicsinfo>
<placementfile>buildinglarge.xml</placementfile>
<icon>resources\art\buildings\wonders\toshogu_shrine\toshogu_shrine_icon_64.png</icon>
<minimapicon>ui\minimap\wonder_16x16</minimapicon>
<portraiticon>resources\art\buildings\wonders\toshogu_shrine\toshogu_shrine_icon_portrait.png</portraiticon>
<rollovertextid>64759</rollovertextid>
<shortrollovertextid>64758</shortrollovertextid>
<initialhitpoints>5000.0000</initialhitpoints>
<maxhitpoints>5000.0000</maxhitpoints>
<los>12.0000</los>
<buildpoints>120.0000</buildpoints>
<buildlimit>1</buildlimit>
<bounty>240.0000</bounty>
<cost resourcetype="Food">4000.0000</cost>
<cost resourcetype="Gold">4000.0000</cost>
<carrycapacity resourcetype="Food">999.0000</carrycapacity>
<initialresource resourcetype="Food">100.0000</initialresource>
<buildingworkrate>1.0000</buildingworkrate>
<allowedage>3</allowedage>
<armor type="Siege" value="0.0000"/>
<gathererlimit>8</gathererlimit>
<builderlimit>8</builderlimit>
<unittype>LogicalTypeValidSabotage</unittype>
<unittype>LogicalTypeMinimapFilterEconomic</unittype>
<unittype>LogicalTypeHandunitsAutoAttack</unittype>
<unittype>LogicalTypeBuildingsNotWalls</unittype>
<unittype>LogicalTypeRangedunitsAutoAttack</unittype>
<unittype>LogicalTypeVillagersAttack</unittype>
<unittype>LogicalTypeHandunitsAttack</unittype>
<unittype>LogicalTypeShipsAndBuildings</unittype>
<unittype>LogicalTypeRangedunitsAttack</unittype>
<unittype>LogicalTypeBuildingsNotWallsOrGroves</unittype>
<unittype>Building</unittype>
<unittype>Resource</unittype>
<unittype>BuildingClass</unittype>
<unittype>CountsTowardEconomicScore</unittype>
<unittype>HasBountyValue</unittype>
<unittype>AbstractPoliticalWonder</unittype>
<unittype>AbstractShrine</unittype>
<unittype>AbstractTypeHuntableMagnet</unittype>
<unittype>AbstractTypeHerdableMagnet</unittype>
<unittype>GiantBuddha</unittype>
<unittype>AbstractWonder</unittype>
<unittype>ConvertsHerds</unittype>
<flag>CollidesWithProjectiles</flag>
<flag>StartsAtFullEfficiency</flag>
<flag>Immoveable</flag>
<flag>NoBloodOnDeath</flag>
<flag>Obscuresunits</flag>
<flag>NoIdleActions</flag>
<flag>NonAutoFormedunit</flag>
<flag>Doppled</flag>
<flag>SelectWithObstruction</flag>
<flag>PaintTextureWhenPlacing</flag>
<flag>FlattenGround</flag>
<flag>HasGatherPoint</flag>
<flag>InitialGarrisonOnly</flag>
<flag>EnterHotkeyContext</flag>
<flag>UnlimitedSupply</flag>
<flag>Tracked</flag>
<command page="10" column="1">Delete</command>
<command page="9" column="0">TacticFood</command>
<command page="9" column="2">TacticCoin</command>
<command page="9" column="1">TacticWood</command>
<command page="9" column="3">TacticXPShrine</command>
<command page="11" column="1">Abilities</command>
</unit>
</protomods>


techtreemods.xml
<?xml version="1.0" encoding="utf-8"?>

<techtreemods>
<tech name="CheckWJToshoguShrine1" type="Normal">
<dbid>5290</dbid>
<researchpoints>0.0000</researchpoints>
<status>UNOBTAINABLE</status>
<flag>Shadow</flag>
<flag>Volatile</flag>
<flag>YPInfiniteTech</flag>
<prereqs>
<techstatus status="active">UnlockCheckWJToshoguShrine</techstatus>
<civilization>
<civname>Japanese</civname>
<civname>SPCJapanese</civname>
<civname>SPCJapaneseEnemy</civname>
</civilization>
<typecount unit="GiantBuddha" count="1.00" state="noneState aliveState" operator="gte"/>
<typecount unit="GiantBuddha" count="1.00" state="noneState buildingState" operator="lt"/>
<typecount unit="GiantBuddha" count="1.00" state="noneState deadState" operator="gte"/>
</prereqs>
<effects>
<effect type="techstatus" status="unobtainable">CheckWJToshoguShrine2</effect>
<effect type="Data" amount="0.00" subtype="Enable" relativity="Assign">
<target type="ProtoUnit">ypWJToshoguShrineDeadReplace</target>
</effect>
<effect type="techstatus" status="unobtainable">ypGiantBuddhaShrineBonus</effect>
<effect type="techstatus" status="active">ypGiantBuddhaShrineBonus</effect>
<effect type="techstatus" status="active">UnlockResetGiantBuddhaShrineBonus</effect>
</effects>
</tech>
<tech name="CheckWJToshoguShrine2" type="Normal">
<dbid>5290</dbid>
<researchpoints>0.0000</researchpoints>
<status>UNOBTAINABLE</status>
<flag>Shadow</flag>
<flag>Volatile</flag>
<flag>YPInfiniteTech</flag>
<prereqs>
<techstatus status="active">initCheckWJToshoguShrine</techstatus>
<civilization>
<civname>Japanese</civname>
<civname>SPCJapanese</civname>
<civname>SPCJapaneseEnemy</civname>
</civilization>
<typecount unit="GiantBuddha" count="1.00" state="noneState aliveState" operator="lt"/>
<typecount unit="GiantBuddha" count="1.00" state="noneState deadState" operator="gte"/>
</prereqs>
<effects>
<effect type="techstatus" status="active">UnlockCheckWJToshoguShrine</effect>
<effect type="techstatus" status="unobtainable">CheckWJToshoguShrine1</effect>
<effect type="techstatus" status="unobtainable">ResetGiantBuddhaShrineBonus</effect>
<effect type="Data" amount="1.00" subtype="Enable" relativity="Assign">
<target type="ProtoUnit">ypWJToshoguShrineDeadReplace</target>
</effect>
</effects>
</tech>
<tech name="ResetGiantBuddhaShrineBonus" type="Normal">
<researchpoints>0.0000</researchpoints>
<status>UNOBTAINABLE</status>
<flag>Shadow</flag>
<flag>Volatile</flag>
<flag>YPInfiniteTech</flag>
<prereqs>
<techstatus status="active">UnlockCheckWJToshoguShrine</techstatus>
<techstatus status="active">UnlockResetGiantBuddhaShrineBonus</techstatus>
<civilization>
<civname>Japanese</civname>
<civname>SPCJapanese</civname>
<civname>SPCJapaneseEnemy</civname>
</civilization>
<typecount unit="GiantBuddha" count="1.00" state="noneState aliveState" operator="lt"/>
<typecount unit="GiantBuddha" count="2.00" state="noneState deadState" operator="gte"/>
</prereqs>
<effects>
<effect type="TextOutput">06002</effect>
<effect type="Data" action="AutoGatherFood" amount="0.50" subtype="WorkRate" unittype="Food" relativity="BasePercent">
<target type="ProtoUnit">ypShrineJapanese</target>
</effect>
<effect type="Data" action="AutoGatherCoin" amount="0.50" subtype="WorkRate" unittype="Gold" relativity="BasePercent">
<target type="ProtoUnit">ypShrineJapanese</target>
</effect>
<effect type="Data" action="AutoGatherWood" amount="0.50" subtype="WorkRate" unittype="Wood" relativity="BasePercent">
<target type="ProtoUnit">ypShrineJapanese</target>
</effect>
</effects>
</tech>
<tech name="UnlockResetGiantBuddhaShrineBonus" type="Normal">
<researchpoints>0.0000</researchpoints>
<status>UNOBTAINABLE</status>
<flag>Shadow</flag>
</tech>
<tech name="UnlockCheckWJToshoguShrine" type="Normal">
<researchpoints>0.0000</researchpoints>
<status>UNOBTAINABLE</status>
<flag>Shadow</flag>
</tech>
<tech name="initCheckWJToshoguShrine" type="Normal">
<researchpoints>0.0000</researchpoints>
<status>UNOBTAINABLE</status>
<flag>Shadow</flag>
</tech>
<tech name="initCheckWJToshoguShrine2" type="Normal">
<researchpoints>0.0000</researchpoints>
<status>UNOBTAINABLE</status>
<flag>Shadow</flag>
<effects>
<effect type="techstatus" status="active">initCheckWJToshoguShrine</effect>
</effects>
</tech>
<tech name="ypGiantBuddhaShrineBonus" type="Normal">
<effects>
<effect type="techstatus" status="active">initCheckWJToshoguShrine2</effect>
</effects>
</tech>
</techtreemods>

等我有空再写一个js脚本;直接自动生成代码
跳转到