diff --git a/data/sql/updates/pending_db_world/rev_1719311513285669100.sql b/data/sql/updates/pending_db_world/rev_1719311513285669100.sql new file mode 100644 index 000000000..c4d5ecb9c --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1719311513285669100.sql @@ -0,0 +1,5 @@ +-- Drunken Haze, Drunken Skull Crack +DELETE FROM `spell_script_names` WHERE `spell_id` IN (37591,29690); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(37591, 'spell_gen_sober_up'), +(29690, 'spell_gen_sober_up'); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index fc2ad1645..47f95c91a 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -5199,6 +5199,59 @@ class spell_gen_consumption : public SpellScript } }; +// 37591 - Drunken Haze | 29690 - Drunken Skull Crack +enum DrunkenHaze +{ + SPELL_DRUNKEN_HAZE = 37591, + SPELL_DRUNKEN_SKULL_CRACK = 29690 +}; + +class spell_gen_sober_up : public AuraScript +{ + PrepareAuraScript(spell_gen_sober_up); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DRUNKEN_HAZE, SPELL_DRUNKEN_SKULL_CRACK }); + } + + void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + if (!target && !target->ToPlayer()) + return; + + SpellEffIndex InebriateEffIndex; + if (Player* player = target->ToPlayer()) + { + switch (GetSpellInfo()->Id) + { + case SPELL_DRUNKEN_HAZE: + InebriateEffIndex = EFFECT_1; + break; + case SPELL_DRUNKEN_SKULL_CRACK: + InebriateEffIndex = EFFECT_2; + break; + } + + uint16 level = aurEff->GetSpellInfo()->Effects[InebriateEffIndex].CalcValue(); + player->SetDrunkValue(player->GetDrunkValue() - (level > 100 ? 100 : level)); // Some (maybe it's only 29690) spells can have over 100 inebriate points + } + } + + void Register() override + { + if (m_scriptSpellId == SPELL_DRUNKEN_HAZE) + { + AfterEffectRemove += AuraEffectRemoveFn(spell_gen_sober_up::OnRemove, EFFECT_0, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL); + } + else + { + AfterEffectRemove += AuraEffectRemoveFn(spell_gen_sober_up::OnRemove, EFFECT_1, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL); + } + } +}; + void AddSC_generic_spell_scripts() { RegisterSpellScript(spell_silithyst); @@ -5354,5 +5407,6 @@ void AddSC_generic_spell_scripts() RegisterSpellScript(spell_gen_yehkinya_bramble); RegisterSpellScript(spell_gen_choking_vines); RegisterSpellScript(spell_gen_consumption); + RegisterSpellScript(spell_gen_sober_up); }