diff options
| author | megamage <none@none> | 2009-05-15 13:44:49 -0500 |
|---|---|---|
| committer | megamage <none@none> | 2009-05-15 13:44:49 -0500 |
| commit | a442a9b9145586b37b8d1db5efec91a232e7c382 (patch) | |
| tree | 2ff606f609badef409d3c0036be12a533bc25274 /src/game/Pet.cpp | |
| parent | 0d715cfd8f3e76f2d4deb180ffbc23af93e623a9 (diff) | |
[7831] Prevent have hunter pet with level greater player levels at level changes. Propertly set hunter pet xp values at level update. Author: VladimirMangos
--HG--
branch : trunk
Diffstat (limited to 'src/game/Pet.cpp')
| -rw-r--r-- | src/game/Pet.cpp | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/src/game/Pet.cpp b/src/game/Pet.cpp index 7edc9144bdc..72a4ef5be07 100644 --- a/src/game/Pet.cpp +++ b/src/game/Pet.cpp @@ -362,6 +362,8 @@ bool Pet::LoadPetFromDB( Player* owner, uint32 petentry, uint32 petnumber, bool } m_loading = false; + + SynchronizeLevelWithOwner(); return true; } @@ -727,12 +729,11 @@ void Pet::GivePetXP(uint32 xp) { newXP -= nextLvlXP; - SetLevel( level + 1 ); + GivePetLevel(level+1); SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, objmgr.GetXPForLevel(level+1)*PET_XP_FACTOR); level = getLevel(); nextLvlXP = GetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP); - GivePetLevel(level); } SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, newXP); @@ -1793,3 +1794,29 @@ void Pet::learnSpellHighRank(uint32 spellid) if(uint32 next = spellmgr.GetNextSpellInChain(spellid)) learnSpellHighRank(next); } + +void Pet::SynchronizeLevelWithOwner() +{ + Unit* owner = GetOwner(); + if (!owner || owner->GetTypeId() != TYPEID_PLAYER) + return; + + switch(getPetType()) + { + // always same level + case SUMMON_PET: + GivePetLevel(owner->getLevel()); + break; + // can't be greater owner level + case HUNTER_PET: + if(getLevel() > owner->getLevel()) + { + GivePetLevel(owner->getLevel()); + SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, objmgr.GetXPForLevel(owner->getLevel())/4); + SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, GetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP)-1); + } + break; + default: + break; + } +} |
