diff options
author | Shauren <shauren.trinity@gmail.com> | 2011-02-04 11:27:02 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2011-02-04 11:27:02 +0100 |
commit | 8d5ebded8ca3f4a78ed1733cfd72545688e387db (patch) | |
tree | 6b4141f07221830e28f2e3a46db4630257e23561 /src | |
parent | e9bae2d0a0fc45b6376581f2395ffa87fb9d9a99 (diff) |
Core/Spells: Moved dungeon encounter crediting to scripts
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Spells/Spell.cpp | 4 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 42 |
2 files changed, 42 insertions, 4 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index f0ecb5307b6..2665884cee7 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -3725,10 +3725,6 @@ void Spell::finish(bool ok) m_caster->ToPlayer()->SetSpellModTakingSpell(this, false); } - if (m_caster->GetTypeId() == TYPEID_UNIT) - if (InstanceScript* instance = m_caster->GetInstanceScript()) - instance->UpdateEncounterState(ENCOUNTER_CREDIT_CAST_SPELL, m_spellInfo->Id, m_caster); - // Stop Attack for some spells if (m_spellInfo->Attributes & SPELL_ATTR0_STOP_ATTACK_TARGET) m_caster->AttackStop(); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index a2ad0347540..56621dbc664 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -705,6 +705,47 @@ class spell_gen_parachute_ic : public SpellScriptLoader } }; +class spell_gen_dungeon_credit : public SpellScriptLoader +{ + public: + spell_gen_dungeon_credit() : SpellScriptLoader("spell_gen_dungeon_credit") { } + + class spell_gen_dungeon_credit_SpellScript : public SpellScript + { + PrepareSpellScript(spell_gen_dungeon_credit_SpellScript); + + bool Load() + { + _handled = false; + return true; + } + + void CreditEncounter() + { + // This hook is executed for every target, make sure we only credit instance once + if (_handled) + return; + + _handled = true; + if (GetCaster()->GetTypeId() == TYPEID_UNIT) + if (InstanceScript* instance = GetCaster()->GetInstanceScript()) + instance->UpdateEncounterState(ENCOUNTER_CREDIT_CAST_SPELL, GetSpellInfo()->Id, GetCaster()); + } + + void Register() + { + AfterHit += SpellHitFn(spell_gen_dungeon_credit_SpellScript::CreditEncounter); + } + + bool _handled; + }; + + SpellScript* GetSpellScript() const + { + return new spell_gen_dungeon_credit_SpellScript(); + } +}; + void AddSC_generic_spell_scripts() { new spell_gen_absorb0_hitlimit1(); @@ -723,4 +764,5 @@ void AddSC_generic_spell_scripts() new spell_gen_divine_storm_cd_reset(); new spell_gen_parachute_ic(); new spell_gen_gunship_portal(); + new spell_gen_dungeon_credit(); } |