Cups gave me a good solution. I share your message with your permission. Thank you.
Quote:
|
Originally Posted by Cups
The CUser::TimeDamage function is located at 0x463DC0. This function is the one which controls tick damage and other damage over time effects. The damage that is calculated and dealt to the user is stored in the eax register. Scattered throughout this function, you will see this:
This seems to be some kind of buffer overflow check, which roughly translates to:
Code:
if (hp_damage > 60000)
hp_damage = 60000;
if (mp_damage > 60000)
mp_damage = 60000;
if (sp_damage > 60000)
sp_damage = 60000
You can modify this hard cap as a temporary solution. For example, in this function, changing "mov eax,0000EA60" to "mov eax,00002710" will change the value from 60k to 10k when the max value is hit (which is interesting that this ever occurs at all). Perhaps you could set a break point on one of these instructions, and dump the registers when it is executed (when the ps_game sets the value to 60k manually instead of calculating it)
|
The damage happens very rarely and randomly. 10k is the maximum damage they do poisons in my server. So it is enough even if it is not a definitive solution.