One way to approach it is to separate out each animation to play only when a specific set of events is true.
eg: play the crouch walk animation if the down and left keyboard buttons are pressed.
which would look like
keyboard On Left Arrow is Down-> play crouch walk animation
keyboard On Down Arrow is Down
repeat this for each and every type of unique movement you want the player to do.
To transition between them nicely, you will also want to make use of the "on animation crouch walk" is finished events.
So after you are done crouch walking you might trigger the play "stand up" animation so it looks nicer and doesn't just POP into place.
so that would look like
PlayerSprite On Animation "crouch walk" finished -> PlayerSprite set animation to "standup" (play from beginning).
If you find that animations are interrupting each other....
For example. if you player is playing a falling animation and you press left or right and that makes him start walking again in the air. you can make use of the "is playing animation" event. and then invert it and make it a "is NOT playing" event condition
eg:
keyboard on key down "Left"
(a second condition) PlayerSprite is NOT playing animation "falling" -> play "walk left" animation
this way the "walk left" animation will only play provided the "falling" animation isnt currently playing.