Scripts/Spells: Correctly implement Murmur's Touch & Dire Brew (#28058)

(cherry picked from commit f0d2418e5f)
This commit is contained in:
offl
2022-06-26 21:44:40 +03:00
committed by Shauren
parent 249f55a483
commit 496eba4e8d
4 changed files with 133 additions and 15 deletions

View File

@@ -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');

View File

@@ -3551,7 +3551,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;
@@ -3626,16 +3628,6 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->MaxAffectedTargets = 15;
});
// Murmur's Touch
ApplySpellFix({ 33711, 38794 }, [](SpellInfo* spellInfo)
{
spellInfo->MaxAffectedTargets = 1;
ApplySpellEffectFix(spellInfo, EFFECT_0, [](SpellEffectInfo* spellEffectInfo)
{
spellEffectInfo->TriggerSpell = 33760;
});
});
// Fingers of Frost
ApplySpellFix({ 44544 }, [](SpellInfo* spellInfo)
{

View File

@@ -25,11 +25,16 @@ EndScriptData */
#include "ScriptMgr.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,
@@ -37,8 +42,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
@@ -214,10 +222,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);
}

View File

@@ -966,6 +966,49 @@ 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();
ChrClassesEntry const* chrClass = sChrClassesStore.AssertEntry(target->GetClass());
if (chrClass->ArmorTypeMask & (1 << ITEM_SUBCLASS_ARMOR_PLATE))
model = gender == GENDER_MALE ? MODEL_CLASS_PLATE_MALE : MODEL_CLASS_PLATE_FEMALE;
else if (chrClass->ArmorTypeMask & (1 << ITEM_SUBCLASS_ARMOR_MAIL))
model = gender == GENDER_MALE ? MODEL_CLASS_MAIL_MALE : MODEL_CLASS_MAIL_FEMALE;
else if (chrClass->ArmorTypeMask & (1 << ITEM_SUBCLASS_ARMOR_LEATHER))
model = gender == GENDER_MALE ? MODEL_CLASS_LEATHER_MALE : MODEL_CLASS_LEATHER_FEMALE;
else if (chrClass->ArmorTypeMask & (1 << ITEM_SUBCLASS_ARMOR_CLOTH))
model = gender == GENDER_MALE ? MODEL_CLASS_CLOTH_MALE : MODEL_CLASS_CLOTH_FEMALE;
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
@@ -4464,6 +4507,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);