aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/AI/CoreAI/GameObjectAI.h7
-rw-r--r--src/server/game/AI/CoreAI/PassiveAI.cpp2
-rw-r--r--src/server/game/AI/CoreAI/PassiveAI.h2
-rw-r--r--src/server/game/AI/CreatureAI.h2
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp4
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.h2
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp6
-rw-r--r--src/server/game/Entities/Creature/TemporarySummon.cpp50
-rw-r--r--src/server/game/Entities/Creature/TemporarySummon.h6
-rw-r--r--src/server/game/Entities/Object/Object.cpp14
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp13
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp2
-rw-r--r--src/server/game/Handlers/BattlePetHandler.cpp2
-rw-r--r--src/server/game/Maps/Map.h2
-rw-r--r--src/server/game/Spells/Spell.cpp4
-rw-r--r--src/server/game/Spells/SpellEffects.cpp2
-rw-r--r--src/server/scripts/BrokenIsles/zone_orderhall_warrior.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BaradinHold/boss_occuthar.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp4
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp4
-rw-r--r--src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp2
-rw-r--r--src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp4
-rw-r--r--src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp2
-rw-r--r--src/server/scripts/Kalimdor/Firelands/firelands.cpp2
-rw-r--r--src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp4
-rw-r--r--src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp2
-rw-r--r--src/server/scripts/Maelstrom/Stonecore/boss_corborus.cpp2
-rw-r--r--src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp2
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp2
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp2
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp12
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp6
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp2
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp12
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp7
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp23
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp8
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp5
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp12
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp8
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp5
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp2
-rw-r--r--src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp2
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp2
-rw-r--r--src/server/scripts/Northrend/zone_borean_tundra.cpp20
-rw-r--r--src/server/scripts/Northrend/zone_icecrown.cpp4
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp5
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp2
-rw-r--r--src/server/scripts/Outland/zone_blades_edge_mountains.cpp2
-rw-r--r--src/server/scripts/Outland/zone_shadowmoon_valley.cpp2
-rw-r--r--src/server/scripts/Pet/pet_hunter.cpp2
-rw-r--r--src/server/scripts/Pet/pet_priest.cpp6
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp2
-rw-r--r--src/server/scripts/World/boss_emerald_dragons.cpp6
-rw-r--r--src/server/scripts/World/npcs_special.cpp2
73 files changed, 217 insertions, 138 deletions
diff --git a/src/server/game/AI/CoreAI/GameObjectAI.h b/src/server/game/AI/CoreAI/GameObjectAI.h
index cec28d4c420..8a28e192a65 100644
--- a/src/server/game/AI/CoreAI/GameObjectAI.h
+++ b/src/server/game/AI/CoreAI/GameObjectAI.h
@@ -23,6 +23,7 @@
#include "ObjectGuid.h"
#include "Optional.h"
+class Creature;
class GameObject;
class Player;
class Quest;
@@ -102,6 +103,12 @@ class TC_GAME_API GameObjectAI
// Called when spell hits a target
virtual void SpellHitTarget(Unit* /*target*/, SpellInfo const* /*spellInfo*/) { }
virtual void SpellHitTargetGameObject(GameObject* /*target*/, SpellInfo const* /*spellInfo*/) { }
+
+ // Called when the gameobject summon successfully other creature
+ virtual void JustSummoned(Creature* /*summon*/) { }
+
+ virtual void SummonedCreatureDespawn(Creature* /*summon*/) { }
+ virtual void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) { }
};
class TC_GAME_API NullGameObjectAI : public GameObjectAI
diff --git a/src/server/game/AI/CoreAI/PassiveAI.cpp b/src/server/game/AI/CoreAI/PassiveAI.cpp
index e762e8d4aad..78d60fdb4b2 100644
--- a/src/server/game/AI/CoreAI/PassiveAI.cpp
+++ b/src/server/game/AI/CoreAI/PassiveAI.cpp
@@ -100,7 +100,7 @@ int32 CritterAI::Permissible(Creature const* creature)
return PERMIT_BASE_NO;
}
-void TriggerAI::IsSummonedBy(Unit* summoner)
+void TriggerAI::IsSummonedBy(WorldObject* summoner)
{
if (me->m_spells[0])
{
diff --git a/src/server/game/AI/CoreAI/PassiveAI.h b/src/server/game/AI/CoreAI/PassiveAI.h
index 08946e33eb5..5a5e011118c 100644
--- a/src/server/game/AI/CoreAI/PassiveAI.h
+++ b/src/server/game/AI/CoreAI/PassiveAI.h
@@ -78,7 +78,7 @@ class TC_GAME_API TriggerAI : public NullCreatureAI
public:
using NullCreatureAI::NullCreatureAI;
- void IsSummonedBy(Unit* summoner) override;
+ void IsSummonedBy(WorldObject* summoner) override;
static int32 Permissible(Creature const* creature);
};
diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h
index e6fb48571b9..babac1d6f59 100644
--- a/src/server/game/AI/CreatureAI.h
+++ b/src/server/game/AI/CreatureAI.h
@@ -108,7 +108,7 @@ class TC_GAME_API CreatureAI : public UnitAI
// Called when the creature summon successfully other creature
virtual void JustSummoned(Creature* /*summon*/) { }
- virtual void IsSummonedBy(Unit* /*summoner*/) { }
+ virtual void IsSummonedBy(WorldObject* /*summoner*/) { }
virtual void SummonedCreatureDespawn(Creature* /*summon*/) { }
virtual void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) { }
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp
index 6cac09f35fb..06e8fd994cf 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.cpp
+++ b/src/server/game/AI/SmartScripts/SmartAI.cpp
@@ -638,9 +638,9 @@ void SmartAI::ReceiveEmote(Player* player, uint32 textEmote)
GetScript()->ProcessEventsFor(SMART_EVENT_RECEIVE_EMOTE, player, textEmote);
}
-void SmartAI::IsSummonedBy(Unit* summoner)
+void SmartAI::IsSummonedBy(WorldObject* summoner)
{
- GetScript()->ProcessEventsFor(SMART_EVENT_JUST_SUMMONED, summoner);
+ GetScript()->ProcessEventsFor(SMART_EVENT_JUST_SUMMONED, summoner->ToUnit(), 0, 0, false, nullptr, summoner->ToGameObject());
}
void SmartAI::DamageDealt(Unit* doneTo, uint32& damage, DamageEffectType /*damagetype*/)
diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h
index 806902d9072..4acb1488a53 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.h
+++ b/src/server/game/AI/SmartScripts/SmartAI.h
@@ -120,7 +120,7 @@ class TC_GAME_API SmartAI : public CreatureAI
void MovementInform(uint32 MovementType, uint32 Data) override;
// Called when creature is summoned by another unit
- void IsSummonedBy(Unit* summoner) override;
+ void IsSummonedBy(WorldObject* summoner) override;
// Called at any Damage to any victim (before damage apply)
void DamageDealt(Unit* doneTo, uint32& damage, DamageEffectType /*damagetype*/) override;
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 28b4f008b5b..fb074fd69c2 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -2952,13 +2952,13 @@ void SmartScript::GetTargets(ObjectVector& targets, SmartScriptHolder const& e,
if (!charmerOrOwnerGuid)
if (TempSummon* tempSummon = me->ToTempSummon())
- if (Unit* summoner = tempSummon->GetSummoner())
+ if (WorldObject* summoner = tempSummon->GetSummoner())
charmerOrOwnerGuid = summoner->GetGUID();
if (!charmerOrOwnerGuid)
charmerOrOwnerGuid = me->GetCreatorGUID();
- if (Unit* owner = ObjectAccessor::GetUnit(*me, charmerOrOwnerGuid))
+ if (WorldObject* owner = ObjectAccessor::GetWorldObject(*me, charmerOrOwnerGuid))
targets.push_back(owner);
}
else if (go)
@@ -2970,7 +2970,7 @@ void SmartScript::GetTargets(ObjectVector& targets, SmartScriptHolder const& e,
// Get owner of owner
if (e.target.owner.useCharmerOrOwner && !targets.empty())
{
- Unit* owner = targets.front()->ToUnit();
+ WorldObject* owner = targets.front();
targets.clear();
if (Unit* base = ObjectAccessor::GetUnit(*owner, owner->GetCharmerOrOwnerGUID()))
diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp
index e21d3624e32..e9459874289 100644
--- a/src/server/game/Entities/Creature/TemporarySummon.cpp
+++ b/src/server/game/Entities/Creature/TemporarySummon.cpp
@@ -18,6 +18,8 @@
#include "TemporarySummon.h"
#include "CreatureAI.h"
#include "DB2Structure.h"
+#include "GameObject.h"
+#include "GameObjectAI.h"
#include "Log.h"
#include "Map.h"
#include "ObjectAccessor.h"
@@ -25,7 +27,7 @@
#include "Player.h"
#include <sstream>
-TempSummon::TempSummon(SummonPropertiesEntry const* properties, Unit* owner, bool isWorldObject) :
+TempSummon::TempSummon(SummonPropertiesEntry const* properties, WorldObject* owner, bool isWorldObject) :
Creature(isWorldObject), m_Properties(properties), m_type(TEMPSUMMON_MANUAL_DESPAWN),
m_timer(0), m_lifetime(0)
{
@@ -35,9 +37,16 @@ m_timer(0), m_lifetime(0)
m_unitTypeMask |= UNIT_MASK_SUMMON;
}
-Unit* TempSummon::GetSummoner() const
+WorldObject* TempSummon::GetSummoner() const
{
- return !m_summonerGUID.IsEmpty() ? ObjectAccessor::GetUnit(*this, m_summonerGUID) : nullptr;
+ return !m_summonerGUID.IsEmpty() ? ObjectAccessor::GetWorldObject(*this, m_summonerGUID) : nullptr;
+}
+
+Unit* TempSummon::GetSummonerUnit() const
+{
+ if (WorldObject* summoner = GetSummoner())
+ return summoner->ToUnit();
+ return nullptr;
}
Creature* TempSummon::GetSummonerCreatureBase() const
@@ -45,6 +54,13 @@ Creature* TempSummon::GetSummonerCreatureBase() const
return !m_summonerGUID.IsEmpty() ? ObjectAccessor::GetCreature(*this, m_summonerGUID) : nullptr;
}
+GameObject* TempSummon::GetSummonerGameObject() const
+{
+ if (WorldObject* summoner = GetSummoner())
+ return summoner->ToGameObject();
+ return nullptr;
+}
+
void TempSummon::Update(uint32 diff)
{
Creature::Update(diff);
@@ -168,7 +184,7 @@ void TempSummon::InitStats(uint32 duration)
if (m_type == TEMPSUMMON_MANUAL_DESPAWN)
m_type = (duration == 0) ? TEMPSUMMON_DEAD_DESPAWN : TEMPSUMMON_TIMED_DESPAWN;
- Unit* owner = GetSummoner();
+ Unit* owner = GetSummonerUnit();
if (owner && IsTrigger() && m_spells[0])
{
@@ -206,11 +222,19 @@ void TempSummon::InitStats(uint32 duration)
void TempSummon::InitSummon()
{
- Unit* owner = GetSummoner();
+ WorldObject* owner = GetSummoner();
if (owner)
{
- if (owner->GetTypeId() == TYPEID_UNIT && owner->ToCreature()->IsAIEnabled())
- owner->ToCreature()->AI()->JustSummoned(this);
+ if (owner->GetTypeId() == TYPEID_UNIT)
+ {
+ if (owner->ToCreature()->IsAIEnabled())
+ owner->ToCreature()->AI()->JustSummoned(this);
+ }
+ else if (owner->GetTypeId() == TYPEID_GAMEOBJECT)
+ {
+ if (owner->ToGameObject()->AI())
+ owner->ToGameObject()->AI()->JustSummoned(this);
+ }
if (IsAIEnabled())
AI()->IsSummonedBy(owner);
}
@@ -244,9 +268,13 @@ void TempSummon::UnSummon(uint32 msTime)
return;
}
- Unit* owner = GetSummoner();
- if (owner && owner->GetTypeId() == TYPEID_UNIT && owner->ToCreature()->IsAIEnabled())
- owner->ToCreature()->AI()->SummonedCreatureDespawn(this);
+ if (WorldObject * owner = GetSummoner())
+ {
+ if (owner->GetTypeId() == TYPEID_UNIT && owner->ToCreature()->IsAIEnabled())
+ owner->ToCreature()->AI()->SummonedCreatureDespawn(this);
+ else if (owner->GetTypeId() == TYPEID_GAMEOBJECT && owner->ToGameObject()->AI())
+ owner->ToGameObject()->AI()->SummonedCreatureDespawn(this);
+ }
AddObjectToRemoveList();
}
@@ -266,7 +294,7 @@ void TempSummon::RemoveFromWorld()
{
int32 slot = m_Properties->Slot;
if (slot > 0)
- if (Unit* owner = GetSummoner())
+ if (Unit* owner = GetSummonerUnit())
if (owner->m_SummonSlot[slot] == GetGUID())
owner->m_SummonSlot[slot].Clear();
}
diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h
index 688b640d1ef..2f71f4b5930 100644
--- a/src/server/game/Entities/Creature/TemporarySummon.h
+++ b/src/server/game/Entities/Creature/TemporarySummon.h
@@ -43,7 +43,7 @@ struct SummonPropertiesEntry;
class TC_GAME_API TempSummon : public Creature
{
public:
- explicit TempSummon(SummonPropertiesEntry const* properties, Unit* owner, bool isWorldObject);
+ explicit TempSummon(SummonPropertiesEntry const* properties, WorldObject* owner, bool isWorldObject);
virtual ~TempSummon() { }
void Update(uint32 time) override;
virtual void InitStats(uint32 lifetime);
@@ -53,8 +53,10 @@ class TC_GAME_API TempSummon : public Creature
void RemoveFromWorld() override;
void SetTempSummonType(TempSummonType type);
void SaveToDB(uint32 /*mapid*/, std::vector<Difficulty> const& /*spawnDifficulties*/) override { }
- Unit* GetSummoner() const;
+ WorldObject* GetSummoner() const;
+ Unit* GetSummonerUnit() const;
Creature* GetSummonerCreatureBase() const;
+ GameObject* GetSummonerGameObject() const;
ObjectGuid GetSummonerGUID() const { return m_summonerGUID; }
TempSummonType GetSummonType() const { return m_type; }
uint32 GetTimer() const { return m_timer; }
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 4e9aedf271d..e2c6d6a224c 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -1690,7 +1690,7 @@ void WorldObject::AddObjectToRemoveList()
map->AddObjectToRemoveList(this);
}
-TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropertiesEntry const* properties /*= nullptr*/, uint32 duration /*= 0*/, Unit* summoner /*= nullptr*/, uint32 spellId /*= 0*/, uint32 vehId /*= 0*/, ObjectGuid privateObjectOwner /*= ObjectGuid::Empty*/)
+TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropertiesEntry const* properties /*= nullptr*/, uint32 duration /*= 0*/, WorldObject* summoner /*= nullptr*/, uint32 spellId /*= 0*/, uint32 vehId /*= 0*/, ObjectGuid privateObjectOwner /*= ObjectGuid::Empty*/)
{
uint32 mask = UNIT_MASK_SUMMON;
if (properties)
@@ -1740,6 +1740,8 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert
}
}
+ Unit* summonerUnit = summoner ? summoner->ToUnit() : nullptr;
+
TempSummon* summon = nullptr;
switch (mask)
{
@@ -1747,16 +1749,16 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert
summon = new TempSummon(properties, summoner, false);
break;
case UNIT_MASK_GUARDIAN:
- summon = new Guardian(properties, summoner, false);
+ summon = new Guardian(properties, summonerUnit, false);
break;
case UNIT_MASK_PUPPET:
- summon = new Puppet(properties, summoner);
+ summon = new Puppet(properties, summonerUnit);
break;
case UNIT_MASK_TOTEM:
- summon = new Totem(properties, summoner);
+ summon = new Totem(properties, summonerUnit);
break;
case UNIT_MASK_MINION:
- summon = new Minion(properties, summoner, false);
+ summon = new Minion(properties, summonerUnit, false);
break;
}
@@ -1835,7 +1837,7 @@ TempSummon* WorldObject::SummonCreature(uint32 entry, Position const& pos, TempS
{
if (Map* map = FindMap())
{
- if (TempSummon* summon = map->SummonCreature(entry, pos, nullptr, despawnTime, ToUnit(), spellId, vehId, privateObjectOwner))
+ if (TempSummon* summon = map->SummonCreature(entry, pos, nullptr, despawnTime, this, spellId, vehId, privateObjectOwner))
{
summon->SetTempSummonType(despawnType);
return summon;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index ac93996b16c..296f5a445a1 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -37,6 +37,7 @@
#include "CreatureAIFactory.h"
#include "DB2Stores.h"
#include "Formulas.h"
+#include "GameObjectAI.h"
#include "GameTime.h"
#include "GridNotifiersImpl.h"
#include "Group.h"
@@ -10492,10 +10493,16 @@ void Unit::SetMeleeAnimKitId(uint16 animKitId)
if (CreatureAI* ai = creature->AI())
ai->JustDied(attacker);
- if (TempSummon* summon = creature->ToTempSummon())
- if (Unit* summoner = summon->GetSummoner())
- if (summoner->ToCreature() && summoner->IsAIEnabled())
+ if (TempSummon * summon = creature->ToTempSummon())
+ {
+ if (WorldObject * summoner = summon->GetSummoner())
+ {
+ if (summoner->ToCreature() && summoner->ToCreature()->IsAIEnabled())
summoner->ToCreature()->AI()->SummonedCreatureDies(creature, attacker);
+ else if (summoner->ToGameObject() && summoner->ToGameObject()->AI())
+ summoner->ToGameObject()->AI()->SummonedCreatureDies(creature, attacker);
+ }
+ }
// Dungeon specific stuff, only applies to players killing creatures
if (creature->GetInstanceId())
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 328ec7314d8..2b15f3874f3 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -191,7 +191,7 @@ bool SpellClickInfo::IsFitToRequirements(Unit const* clicker, Unit const* clicke
Unit const* summoner = nullptr;
// Check summoners for party
if (clickee->IsSummon())
- summoner = clickee->ToTempSummon()->GetSummoner();
+ summoner = clickee->ToTempSummon()->GetSummonerUnit();
if (!summoner)
summoner = clickee;
diff --git a/src/server/game/Handlers/BattlePetHandler.cpp b/src/server/game/Handlers/BattlePetHandler.cpp
index a0a7afe1fb4..93bca65d3f5 100644
--- a/src/server/game/Handlers/BattlePetHandler.cpp
+++ b/src/server/game/Handlers/BattlePetHandler.cpp
@@ -62,7 +62,7 @@ void WorldSession::HandleQueryBattlePetName(WorldPackets::BattlePet::QueryBattle
response.CreatureID = summonedBattlePet->GetEntry();
response.Timestamp = summonedBattlePet->GetBattlePetCompanionNameTimestamp();
- Unit* petOwner = summonedBattlePet->ToTempSummon()->GetSummoner();
+ Unit* petOwner = summonedBattlePet->ToTempSummon()->GetSummonerUnit();
if (!petOwner->IsPlayer())
{
SendPacket(response.Write());
diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h
index ee6f0b293be..cf273e36c00 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -440,7 +440,7 @@ class TC_GAME_API Map : public GridRefManager<NGridType>
void UpdateIteratorBack(Player* player);
- TempSummon* SummonCreature(uint32 entry, Position const& pos, SummonPropertiesEntry const* properties = nullptr, uint32 duration = 0, Unit* summoner = nullptr, uint32 spellId = 0, uint32 vehId = 0, ObjectGuid privateObjectOwner = ObjectGuid::Empty);
+ TempSummon* SummonCreature(uint32 entry, Position const& pos, SummonPropertiesEntry const* properties = nullptr, uint32 duration = 0, WorldObject* summoner = nullptr, uint32 spellId = 0, uint32 vehId = 0, ObjectGuid privateObjectOwner = ObjectGuid::Empty);
void SummonCreatureGroup(uint8 group, std::list<TempSummon*>* list = nullptr);
AreaTrigger* GetAreaTrigger(ObjectGuid const& guid);
SceneObject* GetSceneObject(ObjectGuid const& guid);
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 20d5eb080fd..bd520ec8b02 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -1384,7 +1384,7 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffectInfo const& spellEffectIn
case TARGET_DEST_SUMMONER:
if (Unit const* unitCaster = m_caster->ToUnit())
if (TempSummon const* casterSummon = unitCaster->ToTempSummon())
- if (Unit const* summoner = casterSummon->GetSummoner())
+ if (WorldObject const* summoner = casterSummon->GetSummoner())
dest = SpellDestination(*summoner);
break;
default:
@@ -1520,7 +1520,7 @@ void Spell::SelectImplicitCasterObjectTargets(SpellEffectInfo const& spellEffect
case TARGET_UNIT_SUMMONER:
if (Unit* unitCaster = m_caster->ToUnit())
if (unitCaster->IsSummon())
- target = unitCaster->ToTempSummon()->GetSummoner();
+ target = unitCaster->ToTempSummon()->GetSummonerUnit();
break;
case TARGET_UNIT_VEHICLE:
if (Unit* unitCaster = m_caster->ToUnit())
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 2b6649bcd3f..51fd904caa4 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -2038,7 +2038,7 @@ void Spell::EffectSummonType()
uint32 faction = properties->Faction;
if (properties->GetFlags().HasFlag(SummonPropertiesFlags::UseSummonerFaction)) // TODO: Determine priority between faction and flag
- if (Unit* summoner = summon->GetSummoner())
+ if (WorldObject const* summoner = summon->GetSummoner())
faction = summoner->GetFaction();
if (faction)
diff --git a/src/server/scripts/BrokenIsles/zone_orderhall_warrior.cpp b/src/server/scripts/BrokenIsles/zone_orderhall_warrior.cpp
index 86a8c8cf67c..97ec5c6c2c5 100644
--- a/src/server/scripts/BrokenIsles/zone_orderhall_warrior.cpp
+++ b/src/server/scripts/BrokenIsles/zone_orderhall_warrior.cpp
@@ -113,7 +113,7 @@ struct npc_danica_the_reclaimer : public ScriptedAI
// Should be the player
// Personal spawn ? Demon Creator is the player who accepts the quest, no phasing involved but the quest giver dissapears and gets replaced with a new one
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
if (summoner->GetTypeId() != TYPEID_PLAYER)
return;
diff --git a/src/server/scripts/EasternKingdoms/BaradinHold/boss_occuthar.cpp b/src/server/scripts/EasternKingdoms/BaradinHold/boss_occuthar.cpp
index 21dc4d454a3..f616da3f9a1 100644
--- a/src/server/scripts/EasternKingdoms/BaradinHold/boss_occuthar.cpp
+++ b/src/server/scripts/EasternKingdoms/BaradinHold/boss_occuthar.cpp
@@ -166,7 +166,7 @@ class npc_eyestalk : public CreatureScript
_damageCount = 0;
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
// player is the spellcaster so register summon manually
if (Creature* occuthar = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_OCCUTHAR)))
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp
index 4baea306d59..83f1b9e12b8 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp
@@ -610,7 +610,7 @@ class npc_raz_the_crazed : public CreatureScript
_events.ScheduleEvent(SPELL_FURIOUS_SWIPE, 500);
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
if (summoner->GetEntry() == NPC_ROMOGG_BONECRUSHER)
{
@@ -691,7 +691,7 @@ class npc_chains_of_woe : public CreatureScript
{
npc_chains_of_woeAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
me->SetDisplayId(MODEL_INVISIBLE);
DoCast(me, SPELL_CHAINS_OF_WOE_1, true);
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp
index 4d569d8ea36..02a6949850a 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp
@@ -346,7 +346,7 @@ struct npc_direbrew_minion : public ScriptedAI
DoZoneInCombat();
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
if (Creature* coren = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_COREN)))
coren->AI()->JustSummoned(me);
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp
index 69d34581a50..7904c6cfb28 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp
@@ -54,7 +54,7 @@ public:
_Reset();
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
me->GetMotionMaster()->MovePath(GIZRUL_PATH, false);
}
diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
index d939024cbed..27c601d1fd8 100644
--- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
+++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp
@@ -189,7 +189,7 @@ public:
events.ScheduleEvent(EVENT_MORTAL_STRIKE, 17s, 19s);
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
me->SetImmuneToPC(false);
DoZoneInCombat();
diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp
index e38ab023e70..e482b88eaee 100644
--- a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp
+++ b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp
@@ -517,7 +517,7 @@ public:
if (!me->IsSummon())
return;
- if (Unit* summon = me->ToTempSummon()->GetSummoner())
+ if (Unit* summon = me->ToTempSummon()->GetSummonerUnit())
if (Creature* creature = summon->ToCreature())
creature->AI()->SetData(2, 1);
}
@@ -535,7 +535,7 @@ public:
if (!me->IsSummon())
return;
- if (Unit* summoner = me->ToTempSummon()->GetSummoner())
+ if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
if (Creature* creature = summoner->ToCreature())
creature->AI()->SetData(2, 2);
}
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
index b5182ae0e47..3e11a414454 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp
@@ -159,7 +159,7 @@ public:
BossAI::JustSummoned(summon);
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
if (summoner->GetEntry() == NPC_MIDNIGHT)
_phase = PHASE_ATTUMEN_ENGAGES;
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
index a65f69fa57c..f03df2a61c4 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp
@@ -210,7 +210,7 @@ public:
{
npc_demon_chainAI(Creature* creature) : PassiveAI(creature) { }
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
_sacrificeGUID = summoner->GetGUID();
DoCastSelf(SPELL_DEMON_CHAINS, true);
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
index fe69169dca7..cbd39373efc 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp
@@ -388,7 +388,7 @@ struct npc_felblood_kaelthas_phoenix : public ScriptedAI
_isInEgg = false;
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
DoZoneInCombat();
DoCastSelf(SPELL_BURN);
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
index f7812e1c898..d8b7660c502 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
@@ -1178,7 +1178,7 @@ class npc_scarlet_miner : public CreatureScript
Initialize();
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
carGUID = summoner->GetGUID();
}
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp
index a92a344c6fb..cadce44d648 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp
@@ -88,7 +88,7 @@ public:
{
Player* player = nullptr;
if (me->IsSummon())
- if (Unit* summoner = me->ToTempSummon()->GetSummoner())
+ if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
player = summoner->ToPlayer();
if (!player)
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
index 48eead6d1ad..795266f7bae 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp
@@ -88,7 +88,7 @@ class boss_darkmaster_gandling : public CreatureScript
gate->SetGoState(GO_STATE_READY);
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
Talk(YELL_SUMMONED);
me->GetMotionMaster()->MoveRandom(5);
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
index ea465b8d01d..b7da7933eea 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
@@ -124,7 +124,7 @@ class boss_kirtonos_the_herald : public CreatureScript
me->DespawnOrUnsummon(5000);
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
events.ScheduleEvent(INTRO_1, 500);
me->SetDisableGravity(true);
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
index 7a9fe642f73..8f4ed2dc87a 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp
@@ -428,7 +428,7 @@ public:
});
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
_summonerGUID = summoner->GetGUID();
}
@@ -466,7 +466,7 @@ public:
_instance = me->GetInstanceScript();
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
if (Creature* muru = _instance->GetCreature(DATA_MURU))
muru->AI()->JustSummoned(me);
diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp
index 3483aa98bbc..a00aac21945 100644
--- a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp
+++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp
@@ -128,7 +128,7 @@ public:
Initialize();
}
- void IsSummonedBy(Unit*) override
+ void IsSummonedBy(WorldObject*) override
{
DoZoneInCombat();
}
diff --git a/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp b/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp
index b7301d1fb19..01c3876446f 100644
--- a/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp
+++ b/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp
@@ -370,7 +370,7 @@ class npc_molten_barrage : public CreatureScript
me->GetMotionMaster()->MoveFollow(target, 0.0f, 0.0f, MOTION_SLOT_DEFAULT);
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
DoCastAOE(SPELL_AGGRO_CLOSEST, true);
DoCast(me, SPELL_MOLTEN_BARRAGE_VISUAL);
@@ -558,7 +558,7 @@ class spell_alysrazor_turn_monstrosity : public SpellScriptLoader
PreventHitDefaultEffect(effIndex);
GetHitUnit()->GetMotionMaster()->MoveIdle();
if (TempSummon* summ = GetHitUnit()->ToTempSummon())
- if (Unit* summoner = summ->GetSummoner())
+ if (WorldObject* summoner = summ->GetSummoner())
GetHitUnit()->CastSpell(summoner, SPELL_GENERIC_DUMMY_CAST, TRIGGERED_FULL_MASK);
float angle = 0.0f;
diff --git a/src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp b/src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp
index ceda6ec369b..484548f59f9 100644
--- a/src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp
+++ b/src/server/scripts/Kalimdor/Firelands/boss_baleroc.cpp
@@ -276,7 +276,7 @@ struct npc_shard_of_torment : public NullCreatureAI
{
npc_shard_of_torment(Creature* creature) : NullCreatureAI(creature) { }
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
DoCastAOE(SPELL_TORMENT_PRE_VISUAL);
scheduler.Schedule(Milliseconds(4400), [this](TaskContext)
diff --git a/src/server/scripts/Kalimdor/Firelands/firelands.cpp b/src/server/scripts/Kalimdor/Firelands/firelands.cpp
index 6e430c524fb..a0071f85800 100644
--- a/src/server/scripts/Kalimdor/Firelands/firelands.cpp
+++ b/src/server/scripts/Kalimdor/Firelands/firelands.cpp
@@ -225,7 +225,7 @@ struct npc_firelands_magmakin : public ScriptedAI
{
npc_firelands_magmakin(Creature* creature) : ScriptedAI(creature) { }
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
//Not actually sniffed behavior
Unit* target = me->SelectNearestTarget(50.0f, true);
diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp
index d92b75fa020..2d722d2a59b 100644
--- a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp
+++ b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp
@@ -281,7 +281,7 @@ class npc_omega_stance : public CreatureScript
{
npc_omega_stanceAI(Creature* creature) : ScriptedAI(creature) { }
- void IsSummonedBy(Unit* /*who*/) override
+ void IsSummonedBy(WorldObject* /*who*/) override
{
DoCast(me, SPELL_OMEGA_STANCE_SPIDER_TRIGGER, true);
}
@@ -304,7 +304,7 @@ class npc_alpha_beam : public CreatureScript
{
npc_alpha_beamAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
if (Creature* anraphet = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_ANRAPHET_GUID)))
anraphet->CastSpell(me, SPELL_ALPHA_BEAMS_BACK_CAST);
diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
index 9f7f47791c5..68ea6fc178a 100644
--- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
+++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp
@@ -1282,7 +1282,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
if (TempSummon* summon = me->ToTempSummon())
- if (Unit* summoner = summon->GetSummoner())
+ if (Unit* summoner = summon->GetSummonerUnit())
if (summoner->IsAIEnabled())
summoner->GetAI()->DoAction(ACTION_FLESH_TENTACLE_KILLED);
}
diff --git a/src/server/scripts/Maelstrom/Stonecore/boss_corborus.cpp b/src/server/scripts/Maelstrom/Stonecore/boss_corborus.cpp
index 6824bc68385..fa06feae737 100644
--- a/src/server/scripts/Maelstrom/Stonecore/boss_corborus.cpp
+++ b/src/server/scripts/Maelstrom/Stonecore/boss_corborus.cpp
@@ -269,7 +269,7 @@ class npc_rock_borer : public CreatureScript
me->SetReactState(REACT_PASSIVE);
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
events.ScheduleEvent(EVENT_EMERGED, 1200);
events.ScheduleEvent(EVENT_ROCK_BORE, urand(15000, 20000)); // Need sniffs for this timer
diff --git a/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp b/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp
index 6bf44a561b6..2739c1cf6f8 100644
--- a/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp
+++ b/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp
@@ -316,7 +316,7 @@ public:
{
npc_devout_followerAI(Creature* creature) : ScriptedAI(creature) { }
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
if (summoner->GetEntry() != NPC_WORLDTRIGGER)
return;
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp
index 1cda08e3a89..35024afece3 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp
@@ -898,7 +898,7 @@ class npc_gatewatcher_web_wrap : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (TempSummon* meSummon = me->ToTempSummon())
- if (Unit* summoner = meSummon->GetSummoner())
+ if (Unit* summoner = meSummon->GetSummonerUnit())
summoner->RemoveAurasDueToSpell(SPELL_WEB_WRAP_WRAPPED);
}
};
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
index a9c9616ccf4..c5eb2ebf70a 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp
@@ -202,7 +202,7 @@ class npc_onyx_flamecaller : public CreatureScript
void EnterEvadeMode(EvadeReason /*why*/) override { }
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
// Let Zarithrian count as summoner.
if (Creature* zarithrian = _instance->GetCreature(DATA_GENERAL_ZARITHRIAN))
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
index e6fcd33fbdf..cc6392c6b69 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
@@ -1013,7 +1013,7 @@ class npc_meteor_strike_initial : public CreatureScript
}
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
Creature* owner = summoner->ToCreature();
if (!owner)
@@ -1085,7 +1085,7 @@ class npc_meteor_strike : public CreatureScript
}
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
// Let Halion Controller count as summoner.
if (Creature* controller = _instance->GetCreature(DATA_HALION_CONTROLLER))
@@ -1148,7 +1148,7 @@ class npc_meteor_strike_flame : public CreatureScript
_events.ScheduleEvent(EVENT_SPAWN_METEOR_FLAME, Milliseconds(800));
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
// Let Halion Controller count as summoner.
if (Creature* controller = _instance->GetCreature(DATA_HALION_CONTROLLER))
@@ -1225,7 +1225,7 @@ class npc_combustion_consumption : public CreatureScript
}
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
// Let Halion Controller count as summoner
if (Creature* controller = _instance->GetCreature(DATA_HALION_CONTROLLER))
@@ -1276,7 +1276,7 @@ class npc_living_inferno : public CreatureScript
{
npc_living_infernoAI(Creature* creature) : ScriptedAI(creature) { }
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
DoZoneInCombat();
me->CastSpell(me, SPELL_BLAZING_AURA, true);
@@ -1325,7 +1325,7 @@ class npc_living_ember : public CreatureScript
{
npc_living_emberAI(Creature* creature) : ScriptedAI(creature) { }
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
if (InstanceScript* instance = me->GetInstanceScript())
if (Creature* controller = instance->GetCreature(DATA_HALION_CONTROLLER))
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
index 11070f62650..11b36eda06b 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp
@@ -487,7 +487,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
if (TempSummon* summ = me->ToTempSummon())
- if (Unit* summoner = summ->GetSummoner())
+ if (Unit* summoner = summ->GetSummonerUnit())
if (summoner->IsAlive())
summoner->GetAI()->SetData(1, 0);
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
index d9fbd785ef6..7918d2ec28f 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
@@ -231,7 +231,7 @@ class npc_corrupted_soul_fragment : public CreatureScript
instance = me->GetInstanceScript();
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
if (Creature* bronjahm = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BRONJAHM)))
bronjahm->AI()->JustSummoned(me);
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
index 0158caf9936..06940cc0c0e 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
@@ -2180,7 +2180,7 @@ struct npc_escape_event_trash : public ScriptedAI
me->DespawnOrUnsummon();
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
DoZoneInCombat(me);
if (Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_ESCAPE_LEADER)))
@@ -2212,7 +2212,7 @@ class npc_raging_ghoul : public CreatureScript
_events.ScheduleEvent(EVENT_RAGING_GHOUL_JUMP, 5s);
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
me->CastSpell(me, SPELL_RAGING_GHOUL_SPAWN, true);
me->SetReactState(REACT_PASSIVE);
@@ -2278,7 +2278,7 @@ class npc_risen_witch_doctor : public CreatureScript
_events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_CURSE, 7s);
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
me->CastSpell(me, SPELL_RISEN_WITCH_DOCTOR_SPAWN, true);
me->SetReactState(REACT_PASSIVE);
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp
index e723d921a44..f32e40b1f3c 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp
@@ -244,7 +244,7 @@ class npc_pit_of_saron_icicle : public CreatureScript
me->SetDisplayFromModel(0);
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
_summonerGUID = summoner->GetGUID();
diff --git a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp
index 09469ca8df9..4797f769b03 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp
@@ -247,7 +247,7 @@ public:
target->CastSpell(target, SPELL_SNAKE_WRAP, true);
if (TempSummon* _me = me->ToTempSummon())
- if (Unit* summoner = _me->GetSummoner())
+ if (Unit* summoner = _me->GetSummonerUnit())
if (Creature* sladran = summoner->ToCreature())
sladran->AI()->SetGUID(target->GetGUID(), DATA_SNAKES_WHYD_IT_HAVE_TO_BE_SNAKES);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
index a4a31898935..cb02f0df035 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
@@ -374,9 +374,10 @@ class npc_coldflame : public CreatureScript
{
}
- void IsSummonedBy(Unit* owner) override
+ void IsSummonedBy(WorldObject* ownerWO) override
{
- if (owner->GetTypeId() != TYPEID_UNIT)
+ Creature* owner = ownerWO->ToCreature();
+ if (!owner)
return;
Position pos;
@@ -450,7 +451,7 @@ class npc_bone_spike : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (TempSummon* summ = me->ToTempSummon())
- if (Unit* trapped = summ->GetSummoner())
+ if (Unit* trapped = summ->GetSummonerUnit())
trapped->RemoveAurasDueToSpell(SPELL_IMPALED);
me->DespawnOrUnsummon();
@@ -462,8 +463,11 @@ class npc_bone_spike : public CreatureScript
victim->RemoveAurasDueToSpell(SPELL_IMPALED);
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summonerWO) override
{
+ Unit* summoner = summonerWO->ToUnit();
+ if (!summoner)
+ return;
DoCast(summoner, SPELL_IMPALED);
summoner->CastSpell(me, SPELL_RIDE_VEHICLE, true);
_events.ScheduleEvent(EVENT_FAIL_BONED, 8s);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
index 074458eb88f..d30c9e949bc 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
@@ -258,8 +258,11 @@ class npc_little_ooze : public CreatureScript
{
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summonerWO) override
{
+ Unit* summoner = summonerWO->ToUnit();
+ if (!summoner)
+ return;
DoCast(me, SPELL_LITTLE_OOZE_COMBINE, true);
DoCast(me, SPELL_WEAK_RADIATING_OOZE, true);
DoCast(me, SPELL_GREEN_ABOMINATION_HITTIN__YA_PROC, true);
@@ -309,7 +312,7 @@ class npc_big_ooze : public CreatureScript
{
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
DoCast(me, SPELL_LARGE_OOZE_COMBINE, true);
DoCast(me, SPELL_LARGE_OOZE_BUFF_COMBINE, true);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
index 74f6d92b9f5..2e7fba50cad 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
@@ -1381,7 +1381,7 @@ class npc_raging_spirit : public CreatureScript
DoCast(me, SPELL_PLAGUE_AVOIDANCE, true);
DoCast(me, SPELL_RAGING_SPIRIT_VISUAL, true);
if (TempSummon* summon = me->ToTempSummon())
- if (Unit* summoner = summon->GetSummoner())
+ if (Unit* summoner = summon->GetSummonerUnit())
summoner->CastSpell(me, SPELL_RAGING_SPIRIT_VISUAL_CLONE, true);
DoCast(me, SPELL_BOSS_HITTIN_YA, true);
}
@@ -1399,7 +1399,7 @@ class npc_raging_spirit : public CreatureScript
}
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
// player is the spellcaster so register summon manually
if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING)))
@@ -1478,7 +1478,7 @@ class npc_valkyr_shadowguard : public CreatureScript
DoCast(me, SPELL_WINGS_OF_THE_DAMNED, false);
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
_events.Reset();
_events.ScheduleEvent(EVENT_GRAB_PLAYER, 2500ms);
@@ -1628,8 +1628,11 @@ class npc_strangulate_vehicle : public CreatureScript
{
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summonerWO) override
{
+ Unit* summoner = summonerWO->ToUnit();
+ if (!summoner)
+ return;
me->SetFacingToObject(summoner);
DoCast(summoner, SPELL_HARVEST_SOUL_VEHICLE);
_events.Reset();
@@ -1648,7 +1651,7 @@ class npc_strangulate_vehicle : public CreatureScript
if (TempSummon* summ = me->ToTempSummon())
{
- if (Unit* summoner = summ->GetSummoner())
+ if (Unit* summoner = summ->GetSummonerUnit())
{
DoCast(summoner, SPELL_HARVEST_SOUL_TELEPORT_BACK);
summoner->RemoveAurasDueToSpell(SPELL_HARVEST_SOUL_DAMAGE_AURA);
@@ -1675,7 +1678,7 @@ class npc_strangulate_vehicle : public CreatureScript
me->GetMotionMaster()->MoveIdle();
if (TempSummon* summ = me->ToTempSummon())
{
- if (Unit* summoner = summ->GetSummoner())
+ if (Unit* summoner = summ->GetSummonerUnit())
{
summoner->CastSpell(nullptr, SPELL_HARVEST_SOUL_VISUAL, true);
summoner->ExitVehicle(summoner);
@@ -1799,7 +1802,7 @@ class npc_terenas_menethil : public CreatureScript
}
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
_events.Reset();
_events.SetPhase(PHASE_OUTRO);
@@ -1947,7 +1950,7 @@ class npc_spirit_bomb : public CreatureScript
{
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
float destX, destY, destZ;
me->GetPosition(destX, destY);
@@ -2008,7 +2011,7 @@ class npc_broken_frostmourne : public CreatureScript
_events.Reset();
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
_events.SetPhase(PHASE_OUTRO);
_events.ScheduleEvent(EVENT_OUTRO_KNOCK_BACK, 3s, 0, PHASE_OUTRO);
@@ -2824,7 +2827,7 @@ class spell_the_lich_king_vile_spirit_damage_target_search : public SpellScriptL
// this spell has SPELL_AURA_BLOCK_SPELL_FAMILY so every next cast of this
// searcher spell will be blocked
if (TempSummon* summon = GetCaster()->ToTempSummon())
- if (Unit* summoner = summon->GetSummoner())
+ if (Unit* summoner = summon->GetSummonerUnit())
summoner->GetAI()->SetData(DATA_VILE, 1);
GetCaster()->CastSpell(nullptr, SPELL_SPIRIT_BURST, true);
GetCaster()->ToCreature()->DespawnOrUnsummon(3000);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
index 9e5d3f808f4..872877d30fb 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
@@ -876,7 +876,7 @@ class npc_suppresser : public CreatureScript
_events.Reset();
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
if (Creature* valithria = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VALITHRIA_DREAMWALKER)))
{
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
index f98fbf3e7ae..c6a40453c47 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
@@ -126,7 +126,7 @@ class npc_grobbulus_poison_cloud : public CreatureScript
creature->SetReactState(REACT_PASSIVE);
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
// no visual when casting in ctor or Reset()
DoCast(me, SPELL_POISON_CLOUD_PASSIVE, true);
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index 8338dc58aae..15197ea1316 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -1394,7 +1394,7 @@ class npc_scion_of_eternity : public CreatureScript
_events.Reset();
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
_events.ScheduleEvent(EVENT_ARCANE_BARRAGE, 14s, 29s);
}
@@ -1457,7 +1457,7 @@ public:
me->SetReactState(REACT_PASSIVE);
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
if (Creature* creature = summoner->ToCreature())
creature->AI()->SetGUID(me->GetGUID(), DATA_LAST_OVERLOAD_GUID);
@@ -1510,7 +1510,7 @@ public:
{
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
_summoner.Clear();
if (summoner->GetTypeId() == TYPEID_PLAYER)
@@ -1576,7 +1576,7 @@ class npc_static_field : public CreatureScript
{
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
// For some great reason the spell doesn't time it...
me->DespawnOrUnsummon(30*IN_MILLISECONDS);
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp
index e40f18549d3..c22c998a11c 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp
@@ -207,7 +207,7 @@ public:
_despawntimer = 0;
}
- void IsSummonedBy(Unit* owner) override
+ void IsSummonedBy(WorldObject* owner) override
{
switch (me->GetEntry())
{
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
index b7bc61a937e..7d1e2c605aa 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
@@ -219,7 +219,7 @@ class npc_image_belgaristrasz : public CreatureScript
{
npc_image_belgaristraszAI(Creature* creature) : ScriptedAI(creature) { }
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
if (summoner->GetEntry() == NPC_VAROS)
{
@@ -285,7 +285,7 @@ class npc_ruby_emerald_amber_drake : public CreatureScript
}
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
if (_instance->GetBossState(DATA_EREGOS) == IN_PROGRESS)
if (Creature* eregos = me->FindNearestCreature(NPC_EREGOS, 450.0f, true))
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
index e81b5c5e687..b2812209cfc 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
@@ -228,9 +228,10 @@ class npc_iron_roots : public CreatureScript
me->SetReactState(REACT_PASSIVE);
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summonerWO) override
{
- if (summoner->GetTypeId() != TYPEID_PLAYER)
+ Player* summoner = summonerWO->ToPlayer();
+ if (!summoner)
return;
// Summoner is a player, who should have root aura on self
summonerGUID = summoner->GetGUID();
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
index aed33ebfa88..9b904f41709 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
@@ -231,8 +231,12 @@ class npc_flash_freeze : public CreatureScript
checkDespawnTimer -= diff;
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summonerWO) override
{
+ Unit* summoner = summonerWO->ToUnit();
+ if (!summoner)
+ return;
+
targetGUID = summoner->GetGUID();
me->SetInCombatWith(summoner);
AddThreat(summoner, 250.0f);
@@ -273,8 +277,12 @@ class npc_ice_block : public CreatureScript
ObjectGuid targetGUID;
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summonerWO) override
{
+ Unit* summoner = summonerWO->ToUnit();
+ if (!summoner)
+ return;
+
targetGUID = summoner->GetGUID();
summoner->AddUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED));
summoner->SetControlled(true, UNIT_STATE_ROOT);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
index 4b799505340..1214494c3b2 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
@@ -1209,7 +1209,7 @@ class npc_guardian_of_yogg_saron : public CreatureScript
DoMeleeAttackIfReady();
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
if (summoner->GetEntry() != NPC_OMINOUS_CLOUD)
return;
@@ -1316,7 +1316,7 @@ class npc_constrictor_tentacle : public CreatureScript
UpdateVictim();
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON))
voice->AI()->JustSummoned(me);
@@ -1580,7 +1580,7 @@ class npc_yogg_saron_keeper : public CreatureScript
{
npc_yogg_saron_keeperAI(Creature* creature) : ScriptedAI(creature) { }
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
DoCast(SPELL_SIMPLE_TELEPORT_KEEPERS);
}
@@ -1703,7 +1703,7 @@ class npc_yogg_saron_illusions : public CreatureScript
{
npc_yogg_saron_illusionsAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
switch (_instance->GetData(DATA_ILLUSION))
{
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
index 81e0db1bb24..7f752fe15c7 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
@@ -88,8 +88,11 @@ class npc_frost_tomb : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summonerWO) override
{
+ Unit* summoner = summonerWO->ToUnit();
+ if (!summoner)
+ return;
DoCast(summoner, SPELL_FROST_TOMB, true);
}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
index cbc711ed82b..32af5e07c00 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
@@ -487,7 +487,7 @@ struct npc_skadi_trashAI : public ScriptedAI
ScheduleTasks();
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
if (Creature* skadi = _instance->GetCreature(DATA_SKADI_THE_RUTHLESS))
skadi->AI()->JustSummoned(me);
diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp
index 41bd211d2d4..f6ea3d1df53 100644
--- a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp
+++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp
@@ -149,7 +149,7 @@ struct npc_frozen_orb : public ScriptedAI
{
npc_frozen_orb(Creature* creature) : ScriptedAI(creature) { }
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
DoCastSelf(SPELL_FROZEN_ORB_AURA, true);
DoCastSelf(SPELL_FROZEN_ORB_DMG, true);
diff --git a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
index 57ba6383961..c8db2218821 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
@@ -169,7 +169,7 @@ class npc_void_sentry : public CreatureScript
me->SetReactState(REACT_PASSIVE);
}
- void IsSummonedBy(Unit* /*summoner*/) override
+ void IsSummonedBy(WorldObject* /*summoner*/) override
{
me->CastSpell(me, SPELL_SUMMON_VOID_SENTRY_BALL, true);
}
diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp
index 9db47c40a6a..f75a097b1a7 100644
--- a/src/server/scripts/Northrend/zone_borean_tundra.cpp
+++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp
@@ -485,7 +485,7 @@ public:
if (TempSummon* summon = me->ToTempSummon())
if (summon->IsSummon())
- if (Unit* temp = summon->GetSummoner())
+ if (Unit* temp = summon->GetSummonerUnit())
if (Player* player = temp->ToPlayer())
player->KilledMonsterCredit(me->GetEntry());
@@ -1132,7 +1132,7 @@ public:
return;
if (me->IsSummon())
- if (Unit* summoner = me->ToTempSummon()->GetSummoner())
+ if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
ENSURE_AI(npc_thassarian::npc_thassarianAI, summoner->ToCreature()->AI())->arthasInPosition = true;
}
};
@@ -1164,7 +1164,7 @@ public:
me->AddUnitState(UNIT_STATE_STUNNED);
me->CastSpell(me, SPELL_STUN, true);
if (me->IsSummon())
- if (Unit* summoner = me->ToTempSummon()->GetSummoner())
+ if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
ENSURE_AI(npc_thassarian::npc_thassarianAI, summoner->ToCreature()->AI())->arlosInPosition = true;
}
};
@@ -1226,7 +1226,7 @@ public:
return;
if (me->IsSummon())
- if (Unit* summoner = me->ToTempSummon()->GetSummoner())
+ if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
ENSURE_AI(npc_thassarian::npc_thassarianAI, summoner->ToCreature()->AI())->talbotInPosition = true;
}
@@ -1343,7 +1343,7 @@ public:
me->CastSpell(me, SPELL_STUN, true);
if (me->IsSummon())
- if (Unit* summoner = me->ToTempSummon()->GetSummoner())
+ if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
ENSURE_AI(npc_thassarian::npc_thassarianAI, summoner->GetAI())->leryssaInPosition = true;
bDone = true;
}
@@ -1351,7 +1351,7 @@ public:
{
me->SetStandState(UNIT_STAND_STATE_SIT);
if (me->IsSummon())
- if (Unit* summoner = me->ToTempSummon()->GetSummoner())
+ if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
summoner->SetStandState(UNIT_STAND_STATE_SIT);
phaseTimer = 1500;
phase = 1;
@@ -1368,7 +1368,7 @@ public:
{
case 1:
if (me->IsSummon())
- if (Unit* summoner = me->ToTempSummon()->GetSummoner())
+ if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
if (Creature* thassarian = summoner->ToCreature())
thassarian->AI()->Talk(SAY_THASSARIAN_4);
phaseTimer = 5000;
@@ -1381,7 +1381,7 @@ public:
break;
case 3:
if (me->IsSummon())
- if (Unit* summoner = me->ToTempSummon()->GetSummoner())
+ if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
if (Creature* thassarian = summoner->ToCreature())
thassarian->AI()->Talk(SAY_THASSARIAN_5);
phaseTimer = 5000;
@@ -1394,7 +1394,7 @@ public:
break;
case 5:
if (me->IsSummon())
- if (Unit* summoner = me->ToTempSummon()->GetSummoner())
+ if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
if (Creature* thassarian = summoner->ToCreature())
thassarian->AI()->Talk(SAY_THASSARIAN_6);
phaseTimer = 5000;
@@ -1408,7 +1408,7 @@ public:
break;
case 7:
if (me->IsSummon())
- if (Unit* summoner = me->ToTempSummon()->GetSummoner())
+ if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
if (Creature* thassarian = summoner->ToCreature())
{
thassarian->AI()->Talk(SAY_THASSARIAN_7);
diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp
index 5e84b9a2a21..3d28c33dace 100644
--- a/src/server/scripts/Northrend/zone_icecrown.cpp
+++ b/src/server/scripts/Northrend/zone_icecrown.cpp
@@ -723,7 +723,7 @@ class npc_frostbrood_skytalon : public CreatureScript
EventMap events;
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
me->GetMotionMaster()->MovePoint(POINT_GRAB_DECOY, summoner->GetPositionX(), summoner->GetPositionY(), summoner->GetPositionZ());
}
@@ -735,7 +735,7 @@ class npc_frostbrood_skytalon : public CreatureScript
if (id == POINT_GRAB_DECOY)
if (TempSummon* summon = me->ToTempSummon())
- if (Unit* summoner = summon->GetSummoner())
+ if (Unit* summoner = summon->GetSummonerUnit())
DoCast(summoner, SPELL_GRAB);
}
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
index f71225d59f9..88c1a9b3981 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
@@ -165,8 +165,11 @@ struct boss_blackheart_the_inciter_mc_dummy : public NullCreatureAI
using NullCreatureAI::NullCreatureAI;
void InitializeAI() override { me->SetReactState(REACT_PASSIVE); }
static const uint32 FIRST_DUMMY = NPC_BLACKHEART_DUMMY1, LAST_DUMMY = NPC_BLACKHEART_DUMMY5;
- void IsSummonedBy(Unit* who) override
+ void IsSummonedBy(WorldObject* whoWO) override
{
+ Unit* who = whoWO->ToUnit();
+ if (!who)
+ return;
me->CastSpell(who, SPELL_INCITE_CHAOS_B, true);
// ensure everyone is in combat with everyone
diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp
index 60370153af4..1769436a3c5 100644
--- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp
@@ -93,7 +93,7 @@ class boss_nazan : public CreatureScript
void JustEngagedWith(Unit* /*who*/) override { }
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
if (summoner->GetEntry() == NPC_VAZRUDEN_HERALD)
VazrudenGUID = summoner->GetGUID();
diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
index 536c120676b..e237e08e2b2 100644
--- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
+++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
@@ -993,7 +993,7 @@ public:
timer = 500;
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
if (summoner->isType(TYPEMASK_PLAYER))
playerGuid = summoner->GetGUID();
diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
index 869fb5981f0..edd7f781d5f 100644
--- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
+++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
@@ -150,7 +150,7 @@ public:
me->GetMotionMaster()->MoveRandom(5.0f);
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
if (summoner->ToCreature())
casterGUID = summoner->ToCreature()->GetGUID();;
diff --git a/src/server/scripts/Pet/pet_hunter.cpp b/src/server/scripts/Pet/pet_hunter.cpp
index e53316f1a83..b3ebdcd45d1 100644
--- a/src/server/scripts/Pet/pet_hunter.cpp
+++ b/src/server/scripts/Pet/pet_hunter.cpp
@@ -75,7 +75,7 @@ class npc_pet_hunter_snake_trap : public CreatureScript
if (me->IsSummon() && !me->GetThreatManager().GetFixateTarget())
{ // find new target
- Unit* summoner = me->ToTempSummon()->GetSummoner();
+ Unit* summoner = me->ToTempSummon()->GetSummonerUnit();
std::vector<Unit*> targets;
for (std::pair<ObjectGuid const, PvPCombatReference*> const& pair : summoner->GetCombatManager().GetPvPCombatRefs())
diff --git a/src/server/scripts/Pet/pet_priest.cpp b/src/server/scripts/Pet/pet_priest.cpp
index 381baa15387..38016ddee17 100644
--- a/src/server/scripts/Pet/pet_priest.cpp
+++ b/src/server/scripts/Pet/pet_priest.cpp
@@ -70,8 +70,12 @@ class npc_pet_pri_shadowfiend : public CreatureScript
{
npc_pet_pri_shadowfiendAI(Creature* creature) : PetAI(creature) { }
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summonerWO) override
{
+ Unit* summoner = summonerWO->ToUnit();
+ if (!summoner)
+ return;
+
if (summoner->HasAura(SPELL_PRIEST_GLYPH_OF_SHADOWFIEND))
DoCastAOE(SPELL_PRIEST_SHADOWFIEND_DEATH);
}
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 8195b315a57..c2e182a66c8 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -1344,7 +1344,7 @@ class spell_gen_defend : public AuraScript
{
if (Unit* caster = GetCaster())
if (TempSummon* vehicle = caster->ToTempSummon())
- if (Unit* rider = vehicle->GetSummoner())
+ if (Unit* rider = vehicle->GetSummonerUnit())
rider->RemoveAurasDueToSpell(GetId());
}
diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp
index 46304697d6c..3d756b2a352 100644
--- a/src/server/scripts/World/boss_emerald_dragons.cpp
+++ b/src/server/scripts/World/boss_emerald_dragons.cpp
@@ -426,8 +426,12 @@ class npc_spirit_shade : public CreatureScript
{
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summonerWO) override
{
+ Unit* summoner = summonerWO->ToUnit();
+ if (!summoner)
+ return;
+
_summonerGuid = summoner->GetGUID();
me->GetMotionMaster()->MoveFollow(summoner, 0.0f, 0.0f);
}
diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp
index fb8e915fb96..3e27c6081f2 100644
--- a/src/server/scripts/World/npcs_special.cpp
+++ b/src/server/scripts/World/npcs_special.cpp
@@ -2414,7 +2414,7 @@ public:
summonerGUID.Clear();
}
- void IsSummonedBy(Unit* summoner) override
+ void IsSummonedBy(WorldObject* summoner) override
{
if (summoner->GetTypeId() == TYPEID_PLAYER)
{