收起左侧

求助,想把工厂改成可重建的但出了问题

[复制链接]
纳索的莫里斯发表于 2026-7-5 18:34:16
我参考了俄罗斯那张卡“设置军营”,把其中的代码(添加建筑到探险家的建造栏)修改后添加到AAStandardStartingTechs这个西方国家共用的科技树里:
<tech name="AAStandardStartingTechs" type="Normal">
<dbid>821</dbid>
<displaynameid>27845</displaynameid>
<status>UNOBTAINABLE</status>
<flag>Shadow</flag>
<effects>
<effect mergeMode='add' type="CommandAdd" proto="Factory" page="6" column="-1">
<target type="ProtoUnit">Explorer</target>
</effect>
<effect mergeMode='add' type="Data" action="Build" amount="1.00" subtype="WorkRate" unittype="Factory" relativity="Assign">
<target type="ProtoUnit">Explorer</target>
</effect>
<effect mergeMode='add' type="CommandAdd" proto="Factory" page="6" column="-1">
<target type="ProtoUnit">deGeneral</target>
</effect>
<effect mergeMode='add' type="Data" action="Build" amount="1.00" subtype="WorkRate" unittype="Factory" relativity="Assign">
<target type="ProtoUnit">deGeneral</target>
</effect>
<effect mergeMode='add' type="CommandAdd" proto="Factory" page="6" column="-1">
<target type="ProtoUnit">deGeneral2</target>
</effect>
<effect mergeMode='add' type="Data" action="Build" amount="1.00" subtype="WorkRate" unittype="Factory" relativity="Assign">
<target type="ProtoUnit">deGeneral2</target>
</effect>
<effect mergeMode='add' type="CommandAdd" proto="Factory" page="6" column="-1">
<target type="ProtoUnit">deGrandMaster</target>
</effect>
<effect mergeMode='add' type="Data" action="Build" amount="1.00" subtype="WorkRate" unittype="Factory" relativity="Assign">
<target type="ProtoUnit">deGrandMaster</target>
</effect>
</effects>
</tech>
当然也把类似的代码添加到了YPAge0ChineseTechs里,因为中国也能从俄罗斯盟友那里获得工厂。
然后把设置军营中的另一段代码修改后(工厂的建筑上限+1)增加到工厂、工业革命、强盗贵族等所有运输一辆工厂马车到殖民地的船运卡/科技中,因为数量很多,我这里仅以工厂卡为例:
<tech name="HCUnlockFactory" type="Normal">
<dbid>625</dbid>
<displaynameid>25932</displaynameid>
<cost resourcetype="Ships">1.0000</cost>
<researchpoints>40.0000</researchpoints>
<status>UNOBTAINABLE</status>
<icon>resources\art\buildings\factory\shared_factory_icon.png</icon>
<rollovertextid>25931</rollovertextid>
<flag>HomeCity</flag>
<effects>
<effect mergeMode='add' type="Data" amount="1.00" subtype="BuildLimit" relativity="Absolute">
<target type="ProtoUnit">Factory</target>
</effect>
</effects>
</tech>

以上是techtreemods里修改的部分。
在protomods里,增加了限制工厂修建数量为0的代码:
<Unit mergeMode='modify' name="Factory">
<buildlimit>0</buildlimit>
<allowedage>3</allowedage>
</Unit>

类似的,我也对日本的道场进行了修改,日本的道场ypDojo一开始建造上限就是0,没有改,道场卡也是建造上限+1、运送一辆道场人力车到殖民地的代码内容,和我修改过的工厂卡没什么区别,也不改,只是在YPAge0JapaneseTechs里添加了如下代码,目的是让日本僧侣能够重建道场:
<effect mergeMode='add' type="CommandAdd" proto="ypDojo" page="6" column="-1">
<target type="ProtoUnit">ypMonkJapanese</target>
</effect>
<effect mergeMode='add' type="Data" action="Build" amount="1.00" subtype="WorkRate" unittype="ypDojo" relativity="Assign">
<target type="ProtoUnit">ypMonkJapanese</target>
</effect>
<effect mergeMode='add' type="CommandAdd" proto="ypDojo" page="6" column="-1">
<target type="ProtoUnit">ypMonkJapanese2</target>
</effect>
<effect mergeMode='add' type="Data" action="Build" amount="1.00" subtype="WorkRate" unittype="ypDojo" relativity="Assign">
<target type="ProtoUnit">ypMonkJapanese2</target>
</effect>

