骑砍二 ATC MOD 使用教程与应用案例解析
作者:blibli-财不外漏 / NEXUSMODS-PuepleKarmen
案例MOD依赖:ATC - Adonnay’s Troop Changer & AEW - Adonnay’s Exotic Weaponry & New Armor
文本编辑工具:VS Code(推荐使用,简单易上手)
使用ATC MOD进行兵种定制不仅能够高度化定制兵种,除了决定兵种的装备、性别外,还能决定兵种的年龄范围、外貌甚至统一发型。并且其相比其他兵种自定义mod更加底层,不容易出BUG引起游戏崩溃。
一、xml文件
以下内容改编于Mozilla-XML 简介 与 菜鸟教程:XML
XML(Extensible Markup Language)是一种类似于 HTML,但是没有使用预定义标记的语言。因此,可以根据自己的设计需求定义专属的标记。这是一种强大将数据存储在一个可以存储、搜索和共享的格式中的方法。最重要的是,因为 XML 的基本格式是标准化的,如果你在本地或互联网上跨系统或平台共享或传输 XML,由于标准化的 XML 语法,接收者仍然可以解析数据。
总结: XML 和基于 XML 的语言的整个结构是建立在标签(tag)之上的。 ----XML 核心思想
1. XML声明
XML——声明并非是一种标签,其用于传输文档的元数据。
XML 文档第一行以 XML 声明开始,用来表述文档的一些信息,如:
<?xml version="1.0" encoding="UTF-8"?>
version: 当前文档使用的版本。(骑砍二所有xml版本均为1.0)
encoding: 当前文档使用的编码,英文用UTF-8,中文用UTF-16(一般只需用于汉化文件)。
2. 标准XML文档格式
XML 定义结构、存储信息、传送信息。
2.1 标签格式
<?xml version="1.0" encoding="UTF-8"?>
<site>
<name>RUNOOB</name>
<url>https://www.runoob.com</url>
<logo>runoob-logo.png</logo>
<desc>编程学习网站</desc>
</site>
、、、
标签必须成对出现,有开始标签就需要有结束标签,例如:
- 开始标签:
- 结束标签:
所有的 XML 元素都必须有一个关闭标签
2.2 标签属性
与 HTML 类似,XML 元素也可拥有属性(名称/值的对)。
XML 的属性值必须加引号。
<NPCCharacters>
<NPCCharacter id="DZ_Inf0_T1"
is_female="true"
default_group="Infantry"
is_hero="false"
is_basic_troop="true"
level="6"
name="{=dz_inf1_t1}Dengzhou Volunteer"
occupation="Soldier"
culture="Culture.empire">
………………
</NPCCharacter>
……………
</NPCCharacters>
2.3 标签元素
XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
空元素:空元素只有开始标签,没有元素体和结束标签,但空元素一定要闭合。例如:<hello/>
一个元素可以包含:
- 其他元素(其他标签)
- 文本
- 属性
- 或混合以上所有…
XML 必须包含根元素,它是所有其他元素的父元素,比如以下实例中<Equipments>
就是根元素:
<Equipments>
<EquipmentRoster>
<equipment slot="Item0" id="Item.empire_sword_1_t2" />
<equipment slot="Cape" id="Item.Grifons Archer Shoulders Black1"/>
<equipment slot="Body" id ="Item.Grifons Knight Armor Black1"/>
<equipment slot="Gloves" id="Item.Grifons Archer Gloves Black1"/>
<equipment slot="Leg" id="Item.Grifons Archer Boots Black1"/>
</EquipmentRoster>
<EquipmentRoster>
<equipment slot="Item0" id="Item.vlandia_sword_1_t2" />
<equipment slot="Cape" id="Item.Grifons Archer Shoulders Black1"/>
<equipment slot="Body" id ="Item.Grifons Knight Armor Black1"/>
<equipment slot="Gloves" id="Item.Grifons Archer Gloves Black1"/>
<equipment slot="Leg" id="Item.Grifons Archer Boots Black1"/>
</EquipmentRoster>
</Equipments>
2.4 XML 命名规则
XML 元素必须遵循以下命名规则:
- 名称可以包含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能以字母 xml(或者 XML、Xml 等等)开始
- 名称不能包含空格
可使用任何名称,没有保留的字词。
最佳命名习惯:
使名称具有描述性。使用下划线的名称也很不错:<first_name>、<last_name>。
名称应简短和简单,比如:<book_title>,而不是:<the_title_of_the_book>。
避免 “-” 字符。如果您按照这样的方式进行命名:“first-name”,一些软件会认为您想要从 first 里边减去 name。
避免 “.” 字符。如果您按照这样的方式进行命名:“first.name”,一些软件会认为 “name” 是对象 “first” 的属性。
避免 “:” 字符。冒号会被转换为命名空间来使用(稍后介绍)。
XML 文档经常有一个对应的数据库,其中的字段会对应 XML 文档中的元素。有一个实用的经验,即使用数据库的命名规则来命名 XML 文档中的元素。
在 XML 中,éòá 甚至中文等非英语字母是完全合法的,不过需要留意,您的软件供应商不支持这些字符时可能出现的问题。
2.5 XML注释
注释格式为以 <!--
开头,以-->
结束,可以理解为常用的注释手段/*
与*/
。
<!-- xml define -->
<?xml version="1.0" encoding="UTF-8"?>
二、ATC MOD模板解析
1. 兵种模板
注意,在<NPCCharacter>标签前还有一个<NPCCharacters>作为根标签,这里主要展示的是单个兵种的基础信息。
当有些标签或属性没有内容时,可以不在代码中写出来,例如一般步兵升级不像骑兵一样需要额外的马匹,所以upgrade_requires
这个属性可以不写。再例如低级步兵没有那么多装备,一般就一把近战武器,所以item1、2、3也可以不写。
装备解析图:
2. 配置文件
ATC MOD的配置文件主要是用来调整兵种生成概率。
2.1 大地图中兵种概率
一个国家通常有两种基础兵种:普通步兵和贵族步兵。拿帝国来举例就是帝国新兵和帝国禁卫新兵两种,两者在生成概率上互相独立,你可以理解为两套体系。
<?xml version="1.0" encoding="utf-8" ?>
<ATCConfig>
<!-- Faction configuration -->
<!-- id taken from spkingdoms.xml -->
<!-- special case: player_faction -->
<MapFaction id="empire">
<Culture id="default">
<basicTroops>
<volunteer id="DZ_Inf0_T1" percent="80" playeronly="true" replacewith="imperial_recruit" />
</basicTroops>
<eliteTroops>
<volunteer id="DZ_Kng1_T2" percent="80" playeronly="true" replacewith="imperial_vigla_recruit" />
</eliteTroops>
</Culture>
</MapFaction>
<MapFaction id="empire_w">
<Culture id="default">
<basicTroops>
<volunteer id="DZ_Inf0_T1" percent="80" playeronly="true" replacewith