aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/scripts/world_scripts_full.sql15
-rw-r--r--sql/updates/2011_02_04_0_world_spell_script_names.sql17
-rwxr-xr-xsrc/server/game/Spells/Spell.cpp4
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp42
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();
}