问题来了,我用日本和法国分别进行测试,日本可以正常发送道场卡,可以重建;法国无法发送工厂卡,显示为红色不可用状态,提示已达到建筑上限,不可发送该卡。我想知道为什么两者代码基本没区别,日本可以正常发卡,法国就不行?

纳索的莫里斯发表于 2026-7-9 23:56:44
这么久都没人回答吗?不过问题得到了部分解决,我把工厂相关卡改成了这样:
<tech mergeMode="replace" name="HCUnlockFactory" type="Normal">
<dbid>625</dbid>
<displaynameid>25932</displaynameid>
<cost resourcetype="Ships">1.0000</cost>
<researchpoints>40.0000</researchpoints>
<status>UNOBTAINABLE</status>
<icon>resources\art\buildings\factory\shared_factory_icon.png</icon>
<rollovertextid>25931</rollovertextid>
<flag>HomeCity</flag>
<flag>YPIgnorePopCostBuildLimitFreeHCUnitIfTechObtainable</flag>
<effects>
<effect tech="deCardIgnoreBuildLimit" type="Data" amount="1.00" subtype="FreeHomeCityUnitIfTechObtainable" unittype="FactoryWagon" relativity="Absolute">
<target type="Player">
</target>
</effect>
<effect type="Data" amount="1.00" subtype="BuildLimit" relativity="Absolute">
<target type="ProtoUnit">Factory</target>
</effect>
</effects>
</tech>
从而解决了工厂修建数量为0无法发卡的问题。
不过问题又来了,美国的开场就有一个+2工厂建造上限的初始科技,该科技导致美国开局就可以建造工厂。
为了解决这个衍生问题,我尝试在techtreemods文件中的DEAge0Americans里添加代码:
<effect mergeMode='remove' type="Data" amount="2.00" subtype="BuildLimit" relativity="Assign">
<target type="ProtoUnit">Factory</target>
</effect>
结果不行,美国的工厂建造上限仍显示为2,美国依然能开局建工厂。
我又删掉这段代码,改成:
<effect mergeMode='add' type="Data" amount="0.00" subtype="BuildLimit" relativity="Assign">
<target type="ProtoUnit">Factory</target>
</effect>
仍然不行。
改成
<effect mergeMode='add' type="Data" amount="-2.00" subtype="BuildLimit" relativity="Assign">
<target type="ProtoUnit">Factory</target>
</effect>
也还是不行,如今无计可施‌矣。目前的解决思路是用 <tech mergeMode="replace" name=语句替换掉美国的age0科技,删掉+2工厂建造上限的初始科技;缺点是导致如果后续出现更新,美国的age0科技会停留在当前版本;我个人不喜欢这么做。最好还是能用effect mergeMode之类的语句单独去掉美国初始科技中的+2工厂建造上限,这样不影响后续更新是我最中意的。希望有大佬赐教如何解决。
  • こはね : 用mergeMode='remove'
  • 纳索的莫里斯 回复 こはね : 用过了,我这上面写了: <effect mergeMode='remove' type="Data" amount="2.00" subtype="BuildLimit" relativity="Assign"><target type="ProtoUnit">Factory</target> </effect>
  • こはね 回复 纳索的莫里斯 : 我帮不上忙,我电脑疑似GPU温度过高会导致频繁蓝屏重启,进入BIOS也直接卡死(蓝屏);
纳索的莫里斯发表于 2026-7-12 19:07:27
解决了,问了一下gemini,给我发了一段代码:
<techtreemods>
<tech name="DEAge0Americans">
<effects>
<effect mergeMode="remove" type="Data" amount="2.00" subtype="BuildLimit" relativity="Assign">
<target type="ProtoUnit">Factory</target>
</effect>
</effects>
</tech>
</techtreemods>
我试了一下居然可以,我感觉和我自己写的也没什么区别呀?理解不能:
<effect mergeMode='remove' type="Data" amount="2.00" subtype="BuildLimit" relativity="Assign">
<target type="ProtoUnit">Factory</target>
</effect>
Niubility发表于 2026-7-16 15:54:51
盲猜是"" 和 '' 的区别,AI沿用了""
跳转到