aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroffl <11556157+offl@users.noreply.github.com>2022-06-26 21:44:40 +0300
committerGitHub <noreply@github.com>2022-06-26 21:44:40 +0300
commitf0d2418e5f2dabfae97a481fde52bc20ba93c72e (patch)
treeab520af9a56024ae0e2c116952d9f012e7d8977f
parent2d348b6d8b39f93a7cc18731aa394116332c5cf5 (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.sql7
-rw-r--r--src/server/game/Spells/SpellMgr.cpp11
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp83
-rw-r--r--src/server/scripts/Spells/spell_item.cpp59
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);