The reason a combatant may not start an automated attack because it is not
its turn — null when the attacker is the active combat's current combatant
(and so may open an attack). Automated combat is turn-gated: only the current
combatant may initiate. Out-of-turn defenses (a counterstrike) are unaffected
because they run through the defense-resume path, not this one. Pure and
unit-tested; consumed by SohlCombatantLogic.startAutomatedAttack.
Parameters
currentCombatantId: undefined|null|string
Id of the active combat's current combatant, or null/undefined when no combat/turn is active.
attackerCombatantId: undefined|null|string
Id of the combatant attempting to attack.
Returns string|null
A short reason phrase when the start is disallowed, else null.
The reason a combatant may not start an automated attack because it is not its turn —
nullwhen the attacker is the active combat's current combatant (and so may open an attack). Automated combat is turn-gated: only the current combatant may initiate. Out-of-turn defenses (a counterstrike) are unaffected because they run through the defense-resume path, not this one. Pure and unit-tested; consumed by SohlCombatantLogic.startAutomatedAttack.