diff options
-rw-r--r-- | sql/updates/world/master/2022_09_05_21_world_2022_07_13_01_world.sql | 20 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 89 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_item.cpp | 46 |
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); |