7日杀官方提供的有xml 内存修改方式
这也是为什么7日杀轻mod这么多的原因,下面来分析一下数据结构:
七日杀xml文件:path/Config/data.xml
七日杀本地化翻译文件:path/Config/Localization.txt
先讲xml文件,xml文件顾名思义使用的是xml标记语言,所谓标记语言就是规定格式
先看一段原代码:
<items> <item name="drinkJarBoiledWater"> <property name="HoldType" value="3"/> <property name="DisplayType" value="waterDysentery"/> <property name="Stacknumber" value="10"/> <!-- STK drink --> <property class="Action0"> <property name="Class" value="Eat"/> <property name="Delay" value="1"/> <property name="Use_time" value="..."/> <property name="Sound_start" value="player_drinking"/> <property name="Create_item" value="drinkJarEmpty"/> </property> <effect_group tiered="false" name="Drink Tier 0/1"> <requirement name="NotHasBuff" buff="buffIsOnFire"/> </effect_group> </item> </items>
我将他们格式化了,然后我们可以看到他们的对应关系:
<items>
<item name=”xx”>
<property name=”Stacknumber” Value=”10″ xx=”xx”>
</item>
<items>
可以看到 <items>是最上级的它有一组对应,后面的一组前面带有/符号【</items>】,用来告诉解释器哪儿是头,哪儿是尾。
<item>是另外一组,它也有两个参数对应,尾部比头部多出一个/符号,他们的关系是 <item> 是<items>的下一级
既然如此我们就可以看懂xml里面究竟写了什么了。让我们一句一句来解释:
<items> 做为一个集合存在,集合叫items <item name="drinkJarBoiledWater">作为一个合集存在 <property name="HoldType" value="3"/>类property 元素name <property name="DisplayType" value="waterDysentery"/>类property 元素name <property name="Stacknumber" value="10"/> <!-- STK drink --> <property class="Action0">类property 元素class <property name="Class" value="Eat"/> <property name="Delay" value="1"/> <property name="Use_time" value="..."/> <property name="Sound_start" value="player_drinking"/> <property name="Create_item" value="drinkJarEmpty"/> </property> <effect_group tiered="false" name="Drink Tier 0/1">合集<effect_group> <requirement name="NotHasBuff" buff="buffIsOnFire"/>虽然<>内的字符不完全相同但他们是一个合集 </effect_group> </item>作为<item>合集的结尾 </items>做为一个集合存在,集合叫items,它是结尾,包含在其中的合集有只有<item>因为虽然里面还有一个合集<effect_group>,但<item>将包括<effect_group>在内的其他所有字符都包含在内
请多观察上面代码的特点 下面介绍七日杀的文件结构:
打开七日杀程序位置/Data/Config 会发现 这里放置了许多官方展示方便第三方进行编辑的xml 例如:
Config/entityclasses.xml 实体类
Config/items.xml 物品类
Config/recipes.xml 配方类
Config/quests.xml 任务类
尽管我只罗列了几个重点类,但是剩下的不知道它是啥,翻译一下就能知道它大概的用途,因为编程命名规则决定。
——————————————————————————————–
现在我们要写一个配方,进一步理解如何从mods 文件夹到 config文件夹内xml文件
<recipes> <recipe name="drinkJarBoiledWater" count="1" craft_area="campfire" craft_time="40" tags="perkMasterChef,perkChefBoiledWater,boiledWater"> <ingredient name="drinkJarRiverWater" count="1"/> </recipe> </recipe>
为了举一反三,我摘取了游戏文件recipes.xml文件内的原字段
下面【】内表示注释
可以看到 在合集recip[翻译过来是配方的意思]中 recipe有name、count、craft_area等参数,他们分别是 名字[这个名字是游戏内它的代号]、个数1个、创造的位置”campfire”[营火]。创造需要的时间40秒
是不是感觉有所理解?如果我告诉你name=”drinkJarboiledWater”就是开水的意思呢?
我可以这样理解这段代码
合集recipe开始 名称=开水 数量=1个 创造位置=营火处 创造时间=40秒 标记=技能,技能煮开水…… 材料 名称=污水 数量=1个 合集recipe结束
如果不能理解还请反复查看上面的教程,接下来不再由浅入深,直接进入正题
—————————————————————————————-
mod文件的结构需要:path\Mods\你的模组名字\Config\recipes.xml 修改的地方
path\Mods\你的模组名字\ModInfo.xml mod的注释
mod注释如下: <?xml version="1.0" encoding="UTF-8" ?> <xml> <ModInfo> <Name value="游戏修改" /> mod的名字 <Description value="修改了几个小地方" />mod的介绍 <Author value="zhdwal" />作者 <Version value="1.0" />版本 </ModInfo> </xml>
现在我要修改之前的代码将污水的数量需求改成2个,我们定位
<ingredient name="drinkJarRiverWater" count="1"/> 将count 改为 2
代码如下:这个文件必须与修改的文件名一致!
<set xpath="/recipes/recipe[@name='drinkJarBoiledWater']/ingredient/@count">2<set> ser 置 修改的意思 xpath 关键词 告诉解释器这是路径 recipes 合集 最上面一层合集 recipe 合集 再上面一层合集 [@name='drinkJarBoiledWater'] 在合集recipe内找开头参数为name的 且它的值为 drinkJarBoiledWater 注意这里的符号是单引号'' / 符号 通过/进入下一级 ingredient 合集 再进入一层合集 @count 标记 定位所在合集中 参数count 的位置 2 字符 要修改为的字符 </set> 关键字 封闭语set注意尾巴带/
下面给出其他用法
append <append xpath="/recipes/recipe[@name='drinkJarBoiledWater']"> <ingredient name="foodHoney" count="1"/> </append> append 添加 在目标位置添加一段代码 在<append></append>中的都算,这里我直接添加了一段完整的代码 它也是生效的。 recipe[@name='drinkJarBoiledWater'] 直接在name = drink.... 定位到这,然后直接在后面添加代码。
insertAfter <insertAfter xpath="/recipes/recipe[@name='drinkJarBoiledWater']" > <ingredient name="foodHoney" count="1"/> </insertAfter> </insertAfter> 在目标位置之后添加,注意该语句需要十分精准。不能模糊寻找。 譬如 它的参数有多个 不止name=drinkJarBoiledWater这一个 剩下的也要写上一边该语句寻找 例:<insertAfter xpath="/recipes/recipe[@name='drinkJarBoiledWater'][@value='drink'][@count='1']" > <ingredient name="foodHoney" count="1"/> </insertAfter> 直接[][]分割每个参数即可
insertBefore <insertBefore xpath="/recipes/recipe[@name='drinkJarBoiledWater']" > <ingredient name="foodHoney" count="1"/> </insertBefore> 同insertAfter同理,不过它是在目标位置之前添加。 注:再次建议不懂的词汇找翻译,这个before和after就是白送的
remove <remove xpath="/recipes/recipe[@name='drinkJarBoiledWater']/@count" /> remove 移除 定位到目标合集以后,用@定位参数count 然后直接移除 ,该语句没有</remove>作为结尾 取而代之的是一根/ 因为有些参数可以省略这一步用/代替这里不深究
setattribute <setattribute xpath="/recipes/recipe[@name='drinkJarBoiledWater']" name="count">1000</setattribute> setattribute 添加一个参数
removeattribute <removeattribute xpath="/recipes/recipe[@name='drinkJarBoiledWater']/@value" /> removeattribute 删除一个参数
值得注意的是在mods/你修改的参数.xml文件内需要用config包围
<config> <removeattribute xpath="/recipes/recipe[@name='drinkJarBoiledWater']/@value" /> <setattribute xpath="/recipes/recipe[@name='drinkJarBoiledWater']" name="count">1000</setattribute> <insertBefore xpath="/recipes/recipe[@name='drinkJarBoiledWater']" > <ingredient name="foodHoney" count="1"/> </insertBefore> <append xpath="/recipes/recipe[@name='drinkJarBoiledWater']"> <ingredient name="foodHoney" count="1"/> </append> </config>
这表示你是在从mods/xx.xml文件内操作 config/xx.xml文件,非常重要!
————————————————————————————–
聊完了xml文件来聊聊本地化文件
七日杀本地化翻译文件:path/Config/Localization.txt
打开它随便复制两行给大家看看
Key,File,Type,UsedInMainMenu,NoTranslate,english,Context / Alternate Text,german,latam,french,italian,japanese,koreana,polish,brazilian,russian,turkish,schinese,tchinese,spanish drinkJarBoiledWater,items,Food,,,Boiled Water,,Gekochtes Wasser,Agua hervida,Eau bouillie,Acqua bollita,お湯,끓인 물,Gotowana woda,Água Fervida,Кипяченая вода,Kaynamış Su,开水,開水,Agua hervida drinkJarBoiledWaterDesc,items,Food,,,Fresh bottled water. Well as fresh as you can get in the apocalypse.,,"Eine Flasche mit frischem Wasser. Na ja, so frisch, wie es während der Apokalypse geht.","Agua fresca embotellada. Bueno, tan fresca como puede ser en el apocalipsis.","De l'eau fraîche en bouteille. Enfin, aussi fraîche qu'elle puisse l'être en période d'apocalypse.",Acqua pura in bottiglia. Per quanto possa rimanere pura durante un'apocalisse.,ボトル入りの新鮮な水です。まあ、黙示録基準での新鮮ですが。,병에 담겨 있는 신선한 물입니다. 아포칼립스 상황이라는 걸 고려했을 때 신선하다고 부를 수 있죠.,"Świeża woda w butelce. Na tyle świeża, na ile jest to możliwe w postapokaliptycznym świecie.",Água engarrafada fresca. Fresca em termos apocalípticos.,"Свежая бутилированная вода Настолько свежая, насколько это возможно во время апокалипсиса.",Taze şişe su. Kıyamette ne kadar taze olabilirse o kadar taze.,新鲜的瓶装水。就像你在世界末日中能感受到的新鲜程度一样。,天然瓶裝水在末日條件下也算是新鮮啦。,"Agua fresca embotellada. Bueno, tan fresca como puede ser en el apocalipsis."
然后是我修改后的Localization.txt
Key,File,Type,english,schinese,tchinese drinkYuccaJuiceSmoothieDesc,items,Food,This smoothie helps you survive in severely hot environments.,这款丝兰果昔能帮助你在极度炎热的环境中生存。,這款絲蘭果昔能幫助你在極度炎熱的環境中生存。
drinkJarBoiledWater=开水
drinkJarBoiledWaterDesc=开水描述
drinkYuccaJuiceSmoothieDesc=丝兰果汁奶昔描述
提示:这里使用,作为分割标记自己悟吧!【英文的,哈不是中文的,这里特别提示上面的所有符号都是英文的】
以上
这些可以够基本修改使用了,大家可以下载他人的轻mod查看其中的代码关键之处,希望大家多多共享自己的轻mod
谢谢大家捧场!
看起来很nice
牛啤
大佬牛批
人生如戏 漫步人生
长时间不在线,有信息可留言。
大佬好,问一下亡灵遗产Mods文件夹下会有很多同名的文件,自己编写的Mod文件是如何能够区分这些同名文件的,我看别人写的Mod文件比如
这种会不会把所有文件夹下的items文件都去找一遍,符合后面路径参数的全都改掉
你是真正的大佬!!!!!
擅长做一些简单的mod。
这个逼装的我给82分,剩下的用666的方式打给你!