aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Creature/TemporarySummon.cpp64
-rw-r--r--src/server/game/Entities/Creature/TemporarySummon.h14
-rw-r--r--src/server/game/Entities/Object/Object.cpp4
-rw-r--r--src/server/game/Entities/Totem/Totem.cpp6
-rw-r--r--src/server/game/Entities/Totem/Totem.h4
-rw-r--r--src/server/game/Entities/Transport/Transport.cpp4
6 files changed, 46 insertions, 50 deletions
diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp
index e4cbcdc8bdb..961bf1e453a 100644
--- a/src/server/game/Entities/Creature/TemporarySummon.cpp
+++ b/src/server/game/Entities/Creature/TemporarySummon.cpp
@@ -179,7 +179,7 @@ void TempSummon::Update(uint32 diff)
}
}
-void TempSummon::InitStats(uint32 duration)
+void TempSummon::InitStats(WorldObject* summoner, uint32 duration)
{
ASSERT(!IsPet());
@@ -189,14 +189,11 @@ void TempSummon::InitStats(uint32 duration)
if (m_type == TEMPSUMMON_MANUAL_DESPAWN)
m_type = (duration == 0) ? TEMPSUMMON_DEAD_DESPAWN : TEMPSUMMON_TIMED_DESPAWN;
- Unit* owner = GetSummonerUnit();
-
- if (owner && IsTrigger() && m_spells[0])
- if (owner->GetTypeId() == TYPEID_PLAYER)
+ if (summoner && summoner->IsPlayer())
+ {
+ if (IsTrigger() && m_spells[0])
m_ControlledByPlayer = true;
- if (owner && owner->IsPlayer())
- {
if (CreatureSummonedData const* summonedData = sObjectMgr->GetCreatureSummonedData(GetEntry()))
{
m_creatureIdVisibleToSummoner = summonedData->CreatureIDVisibleToSummoner;
@@ -211,27 +208,27 @@ void TempSummon::InitStats(uint32 duration)
if (!m_Properties)
return;
- if (owner)
+ if (Unit* unitSummoner = ToUnit(summoner))
{
int32 slot = m_Properties->Slot;
if (slot > 0)
{
- if (!owner->m_SummonSlot[slot].IsEmpty() && owner->m_SummonSlot[slot] != GetGUID())
+ if (!unitSummoner->m_SummonSlot[slot].IsEmpty() && unitSummoner->m_SummonSlot[slot] != GetGUID())
{
- Creature* oldSummon = GetMap()->GetCreature(owner->m_SummonSlot[slot]);
+ Creature* oldSummon = GetMap()->GetCreature(unitSummoner->m_SummonSlot[slot]);
if (oldSummon && oldSummon->IsSummon())
oldSummon->ToTempSummon()->UnSummon();
}
- owner->m_SummonSlot[slot] = GetGUID();
+ unitSummoner->m_SummonSlot[slot] = GetGUID();
}
if (!m_Properties->GetFlags().HasFlag(SummonPropertiesFlags::UseCreatureLevel))
- SetLevel(owner->GetLevel());
+ SetLevel(unitSummoner->GetLevel());
}
uint32 faction = m_Properties->Faction;
- if (owner && m_Properties->GetFlags().HasFlag(SummonPropertiesFlags::UseSummonerFaction)) // TODO: Determine priority between faction and flag
- faction = owner->GetFaction();
+ if (summoner && m_Properties->GetFlags().HasFlag(SummonPropertiesFlags::UseSummonerFaction)) // TODO: Determine priority between faction and flag
+ faction = summoner->GetFaction();
if (faction)
SetFaction(faction);
@@ -240,23 +237,22 @@ void TempSummon::InitStats(uint32 duration)
RemoveNpcFlag(UNIT_NPC_FLAG_WILD_BATTLE_PET);
}
-void TempSummon::InitSummon()
+void TempSummon::InitSummon(WorldObject* summoner)
{
- WorldObject* owner = GetSummoner();
- if (owner)
+ if (summoner)
{
- if (owner->GetTypeId() == TYPEID_UNIT)
+ if (summoner->GetTypeId() == TYPEID_UNIT)
{
- if (owner->ToCreature()->IsAIEnabled())
- owner->ToCreature()->AI()->JustSummoned(this);
+ if (summoner->ToCreature()->IsAIEnabled())
+ summoner->ToCreature()->AI()->JustSummoned(this);
}
- else if (owner->GetTypeId() == TYPEID_GAMEOBJECT)
+ else if (summoner->GetTypeId() == TYPEID_GAMEOBJECT)
{
- if (owner->ToGameObject()->AI())
- owner->ToGameObject()->AI()->JustSummoned(this);
+ if (summoner->ToGameObject()->AI())
+ summoner->ToGameObject()->AI()->JustSummoned(this);
}
if (IsAIEnabled())
- AI()->IsSummonedBy(owner);
+ AI()->IsSummonedBy(summoner);
}
}
@@ -387,9 +383,9 @@ Minion::Minion(SummonPropertiesEntry const* properties, Unit* owner, bool isWorl
InitCharmInfo();
}
-void Minion::InitStats(uint32 duration)
+void Minion::InitStats(WorldObject* summoner, uint32 duration)
{
- TempSummon::InitStats(duration);
+ TempSummon::InitStats(summoner, duration);
SetReactState(REACT_PASSIVE);
@@ -456,9 +452,9 @@ Guardian::Guardian(SummonPropertiesEntry const* properties, Unit* owner, bool is
}
}
-void Guardian::InitStats(uint32 duration)
+void Guardian::InitStats(WorldObject* summoner, uint32 duration)
{
- Minion::InitStats(duration);
+ Minion::InitStats(summoner, duration);
InitStatsForLevel(GetOwner()->GetLevel());
@@ -468,9 +464,9 @@ void Guardian::InitStats(uint32 duration)
SetReactState(REACT_AGGRESSIVE);
}
-void Guardian::InitSummon()
+void Guardian::InitSummon(WorldObject* summoner)
{
- TempSummon::InitSummon();
+ TempSummon::InitSummon(summoner);
if (GetOwner()->GetTypeId() == TYPEID_PLAYER
&& GetOwner()->GetMinionGUID() == GetGUID()
@@ -494,15 +490,15 @@ Puppet::Puppet(SummonPropertiesEntry const* properties, Unit* owner)
m_unitTypeMask |= UNIT_MASK_PUPPET;
}
-void Puppet::InitStats(uint32 duration)
+void Puppet::InitStats(WorldObject* summoner, uint32 duration)
{
- Minion::InitStats(duration);
+ Minion::InitStats(summoner, duration);
SetReactState(REACT_PASSIVE);
}
-void Puppet::InitSummon()
+void Puppet::InitSummon(WorldObject* summoner)
{
- Minion::InitSummon();
+ Minion::InitSummon(summoner);
if (!SetCharmedBy(GetOwner(), CHARM_TYPE_POSSESS))
ABORT();
}
diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h
index 4b0778ff796..fcfbb0ac1ec 100644
--- a/src/server/game/Entities/Creature/TemporarySummon.h
+++ b/src/server/game/Entities/Creature/TemporarySummon.h
@@ -47,8 +47,8 @@ class TC_GAME_API TempSummon : public Creature
explicit TempSummon(SummonPropertiesEntry const* properties, WorldObject* owner, bool isWorldObject);
virtual ~TempSummon() { }
void Update(uint32 time) override;
- virtual void InitStats(uint32 lifetime);
- virtual void InitSummon();
+ virtual void InitStats(WorldObject* summoner, uint32 lifetime);
+ virtual void InitSummon(WorldObject* summoner);
void UpdateObjectVisibilityOnCreate() override;
void UpdateObjectVisibilityOnDestroy() override;
virtual void UnSummon(uint32 msTime = 0);
@@ -84,7 +84,7 @@ class TC_GAME_API Minion : public TempSummon
{
public:
Minion(SummonPropertiesEntry const* properties, Unit* owner, bool isWorldObject);
- void InitStats(uint32 duration) override;
+ void InitStats(WorldObject* summoner, uint32 duration) override;
void RemoveFromWorld() override;
void setDeathState(DeathState s) override;
Unit* GetOwner() const { return m_owner; }
@@ -119,9 +119,9 @@ class TC_GAME_API Guardian : public Minion
{
public:
Guardian(SummonPropertiesEntry const* properties, Unit* owner, bool isWorldObject);
- void InitStats(uint32 duration) override;
+ void InitStats(WorldObject* summoner, uint32 duration) override;
bool InitStatsForLevel(uint8 level);
- void InitSummon() override;
+ void InitSummon(WorldObject* summoner) override;
bool UpdateStats(Stats stat) override;
bool UpdateAllStats() override;
@@ -145,8 +145,8 @@ class TC_GAME_API Puppet : public Minion
{
public:
Puppet(SummonPropertiesEntry const* properties, Unit* owner);
- void InitStats(uint32 duration) override;
- void InitSummon() override;
+ void InitStats(WorldObject* summoner, uint32 duration) override;
+ void InitSummon(WorldObject* summoner) override;
void Update(uint32 time) override;
};
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 9415cf091e4..96bbbd0c0a9 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -1920,7 +1920,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert
summon->SetHomePosition(pos);
- summon->InitStats(duration);
+ summon->InitStats(summoner, duration);
summon->SetPrivateObjectOwner(privateObjectOwner);
@@ -1951,7 +1951,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert
return nullptr;
}
- summon->InitSummon();
+ summon->InitSummon(summoner);
// call MoveInLineOfSight for nearby creatures
Trinity::AIRelocationNotifier notifier(*summon);
diff --git a/src/server/game/Entities/Totem/Totem.cpp b/src/server/game/Entities/Totem/Totem.cpp
index 214d3947c1a..ce72bcba9b7 100644
--- a/src/server/game/Entities/Totem/Totem.cpp
+++ b/src/server/game/Entities/Totem/Totem.cpp
@@ -52,7 +52,7 @@ void Totem::Update(uint32 time)
Creature::Update(time);
}
-void Totem::InitStats(uint32 duration)
+void Totem::InitStats(WorldObject* summoner, uint32 duration)
{
// client requires SMSG_TOTEM_CREATED to be sent before adding to world and before removing old totem
if (Player* owner = GetOwner()->ToPlayer())
@@ -75,7 +75,7 @@ void Totem::InitStats(uint32 duration)
GetEntry(), owner->GetGUID().ToString(), *m_unitData->CreatedBySpell, EnumUtils::ToTitle(Races(owner->GetRace())));
}
- Minion::InitStats(duration);
+ Minion::InitStats(summoner, duration);
// Get spell cast by totem
if (SpellInfo const* totemSpell = sSpellMgr->GetSpellInfo(GetSpell(), GetMap()->GetDifficultyID()))
@@ -85,7 +85,7 @@ void Totem::InitStats(uint32 duration)
m_duration = duration;
}
-void Totem::InitSummon()
+void Totem::InitSummon(WorldObject* /*summoner*/)
{
if (m_type == TOTEM_PASSIVE && GetSpell())
CastSpell(this, GetSpell(), true);
diff --git a/src/server/game/Entities/Totem/Totem.h b/src/server/game/Entities/Totem/Totem.h
index 1bcfbe57ae7..ca8de920643 100644
--- a/src/server/game/Entities/Totem/Totem.h
+++ b/src/server/game/Entities/Totem/Totem.h
@@ -33,8 +33,8 @@ class TC_GAME_API Totem : public Minion
Totem(SummonPropertiesEntry const* properties, Unit* owner);
virtual ~Totem() { }
void Update(uint32 time) override;
- void InitStats(uint32 duration) override;
- void InitSummon() override;
+ void InitStats(WorldObject* summoner, uint32 duration) override;
+ void InitSummon(WorldObject* summoner) override;
void UnSummon(uint32 msTime = 0) override;
uint32 GetSpell(uint8 slot = 0) const { return m_spells[slot]; }
uint32 GetTotemDuration() const { return m_duration; }
diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp
index 0a4e21a1917..f3c03fe3421 100644
--- a/src/server/game/Entities/Transport/Transport.cpp
+++ b/src/server/game/Entities/Transport/Transport.cpp
@@ -510,7 +510,7 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu
/// because the current GameObjectModel cannot be moved without recreating
summon->AddUnitState(UNIT_STATE_IGNORE_PATHFINDING);
- summon->InitStats(duration);
+ summon->InitStats(summoner, duration);
if (!map->AddToMap<Creature>(summon))
{
@@ -520,7 +520,7 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu
_staticPassengers.insert(summon);
- summon->InitSummon();
+ summon->InitSummon(summoner);
summon->SetTempSummonType(summonType);
return summon;