Make the player move directly on the client,
and send it position to the server.
Only show the other bots/players according to their servestate.

Thats the way Unreal Tounament and WoW work for example.

Take the clients position as direct data for the server,
thats the simplest way.
The server then does not move the entity, but takes
the clients send postion as actual serverposition.

You could also let the client calculate directly how another
player was hit by a weapon. But doing the movement locally
is more important.