I can agree with this. The “net code” should be optimized for all players having roughly the same ping. If a player has a higher ping than other players, they must be the ones that are suffer the consequences from their bad connection. Example: Lagging player shoots first, non-lagging player shoots second, server sees second player’s message arrive first, but first player’s timestamp is lower. Yes, it sucks to “punish” people who are stuck on bad connections, but the alternatives are worse.
In some games, lagging player will have certain advantages when it comes to being offensive. Run around a corner and you technically see the enemy first before they see you (they haven’t seen you come around the corner yet). This leads to an incentive for people to introduce artificial delays on their packets to gain an advantage. Secondly, it’s fair to say that 1 lagging player can easily ruin the fun for everyone else on a server, so it’s a good idea to discourage that. Everyone’s happier if they just play with people that have the same ping as them.
You’re right, this could be a problem. The client does “know” what the next random spread will be if it calculates it from the seed prematurely, which technically could allow it to compensate between each shot. There really isn’t a perfect solution here simply because the client cannot be trusted. A seed-based spread pattern will keep the spread patterns synchronized between the server and the client, but also tell the client what the spread is going to be in the future. Most likely, the most unhackable solution is to simply let the client and the server calculate different spread values and show different bullets. Then again, if the player has an aimbot hack any kind of spread or recoil probably won’t matter anyway. IMO, the best anti-hacking system is a solid vote-kick/ban command. =P