mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-02-06 08:59:11 +01:00
Scripts/BRC: several improvements to Raz' script
* moved several mechanics to spell script and added safechecks to Raz' escort script to reduce the chance of getting stuck midway
This commit is contained in:
11
sql/updates/world/4.3.4/2021_04_27_01_world.sql
Normal file
11
sql/updates/world/4.3.4/2021_04_27_01_world.sql
Normal file
@@ -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);
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user