aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/base/world_database.sql3
-rw-r--r--sql/updates/9963_world_spell_script_names.sql2
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp43
3 files changed, 47 insertions, 1 deletions
diff --git a/sql/base/world_database.sql b/sql/base/world_database.sql
index 607278675fb..d09726807e4 100644
--- a/sql/base/world_database.sql
+++ b/sql/base/world_database.sql
@@ -26745,10 +26745,11 @@ LOCK TABLES `spell_script_names` WRITE;
/*!40000 ALTER TABLE `spell_script_names` DISABLE KEYS */;
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
-- generic
-( 58601, 'spell_gen_remove_flight_auras'),
( 6962, 'spell_gen_pet_summoned'),
+( 24751, 'spell_gen_trick_or_treat'),
( 29266, 'spell_creature_permanent_feign_death'),
( 57685, 'spell_creature_permanent_feign_death'),
+( 58601, 'spell_gen_remove_flight_auras'),
( 58951, 'spell_creature_permanent_feign_death'),
( 70592, 'spell_creature_permanent_feign_death'),
( 70628, 'spell_creature_permanent_feign_death'),
diff --git a/sql/updates/9963_world_spell_script_names.sql b/sql/updates/9963_world_spell_script_names.sql
new file mode 100644
index 00000000000..42aedad8c58
--- /dev/null
+++ b/sql/updates/9963_world_spell_script_names.sql
@@ -0,0 +1,2 @@
+DELETE FROM `spell_script_names` WHERE `spell_id`=24751 AND `ScriptName`='spell_gen_trick_or_treat';
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (24751,'spell_gen_trick_or_treat'); \ No newline at end of file
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 15b698a3bfc..90406de2490 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -115,6 +115,47 @@ public:
}
};
+// 24751 Trick or Treat
+enum eTrickOrTreatSpells
+{
+ SPELL_TRICK = 24714,
+ SPELL_TREAT = 24715
+};
+
+class spell_gen_trick_or_treat : public SpellScriptLoader
+{
+public:
+ spell_gen_trick_or_treat() : SpellScriptLoader("spell_gen_trick_or_treat") {}
+
+ class spell_gen_trick_or_treat_SpellScript : public SpellScript
+ {
+ bool Validate(SpellEntry const * /*spellEntry*/)
+ {
+ if (!sSpellStore.LookupEntry(SPELL_TRICK))
+ return false;
+ if (!sSpellStore.LookupEntry(SPELL_TREAT))
+ return false;
+ return true;
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ if (Unit* pTarget = GetHitUnit())
+ GetCaster()->CastSpell(pTarget, roll_chance_i(50) ? SPELL_TRICK : SPELL_TREAT, true, NULL);
+ }
+
+ void Register()
+ {
+ OnEffect += SpellEffectFn(spell_gen_trick_or_treat_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_gen_trick_or_treat_SpellScript();
+ }
+};
+
class spell_creature_permanent_feign_death : public SpellScriptLoader
{
public:
@@ -149,6 +190,7 @@ enum PvPTrinketTriggeredSpells
SPELL_WILL_OF_THE_FORSAKEN_COOLDOWN_TRIGGER = 72752,
SPELL_WILL_OF_THE_FORSAKEN_COOLDOWN_TRIGGER_WOTF = 72757,
};
+
class spell_pvp_trinket_wotf_shared_cd : public SpellScriptLoader
{
public:
@@ -197,6 +239,7 @@ void AddSC_generic_spell_scripts()
{
new spell_gen_pet_summoned();
new spell_gen_remove_flight_auras();
+ new spell_gen_trick_or_treat();
new spell_creature_permanent_feign_death();
new spell_pvp_trinket_wotf_shared_cd();
}