Map looks topdown, so I’m pretty sure you meant movement on X and Z axis since Y is the height axis in 3D environment.
To restrict a movement to only axis you must make your own movement system, because naturally, the movement in Roblox isn’t continuous, so since the player would stop pressing any buttons, the character would simply stop moving, also there is big latency in default movement system. You could test the latency by inviting your friend to your session and start moving at the same time, you would see that you’re in front of him and he would see he is in front of you.
Your movement system would be alot easier, since there’s no need to synchronize player positions every frame but only when they press different key to change direction for example, the movement animation and position changing could be done on every client side seperately without synchronization from the server (ofc server still needs to move the players to not confuse collision checks with ghosts for example).
Noone can really help you with the code here, since the solution is worth a paper-long documentation, but you get the idea of making a state-based movement system with client-server-client synchronization needed only when state is changed.