diff options
author | megamage <none@none> | 2009-03-21 09:48:44 -0600 |
---|---|---|
committer | megamage <none@none> | 2009-03-21 09:48:44 -0600 |
commit | a84e757793e6310c84af8b05f9b27f1ee5abd188 (patch) | |
tree | 1605f4fd9a6122c826048c1abc2220dcae68a788 /src/game/TemporarySummon.cpp | |
parent | 55695eda786667a34d6c0ae59496d787dfba4b3e (diff) |
*Update summon system. Show pet bar for guardians. Allow multiple charms/guardians.
--HG--
branch : trunk
Diffstat (limited to 'src/game/TemporarySummon.cpp')
-rw-r--r-- | src/game/TemporarySummon.cpp | 61 |
1 files changed, 24 insertions, 37 deletions
diff --git a/src/game/TemporarySummon.cpp b/src/game/TemporarySummon.cpp index 408c4e3ba4a..76c7ecfb8c1 100644 --- a/src/game/TemporarySummon.cpp +++ b/src/game/TemporarySummon.cpp @@ -199,14 +199,23 @@ void TempSummon::SetTempSummonType(TempSummonType type) void TempSummon::UnSummon() { Unit* owner = GetSummoner(); - if(owner) - { - if(owner->GetTypeId() == TYPEID_UNIT && ((Creature*)owner)->IsAIEnabled) - ((Creature*)owner)->AI()->SummonedCreatureDespawn(this); + if(owner && owner->GetTypeId() == TYPEID_UNIT && ((Creature*)owner)->IsAIEnabled) + ((Creature*)owner)->AI()->SummonedCreatureDespawn(this); + + CleanupsBeforeDelete(); + AddObjectToRemoveList(); +} - if(m_Properties) +void TempSummon::RemoveFromWorld() +{ + if(!IsInWorld()) + return; + + if(m_Properties) + { + if(uint32 slot = m_Properties->Slot) { - if(uint32 slot = m_Properties->Slot) + if(Unit* owner = GetSummoner()) { --slot; if(owner->m_TotemSlot[slot] = GetGUID()) @@ -214,9 +223,7 @@ void TempSummon::UnSummon() } } } - - CleanupsBeforeDelete(); - AddObjectToRemoveList(); + Creature::RemoveFromWorld(); } void TempSummon::SaveToDB() @@ -230,43 +237,20 @@ Guardian::Guardian(SummonPropertiesEntry const *properties, Unit *owner) : TempS InitCharmInfo(); } -bool Guardian::Create(uint32 guidlow, Map *map, uint32 phaseMask, uint32 Entry, uint32 pet_number) -{ - SetMapId(map->GetId()); - SetInstanceId(map->GetInstanceId()); - SetPhaseMask(phaseMask,false); - - Object::_Create(guidlow, pet_number, HIGHGUID_PET); - - m_DBTableGuid = guidlow; - m_originalEntry = Entry; - - if(!InitEntry(Entry)) - return false; - - SetByteValue(UNIT_FIELD_BYTES_2, 0, SHEATH_STATE_MELEE); - - return true; -} - void Guardian::InitSummon(uint32 duration) { TempSummon::InitSummon(duration); SetReactState(REACT_AGGRESSIVE); - SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, 0); SetOwnerGUID(m_owner->GetGUID()); SetCreatorGUID(m_owner->GetGUID()); - SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE, m_owner->getFaction()); - m_owner->AddGuardian(this); - SetUInt32Value(UNIT_FIELD_BYTES_0, 2048); + setFaction(m_owner->getFaction()); + m_owner->SetPet(this, true); if(m_owner->GetTypeId() == TYPEID_PLAYER) { - m_owner->SetUInt64Value(UNIT_FIELD_SUMMON, GetGUID()); m_charmInfo->InitCharmCreateSpells(); - //charmInfo->SetPetNumber(objmgr.GeneratePetNumber(), true); ((Player*)m_owner)->CharmSpellInitialize(); } } @@ -305,9 +289,12 @@ void Guardian::InitStatsForLevel(uint32 petlevel) } } -void Guardian::UnSummon() +void Guardian::RemoveFromWorld() { - m_owner->m_Guardians.erase(GetGUID()); - TempSummon::UnSummon(); + if(!IsInWorld()) + return; + + m_owner->SetPet(this, false); + TempSummon::RemoveFromWorld(); } |