Kzeroko KTM2

声望与阵营

阵营如何归属、关系如何裁决、什么算偷窃,以及「被通缉」到底意味着什么。

更新于 2026/9/1 5 分钟阅读 世界阵营NPC

KTM2 的声望不是一个数字。每个阵营各记各的账、各自判断你是否被通缉、各自决定怎么对你。帮了一边,往往就是在另一边扣分。

一个生物的阵营从哪来

生物的阵营只有四个来源,仅此四个

  1. 数据包里的实体阵营规则,见下方数据包参考

  2. KTM2 自带 NPC 出厂时就带的阵营。

  3. 由模组直接指定给某个生物的阵营。

  4. 记在生物身上的结构来源阵营。

结构来源阵营只属于结构放置时就一起生成出来的生物。之后的自然生成、刷怪笼生物、巡逻队、刷怪蛋、指令生成,以及只是走进来的东西,都不会继承。

阵营关系

关系在数据包里声明为 friendlyneutralhostile,同时接受 allyenemywar 这些别名。

裁决顺序:

  1. 剧情事件设下的运行时关系。它会存进世界存档,并且刻意压在数据包默认值之上,好让剧情能让两个阵营开战或停战。

  2. 数据包关系规则priority 高的优先。

  3. 兜底——同阵营为友好,其余为中立。

同优先级冲突时:敌对压过友好,友好压过中立。

索敌兜底

索敌用的是同一套显式阵营,外加一条很小的隐式规则:

  • KTM2 的 NPC 默认算作 isekaiexpansion:side/civilization
  • 没有任何显式阵营规则、且属于原版敌对生物或怪物生成组的生物,被当成 isekaiexpansion:side/monster——仅用于索敌

只要某个生物有显式规则,关系就由那条规则决定,不会再叠上通用的怪物兜底。

偷窃与受保护容器

打开一个箱子算不算偷,由容器自己决定,而不是它站在哪里:

  1. 玩家自己放下的容器属于个人储物,阵营偷窃声望完全不管它。

  2. 其余容器按它记录的归属阵营判定。

  3. 两者都没有时,位于受支持阵营结构内、没打过标记的容器仍然由地点阵营兜底保护。

战利品填充永远不会把阵营归属写到玩家放置的容器上。你在村庄里放下的箱子不会因此变成村庄的财产。

被通缉

阵营在你的声望低至 −100 或更低时视你为通缉对象。通缉状态按阵营独立判定,而且是在声望变动生效之前先算的。

命运天平的气场选项只改变已经通缉你的阵营那一侧的变动量:

命运正向声望负向声望高于 −100 的阵营
kind_countenance(和善)×1.25×0.80不变
fierce_countenance(凶悍)×0.80×1.25不变

一次事件同时影响多个阵营时,每个阵营按自己的通缉状态分别结算。气场修正不会渗到那些本来就没理由不信任你的阵营上。

防卫者归功

实体规则可以带 protector 角色。持有这个角色的生物在和敌对目标交战时,会被算作它自身阵营的防卫者——也就是说,击杀一个卫兵正在打的目标,会把防卫者声望记到该卫兵的阵营头上。帮了守卫队,系统认得出来。

数据包参考

实体阵营规则

放在 data/<命名空间>/reputation/entity_factions/*.json,每个实体群体一个文件,每个文件一条规则。同时命中多个文件的实体会拿到全部文件提供的阵营与角色。

类型必填含义
entity_typesstring[]实体类型 ID 或标签。标签以 # 开头。
factionsstring[]添加给所有匹配项的静态阵营 ID,请使用稳定的带命名空间 ID。
dynamic_factionsstring[]由实体状态生成的阵营。支持 minecraft:villager_profession
rolesstring[]行为角色,不是阵营 ID。支持 protector
include_structure_origin_factionsboolean允许结构来源阵营,仍然只对随结构一起生成的生物有效。默认 false
{
  "entity_types": ["minecraft:villager", "#example:guards"],
  "factions": ["minecraft:village", "example:merchant_guild"],
  "dynamic_factions": ["minecraft:villager_profession"],
  "roles": ["protector"],
  "include_structure_origin_factions": true
}

minecraft:villager_profession 会按村民职业各生成一个阵营,例如 minecraft:villager_profession/minecraft:librarian。没写命名空间的值会归一化到 minecraft

关系规则

放在 data/<命名空间>/reputation/faction_relations/*.json

类型必填含义
source_factionsstring[]行为发起方。
target_factionsstring[]目标方。
relationstringfriendlyneutralhostile
bidirectionalboolean默认 true
priorityinteger宽泛的阵营侧规则与狭窄的具体规则同时命中时,数值高的胜出。默认 0
{
  "source_factions": ["isekaiexpansion:side/human"],
  "target_factions": ["isekaiexpansion:side/demon"],
  "relation": "hostile",
  "priority": 10
}

ID 归一化

阵营 ID 读进来时会归一化:去空白、转小写,反斜杠与 | 变成 /,空格变成 _,空 ID 变成 unknown。即便如此也请写规范一点——归一化是安全网,不是书写规范。