These conditions inspect the active object. Type-restricted checks return false when the target cannot provide the requested property.
nameMatch
Shape: nameMatch: string | string[]
Matches a non-static object's record name by exact equality or plain substring. Static objects never match because they do not have a record name. The handler's substring comparison is not a case-folded comparison.
nameMatch: Guardhas_name
Shape: has_name: boolean
Tests whether the target record has a non-empty name. Objects without a type count as unnamed.
has_name: falsemesh
Shape: mesh: string | string[]
Matches the target record's model after SSS mesh-path normalization. Listed paths are alternatives.
mesh: "r/CliffRacer.NIF"scale
Shape: scale: number | { min?: number, max?: number }
A number requires the current scale to equal that number. A range compares the current scale inclusively; either bound may be omitted in the condition form. See comparison ranges.
scale:
min: 0.5
max: 1.2carrying
Shape: carrying: string | { RecordId: integer } | [string | { RecordId: integer }, ...]
For a record ID, tests whether an Actor or Container inventory contains that item. A count map requires at least the specified count. A YAML sequence is an any-of list of record IDs or count maps. Other target types do not match.
carrying:
gold_001: 100has_lua_script
Shape: has_lua_script: string | string[]
Exact match against a Lua script path attached to the object. A list matches if any listed path is attached.
has_lua_script: Scripts/myMod/object.luahas_mwscript
Shape: has_mwscript: string | string[]
Case-insensitive exact match against the object's MWScript record ID. It fails when no MWScript is attached.
has_mwscript: my_scripthas_tag
Shape: has_tag: string | string[]
Matches any listed FlexTag on the object. This condition requires the optional FlexTag mod/interface; without it, it always returns false.
has_tag: LootContainercell_tag
Shape: cell_tag: string | string[]
Matches any listed FlexTag on the object's cell. It has the same optional FlexTag dependency and no-match behavior as has_tag.
cell_tag: CellDungeonhas_enchantment
Shape: has_enchantment: boolean
Tests whether the target record has an enchantment. A target without a readable record does not match either positive form.
has_enchantment: trueenchantment
Shape: enchantment: string | string[]
Case-insensitive exact match against the target record's enchantment ID. No enchantment means false.
enchantment: fire_damagelocked
Shape: locked: boolean | integer | { min?: integer, max?: integer }
A boolean checks locked or unlocked state. A number requires a locked object at that level or higher. A range requires a locked object whose lock level is within the inclusive bounds. Non-lockable targets return false. In the YAML schema, range objects must provide at least one bound; the action form has different random-range semantics.
locked:
min: 25
max: 50has_key
Shape: has_key: boolean | string | string[]
On a lockable target, true tests for any key, false for no key, and a string or list tests case-insensitive exact key ID. Non-lockable targets return false.
has_key: truehas_trap
Shape: has_trap: boolean | string | string[]
The trap analogue of has_key: booleans test presence, while strings and lists test case-insensitive exact trap spell IDs. Non-lockable targets return false.
has_trap: falseNo-op and dependency notes
Name, inventory, script, enchantment, lock, key, and trap checks fail safely when the target lacks the required OpenMW type capability. FlexTag conditions are deliberately dependency-sensitive rather than silently matching all objects. Conditions are evaluated before actions; they do not persist state themselves.