diff options
Diffstat (limited to 'src/game/TemporarySummon.cpp')
-rw-r--r-- | src/game/TemporarySummon.cpp | 59 |
1 files changed, 36 insertions, 23 deletions
diff --git a/src/game/TemporarySummon.cpp b/src/game/TemporarySummon.cpp index 034bf492e1c..170e590fd9c 100644 --- a/src/game/TemporarySummon.cpp +++ b/src/game/TemporarySummon.cpp @@ -166,7 +166,7 @@ void TempSummon::Update( uint32 diff ) Creature::Update( diff ); } -void TempSummon::InitSummon(uint32 duration) +void TempSummon::InitStats(uint32 duration) { assert(!isPet()); @@ -176,28 +176,12 @@ void TempSummon::InitSummon(uint32 duration) if(m_type == TEMPSUMMON_MANUAL_DESPAWN) m_type = (duration == 0) ? TEMPSUMMON_DEAD_DESPAWN : TEMPSUMMON_TIMED_DESPAWN; - Unit* owner = GetSummoner(); - if(owner) - { - if(owner->GetTypeId()==TYPEID_UNIT && ((Creature*)owner)->IsAIEnabled) - ((Creature*)owner)->AI()->JustSummoned(this); - - if(GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER && m_spells[0]) - { - setFaction(owner->getFaction()); - if(m_spells[1] && GetMap()->IsHeroic()) - CastSpell(this, m_spells[1], false, 0, 0, m_summonerGUID); - else - CastSpell(this, m_spells[0], false, 0, 0, m_summonerGUID); - } - } - if(!m_Properties) return; if(uint32 slot = m_Properties->Slot) { - if(owner) + if(Unit *owner = GetSummoner()) { if(owner->m_SummonSlot[slot] && owner->m_SummonSlot[slot] != GetGUID()) { @@ -213,6 +197,25 @@ void TempSummon::InitSummon(uint32 duration) setFaction(m_Properties->Faction); } +void TempSummon::InitSummon() +{ + Unit* owner = GetSummoner(); + if(owner) + { + if(owner->GetTypeId()==TYPEID_UNIT && ((Creature*)owner)->IsAIEnabled) + ((Creature*)owner)->AI()->JustSummoned(this); + + if(GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER && m_spells[0]) + { + setFaction(owner->getFaction()); + if(m_spells[1] && GetMap()->IsHeroic()) + CastSpell(this, m_spells[1], false, 0, 0, m_summonerGUID); + else + CastSpell(this, m_spells[0], false, 0, 0, m_summonerGUID); + } + } +} + void TempSummon::SetTempSummonType(TempSummonType type) { m_type = type; @@ -264,9 +267,9 @@ Minion::Minion(SummonPropertiesEntry const *properties, Unit *owner) : TempSummo m_summonMask |= SUMMON_MASK_MINION; } -void Minion::InitSummon(uint32 duration) +void Minion::InitStats(uint32 duration) { - TempSummon::InitSummon(duration); + TempSummon::InitStats(duration); SetReactState(REACT_PASSIVE); @@ -276,6 +279,16 @@ void Minion::InitSummon(uint32 duration) m_owner->SetMinion(this, true); } +void Minion::InitSummon() +{ + TempSummon::InitSummon(); + + if(m_owner->GetTypeId() == TYPEID_PLAYER + && m_owner->GetMinionGUID() == GetGUID() + && !m_owner->GetCharmGUID()) + ((Player*)m_owner)->CharmSpellInitialize(); +} + void Minion::RemoveFromWorld() { if(!IsInWorld()) @@ -292,12 +305,12 @@ Guardian::Guardian(SummonPropertiesEntry const *properties, Unit *owner) : Minio InitCharmInfo(); } -void Guardian::InitSummon(uint32 duration) +void Guardian::InitStats(uint32 duration) { + Minion::InitStats(duration); + if(m_owner->GetTypeId() == TYPEID_PLAYER) m_charmInfo->InitCharmCreateSpells(); - Minion::InitSummon(duration); - SetReactState(REACT_AGGRESSIVE); } |