What lionz has said is correct, you need some way to check the condition of your object .
There are a ton of ways to do it, including using animations and many other things.
What I like to do personally is create a string instance variable on my sprite that uses a word to state what my sprite is doing. "Moving" "Attack_Big" "Attack_Small" "Attack_Dashing" "Cooldown" and so on.
So when my timers or animations go off, I can trigger things like "When Animation 'ANIM_ATK_BIG' is finished, set instance variable Boss Status to 'Cooldown Big Attack', Set animation to 'ANIM_COOLDOWN_BIG', start timer for 2 seconds with tag 'Cooldown' "
I understand that it might not be the prettiest code and that I might be overdoing it but it works with my brain and it lets me see my boss' current status in the debug menu. That way, when something inevitably doesn't work, I can see where my code is getting stuck.
"Oh, my boss keeps dash attacking infinitely, I can see it appears to be stuck in "Attack Dash" forever so let me do some tricks and see why it's not triggering the right way."