Rimworld Mod制作教程3 使用Xpath制作patch(补丁)

您所在的位置:网站首页 xmlpatch Rimworld Mod制作教程3 使用Xpath制作patch(补丁)

Rimworld Mod制作教程3 使用Xpath制作patch(补丁)

2024-07-08 00:25| 来源: 网络整理| 查看: 265

文章目录 废话核心内容1 使用Xpath制作patch(补丁)1.1 基本格式1.2 手术类型1.3 ~~偷窥~~ 参考他人代码

废话

rimworld在A17版本后提供了一个新的编写mod的特性,叫做XML PatchOperations。直译就是补丁手术。 正如字面意思,它使用xpath的语法让modder可以以补丁的方式修改原版以及其他mod中变量的值。 本篇做一个简单的入门介绍,因为原文写的已经非常详细了。 原文链接

核心内容 1 使用Xpath制作patch(补丁) 1.1 基本格式

大部分格式都是 手术类型–变量位置–值,一些高级语法稍微复杂一些,可以做到if()else{}一样的逻辑判断

/Defs/TerrainDef[defName="WaterDeep"]/texturePath Your/Texture/Path/Here

关于Xpath的路径需要注意的是,它代表xml文件中的节点路径,而不是你的xml文件在硬盘中的路径,虽然文件夹可能也叫一样的名字 举例分析: Human这个种族的def文件中,xpath的路径应该为/Defs/ThingDef,如果修改label则应该写为/Defs/ThingDef[defName=“Human”]/label,如果要添加comps节点,则要在value中填写comps,不可以在路径中填写comps,因为源文件里没有这个属性。反之如果源文件里有comps则要追踪到comps路径下。

Human human A baseline human, mostly unmodified by gene engineering and mostly unchanged by evolutionary pressures on non-Earth planets. 1750 4.6 1.0 16 26 50 3 left fist Blunt 8.2 2 LeftHand Stun 14 right fist Blunt 8.2 2 RightHand Stun 14 teeth Bite 8.2 2 Teeth 0.07 head Blunt 5 2 HeadAttackTool true 0.2 Humanlike HumanlikeConstant Humanlike true 80 Leather_Human HumanStandard Human 1 1 OmnivoreHuman 45 0.8 0.20 0.02 (0.5, 0) (1, 1) (1.01, 0.02) (3.5, 0) HumanlikeBaby 0 HumanlikeToddler 1.2 HumanlikeChild 4 HumanlikeTeenager 13 HumanlikeAdult 18 Pawn_Melee_Punch_HitPawn Pawn_Melee_Punch_HitBuilding Pawn_Melee_Punch_Miss (0.3, 0.8, 0.4) (0,0,-0.3) (14,0) (16,100) (50,100) (60,30) (70,18) (80,10) (90,3) (100,0) OrganicStandard Human ExciseCarcinoma AdministerMechSerumHealer RemoveBodyPart Euthanize Anesthetize 1.2 手术类型

支持的手术类型如下

四种基础手术 PatchOperationAdd 为所选的节点添加一个子节点,以及子节点的默认值,其实就是新增变量 PatchOperationInsert 为所选的节点添加一个同级别的节点和默认值 PatchOperationRemove 删除所选的节点 PatchOperationReplace 替换所选的节点(的值) 三个针对xml Attribute(特性)的手术 PatchOperationAttributeAdd 添加特性,只有在特性不存在的时候才会生效 PatchOperationAttributeSet 为已经存在的特性提供修改 PatchOperationAttributeRemove 撤销某个特性 三种更复杂的类型 PatchOperationAddModExtension 添加ModExtension. ModExtension是一种以C#的方式给xml打补丁的方式,简单轻便,可以做更复杂的逻辑,但因为没有自己独立的def容易出一些问题。 ModExtension介绍 PatchOperationSetName 改变节点的命名 PatchOperationSequence 一个PatchOperration格式的序列,一组手术,有语法错误的时候会停下来 三种条件手术 PatchOperationTest 对节点进行测试,很适合用在手术序列上 PatchOperationConditional 条件判断的手术,有了它你甚至可以在xml里写逻辑代码0.0 PatchOperationFindMod 可以用来测试某个mod是否存在,然后配合Conditional类型的手术可以让你的mod针对其他mod做一些特别的修改,从而达到高兼容性

我就主要说一下条件判断手术,因为会比较常用

/Defs/ThingDefs_Buildings[defName = "GarageKid_Chicken"]/description /Defs/ThingDefs_Buildings[defName = "GarageKid_Chicken"]/description 修改后的描述 /Defs/ThingDefs_Buildings[defName = "GarageKid_Chicken"]/description 修改后的描述 1.3 偷窥 参考他人代码

这周有一个流行度很高的mod刚好采用xpath实现功能,名字叫做Priority treatment,它的功能是修改小人的AI。原版的小人有时候特别智障,一群伤员躺在病房,结果医生去吃饭,去睡觉,甚至去看电视。。。这个mod改善了这种情况,让医生职业的角色优先从事医护工作。

修改AI这操作,萌新一定觉得非常高大上,然而这个mod一共只使用了4个非常简单的xpath手术操作。 原版小人路过燃烧的地方时,不论他在做什么工作,一定会优先灭火,这个行为是由于灭火工作里有一个true突发事件=true的变量。普通的工作是没有的。通过给原版其他工作添加这个变量,从而达到让医生救人如救火的效果,各种意义上。

*/WorkGiverDef[defName = "DoctorTendToHumanlikes"] true */WorkGiverDef[defName = "DoctorTendToSelf"] true */WorkGiverDef[defName = "DoctorTendToAnimals"] true */WorkGiverDef[defName = "DoctorRescue"] true

*表示xpath语法中匹配任何元素节点,是从根目录匹配到/Defs存在WorkGiverDef这个目录的,感兴趣的话可以看一眼xpath的语法教程 xpath语法教程

如果这篇文章对你有帮助,点赞收藏支持一下呗!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3