I am not a programmer but have a little understanding on what happens in game. I was actually a network manager at a university so have some understanding about networks , servers etc.
This is just a little info for people who would like to understand a bit more about what happens when you shout someone technically.
When you see an enemy and fire a shot at him , your client sends a message to that client , through the server and then receives a message back , through the server telling your client whether you did anything .
It is not your client that decides if he dies but his . You might have hit a not fatal part , or missed completely .
If he dies he tells you . (obviously though the client to server to client path)
This normally works great if the timeing is perfect . If there is any form of delay between the clients then you will a lag and possibly no hit registering.
You shoot , he waits a while as the communications move around the system and then he dies .(or not)
These numbers are just vague guesses as everone has different ping times.
Now if you add up the travel time , and your ping is say 50 one way while so is his , you get them added . 50ms + whatever time the server takes , lets say 10ms , then time to the other client of 50 + another 10 -15 for processing then 50 back to server , + 10 processing and then 50 back to you . Only 1/2 that time is important as you now know you are dead and would indicate by falling down twitching .But it still takes aprox 120ms for that to happen .
Now if the other client was lagging or generally not communicating in the time period where it is getting told it is shot , it doesn't know , therefore no dropping dead or even getting wounded .
If the shooter gets this sort of thing happeing constantly , he is most likely the issue (connections , memory , software etc ) or if is occasional then it is most likely the one getting shot.
The other thing that effects what happens is "predictor code" where the server predicts where you should be if you followed the path you are on. With the time delay between information getting passed around , you just might not be seeing the exact location of the enemy depending on both your timing.
ms=millisecond=1/1000 of a second
Hope that helps