• 注册
  • 攻略教程 攻略教程 关注:711 内容:221

    七日杀A17版本MOD工作方式以及应用教程!

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

    汉化自官网论坛大神  sphereii  的教程帖子  点击前往论坛发布贴

    授权声明,本帖尚未汉化完成,请等待更新!

    七日杀A17版本MOD工作方式以及应用教程!


    七日杀在A17里内置了XPath,那么XPath是什么呢?

    XPath是一种添加,更改或删除XML配置内容和设置值的方法,无需直接编辑更改原版XML文件。

    XML又是什么呢?七日杀的内容都是由XML里面的配置文件来控制的,方块,物品,伤害都保存在这些文件中

    它位于七日杀根目录Data\Config目录下

    七日杀更新A17以后的Mod结构:

    Mods(游戏根目录的Mods文件夹) / 
    	
    	<Mod名称> / 
    		Config(配置文件) / 
    		ItemIcons(物品图片) / 
    		ModInfo.xml(MOD信息) 
    		......
    		
    	<MMod名称2> / 
    		Config(配置文件) / 
    		ModInfo.xml(MOD信息)
    		......

    之前在其他帖子说过,MOD中含有ModInfo.xml才能被游戏识别为MOD进行加载

    通过上面的代码大家可以看出,采用XPath编辑方式后允许多个MOD同时进行加载

    一般来说只要不是功能冲突都可以正常的运行在游戏中

    附上ModInfo.xml文件代码

    <xml>
        <ModInfo>
            <Name value="七日杀中文网合成配方修改范文" />            (MOD名称)
            <Description value="为新手提供修改合成配方的教程." />    (MOD描述)
            <Author value="英雄大人" />                              (MOD作者)
            <Version value="1.0.0" />                                (MOD版本号)
        </ModInfo>
    </xml>

    Config文件夹(游戏设置配置文件夹)将支持在以下文件夹结构中加载使用xpath编写的XML文件:

    Config / entityclasses.xml        (实体类参数)
    Config / gamestages.xml        (游戏阶段参数)
    Config / items.xml         (物品参数)
    Config / blocks.xml        (方块参数)
    Config  /  .....    
    
    (注明,目前暂时还无法直接读取MOD中的本地化文件Localization.txt)

    Config文件夹中的文件不是复制原版的文件来直接进行修改。

    相反,你只需要在文件内写入你想要修改的内容即可。

    Config下的文件必须与原版文件名一致,不一致将无法加载。

    你无法创建多个同样文件如items2.xmlitems3.xml等,它不会被正常加载的。

    每个XML文件的所有更改都是在各自的XML文件内完成(例如items.xml(物品)、blocks.xml(方块))

    但是,每个mod都可以拥有自己的items.xml(只要不是修改相同的东西就不会起冲突)

    在游戏初始化期间,MOD将在内存中原版XML文件进行合并;实际上不会修改任何文件

    这意味着什么?

    采用XPath制作的MOD不会修改你的任何游戏文件,不需要这个MOD可以直接删除,

    并不需要再重新安装游戏等操作。

    这对我们来说意味着我们将能够制作各种比较常见和需要的小mod,我一直称之为【modlets

    它可以添加,删除和更改游戏的小部分功能、设置(比如安安大神的除草MOD)。

    它们可以一起使用(功能不同的XPath制作的MOD一般不会起冲突),也可以添加到大修模式中,以便让您的游戏更轻松。

    这些modlet是存放在游戏数据之外的文件夹,比如过去您在修改了原版XML之后,Steam将游戏更新为17.2,您将丢失所有更改。

    但如果它们作为modlet存在,则在Mods文件夹下,它们将是安全的。

    只要您的xpath对新XML仍然有效,它就能够正常加载而不需要您做任何额外的工作。

    通过正确构建的modlet,我们将能够拼凑出新的游戏风格,供玩家欣赏和分享。

    让我们开始你的旅程……


    XPath set命令

    对于不熟悉语法的人来说,XPath可能看起来有点吓人。

    让我们看看我们是否可以通过一个例子来解释简单xpath的格式。

    首先,我们将使用setxpath命令,它允许我们更改项目的属性或值。另一篇文章将展示更多的xpath命令,但我们将从最简单的开始。

    所有xpath命令都使用xpath =“”参数来告诉游戏您要进行更改的位置。然后是更改值,删除值,添加新的内容或您尝试执行的任何操作。

    下面是自行车的背包代码,我们想要更改自行车的背包大小。

    <lootcontainers>
    	<!-- 其他背包容器 -->
    	<!-- 自行车背包 -->
    	<lootcontainer id="62" count="0" size="4,3" sound_open="UseActions/open_shopping_basket" open_time="0" sound_close="UseActions/close_shopping_basket" loot_quality_template="baseTemplate">
    	</lootcontainer>
    	<!-- 其他背包容器 -->
    </lootcontainers>

    我们需要准确的标明我们要修改的项目数值的分类数值的内容

    我们想要修改自行车背包的size大小,但肯定是不能直接定位size。

    因为每个背包容器都有自己的size,我们需要先找到自行车背包!

    大家看上面的原版代码可以看到,这个XML里面是有ID的,自行车的背包ID为62

    当我们想在xpath中引用修改XML节点时,我们将使用/set

    xpath="/lootcontainers/lootcontainer"

    上面这个代码可以定位到背包中,但是其中有很多个背包,我们需要定位自行车的ID

    xpath="/lootcontainers/lootcontainer[@id='62']

    上面这段代码让文件直接定位到了自行车背包!

    文件里ID为62的是唯一的,所以我们不会存在任何错误风险。

    接下来我们想要更改大小(size)到我们想要的数值。

    xpath="/lootcontainers/lootcontainer[@id='62']/@size"

    上面这段代码很清楚的标明了,我们要更改ID为62的背包的size值(大小值)

    所以我们的全套xpath命令看起来像这样:

    <set xpath="/lootcontainers/lootcontainer[@id='62']/@size">7,6</set>

    接下来演示一下另外一个例子!

    这一次,我们想要添加一个名为“NoAmmo”的新弹药类型

    对于弹药类型,我们想要为每个使用9毫米子弹的枪添加【NoAmmo】。

    可能只有一支枪或者有很多枪使用它。

    无论哪种方式,我们都希望能够成功的使用。

    由于我们正在更换使用9毫米子弹的所有枪支,因此我们不必指定ID或名称。

    相反,我们将寻找具有“9mmBullet9毫米子弹的英文代码)”值的每个Magazine_items(枪支弹药类型)。

    这是XML的代码片段。为了节省空间,我删除了额外的行,并留下了我们想要看到的代码。

    <items>
    	<item id="40" name="gunPistol">
    		<!-- 省略代码 -->
    		<property class="Action0">
    			<!-- 省略代码 -->
    			<property name="Magazine_items" value="9mmBullet" />
    		</property>
    	</item>
    </items>

    下面是完整的MOD更改代码

    <set xpath="/items/item/property[@class='Action0']/property[@name='Magazine_items'][@value='9mmBullet']/@value">9mmBullet,NoAmmo</set>

    对于具有属性类“Action0(动作类别)”的每个项目,

    并且具有弹药类型“Magazine_Items”的属性,

    值为9mmBullet的枪支,

    将值更改为9mmBullet,NoAmmo (这样枪支的增加弹药类型就完成)

    注意到了吗? [@ name ='Magazine_items'] [@ value ='9mmBullet ']

    我们告诉xpath属性名称必须Magazine_Items(枪支弹药类型),并且在我们添加NoAmmo之前它的值必须是9mmBullet

    但是大家注意到了吗?我们目前只是更改了枪支弹药类型加入了”NoAmmo”

    但是物品列表里面目前并不存在这个弹药,所以我们需要下一步,加入NoAmmo这个物品!


    XPath append命令


    以前,我们已经介绍了set命令,它允许我们更改单个值和属性。

    我想将接下来的部分专门用于讲解append命令,

    因为它可能是第二个使用的最多的xpath命令。

    首先:

    append命令可以做两件事

    添加一个新的XML配置物品(方块、物品、弹药、武器、参数等等等)

    或者在原有的基础上添加一个额外的值。

    在上一篇文章中我们给使用9mm子弹的武器加入了NoAmmo这个弹药。

    <set xpath="/items/item/property[@class='Action0']/property[@name='Magazine_items' and @value='9mmBullet']/@value">9mmBullet,NoAmmo</set>

    其实用append命了也可以达到,并且更简单,

    我们不需要指定现有的弹药值,直接在符合条件的情况下加入NoAmmo

    <append xpath="/items/item/property[@class='Action0']/property[@name='Magazine_items' and @value='9mmBullet']/@value">,NoAmmo</append>

    大家用心看上面这段代码,直接在符合条件的值后加入NoAmmo,并不需要再次写上“9mmBullet”

    但是注意,因为游戏运行时会与原版合并,所以NoAmmo前面要加上【,】英文逗号隔开2种弹药类型!

    [附加节点] 

    append的另一种方式可以帮助我们添加更大的项目。

    我将使用 xyth(国外的MOD作者)的垃圾物品项目mod的一部分来演示我们可以在items.xml中添加多个项目的位置。

    XPath会把附加到 /items 节点的底部。

    这会将其保留在<items> </ items>块中,但会将其添加到文件末尾。

    Mods/JunkItems/Config/items.xml:

    <configs>
    	<append xpath="/items">
    		<!-- 添加两种xyth的垃圾物品的代码 -->
    		<item  name="itemMaster">
    			<property name="Meshfile" value="Items/Misc/sackPrefab" />
    			<property name="DropMeshfile" value="Items/Misc/sack_droppedPrefab" />
    			<property name="Material" value="organic" />
    			<property name="HoldType" value="45" />
    			<property name="Stacknumber" value="500" />
    			<property name="Weight" value="5" />
    			<property name="Group" value="Resources" />
    			<property name="SellableToTrader" value="false" />
    		</item>
    		<item name="scrapSteel">
    			<property name="Extends" value="itemMaster" />
    			<property name="CustomIcon" value="ui_game_symbol_scrapSteel" />
    			<property name="Material" value="Msteel" />
    			<property name="Weight" value="1" />
    			<property name="MeltTimePerUnit" value="0.5" />
    			<property name="RepairAmount" value="10" />
    		</item>
    	</append>
    </configs>

    请注意,在代码尾部我们要结束添加,注意添加相对应的结束代码 </append>


    总结

    以前,我们刚刚介绍了set命令来更改单个值。xpath中还支持以下命令。可能会有更多,但这些将涵盖我们的大部分用途。

    <set xpath =””>

    允许您更改值

    示例: 

    此行更改背包容器 ID 62,并将其大小更改为7,6。

    <set xpath="/lootcontainers/lootcontainer[@id='62']/@size">7,6</set>

    <append xpath =””>

    这允许您在xpath中位置的末尾添加<append>和</ append>之间存在的任何XML,但仍在其范围内。

    您可以使用append添加大量的XML项目。

    示例:

    此行将新实体添加到entity_classes的底部。它将添加到顶级类别<entity_classes> </ entity_classes> xml中。

    <append xpath="/entity_classes">
    	<entity_class name="PassiveFlight" extends="animalChicken">
    	<!-- 省略内容 -->
    </append>

    它还可以允许我们将值附加到现有值。(这需要测试)

    示例:

    此行可能会将NoAmmo添加到9mmBullet的现有值。

    <append xpath="/items/item/property[@class='Action0']/property[@name='Magazine_items' and @value='9mmBullet']/@value">,NoAmmo</append>

    <insertAfter xpath =””>

    允许您在指定的xpath之后添加节点。它找到您要搜索的XML节点,然后添加<insertAfter>块内的任何内容。

    示例:

    下面的代码段允许您在windowVehicleStats窗口中添加新内容,在recti调用'content'之后,在XUi / windows.xml中:

    <insertAfter xpath="/windows/window[@name='windowVehicleStats']/rect[@name='content']" >
    	<panel pos="240, 0" style="header.panel">			
    		<sprite style="header.icon" sprite="ui_game_symbol_add"/>
    		<label style="header.name" text="COMBINE" text_key="xuiCombine"/>
    	</panel>
    </insertAfter>

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

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

    请登录之后再进行评论

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

    赞助广告位

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

    分享网站

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