diff options
| author | Subv <s.v.h21@hotmail.com> | 2012-08-29 17:36:09 -0500 |
|---|---|---|
| committer | Subv <s.v.h21@hotmail.com> | 2012-08-29 17:36:09 -0500 |
| commit | 532ddfcd402390a9caf3ac5863bba2f0db9d0efc (patch) | |
| tree | 652cc3e03595f92958ec5ad85f2c455adb617918 /src/server/game | |
| parent | 52389e8ef00646ce623e8d2eef39c12cd7d2faec (diff) | |
| parent | e909e5515ba03a2c8df2bc7d4d84ff295e91107d (diff) | |
Merge branch 'master' of github.com:TrinityCore/TrinityCore into mmaps
Diffstat (limited to 'src/server/game')
| -rwxr-xr-x | src/server/game/Entities/Creature/TemporarySummon.h | 2 | ||||
| -rwxr-xr-x | src/server/game/Entities/Totem/Totem.cpp | 14 | ||||
| -rwxr-xr-x | src/server/game/Entities/Totem/Totem.h | 6 | ||||
| -rwxr-xr-x | src/server/game/Handlers/SpellHandler.cpp | 4 |
4 files changed, 16 insertions, 10 deletions
diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h index 537bbd9c099..ba7faf60ddf 100755 --- a/src/server/game/Entities/Creature/TemporarySummon.h +++ b/src/server/game/Entities/Creature/TemporarySummon.h @@ -29,7 +29,7 @@ class TempSummon : public Creature void Update(uint32 time); virtual void InitStats(uint32 lifetime); virtual void InitSummon(); - void UnSummon(uint32 msTime = 0); + virtual void UnSummon(uint32 msTime = 0); void RemoveFromWorld(); void SetTempSummonType(TempSummonType type); void SaveToDB(uint32 /*mapid*/, uint8 /*spawnMask*/, uint32 /*phaseMask*/) {} diff --git a/src/server/game/Entities/Totem/Totem.cpp b/src/server/game/Entities/Totem/Totem.cpp index 80c5de35e59..a9a0484a4ea 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); } @@ -96,10 +96,10 @@ void Totem::InitSummon() CastSpell(this, GetSpell(1), true); } -void Totem::UnSummon() +void Totem::UnSummon(uint32 msTime) { 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..6271253498d 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 { @@ -38,7 +40,7 @@ class Totem : public Minion void Update(uint32 time); void InitStats(uint32 duration); void InitSummon(); - void UnSummon(); + void UnSummon(uint32 msTime = 0); uint32 GetSpell(uint8 slot = 0) const { return m_spells[slot]; } uint32 GetTotemDuration() const { return m_duration; } void SetTotemDuration(uint32 duration) { m_duration = duration; } diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index d7bb10e8ba3..b9e5523fd23 100755 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -514,8 +514,8 @@ void WorldSession::HandleTotemDestroyed(WorldPacket& recvPacket) return; Creature* totem = GetPlayer()->GetMap()->GetCreature(_player->m_SummonSlot[slotId]); - // Don't unsummon sentry totem - if (totem && totem->isTotem() && totem->GetEntry() != SENTRY_TOTEM_ENTRY) + + if (totem && totem->isTotem()) totem->ToTotem()->UnSummon(); } |
