You can go with instance variables (IV) and the animations feature of the sprite object.
Make an IV "Type" (text) and one "State" (text).
Then be sure to name your different animations according to Type_State (ex: knife_drawn; deserteagle_reload; etc...)
Then in your conditions you can check for the values of the IV you want.
And to set the animation :
Sprite_Set animation to: Sprite.Type & "_" & Sprite.State
This is basicly the same logic you described.