日本农民打猎

waterduck发表于 2018-12-31 19:50
请教:帝国III 如何修改文件 使得日本农民能够采肉?

我是用记事本简单修改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绝对没问题。
我不清楚是不是灵异事件,我测试时猎物自己莫名其妙挂了,好像是被村民自动干掉了,问题是我没有操作,也没有修改这个,祝你好运。