That is not an easy fix.
As I stated in that other thread and as Raven commented on, The desync is caused by a combination of factors but really boils down to the fact that the original coders must have been on some sort of designer mushrooms or something in order to design the system so badly.
They have two completely different bits of code calculating all the HP, MP, Movespeed, Battle animation speed and so on.
One set in the server and one set in the client
They got so badly screwed up that they added an 0X0EC packet that carries HP and MP (nothing else) from server to client and is sent one per second for every active character on the server (that's a stupid amount of packets BTW)
BUT
As soon as the client receives this information and sets the MP, HP and displays it, it then calls the function that calculates it client side anyway
So in effect it completely ignores the 0X0EC packet and uses it's own bullshit calculations anyway.
That's why you see the MP and HP jump around. It's jumping from server calculated values to client calculated values and back. But it never uses server side values to actually have an effect on whether you are dead or not. That's entirely client side.
So in a system such as pre-evo (where we don't have client source code and can't recompile the trose) all we can do is try to code the server calculations as close as possible to the client calculations.
We can do that to a certain point but we are never going to be able to make them match exactly due to factors such as clock speed differences between server and client PCs and things like the server running the calculation codes a little later than the minimum timer set calculation time.
the way the server works is to run around the main loop as fast as possible over and over while checking each client LastUpdatetime against an internal clock. If the elapsed time is greater than the defined interval then it updates the client and sends the packet.
If not then it just continues to check the next one and so on.
The point is that the elapsed time is never exactly equal to the defined interval. It's always a little bigger so those tiny differences add up after a while.
The client does something a little similar but it only has to worry about ONE game object in it's loop. The Player. The server can have thousands of things it's checking for. All the players, all the monsters, incoming AIP requests, Incoming QSD stuff and so on. It's inevitable that there will soon be differences in timing.
One possible but not great solution would be to stop updating existing battles in the server and instead initiate a new combat each and every time an update would be sent. The packet would be much bigger and I'm not quite sure what effect it would have on AIP and stuff. Probably not good.
If we could get hold of the trose source for the pre-evo client we could fix all this crap and then some.
OR if there is somebody out there who is really good with Ollydbg it might be possible to modify the trose to remove the client side calculations of HP and MP. Move speed would be harder since we would have to actually expand the code that receives the 0X07EC packet to receive move speed.