It's hard to be certain because looking at the image is harder than messing with an event sheet. Here are my thoughts...
If you are not using containers, none of the animation calls define which ZombieAnimation you are referencing. I suspect that you are using Containers, though, so you can probably ignore this second point, I only mention it in case you are not...
Where you have ShieldSprite -> On collision with ZombieCollider, you set ZombieAnimation to "down". That trigger is called within your For each ZombieCollider loop, which is unnecessary and requires forced collision checking (more overhead, negates collision cells) than if you had the trigger at the 'root' of the event sheet.
Also, the subsequent For each ZombieAnimations is not required, as the sub event should stand alone and function correctly without it. I would advise against using a wait 3 seconds before commanding what the ZombieAnimation should do next because there's scope for referenced objects to get mixed up. Just add a timer behavior to the animation object and set it to trigger in time + 3 secs, then use that trigger to change the animation.