XML 使用说明 - 定义阵营关系
在游戏配置文件中,您可以使用 <AffiliationDef> 元素来定义不同阵营(Affiliation)之间的关系。每个 <AffiliationDef> 元素都必须包含在顶层的 <Define> 元素之内,并遵循其通用的属性定义规则。
功能介绍
<AffiliationDef> 用于配置游戏中各个阵营(或势力)对于其他阵营的默认态度。通过定义友好、敌对和中立列表,可以构建复杂的势力关系网,影响实体之间的行为逻辑,例如攻击目标选择、协作或互动方式。
参数说明
所有参数都必须通过嵌套元素的方式进行赋值。
-
<defName>(必需,字符串)- 该阵营关系定义的唯一标识符。通常,这会是某个特定阵营的名称。在整个游戏配置中,此名称必须是全局唯一的,除非您有意覆盖现有定义。
- 作为匿名定义时,此字段可以省略。
-
<label>(可选,字符串)- 提供一个人类可读的标签,用于更好地理解该阵营关系定义的用途。
-
<description>(可选,字符串)- 提供更详细的文本描述,解释该阵营关系定义的具体内容或特殊用途。
-
<defaultRelation>(可选,枚举类型,默认为Neutral)- 定义本阵营对未在其他列表中明确指定的任何其他阵营的默认关系。
- 可选值包括:
Neutral(中立)Hostile(敌对)Friendly(友好)
-
<hostileFactions>(可选,字符串数组)- 一个字符串数组,列出本阵营视为敌对的其他阵营的
defName。 - 数组的定义方式为
<hostileFactions><li>阵营1defName</li><li>阵营2defName</li></hostileFactions>。<li>元素本身会被忽略。
- 一个字符串数组,列出本阵营视为敌对的其他阵营的
-
<neutralFactions>(可选,字符串数组)- 一个字符串数组,列出本阵营视为中立的其他阵营的
defName。 - 数组的定义方式为
<neutralFactions><li>阵营1defName</li><li>阵营2defName</li></neutralFactions>。<li>元素本身会被忽略。
- 一个字符串数组,列出本阵营视为中立的其他阵营的
-
<friendlyFactions>(可选,字符串数组)- 一个字符串数组,列出本阵营视为友好的其他阵营的
defName。 - 数组的定义方式为
<friendlyFactions><li>阵营1defName</li><li>阵营2defName</li></friendlyFactions>。<li>元素本身会被忽略。
- 一个字符串数组,列出本阵营视为友好的其他阵营的
关系冲突与优先级
当一个目标阵营同时出现在多个关系列表中时(例如,既在 hostileFactions 又在 friendlyFactions 中),系统会根据预设的优先级规则来解决冲突,以确定最终的关系。
优先级顺序(从高到低):
Friendly(友好)Hostile(敌对)Neutral(中立)
这意味着,如果一个阵营在 friendlyFactions 和 hostileFactions 都被列出,它最终会被判定为 Friendly。只有当一个阵营未在任何特定列表中被提及,才会回落到 defaultRelation 定义的关系。
示例
示例 1:定义“Player”阵营的关系
<Define>
<AffiliationDef defName="PlayerAffiliation">
<label>玩家阵营</label>
<description>玩家及其盟友的阵营。</description>
<defaultRelation>Neutral</defaultRelation> <!-- 默认对所有未指定者中立 -->
<hostileFactions>
<li>MonsterAffiliation</li> <!-- 对 MonsterAffiliation 敌对 -->
<li>BanditAffiliation</li> <!-- 对 BanditAffiliation 敌对 -->
</hostileFactions>
<friendlyFactions>
<li>AllyAffiliation</li> <!-- 对 AllyAffiliation 友好 -->
</friendlyFactions>
<neutralFactions>
<!-- 没有特别指定的,因为 defaultRelation 已经是 Neutral -->
<!-- 假设将来可能某个阵营默认是Friendly,但这里想设置为Neutral,就可以在这里列出 -->
<li>WildLifeAffiliation</li>
</neutralFactions>
</AffiliationDef>
</Define>
示例 2:利用优先级规则的定义
假设我们希望 SomeTroubledFaction 对 PlayerAffiliation 友好,但由于配置失误,它也被列入了 hostileFactions。
<Define>
<AffiliationDef defName="SomeTroubledFaction">
<label>麻烦的阵营</label>
<description>一个关系复杂的阵营。</description>
<defaultRelation>Neutral</defaultRelation>
<friendlyFactions>
<li>PlayerAffiliation</li> <!-- 明确对玩家友好 -->
</friendlyFactions>
<hostileFactions>
<li>PlayerAffiliation</li> <!-- 错误地将玩家也列为敌对 -->
</hostileFactions>
</AffiliationDef>
</Define>
在此示例中,尽管 PlayerAffiliation 同时出现在 friendlyFactions 和 hostileFactions 中,但由于 友好(Friendly)关系优先级高于敌对(Hostile),SomeTroubledFaction 最终会视为 PlayerAffiliation 为 友好 阵营。
示例 3:仅定义敌对关系,其他默认为中立
<Define>
<AffiliationDef defName="MonsterAffiliation">
<label>怪物阵营</label>
<description>对所有非同类阵营都敌对。</description>
<defaultRelation>Hostile</defaultRelation> <!-- 假设怪物对所有未明确的都敌对 -->
<friendlyFactions>
<li>MonsterAffiliation</li> <!-- 对自己(同类)友好 -->
</friendlyFactions>
<!-- 不需要定义 hostileFactions,因为 defaultRelation 已经是 Hostile -->
</AffiliationDef>
</Define>
注意事项
defName唯一性:AffiliationDef的defName通常应与游戏中实际存在的阵营ID或名称保持一致,并确保其全局唯一性。- 双向关系: 阵营关系默认是单向的。如果
A阵营将B视为Friendly,不代表B阵营也自动将A视为Friendly。您需要在B阵营的AffiliationDef中单独配置其对A的关系。 - 列表内容:
hostileFactions、neutralFactions和friendlyFactions列表中应填入其他AffiliationDef的defName。 - 优先级: 务必牢记友好的最高优先级,这在设计关系网时尤为关键,可以避免意外的冲突导致错误的阵营行为。