日本农民打猎


请教:帝国III 如何修改文件 使得日本农民能够采肉?

 本帖最后由 waterduck 于 2018-12-31 19:50 编辑 


我是用记事本简单修改protoy.xml,未动protoy.xml.XMB

在ypSettlerJapanese信息


我在	<ProtoAction>
		<Name>Gather</Name>
添加		<Rate type ='Herdable'>2.000000</Rate>
		<Rate type ='Huntable'>0.840000</Rate>
我自己添加
		<Rate type ='Huntable'>1.000000</Rate> 我自己添加
	</ProtoAction>
	<ProtoAction>
		<Name>NoWork</Name>
		<Rate type ='Herdable'>1.000000</Rate>此段删除

仅仅修改protoy.xml保存后,打开游戏。日本农民依旧不能采肉。
请教,还需要修改什么地方,日本农民才能够采集肉类?
---------------------------分割线--------------------------- 这个问题我从来没见过,自己也想试一下到底是怎样实现的,一开始我想到的是与国家(主程序)有关,或者是主程序把日本村民打猎给禁止了。 首先我先把日本村民放到其他国家,然后发现无论哪一个国家都不能用日本村民打猎,很可能与主程序有关。 后来,我在日本放置其他非日本村民,发现仍然无法打猎,暂时可以确定不是跟日本村民有关,那么很可能就是与国家(主程序)有关了。 接下来我去civs把国家名改了 *************************civs.xml************************* <civ> <name>Japanese</name> <main>1</main> <gameid>ypack</gameid> <statsid>JP</statsid> <portrait>objects\flags\japan</portrait> <culture>Japanese</culture> <displaynameid>60001</displaynameid> <rollovernameid>62429</rollovernameid> <alliedid>26446</alliedid> <alliedotherid>26445</alliedotherid> <unalliedid>26444</unalliedid> ...省略 <additionalwonderbuildrate>0.121</additionalwonderbuildrate> <additionalwonderbuildrate>0.125</additionalwonderbuildrate> <agetech> <age>Age0</age> <tech>YPAge0Japanese</tech> </agetech> ...省略 <key>J</key> </civ> ********************************************************** <name>Japanese</name>修改成了<name>Japanese1</name>,没变化,证明不是主程序定义的,因为主程序定义是绝对的,在xml改一个字符就会失效。 然后我想是不是未知作用语句<statsid>JP</statsid><key>J</key>导致的,然后修改后没变化,证明与这两个语句无关。 那么接下来最有可能是<culture>Japanese</culture>这个语句了,修改了还是没变化,证明也是与<culture>Japanese</culture>无关。 所有与国家(主程序)有关的可能都被排除了,那么只剩下一种可能了,那就是科技。 如果去调查techtreey.xml耗时是非常大的,这种方法要排除,最快捷的办法是把<age>Age0</age>的科技改掉。然后发现非日本村民可以打猎了,那么可以确认是科技的效果了,接下来就是要去科技寻找语句了,到YPAge0Japanese查找AbstractVillager或ypSettlerJapanese,最终确认语句如下: <Effect type ='Data' action ='Hunting' amount ='0.00' subtype ='WorkRate' unittype ='Huntable' relativity ='Assign'> <Target type ='ProtoUnit'>AbstractVillager</Target></Effect> <Effect type ='Data' action ='RifleAttack' amount ='0.00' subtype ='WorkRate' unittype ='Huntable' relativity ='Assign'> <Target type ='ProtoUnit'>AbstractVillager</Target></Effect> <Effect type ='Data' action ='ButtAttack' amount ='0.00' subtype ='WorkRate' unittype ='Huntable' relativity ='Assign'> <Target type ='ProtoUnit'>AbstractVillager</Target></Effect> <Effect type ='Data' action ='Gather' amount ='0.00' subtype ='WorkRate' unittype ='Huntable' relativity ='Assign'> <Target type ='ProtoUnit'>AbstractVillager</Target></Effect> <Effect type ='Data' action ='Gather' amount ='0.00' subtype ='WorkRate' unittype ='Herdable' relativity ='Assign'> <Target type ='ProtoUnit'>AbstractVillager</Target></Effect> <Effect type ='Data' action ='Hunting' amount ='0.00' subtype ='WorkRate' unittype ='Herdable' relativity ='Assign'> <Target type ='ProtoUnit'>AbstractVillager</Target></Effect> <Effect type ='Data' action ='RifleAttack' amount ='0.00' subtype ='WorkRate' unittype ='Herdable' relativity ='Assign'> <Target type ='ProtoUnit'>AbstractVillager</Target></Effect> <Effect type ='Data' action ='ButtAttack' amount ='0.00' subtype ='WorkRate' unittype ='Herdable' relativity ='Assign'> <Target type ='ProtoUnit'>AbstractVillager</Target></Effect> <Effect type ='Data' action ='BlunderbussAttack' amount ='0.00' subtype ='WorkRate' unittype ='Huntable' relativity ='Assign'> <Target type ='ProtoUnit'>AbstractVillager</Target></Effect> <Effect type ='Data' action ='HandAttack' amount ='0.00' subtype ='WorkRate' unittype ='Huntable' relativity ='Assign'> <Target type ='ProtoUnit'>AbstractVillager</Target></Effect> <Effect type ='Data' action ='HandAttack' amount ='0.00' subtype ='WorkRate' unittype ='Herdable' relativity ='Assign'> <Target type ='ProtoUnit'>AbstractVillager</Target></Effect> 上述语句导致村民对打猎的工作效率为0,然后就不能打猎了,把0.00改成1.00或者全部删掉就可以了。 那么问题来了,日本村民还是不能打猎怎么办?在techtreey.xml也找不到ypSettlerJapanese相关语句。其实弄懂了原理就可以想到是protoy.xml日本村民对猎物的效率为0或者没有定义。 在protoy.xml的ypSettlerJapanese中把语句添加回去就可以了 <ProtoAction> <Name>Gather</Name> <Rate type ='ypRicePaddy' resource ='Gold'>0.340000</Rate> <Rate type ='Tree'>0.500000</Rate> <Rate type ='Farm'>0.500000</Rate> <Rate type ='Plantation'>0.500000</Rate> <Rate type ='AbstractMine'>0.600000</Rate> <Rate type ='BerryBush'>0.670000</Rate> <Rate type ='FirePit'>0.100000</Rate> <Rate type ='Mill'>0.670000</Rate> <Rate type ='ypRicePaddy' resource ='Food'>0.500000</Rate> <Rate type ='ypBerryBuilding'>0.670000</Rate> <Rate type ='ypGroveBuilding'>0.500000</Rate> <!-- 缺少了下列两个语句 --> <Rate type ='Herdable'>2.000000</Rate> <Rate type ='Huntable'>0.840000</Rate> </ProtoAction> <ProtoAction> <Name>Hunting</Name> <Rate type ='Tree'>1.000000</Rate> <!-- 缺少了下列两个语句 --> <Rate type ='Herdable'>1.000000</Rate> <Rate type ='Huntable'>1.000000</Rate> </ProtoAction> 在protoy.xml加语句后发现能采肉却不能开启杀死猎物,那么应该想到的是tactics的问题了。 <action> <name stringid="69183">NoWork</name> <type>NoWork</type> <maxrange>10</maxrange> <!-- 1.0 改成 0.0 --> <rate type="Herdable">1.0</rate> <rate type="Huntable">1.0</rate> <!-- 下面两句删掉 --> <typedmaxrange type="Herdable">0</typedmaxrange> <typedmaxrange type="Huntable">10</typedmaxrange> </action> 顺便去protoy.xml把下列语句删掉: <ProtoAction> <Name>NoWork</Name> <Rate type ='Herdable'>1.000000</Rate> </ProtoAction> 未解之谜:其他村民的tactics也有相同NoWork语句,然而可以打猎,但是我没空研究了。 我不清楚是不是灵异事件,如果删除没效果,在protoy.xml直接把日本村民的tactics修改成欧洲村民的tactics绝对没问题。 我测试时猎物自己莫名其妙挂了,好像是被村民自动干掉了,问题是我没有操作,也没有修改这个,祝你好运。

综上,思维才是最重要的, 虽然一开始的判断已经偏了方向..........
另外,记住一句话,有什么抄什么,先模仿后创新。
PS:对比也很重要;如果需要研究语句作用,可以删除一个一个语句地删除或者一次修改巨大数值,之后看变化。