• 注册
  • 攻略教程 攻略教程 关注:837 内容:237

    [教程]XPath指南

  • 查看作者
  • 打赏作者
  • 当前位置: 七日杀中文网 > 攻略教程 > 正文
  • 攻略教程
  • Lv.1

    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

    谢谢大家捧场!

    "点赞是美意,打赏是鼓励"

    这才真大佬,会写语法不定会,会语法才会写
    回复
    如果愿意,可以讲些新知识 [s-23]
    回复
    新加有insert,apend和setattribute,请问大佬这三个如何选择使用,是不是如同意思一样,insert插入,apend扩展,set attribute设置属性
  • zhdwal语法没有要求,按你觉得简单的方式来就行,比如我要修改一个配方count=1改为2,我可以用set语法来找这个路径一直找到这个参数,然后2去设置,也可以简单粗暴的直接删除掉 count 那一整段语句,然后新的进去, 里面的代码可以多行,你可以直接在里面写完整代码
    拉黑 3年前 电脑端回复
  • zhdwal语法没有要求,按你觉得简单的方式来就行,比如我要修改一个配方count=1改为2,我可以用set语法来找这个路径一直找到这个参数,然后[set]2[set]去设置,也可以简单粗暴的直接[remove]删除掉 count 那一整段语句,然后[append]新的进去, [append]里面的代码可以多行,你可以直接在里面写完整代码,
    拉黑 3年前 电脑端回复
  • 黑吃黑@zhdwal [s-3] 好的
    拉黑 3年前 手机端回复
  • 回复
    Lv.8
    浴火重生

    看起来很nice

    回复
    Lv.1

    牛啤

    回复
    Lv.10
    闪耀星神

    大佬牛批


    人生如戏 漫步人生

    回复
    Lv.2
    感谢大佬

    长时间不在线,有信息可留言。

    回复

    大佬好,问一下亡灵遗产Mods文件夹下会有很多同名的文件,自己编写的Mod文件是如何能够区分这些同名文件的,我看别人写的Mod文件比如

    <set xpath="/items/item[@name='vehicleBicyclePlaceable']/effect_group/passive_effect[@name='VehicleCargoCapacity']/@value">
    1200
    </set>

    这种会不会把所有文件夹下的items文件都去找一遍,符合后面路径参数的全都改掉

  • 小奈亚づ所有的mod文件都是根据文件名称顺序,从上往下依次读取,然后调整原始文件的。
    拉黑 7个月前 电脑端回复
  • 回复

    你是真正的大佬!!!!!

    擅长做一些简单的mod。

    回复

    这个逼装的我给82分,剩下的用666的方式打给你!

    回复
    因恶意刷帖用户过多,本版块已取消回帖金币奖励,请签到获取!>>>金币获取指南<<<

    请登录之后再进行评论

    登录
    • 大版主
    • 小版主
  • yichen
  • 柒月白风清
    柒月白风清
    一只小萌新,万年摸鱼党!已经脱坑了。。。
  • Cure_805
    Cure_805
    晚上在睡觉,白天在工作,不一定能及时回复,有事可以留言!
  • 至善丶丶
    至善丶丶
    群:1050040662 定制/开服/地图制作/价格公道
  • 已重置033
    已重置033
    一个爱玩七日杀的妹纸
  • 暂没有数据

    赞助广告位

  • 点击展示图片即可一键加入QQ群
    赞助广告:100R/月 目前空缺广告位:0

    分享网站

  • 繁体中文
  • 任务
  • 动态
  • 到底部
  • 帖子间隔 侧栏位置: