📘 前言:为什么要学 XML?
在《骑马与砍杀2》的 MOD 开发中,XML 文件用于定义游戏世界中的几乎所有数据,如角色(Hero)、NPC(NPCCharacter)、兵种(Character)、物品(Item)、装备、派系、城镇等。掌握 XML 的语法和结构,是创建和修改 MOD 的第一步。
1️⃣ XML 基本结构与语法
✅ 1.1 元素结构
XML 文件由**元素(Element)**组成,每个元素通常包含:
<元素名 属性名="属性值">内容</元素名>
✅ 1.2 标签类型
| 类型 | 示例 | 说明 |
|---|---|---|
| 开始标签 | <Hero> | 标记元素的开始 |
| 结束标签 | </Hero> | 必须配对出现 |
| 空元素 | <skill id="OneHanded" value="75" /> | 自闭合标签 |
✅ 1.3 属性(Attributes)
属性位于标签内部,以 属性名="属性值" 形式存在:
<Hero id="main_hero" faction="Faction.empire" />
2️⃣ XML 在《骑马与砍杀2》中的实际应用
✅ 2.1 定义英雄角色(Hero)
<Hero
id="main_hero_father"
faction="Faction.player_faction"
spouse="Hero.main_hero_mother"
text="{=rchero001}在掠袭者袭击旅店时,他机智地换上战死掠袭者的衣服幸存。" />
🔍 说明:
- id:唯一标识符
- faction:所属派系
- spouse:配偶
- text:描述内容,支持本地化({=key})
❌ 常见错误:
<Hero id="main" faction="Faction.empire" // 缺少结尾标签或 / >
✅ 2.2 定义 NPC 角色(NPCCharacter)
<NPCCharacter id="lord_1_a1" default_group="HorseArcher">
<face>
<!-- 面部参数 -->
</face>
<skills>
<skill id="OneHanded" value="75" />
<skill id="Athletics" value="60" />
</skills>
</NPCCharacter>
🔍 说明:
- <NPCCharacter>:定义一个 NPC 单位
- <skills>:包含技能值列表
- <skill>:定义技能种类和数值
✅ 2.3 定义兵种(Character)
<Character id="imperial_infantry" name="{=char001}帝国步兵" is_noble="false">
<equipmentSet>imperial_infantry_1</equipmentSet>
<skills>
<skill id="Polearm" value="80" />
</skills>
</Character>
3️⃣ XML 编辑建议与规范
✅ 3.1 正确嵌套
<!-- 正确 -->
<skills>
<skill id="Bow" value="70" />
</skills>
<!-- 错误:未闭合 -->
<skills>
<skill id="Bow" value="70">
</skills>
✅ 3.2 区分大小写
XML 是 大小写敏感的,<Hero> 与 <hero> 是两个不同的标签。
✅ 3.3 特殊字符转义
如果要在文本中使用 <, >, & 等特殊字符,请用实体转义
4️⃣ 编辑工具推荐
| 工具 | 推荐用途 | 优势 |
|---|---|---|
| Visual Studio Code | 编写 & 检查 XML | 免费,支持插件 |
| Rider / Visual Studio | 查看游戏源码 | IntelliSense 自动补全 |
| Notepad++ / Sublime | 快速查看文件 | 轻量快速 |
| XML Tools 插件 | VSCode 插件 | 自动格式化、校验结构 |
5️⃣ 实践建议
- ✅ 先从小修改开始:如更改技能值或人物描述
- ✅ 经常备份原文件,防止出错
- ✅ 使用版本控制(如 Git),便于回滚
- ✅ 验证 XML 格式,避免游戏崩溃
6️⃣ 视频教程推荐
- 角色与家族关系
- 兵种配置
- 装备、物品与战斗力
- 派系势力结构
- 游戏世界的叙事与扩展