日本农民打猎



教程是固定的,思维是变化的。但是总有些人总是问,这个怎样修改呀?那个怎样修改呀?在哪修改呀?完全不会呀。

说句实话,这种人我看见了理都不想理他,特别是那种只知道伸手与利用的人。QQ群问人,只有问人,平时潜水,一有问题就出来问,然而却在别的群聊的津津有味,解决问题了一句谢谢也没有。

有的人问为什么没有圣典不写(修改图标、科技启用自动采集、科技启用攻击等)这些教程呀?事实上教程不可能涉及到每一种情况,你自己想一下是不是有成千上万种可能,甚至几十亿种可能,就一个人能写这么多吗?就算是有100人写也写不了这么多;圣典体积容得下吗?所以思维才是最重要的,例子只是给你照抄的,只是希望你从中学习到方法。


请教:帝国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:对比也很重要;如果需要研究语句作用,可以删除一个一个语句地删除或者一次修改巨大数值,之后看变化。