aboutsummaryrefslogtreecommitdiff
path: root/src/game/TemporarySummon.cpp
diff options
context:
space:
mode:
authormegamage <none@none>2009-03-21 09:48:44 -0600
committermegamage <none@none>2009-03-21 09:48:44 -0600
commita84e757793e6310c84af8b05f9b27f1ee5abd188 (patch)
tree1605f4fd9a6122c826048c1abc2220dcae68a788 /src/game/TemporarySummon.cpp
parent55695eda786667a34d6c0ae59496d787dfba4b3e (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.cpp61
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();
}