I would try saving attributes for all of your player movements. Game attributes. Like
"If (up is down)
set (UpMovement?) to true"
"If (right is down)
set (RightMovement?) to true"
do one for each, left, right, up, down.
Then instead of direction, try calling on those attributes to place the hits accordingly.
"If (UpMovement?)" or "If (LeftMovement?) etc. instead of "if direction of self=..."
Then so on and so forth use your code to place the hits as you've done. Make sure you are turning off each boolean appropriately as well. This may not fix the issue but this is what I would try as I've never used those direction blocks unless it's an image instance, I'm not sure how great those are. Not too sure about last issue. Set player to always active if he's not