diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Entities/Creature/TemporarySummon.cpp | 8 | ||||
-rwxr-xr-x | src/server/game/Entities/Totem/Totem.cpp | 12 | ||||
-rwxr-xr-x | src/server/game/Entities/Totem/Totem.h | 4 |
3 files changed, 18 insertions, 6 deletions
diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp index 43b29c600d6..ff39a482187 100755 --- a/src/server/game/Entities/Creature/TemporarySummon.cpp +++ b/src/server/game/Entities/Creature/TemporarySummon.cpp @@ -21,6 +21,7 @@ #include "CreatureAI.h" #include "ObjectMgr.h" #include "TemporarySummon.h" +#include "Totem.h" TempSummon::TempSummon(SummonPropertiesEntry const* properties, Unit* owner, bool isWorldObject) : Creature(isWorldObject), m_Properties(properties), m_type(TEMPSUMMON_MANUAL_DESPAWN), @@ -195,7 +196,12 @@ void TempSummon::InitStats(uint32 duration) { Creature* oldSummon = GetMap()->GetCreature(owner->m_SummonSlot[slot]); if (oldSummon && oldSummon->isSummon()) - oldSummon->ToTempSummon()->UnSummon(); + { + if (oldSummon->isTotem()) + oldSummon->ToTotem()->UnSummon(); + else + oldSummon->ToTempSummon()->UnSummon(); + } } owner->m_SummonSlot[slot] = GetGUID(); } diff --git a/src/server/game/Entities/Totem/Totem.cpp b/src/server/game/Entities/Totem/Totem.cpp index 80c5de35e59..063d017d1db 100755 --- a/src/server/game/Entities/Totem/Totem.cpp +++ b/src/server/game/Entities/Totem/Totem.cpp @@ -86,7 +86,7 @@ void Totem::InitStats(uint32 duration) void Totem::InitSummon() { - if (m_type == TOTEM_PASSIVE) + if (m_type == TOTEM_PASSIVE && GetSpell()) { CastSpell(this, GetSpell(), true); } @@ -99,7 +99,7 @@ void Totem::InitSummon() void Totem::UnSummon() { CombatStop(); - RemoveAurasDueToSpell(GetSpell()); + RemoveAurasDueToSpell(GetSpell(), GetGUID()); // clear owner's totem slot for (int i = SUMMON_SLOT_TOTEM; i < MAX_TOTEM_SLOT; ++i) @@ -111,7 +111,11 @@ void Totem::UnSummon() } } - m_owner->RemoveAurasDueToSpell(GetSpell()); + m_owner->RemoveAurasDueToSpell(GetSpell(), GetGUID()); + + // Remove Sentry Totem Aura + if (GetEntry() == SENTRY_TOTEM_ENTRY) + m_owner->RemoveAurasDueToSpell(SENTRY_TOTEM_SPELLID); //remove aura all party members too if (Player* owner = m_owner->ToPlayer()) @@ -127,7 +131,7 @@ void Totem::UnSummon() { Player* target = itr->getSource(); if (target && group->SameSubGroup(owner, target)) - target->RemoveAurasDueToSpell(GetSpell()); + target->RemoveAurasDueToSpell(GetSpell(), GetGUID()); } } } diff --git a/src/server/game/Entities/Totem/Totem.h b/src/server/game/Entities/Totem/Totem.h index c33b8776660..f1429d1771d 100755 --- a/src/server/game/Entities/Totem/Totem.h +++ b/src/server/game/Entities/Totem/Totem.h @@ -27,8 +27,10 @@ enum TotemType TOTEM_ACTIVE = 1, TOTEM_STATUE = 2 // copied straight from MaNGOS, may need more implementation to work }; +// Some Totems cast spells that are not in creature DB +#define SENTRY_TOTEM_SPELLID 6495 -#define SENTRY_TOTEM_ENTRY 3968 +#define SENTRY_TOTEM_ENTRY 3968 class Totem : public Minion { |