Hands-On Usage
Commonly used in custom doctrine system mods to check whether a doctrine track has been assigned any subdoctrine, thereby determining whether to unlock additional decisions, focuses, or modifiers. For example, allow a military reform event to trigger only after the player has selected any subdoctrine in the infantry track:
available = {
has_subdoctrine_in_track = infantry
}
Synergy
[has_completed_subdoctrine](/wiki/trigger/has_completed_subdoctrine): Often used in conjunction with this trigger—first use has_subdoctrine_in_track to confirm the track has an assignment, then use has_completed_subdoctrine to further verify whether a specific subdoctrine has been researched, forming a two-layer condition filter.
[has_completed_track](/wiki/trigger/has_completed_track): Used to distinguish between different progress stages of "subdoctrine assigned" and "entire track fully completed"; combining both enables phased reward logic.
[has_doctrine](/wiki/trigger/has_doctrine): Checks whether the parent doctrine has been unlocked; pairing with this trigger ensures the doctrine system's prerequisites are complete.
[add_doctrine_cost_reduction](/wiki/effect/add_doctrine_cost_reduction): Serves as a reward on the effect side after the trigger is satisfied, granting doctrine cost reduction—a typical reward output in doctrine-related event chains.
Common Pitfalls
- Track name spelling errors: Track identifiers like
infantry, armor must exactly match the track identifiers in the mod's doctrine definition files (case-sensitive); writing localized display names (such as Chinese names or full English names) will cause the condition to never evaluate to true without error reporting, making it extremely difficult to debug.
- Confusing subdoctrine key with track key: The value for this trigger is the identifier of a track, not a specific subdoctrine's key; if you want to check whether a specific subdoctrine is assigned, use
has_completed_subdoctrine instead. Mixing the two is the most common logical mistake among newcomers.