Hands-On Usage
In research system-related mods, this is commonly used to restrict certain decisions or event options, allowing progression only when the scientist responsible for a specific field reaches a sufficient level. For example, in a nuclear weapons development chain, requiring a nuclear physics specialist to reach a certain proficiency before advancing to the next stage:
available = {
my_nuclear_scientist = {
has_scientist_level = {
level > 2
specialization = specialization_nuclear
}
}
}
Synergy
[is_active_scientist](/wiki/trigger/is_active_scientist): Verify that the character is currently in an active scientist state before checking their level, avoiding invalid evaluations on inactive scientists.
[is_scientist_injured](/wiki/trigger/is_scientist_injured): When combined with level checks, skip triggering high-difficulty research tasks when a scientist is injured, resulting in more rigorous logic.
[add_scientist_level](/wiki/effect/add_scientist_level): If the scientist's level is insufficient, boost it through event rewards, forming a complete "check-upgrade" cycle with this trigger.
[add_scientist_xp](/wiki/effect/add_scientist_xp): If level requirements are not met, accumulate experience points to drive leveling first, serving as a prerequisite incentive mechanism working in tandem with this trigger.
Common Pitfalls
- Forgetting to specify the correct scope:
has_scientist_level must be used within a CHARACTER scope. Writing it directly in a country scope's condition block will cause script errors or silent failures. You must first enter the corresponding character's scope through a character reference (such as my_character = { ... }).
- Specialization token spelling errors: The specialization field must use the exact token defined in the game (such as
specialization_nuclear). When capitalization or spelling is incorrect, there will be no obvious error message, and the condition will always evaluate to false, resulting in broken functionality that is difficult to diagnose.