实战用法
has_relation_modifier 常用于检测两国之间是否已经建立了特定的外交关系修正,例如判断玩家国家是否已向目标国添加了贸易协议、军事合作或情报共享等自定义 modifier,从而决定后续决策或事件是否可触发。典型场景包括:某外交决策只有在已对目标国施加过特定关系修正后才能再次升级,或用于 available 块防止玩家重复添加同类修正。
# 某外交决策的 available 条件:
# 仅当与目标国尚未建立"军事互信协议"修正时才可执行
available = {
NOT = {
has_relation_modifier = {
target = FROM
modifier = military_trust_agreement
}
}
}
配合关系
[add_relation_modifier](/wiki/effect/add_relation_modifier):最直接的搭档,先用 has_relation_modifier 检查修正是否已存在,再用 add_relation_modifier 添加,避免重复叠加产生异常效果。
[add_opinion_modifier](/wiki/effect/add_opinion_modifier):两者常组合在外交事件中,关系修正存在时才进一步调整好感度,使外交层次更丰富。
[has_dynamic_modifier](/wiki/trigger/has_dynamic_modifier):类似地检测本国侧的动态修正,与 has_relation_modifier 配合可同时验证"双向条件"是否满足。
[any_allied_country](/wiki/trigger/any_allied_country):在遍历盟友时嵌套使用 has_relation_modifier,检查是否对某个盟友持有特定关系修正,适合多国联动的外交 mod 逻辑。
常见坑
- 忽略
target 的方向性:has_relation_modifier 检测的是当前 scope 国家对 target 国持有的修正,而非 target 对当前国,初学者常把两者搞反,导致条件永远不成立。若要检测反向,需切换 scope 到对方国家再判断。
- modifier 名拼写须与
add_relation_modifier 中的定义完全一致:该 trigger 引用的是静态修正(static modifier)的 key,若名称写错或与实际添加时使用的名称不符,即使修正已存在也会返回假,且游戏不会报错,极难排查。