I am not very good with this program yet, so my ideas might not work, and there might be a better way of doing things.
1. For your combo request, you could spawn an invisible object [let's call this object "kick"] off to the side when D is pressed, and you could also have a condition to check how many "kick"s there are when you press D. (This can differentiate your kicks when they are in a sequence.) When object "kick" is created you can make it wait X seconds before it's destroyed. You can do the same thing for other buttons like the up arrow.
2. For your AI issue, you could check the distance between your enemy and your player so if the distance is less than 100 pixels, your enemy stops. Set this as a condition with the system comparing values function distance(player.X, enemy.X) <100 set instance variable = 5 (5 could be your stop function.)
To make the enemies stop and take a hit, you could set up a new instance variable called "attacktime". It's initial value could be 3, and every 1 second you subtract 1 from "attacktime". Create an event to set this variable back to 3 if the enemy is hit.
I really hoped this helped. I want to play this game when it's done