Attack with Cooldown
Goal
Use this pattern to hold an attack branch active for a cooldown after the attack finishes. Use an explicit availability condition when other behavior must run during the cooldown.
Tree structure

How it runs
The Selector tries the attack branch first. A failed range condition sends it to Approach or Idle. When the condition succeeds, Cooldown starts Attack immediately. After Attack finishes, Cooldown remains Running for its duration, then returns the attack’s stored Success or Failure. The Selector stays on this branch during that wait.

This fallback state is reached when the attack branch returns Failure, such as a failed range check or a failed attack whose post-attack delay has elapsed. It does not represent an unavailable cooldown: waiting Cooldown remains Running.
Selector, Sequence, and Cooldown are built in. Is Target in Range and Attack represent game-specific tasks, while Approach or Idle can use whichever movement or idle task suits the character; that task may come from a movement add-on.
Variations
For a fallback that remains available between attacks, store the next allowed attack time in game-owned data. Put a custom Conditional before Attack that fails until that time is reached, and update the timestamp when the attack is accepted. Reevaluate this branch using the tree’s interruption policy.
The current Rate Limiter action resets its timestamp whenever it starts and succeeds on that first update. It does not preserve an interval across normal reentries, so it cannot replace this availability condition.