I want to offer a very basic lag compensation function: lag prediction. I just made that name :P
It works the following way: when server sends client information about a timed event, it subtracts client's lag from remaining time of the event.
For example: when you are stunned, if you're lagging, your character will jump forward (in the direction you're moving) when stun finishes. This happens because client only sends information about which direction its moving towards, but not speed its moving at. And, because the client "thinks" its still stunned, knight is drawn to move slowly. At the same time player already started moving faster on server's side, and current player's location is being updated as soon as game "figures out" that player on server and player in game have different coordinates. Server's data has priority (to limit possibilities of exploiting, I guess), so knight's position is corrected according to server's data. And you're thrown on spikes :D
What I offer is trying to synchronize time when stun effect ends on server's side and on client's side to reduce the effects of lag. While this certainly won't make a huge impact, it will still make timed events (stun/poison/shock/charged attacks/attack animations - everything that is not an instant effect and takes time to take effect) seem less laggy.
Example 2: when I release a charged attack, server should consider I did that xxx milliseconds ago (xxx being my ping). Or when I start charging it, starting time should consider my ping.
Example 3: when enemies throw their attacks, either move start of their animation forward the lag value (so I'll see correct projectile position, I can literary walk INSIDE rockets on ironclaw munitions factory), so it looks like the rockets pop up almost immediately after starting charge, or send "preventive" data about attacks to clients.
Example 4: I can walk on top of spikes and not get hurt if I walk right before they should disappear. At the same time, I get damaged if I walk off them right before they're supposed to appear.
Example 5: In blast network I still get hit by a bomb if I walk out of its range 1-2 tiles before the explosion hits that tile.
Example 6: I get thrown 1 tile backwards when trying to plant a bomb in a tile where someone else just planted a bomb. Instead of being able to walk through it, as I can do with my bombs. Even though I was standing on top of the spot I wanted to plant in. Though this might require a bit more frequent position check and correction.
This will help reduce lags significantly for each separate player that has to deal with timed events, or events that can be predicted. This won't help fix ALL of the lag, but at least its something.
I feel wrong teaching game developers how to make games... Maybe they should just prove they're hella better at it by doing something with these lags? :)
Hmm... Bump?