diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/BattleGround.cpp | 1 | ||||
-rw-r--r-- | src/game/Pet.cpp | 4 | ||||
-rw-r--r-- | src/game/Player.cpp | 3 | ||||
-rw-r--r-- | src/game/Player.h | 7 | ||||
-rw-r--r-- | src/game/SpellEffects.cpp | 32 |
5 files changed, 46 insertions, 1 deletions
diff --git a/src/game/BattleGround.cpp b/src/game/BattleGround.cpp index e11728b32d3..3eb699472d8 100644 --- a/src/game/BattleGround.cpp +++ b/src/game/BattleGround.cpp @@ -319,6 +319,7 @@ void BattleGround::Update(uint32 diff) if (!plr) continue; plr->ResurrectPlayer(1.0f); + plr->CastSpell(plr, 6962, true); plr->CastSpell(plr, SPELL_SPIRIT_HEAL_MANA, true); ObjectAccessor::Instance().ConvertCorpseForPlayer(*itr); } diff --git a/src/game/Pet.cpp b/src/game/Pet.cpp index 2c4dfe225ef..47d406f6453 100644 --- a/src/game/Pet.cpp +++ b/src/game/Pet.cpp @@ -346,6 +346,10 @@ bool Pet::LoadPetFromDB( Player* owner, uint32 petentry, uint32 petnumber, bool } } + //set last used pet number (for use in BG's) + if(owner->GetTypeId() == TYPEID_PLAYER && isControlled() && !isTemporarySummoned() && (getPetType() == SUMMON_PET || getPetType() == HUNTER_PET)) + ((Player*)owner)->SetLastPetNumber(pet_number); + m_loading = false; SynchronizeLevelWithOwner(); diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 603cf24319f..e2c9b875c7c 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -392,6 +392,7 @@ Player::Player (WorldSession *session): Unit(), m_achievementMgr(this), m_reputa //returning reagents for temporarily removed pets //when dying/logging out m_oldpetspell = 0; + m_lastpetnumber = 0; ////////////////////Rest System///////////////////// time_inn_enter=0; @@ -17117,7 +17118,7 @@ void Player::RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent) return; } - if(returnreagent && (pet || m_temporaryUnsummonedPetNumber)) + if(returnreagent && (pet || m_temporaryUnsummonedPetNumber) && !InBattleGround()) { //returning of reagents only for players, so best done here uint32 spellId = pet ? pet->GetUInt32Value(UNIT_CREATED_BY_SPELL) : m_oldpetspell; diff --git a/src/game/Player.h b/src/game/Player.h index 0de17a137d2..3e36a5f6802 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -2159,6 +2159,10 @@ class MANGOS_DLL_SPEC Player : public Unit static void ConvertInstancesToGroup(Player *player, Group *group = NULL, uint64 player_guid = 0); bool Satisfy(AccessRequirement const*, uint32 target_map, bool report = false); + // last used pet number (for BG's) + uint32 GetLastPetNumber() const { return m_lastpetnumber; } + void SetLastPetNumber(uint32 petnumber) { m_lastpetnumber = petnumber; } + /*********************************************************/ /*** GROUP SYSTEM ***/ /*********************************************************/ @@ -2434,6 +2438,9 @@ Spell * m_spellModTakingSpell; uint32 m_groupUpdateMask; uint64 m_auraRaidUpdateMask; + // last used pet number (for BG's) + uint32 m_lastpetnumber; + // Player summoning time_t m_summon_expire; uint32 m_summon_mapid; diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 2edd987687c..c1e08006ad9 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -4736,6 +4736,38 @@ void Spell::EffectScriptEffect(uint32 effIndex) { switch(m_spellInfo->Id) { + case 6962: + { + if(m_caster->GetTypeId()!=TYPEID_PLAYER) + return; + + Player* plr = ((Player*)m_caster); + if(plr && plr->GetLastPetNumber()) + { + PetType NewPetType = (plr->getClass()==CLASS_HUNTER) ? HUNTER_PET : SUMMON_PET; + if (Pet* NewPet = new Pet(plr,NewPetType)) + { + if(NewPet->LoadPetFromDB(plr, 0, plr->GetLastPetNumber(), true)) + { + NewPet->SetHealth(NewPet->GetMaxHealth()); + NewPet->SetPower(NewPet->getPowerType(),NewPet->GetMaxPower(NewPet->getPowerType())); + + switch (NewPet->GetEntry()) + { + case 11859: + case 89: + NewPet->SetEntry(416); + break; + default: + break; + } + } + else + delete NewPet; + } + } + return; + } // Glyph of Starfire case 54846: { |