diff options
author | offl <11556157+offl@users.noreply.github.com> | 2022-06-26 21:44:40 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-26 21:44:40 +0300 |
commit | f0d2418e5f2dabfae97a481fde52bc20ba93c72e (patch) | |
tree | ab520af9a56024ae0e2c116952d9f012e7d8977f | |
parent | 2d348b6d8b39f93a7cc18731aa394116332c5cf5 (diff) |
Scripts/Spells: Correctly implement Murmur's Touch & Dire Brew (#28058)
-rw-r--r-- | sql/updates/world/3.3.5/2022_06_26_00_world.sql | 7 | ||||
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 11 | ||||
-rw-r--r-- | src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp | 83 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_item.cpp | 59 |
4 files changed, 148 insertions, 12 deletions
diff --git a/sql/updates/world/3.3.5/2022_06_26_00_world.sql b/sql/updates/world/3.3.5/2022_06_26_00_world.sql new file mode 100644 index 00000000000..221ba43c7a7 --- /dev/null +++ b/sql/updates/world/3.3.5/2022_06_26_00_world.sql @@ -0,0 +1,7 @@ +-- +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (-33711,-38794,33686,51010); +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_murmur_murmurs_touch','spell_item_dire_brew'); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(33711,'spell_murmur_murmurs_touch'), +(38794,'spell_murmur_murmurs_touch'), +(51010,'spell_item_dire_brew'); diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 46ce4c7b0b0..d3979a72246 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -3383,7 +3383,9 @@ void SpellMgr::LoadSpellInfoCorrections() 38762, // Force of Neltharaku 51122, // Fierce Lightning Stike 71848, // Toxic Wasteling Find Target - 36146 // Chains of Naberius + 36146, // Chains of Naberius + 33711, // Murmur's Touch + 38794 // Murmur's Touch }, [](SpellInfo* spellInfo) { spellInfo->MaxAffectedTargets = 1; @@ -3500,13 +3502,6 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->_GetEffect(EFFECT_1).TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ALLY); }); - // Murmur's Touch - ApplySpellFix({ 33711, 38794 }, [](SpellInfo* spellInfo) - { - spellInfo->MaxAffectedTargets = 1; - spellInfo->_GetEffect(EFFECT_0).TriggerSpell = 33760; - }); - // Fingers of Frost ApplySpellFix({ 44544 }, [](SpellInfo* spellInfo) { diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp index afaa7acca61..70402c356d0 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp @@ -26,11 +26,16 @@ EndScriptData */ #include "ObjectAccessor.h" #include "ScriptedCreature.h" #include "shadow_labyrinth.h" +#include "SpellAuraEffects.h" #include "SpellScript.h" -enum Murmur +enum Texts +{ + EMOTE_SONIC_BOOM = 0 +}; + +enum Spells { - // Spell SPELL_RESONANCE = 33657, SPELL_MAGNETIC_PULL = 33689, SPELL_SONIC_SHOCK = 38797, @@ -38,8 +43,11 @@ enum Murmur SPELL_SONIC_BOOM_CAST = 33923, SPELL_SONIC_BOOM_EFFECT = 33666, SPELL_MURMURS_TOUCH = 33711, - // Text - EMOTE_SONIC_BOOM = 0 + SPELL_MURMURS_TOUCH_H = 38794, + + SPELL_MURMURS_TOUCH_DUMMY = 33760, + SPELL_SHOCKWAVE = 33686, + SPELL_SHOCKWAVE_KNOCK_BACK = 33673 }; enum Events @@ -215,10 +223,77 @@ class spell_murmur_thundering_storm : public SpellScript } }; +// 33711, 38794 - Murmur's Touch +class spell_murmur_murmurs_touch : public AuraScript +{ + PrepareAuraScript(spell_murmur_murmurs_touch); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_MURMURS_TOUCH_DUMMY, + SPELL_SHOCKWAVE, + SPELL_SHOCKWAVE_KNOCK_BACK + }); + } + + void OnPeriodic(AuraEffect const* aurEff) + { + Unit* target = GetTarget(); + + switch (GetId()) + { + case SPELL_MURMURS_TOUCH: + switch (aurEff->GetTickNumber()) + { + case 7: + case 10: + case 12: + case 13: + target->CastSpell(target, SPELL_MURMURS_TOUCH_DUMMY, true); + break; + case 14: + target->CastSpell(target, SPELL_MURMURS_TOUCH_DUMMY, true); + target->CastSpell(target, SPELL_SHOCKWAVE, true); + target->CastSpell(target, SPELL_SHOCKWAVE_KNOCK_BACK, true); + break; + default: + break; + } + break; + case SPELL_MURMURS_TOUCH_H: + switch (aurEff->GetTickNumber()) + { + case 3: + case 6: + target->CastSpell(target, SPELL_MURMURS_TOUCH_DUMMY, true); + break; + case 7: + target->CastSpell(target, SPELL_MURMURS_TOUCH_DUMMY, true); + target->CastSpell(target, SPELL_SHOCKWAVE, true); + target->CastSpell(target, SPELL_SHOCKWAVE_KNOCK_BACK, true); + break; + default: + break; + } + break; + default: + break; + } + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_murmur_murmurs_touch::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); + } +}; + void AddSC_boss_murmur() { RegisterShadowLabyrinthCreatureAI(boss_murmur); RegisterSpellScript(spell_murmur_sonic_boom); RegisterSpellScript(spell_murmur_sonic_boom_effect); RegisterSpellScript(spell_murmur_thundering_storm); + RegisterSpellScript(spell_murmur_murmurs_touch); } diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 7e37aadcce7..8dbf3e92a81 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -901,6 +901,64 @@ class spell_item_party_time : public AuraScript } }; +enum DireBrew +{ + MODEL_CLASS_CLOTH_MALE = 25229, + MODEL_CLASS_CLOTH_FEMALE = 25233, + MODEL_CLASS_LEATHER_MALE = 25230, + MODEL_CLASS_LEATHER_FEMALE = 25234, + MODEL_CLASS_MAIL_MALE = 25231, + MODEL_CLASS_MAIL_FEMALE = 25235, + MODEL_CLASS_PLATE_MALE = 25232, + MODEL_CLASS_PLATE_FEMALE = 25236 +}; + +// 51010 - Dire Brew +class spell_item_dire_brew : public AuraScript +{ + PrepareAuraScript(spell_item_dire_brew); + + void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + + uint32 model = 0; + uint8 gender = target->GetGender(); + + switch (target->GetClass()) + { + case CLASS_PRIEST: + case CLASS_MAGE: + case CLASS_WARLOCK: + model = gender == GENDER_MALE ? MODEL_CLASS_CLOTH_MALE : MODEL_CLASS_CLOTH_FEMALE; + break; + case CLASS_ROGUE: + case CLASS_DRUID: + model = gender == GENDER_MALE ? MODEL_CLASS_LEATHER_MALE : MODEL_CLASS_LEATHER_FEMALE; + break; + case CLASS_HUNTER: + case CLASS_SHAMAN: + model = gender == GENDER_MALE ? MODEL_CLASS_MAIL_MALE : MODEL_CLASS_MAIL_FEMALE; + break; + case CLASS_WARRIOR: + case CLASS_PALADIN: + case CLASS_DEATH_KNIGHT: + model = gender == GENDER_MALE ? MODEL_CLASS_PLATE_MALE : MODEL_CLASS_PLATE_FEMALE; + break; + default: + break; + } + + if (model) + target->SetDisplayId(model); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_item_dire_brew::AfterApply, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL); + } +}; + enum DiscerningEyeBeastMisc { SPELL_DISCERNING_EYE_BEAST = 59914 @@ -4222,6 +4280,7 @@ void AddSC_item_spell_scripts() RegisterSpellScript(spell_item_desperate_defense); RegisterSpellScript(spell_item_deviate_fish); RegisterSpellScript(spell_item_party_time); + RegisterSpellScript(spell_item_dire_brew); RegisterSpellScript(spell_item_discerning_eye_beast_dummy); RegisterSpellScript(spell_item_echoes_of_light); RegisterSpellScript(spell_item_extract_gas); |