diff options
| author | Shauren <shauren.trinity@gmail.com> | 2011-05-19 22:27:18 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2011-05-19 22:27:18 +0200 |
| commit | ac4ed1efdf2d800ab2ea605fac982c9436cfba1b (patch) | |
| tree | 93a7af028452062695f6ad09c29f1c1fb4cb299f /src/server/game/Entities/Object | |
| parent | f03bdceaff76d8488cb683a80ac3fd6149c6299b (diff) | |
Core/Spells: Moved setting UNIT_CREATED_BY_SPELL out of spell effect handlers and sending SMSG_TOTEM_CREATED into Totem class
Diffstat (limited to 'src/server/game/Entities/Object')
| -rwxr-xr-x | src/server/game/Entities/Object/Object.cpp | 95 |
1 files changed, 62 insertions, 33 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 8b4efe51de7..58620cd9cd5 100755 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2067,40 +2067,57 @@ void WorldObject::AddObjectToRemoveList() map->AddObjectToRemoveList(this); } -TempSummon* Map::SummonCreature(uint32 entry, const Position &pos, SummonPropertiesEntry const *properties /*= NULL*/, uint32 duration /*= 0*/, Unit *summoner /*= NULL*/, uint32 vehId /*= 0*/, bool addToWorld /*= false*/) +TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropertiesEntry const* properties /*= NULL*/, uint32 duration /*= 0*/, Unit* summoner /*= NULL*/, uint32 spellId /*= 0*/, uint32 vehId /*= 0*/) { uint32 mask = UNIT_MASK_SUMMON; if (properties) { - switch(properties->Category) + switch (properties->Category) { - case SUMMON_CATEGORY_PET: mask = UNIT_MASK_GUARDIAN; break; - case SUMMON_CATEGORY_PUPPET: mask = UNIT_MASK_PUPPET; break; - case SUMMON_CATEGORY_VEHICLE: mask = UNIT_MASK_MINION; break; - default: - switch(properties->Type) + case SUMMON_CATEGORY_PET: + mask = UNIT_MASK_GUARDIAN; + break; + case SUMMON_CATEGORY_PUPPET: + mask = UNIT_MASK_PUPPET; + break; + case SUMMON_CATEGORY_VEHICLE: + mask = UNIT_MASK_MINION; + break; + case SUMMON_CATEGORY_WILD: + case SUMMON_CATEGORY_ALLY: + case SUMMON_CATEGORY_UNK: + { + switch (properties->Type) { - case SUMMON_TYPE_MINION: - case SUMMON_TYPE_GUARDIAN: - case SUMMON_TYPE_GUARDIAN2: - mask = UNIT_MASK_GUARDIAN; break; - case SUMMON_TYPE_TOTEM: - mask = UNIT_MASK_TOTEM; break; - case SUMMON_TYPE_VEHICLE: - case SUMMON_TYPE_VEHICLE2: - mask = UNIT_MASK_SUMMON; break; - case SUMMON_TYPE_MINIPET: - mask = UNIT_MASK_MINION; break; - default: - if (properties->Flags & 512) // Mirror Image, Summon Gargoyle - mask = UNIT_MASK_GUARDIAN; - break; + case SUMMON_TYPE_MINION: + case SUMMON_TYPE_GUARDIAN: + case SUMMON_TYPE_GUARDIAN2: + mask = UNIT_MASK_GUARDIAN; + break; + case SUMMON_TYPE_TOTEM: + mask = UNIT_MASK_TOTEM; + break; + case SUMMON_TYPE_VEHICLE: + case SUMMON_TYPE_VEHICLE2: + mask = UNIT_MASK_SUMMON; + break; + case SUMMON_TYPE_MINIPET: + mask = UNIT_MASK_MINION; + break; + default: + if (properties->Flags & 512) // Mirror Image, Summon Gargoyle + mask = UNIT_MASK_GUARDIAN; + break; } break; + } + default: + return NULL; } } - uint32 phase = PHASEMASK_NORMAL, team = 0; + uint32 phase = PHASEMASK_NORMAL; + uint32 team = 0; if (summoner) { phase = summoner->GetPhaseMask(); @@ -2108,15 +2125,26 @@ TempSummon* Map::SummonCreature(uint32 entry, const Position &pos, SummonPropert team = summoner->ToPlayer()->GetTeam(); } - TempSummon *summon = NULL; - switch(mask) + TempSummon* summon = NULL; + switch (mask) { - case UNIT_MASK_SUMMON: summon = new TempSummon (properties, summoner); break; - case UNIT_MASK_GUARDIAN: summon = new Guardian (properties, summoner); break; - case UNIT_MASK_PUPPET: summon = new Puppet (properties, summoner); break; - case UNIT_MASK_TOTEM: summon = new Totem (properties, summoner); break; - case UNIT_MASK_MINION: summon = new Minion (properties, summoner); break; - default: return NULL; + case UNIT_MASK_SUMMON: + summon = new TempSummon(properties, summoner); + break; + case UNIT_MASK_GUARDIAN: + summon = new Guardian(properties, summoner); + break; + case UNIT_MASK_PUPPET: + summon = new Puppet(properties, summoner); + break; + case UNIT_MASK_TOTEM: + summon = new Totem(properties, summoner); + break; + case UNIT_MASK_MINION: + summon = new Minion(properties, summoner); + break; + default: + return NULL; } if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), this, phase, entry, vehId, team, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation())) @@ -2125,11 +2153,12 @@ TempSummon* Map::SummonCreature(uint32 entry, const Position &pos, SummonPropert return NULL; } + summon->SetUInt32Value(UNIT_CREATED_BY_SPELL, spellId); + summon->SetHomePosition(pos); summon->InitStats(duration); - if (addToWorld) - Add(summon->ToCreature()); + Add(summon->ToCreature()); summon->InitSummon(); //ObjectAccessor::UpdateObjectVisibility(summon); |
