diff options
-rw-r--r-- | sql/scripts/world_scripts_full.sql | 15 | ||||
-rw-r--r-- | sql/updates/2011_02_04_0_world_spell_script_names.sql | 17 | ||||
-rwxr-xr-x | src/server/game/Spells/Spell.cpp | 4 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 42 |
4 files changed, 74 insertions, 4 deletions
diff --git a/sql/scripts/world_scripts_full.sql b/sql/scripts/world_scripts_full.sql index b379d50194e..79c006f2380 100644 --- a/sql/scripts/world_scripts_full.sql +++ b/sql/scripts/world_scripts_full.sql @@ -1824,6 +1824,21 @@ INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES ( 72757, 'spell_pvp_trinket_wotf_shared_cd'), ( 46221, 'spell_gen_animal_blood'), ( 70769, 'spell_gen_divine_storm_cd_reset'), +( 58630, 'spell_gen_dungeon_credit'), +( 59046, 'spell_gen_dungeon_credit'), +( 59450, 'spell_gen_dungeon_credit'), +( 61863, 'spell_gen_dungeon_credit'), +( 64899, 'spell_gen_dungeon_credit'), +( 64985, 'spell_gen_dungeon_credit'), +( 65074, 'spell_gen_dungeon_credit'), +( 65195, 'spell_gen_dungeon_credit'), +( 68184, 'spell_gen_dungeon_credit'), +( 68572, 'spell_gen_dungeon_credit'), +( 68574, 'spell_gen_dungeon_credit'), +( 68663, 'spell_gen_dungeon_credit'), +( 72706, 'spell_gen_dungeon_credit'), +( 72830, 'spell_gen_dungeon_credit'), +( 72959, 'spell_gen_dungeon_credit'), -- instances -- Black Temple ( 41475, 'spell_boss_lady_malande_shield'), diff --git a/sql/updates/2011_02_04_0_world_spell_script_names.sql b/sql/updates/2011_02_04_0_world_spell_script_names.sql new file mode 100644 index 00000000000..645be0e6083 --- /dev/null +++ b/sql/updates/2011_02_04_0_world_spell_script_names.sql @@ -0,0 +1,17 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_gen_dungeon_credit'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(58630,'spell_gen_dungeon_credit'), +(59046,'spell_gen_dungeon_credit'), +(59450,'spell_gen_dungeon_credit'), +(61863,'spell_gen_dungeon_credit'), +(64899,'spell_gen_dungeon_credit'), +(64985,'spell_gen_dungeon_credit'), +(65074,'spell_gen_dungeon_credit'), +(65195,'spell_gen_dungeon_credit'), +(68184,'spell_gen_dungeon_credit'), +(68572,'spell_gen_dungeon_credit'), +(68574,'spell_gen_dungeon_credit'), +(68663,'spell_gen_dungeon_credit'), +(72706,'spell_gen_dungeon_credit'), +(72830,'spell_gen_dungeon_credit'), +(72959,'spell_gen_dungeon_credit'); 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(); } |