diff --git a/sql/updates/world/4.3.4/2021_04_27_01_world.sql b/sql/updates/world/4.3.4/2021_04_27_01_world.sql new file mode 100644 index 00000000000..78433cfdf0c --- /dev/null +++ b/sql/updates/world/4.3.4/2021_04_27_01_world.sql @@ -0,0 +1,11 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName` IN +('spell_brc_furious_swipe_dummy', +'spell_brc_furious_swipe'); + +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(80340, 'spell_brc_furious_swipe_dummy'), +(80206, 'spell_brc_furious_swipe'); + +DELETE FROM `spell_custom_attr` WHERE `entry`= 80206; +INSERT INTO `spell_custom_attr` (`entry`, `attributes`) VALUES +(80206, 0x4); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp index cfc17a42ac4..e90aab6dcd8 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockCaverns/blackrock_caverns.cpp @@ -654,29 +654,12 @@ struct npc_raz_the_crazed : public EscortAI { SetEscortPaused(true); _events.ScheduleEvent(EVENT_FACE_TO_THE_SIDE, 1s); - _events.ScheduleEvent(EVENT_LEAP_FROM_BRIDGE, 2s); - _events.ScheduleEvent(EVENT_RESUME_ESCORT, 2s + 500ms); me->DespawnOrUnsummon(12s); } else if (id == 1 && _instance->GetData(DATA_RAZ_LAST_AREA_INDEX) == RAZ_AREA_INDEX_CORLA) _events.ScheduleEvent(EVENT_LEAP_OVER_BORER_PACKS, 1s); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) override - { - if (!target) - return; - - if (!target->IsInCombat()) - return; - - if (spell->Id == SPELL_FURIOUS_SWIPE_DUMMY) - { - DoCast(target, SPELL_FURIOUS_SWIPE); - DoCastSelf(SPELL_FURIOUS_RAGE, true); - } - } - void UpdateEscortAI(uint32 diff) override { UpdateVictim(); @@ -691,14 +674,31 @@ struct npc_raz_the_crazed : public EscortAI Talk(SAY_SMASH); break; case EVENT_START_ESCORT_PATH: - me->SetHomePosition(me->GetPosition()); - Start(true, true); + if (!me->IsEngaged()) + { + me->SetHomePosition(me->GetPosition()); + Start(true, true); + } + else + _events.Repeat(1s); break; case EVENT_FACE_TO_THE_SIDE: - me->SetFacingTo(5.061455f); + if (!me->IsEngaged()) + { + me->SetFacingTo(5.061455f); + _events.ScheduleEvent(EVENT_LEAP_FROM_BRIDGE, 1s); + } + else + _events.Repeat(1s); break; case EVENT_LEAP_FROM_BRIDGE: - DoCastSelf(SPELL_LEAP_FROM_BRIDGE); + if (!me->IsEngaged()) + { + DoCastSelf(SPELL_LEAP_FROM_BRIDGE); + _events.ScheduleEvent(EVENT_RESUME_ESCORT, 500ms); + } + else + _events.Repeat(1s); break; case EVENT_RESUME_ESCORT: SetEscortPaused(false); @@ -722,6 +722,8 @@ struct npc_raz_the_crazed : public EscortAI default: break; } + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; } } @@ -730,6 +732,49 @@ private: InstanceScript* _instance; }; +class spell_brc_furious_swipe_dummy : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_FURIOUS_SWIPE }); + } + + void HandleDummyEffect(SpellEffIndex /*effIndex*/) + { + if (Unit* caster = GetCaster()) + { + caster->SetFacingTo(caster->GetAngle(GetHitUnit())); + caster->CastSpell(GetHitUnit(), SPELL_FURIOUS_SWIPE); + if (caster->GetMap()->IsHeroic()) // Heroic difficulty casts the spell twice in a row + caster->CastSpell(GetHitUnit(), SPELL_FURIOUS_SWIPE); + } + } + + void Register() override + { + OnEffectHitTarget.Register(&spell_brc_furious_swipe_dummy::HandleDummyEffect, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +class spell_brc_furious_swipe : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_FURIOUS_RAGE }); + } + + void HandleScriptEffect(SpellEffIndex /*effIndex*/) + { + if (Unit* caster = GetCaster()) + caster->CastSpell(GetHitUnit(), SPELL_FURIOUS_RAGE); + } + + void Register() override + { + OnEffectHitTarget.Register(&spell_brc_furious_swipe::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + class at_raz_corla_event : public AreaTriggerScript { public: @@ -805,6 +850,8 @@ void AddSC_blackrock_caverns() RegisterBlackrockCavernsCreatureAI(npc_mad_prisoner); RegisterBlackrockCavernsCreatureAI(npc_crazed_mage); RegisterBlackrockCavernsCreatureAI(npc_raz_the_crazed); + RegisterSpellScript(spell_brc_furious_swipe_dummy); + RegisterSpellScript(spell_brc_furious_swipe); new at_raz_corla_event(); new at_raz_obsidius_event(); new at_brc_quest_trigger("at_brc_corla_quest", QUEST_ID_WHAT_IS_THIS_PLACE);