The state machine looks better now. With that fixed, the next thing you’ll need to do is to latch MoveForward and MoveRight so that if both keys are released, you don’t update MoveForward and MoveRight to 0’s until the Idle state is reached.
To do this, you’ll need to add 2 anim notifies to your state machine. Put one on the “Start Transition Event” of the Idles to Starts transition, and call it ExitIdle. Put the other on the “End Transition Event” of the Stops to Idles transition, and call it ExitStops. Compile your anim BP (important, or else your notifies won’t show up in the event graph yet).
In your event graph, right-click and type ExitIdle and create that node. Do the same for ExitStops. With these now in place, your event graph will know the instant you’ve started transitioning from Idles to Starts, and the instant you’ve finished transitioning from Stops to Idles. You can set a bool (Moving) to True when ExitIdle fires, and set it to False when ExitStops fires.
Now that you have that, in your event graph you can do these things:
If Moving is False, update MoveForward and MoveRight as usual.
If Moving is True, and any WASD key is pressed, update MoveForward and MoveRight as usual.
If Moving is True, and no WASD keys are pressed, don’t modify either MoveForward nor MoveRight. Keep them at the values they previously were.
You may also need to add logic in the Idles to Starts transition that only allows the transition to be entered once the Stops to Idles transition has completed. You can do this by simply ANDing NOT-Moving into the rule in your Idles to Starts transition.
This may not handle your Turns and Jumps states yet, but trying to focus on the locomotion issue first. And not sure if I’m thinking through all of the logic, but this will hopefully at least get you pointed in the right direction.