aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2022_09_05_21_world_2022_07_13_01_world.sql20
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp89
-rw-r--r--src/server/scripts/Spells/spell_item.cpp46
3 files changed, 155 insertions, 0 deletions
diff --git a/sql/updates/world/master/2022_09_05_21_world_2022_07_13_01_world.sql b/sql/updates/world/master/2022_09_05_21_world_2022_07_13_01_world.sql
new file mode 100644
index 00000000000..4531f8c091a
--- /dev/null
+++ b/sql/updates/world/master/2022_09_05_21_world_2022_07_13_01_world.sql
@@ -0,0 +1,20 @@
+--
+DELETE FROM `spell_scripts` WHERE `id` IN (57337,57397,58466,58475,66477);
+DELETE FROM `spell_script_names` WHERE `ScriptName` IN (
+'spell_item_great_feast',
+'spell_item_fish_feast',
+'spell_item_gigantic_feast',
+'spell_item_small_feast',
+'spell_item_bountiful_feast',
+'spell_gen_feast');
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(57301,'spell_item_great_feast'),
+(57426,'spell_item_fish_feast'),
+(58465,'spell_item_gigantic_feast'),
+(58474,'spell_item_small_feast'),
+(66476,'spell_item_bountiful_feast'),
+(57337,'spell_gen_feast'),
+(57397,'spell_gen_feast'),
+(58466,'spell_gen_feast'),
+(58475,'spell_gen_feast'),
+(66477,'spell_gen_feast');
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index d280d8b50ab..999e3282d8d 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -1632,6 +1632,94 @@ class spell_steal_essence_visual : public AuraScript
}
};
+enum Feast
+{
+ SPELL_GREAT_FEAST = 57337,
+ SPELL_FISH_FEAST = 57397,
+ SPELL_GIGANTIC_FEAST = 58466,
+ SPELL_SMALL_FEAST = 58475,
+ SPELL_BOUNTIFUL_FEAST = 66477,
+
+ SPELL_FEAST_FOOD = 45548,
+ SPELL_FEAST_DRINK = 57073,
+ SPELL_BOUNTIFUL_FEAST_DRINK = 66041,
+ SPELL_BOUNTIFUL_FEAST_FOOD = 66478,
+
+ SPELL_GREAT_FEAST_REFRESHMENT = 57338,
+ SPELL_FISH_FEAST_REFRESHMENT = 57398,
+ SPELL_GIGANTIC_FEAST_REFRESHMENT = 58467,
+ SPELL_SMALL_FEAST_REFRESHMENT = 58477,
+ SPELL_BOUNTIFUL_FEAST_REFRESHMENT = 66622
+};
+
+/* 57337 - Great Feast
+ 57397 - Fish Feast
+ 58466 - Gigantic Feast
+ 58475 - Small Feast
+ 66477 - Bountiful Feast */
+class spell_gen_feast : public SpellScript
+{
+ PrepareSpellScript(spell_gen_feast);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo(
+ {
+ SPELL_FEAST_FOOD,
+ SPELL_FEAST_DRINK,
+ SPELL_BOUNTIFUL_FEAST_DRINK,
+ SPELL_BOUNTIFUL_FEAST_FOOD,
+
+ SPELL_GREAT_FEAST_REFRESHMENT,
+ SPELL_FISH_FEAST_REFRESHMENT,
+ SPELL_GIGANTIC_FEAST_REFRESHMENT,
+ SPELL_SMALL_FEAST_REFRESHMENT,
+ SPELL_BOUNTIFUL_FEAST_REFRESHMENT
+ });
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ Unit* target = GetHitUnit();
+
+ switch (GetSpellInfo()->Id)
+ {
+ case SPELL_GREAT_FEAST:
+ target->CastSpell(target, SPELL_FEAST_FOOD);
+ target->CastSpell(target, SPELL_FEAST_DRINK);
+ target->CastSpell(target, SPELL_GREAT_FEAST_REFRESHMENT);
+ break;
+ case SPELL_FISH_FEAST:
+ target->CastSpell(target, SPELL_FEAST_FOOD);
+ target->CastSpell(target, SPELL_FEAST_DRINK);
+ target->CastSpell(target, SPELL_FISH_FEAST_REFRESHMENT);
+ break;
+ case SPELL_GIGANTIC_FEAST:
+ target->CastSpell(target, SPELL_FEAST_FOOD);
+ target->CastSpell(target, SPELL_FEAST_DRINK);
+ target->CastSpell(target, SPELL_GIGANTIC_FEAST_REFRESHMENT);
+ break;
+ case SPELL_SMALL_FEAST:
+ target->CastSpell(target, SPELL_FEAST_FOOD);
+ target->CastSpell(target, SPELL_FEAST_DRINK);
+ target->CastSpell(target, SPELL_SMALL_FEAST_REFRESHMENT);
+ break;
+ case SPELL_BOUNTIFUL_FEAST:
+ target->CastSpell(target, SPELL_BOUNTIFUL_FEAST_REFRESHMENT);
+ target->CastSpell(target, SPELL_BOUNTIFUL_FEAST_DRINK);
+ target->CastSpell(target, SPELL_BOUNTIFUL_FEAST_FOOD);
+ break;
+ default:
+ break;
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_gen_feast::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
/*
There are only 3 possible flags Feign Death auras can apply: UNIT_DYNFLAG_DEAD, UNIT_FLAG2_FEIGN_DEATH
and UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT. Some auras can apply only 2 flags
@@ -4995,6 +5083,7 @@ void AddSC_generic_spell_scripts()
RegisterSpellScript(spell_ethereal_pet_onsummon);
RegisterSpellScript(spell_ethereal_pet_aura_remove);
RegisterSpellScript(spell_steal_essence_visual);
+ RegisterSpellScript(spell_gen_feast);
RegisterSpellScript(spell_gen_feign_death_all_flags);
RegisterSpellScript(spell_gen_feign_death_no_dyn_flag);
RegisterSpellScript(spell_gen_feign_death_no_prevent_emotes);
diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp
index 697e0860a8b..a9be7b8b558 100644
--- a/src/server/scripts/Spells/spell_item.cpp
+++ b/src/server/scripts/Spells/spell_item.cpp
@@ -1117,6 +1117,47 @@ class spell_item_fate_rune_of_unsurpassed_vigor : public AuraScript
}
};
+enum Feast
+{
+ TEXT_GREAT_FEAST = 31843,
+ TEXT_FISH_FEAST = 31844,
+ TEXT_GIGANTIC_FEAST = 31846,
+ TEXT_SMALL_FEAST = 31845,
+ TEXT_BOUNTIFUL_FEAST = 35153
+};
+
+/* 57301 - Great Feast
+ 57426 - Fish Feast
+ 58465 - Gigantic Feast
+ 58474 - Small Feast
+ 66476 - Bountiful Feast */
+class spell_item_feast : public SpellScript
+{
+ PrepareSpellScript(spell_item_feast);
+
+public:
+ spell_item_feast(uint32 text) : SpellScript(), _text(text) { }
+
+private:
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return sBroadcastTextStore.LookupEntry(_text);
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ Unit* caster = GetCaster();
+ caster->Unit::TextEmote(_text, caster, false);
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_item_feast::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+
+ uint32 _text;
+};
+
// http://www.wowhead.com/item=47499 Flask of the North
// 67019 Flask of the North
enum FlaskOfTheNorthSpells
@@ -4512,6 +4553,11 @@ void AddSC_item_spell_scripts()
RegisterSpellScript(spell_item_echoes_of_light);
RegisterSpellScript(spell_item_extract_gas);
RegisterSpellScript(spell_item_fate_rune_of_unsurpassed_vigor);
+ RegisterSpellScriptWithArgs(spell_item_feast, "spell_item_great_feast", TEXT_GREAT_FEAST);
+ RegisterSpellScriptWithArgs(spell_item_feast, "spell_item_fish_feast", TEXT_FISH_FEAST);
+ RegisterSpellScriptWithArgs(spell_item_feast, "spell_item_gigantic_feast", TEXT_GIGANTIC_FEAST);
+ RegisterSpellScriptWithArgs(spell_item_feast, "spell_item_small_feast", TEXT_SMALL_FEAST);
+ RegisterSpellScriptWithArgs(spell_item_feast, "spell_item_bountiful_feast", TEXT_BOUNTIFUL_FEAST);
RegisterSpellScript(spell_item_flask_of_the_north);
RegisterSpellScript(spell_item_frozen_shadoweave);
RegisterSpellScript(spell_item_gnomish_death_ray);