I meant to explain the changes but forgot.
The Client::SetMana() was calling Mob:SetMana() and in the function Mob::SetMana() it was recalculating the max mana using CalcMaxMana(). Well CalcMaxMana() was being calculated for Mobs and not Clients so the wrong max mana was being set.
I noticed on the VZTZ source this was causing things like Manastones & Cannibalize spells to only reach up to 60% mana before it would quit giving you mana.
The Client::SetMana() was already setting the cur_mana and then trying to set cur_mana again in the Mob::SetMana().
There was no need to call the Mob::SetMana() because it was 1. calculating the wrong maximum mana and 2. The cur_mana was already set in Client::SetMana().
The client_process.cpp file in function Client:
oManaRegen() was calling the functions SetMana() and SendManaUpdatePacket(). The SetMana() functions already calls the SendManaUpdatePacket() at the end of the SetMana() function. So the SendManaUpdatePacket() was being sent to the client twice.
I hope I explained it well enough for everyone to understand.