Scripts/BWD: scripted Drakonoid Chainwielder and Drakonoid Drudge trash npcs and scripted Magmaw's emote visual while chained

This commit is contained in:
Ovahlord committed 2020-07-10 22:20:48 +02:00
1 parent 51c0907e5a
commit 580e12e5a6
6 files changed
+233 -1

No files matched your search

@@ -180,6 +180,91 @@ private:
uint8 _talkTextId;
};
enum DrakonidChainWielder
{
// Events
EVENT_OVERHEAD_SMASH = 1,
EVENT_GRIEVOUS_WOUND,
EVENT_CONSTRICTING_CHAINS,
// Spells
SPELL_OVERHEAD_SMASH_SUMMON = 79578, // Serverside spell
SPELL_OVERHEAD_SMASH = 79580,
SPELL_GRIEVOUS_WOUND = 80051,
SPELL_CONSTRICTING_CHAINS = 79589,
};
struct npc_bwd_drakonid_chainwielder : public ScriptedAI
{
npc_bwd_drakonid_chainwielder(Creature* creature) : ScriptedAI(creature) { }
void JustEngagedWith(Unit* /*who*/) override
{
_events.ScheduleEvent(EVENT_GRIEVOUS_WOUND, 9s);
_events.ScheduleEvent(EVENT_OVERHEAD_SMASH, 12s);
_events.ScheduleEvent(EVENT_CONSTRICTING_CHAINS, 42s);
}
void EnterEvadeMode(EvadeReason why) override
{
ScriptedAI::EnterEvadeMode(why);
_events.Reset();
}
void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() == NPC_OVERHEAD_SMASH)
{
me->SetFacingToObject(summon);
DoCast(summon, SPELL_OVERHEAD_SMASH);
}
}
void JustDied(Unit* killer) override
{
ScriptedAI::JustDied(killer);
_events.Reset();
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
_events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_OVERHEAD_SMASH:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 60.f, true))
DoCast(target, SPELL_OVERHEAD_SMASH_SUMMON);
_events.Repeat(27s, 36s);
break;
case EVENT_GRIEVOUS_WOUND:
DoCastVictim(SPELL_GRIEVOUS_WOUND);
_events.Repeat(22s, 25s);
break;
case EVENT_CONSTRICTING_CHAINS:
DoCastAOE(SPELL_CONSTRICTING_CHAINS);
_events.Repeat(7s, 11s);
break;
default:
break;
}
}
DoMeleeAttackIfReady();
}
private:
EventMap _events;
};
struct go_bwd_ancient_bell : public GameObjectAI
{
go_bwd_ancient_bell(GameObject* go) : GameObjectAI(go), _instance(go->GetInstanceScript()) { }
@@ -237,6 +322,25 @@ class spell_bwd_dragon_orb : public SpellScript
}
};
class spell_bwd_grievous_wound : public AuraScript
{
PrepareAuraScript(spell_bwd_grievous_wound);
void OnPeriodic(AuraEffect const* /*aurEff*/)
{
if (GetUnitOwner()->HealthAbovePct(90))
{
PreventDefaultAction();
Remove(AuraRemoveFlags::ByEnemySpell);
}
}
void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_bwd_grievous_wound::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
}
};
class at_bwd_intro: public OnlyOnceAreaTriggerScript
{
public:
@@ -253,7 +357,9 @@ class at_bwd_intro: public OnlyOnceAreaTriggerScript
void AddSC_blackwing_descent()
{
RegisterBlackwingDescentCreatureAI(npc_bwd_lord_victor_nefarius);
RegisterBlackwingDescentCreatureAI(npc_bwd_drakonid_chainwielder);
RegisterGameObjectAI(go_bwd_ancient_bell);
RegisterSpellScript(spell_bwd_dragon_orb);
RegisterAuraScript(spell_bwd_grievous_wound);
new at_bwd_intro();
}
@@ -161,7 +161,11 @@ enum BWDCreatureIds
NPC_SPIRIT_OF_THAURISSAN = 43126,
NPC_SPIRIT_OF_BURNINGEYE = 43130,
NPC_COLUMN_OF_LIGHT = 51506,
NPC_LORD_VICTOR_NEFARIUS_GENERIC = 48964
NPC_LORD_VICTOR_NEFARIUS_GENERIC = 48964,
// Generic Creatures
NPC_DRAKONID_DRUDGE = 42362,
NPC_OVERHEAD_SMASH = 42690
};
enum BWDGameObjectIds
@@ -48,6 +48,8 @@ enum Spells
SPELL_MASSIVE_CRASH = 88253,
SPELL_IMPALE_SELF = 77907,
SPELL_EJECT_PASSENGER_3 = 95204,
SPELL_EMOTE_MAGMA_LAVA_SPLASH = 79461,
SPELL_EMOTE_SPELLCASTDIRECTED = 20718,
// Exposed Head of Magmaw
SPELL_POINT_OF_VULNERABILITY_SHARE_DAMAGE = 79010,
@@ -1232,6 +1234,30 @@ class spell_magmaw_impale_self : public AuraScript
}
};
class spell_magmaw_captured : public AuraScript
{
PrepareAuraScript(spell_magmaw_captured);
bool Validate(SpellInfo const* /*spell*/) override
{
return ValidateSpellInfo(
{
SPELL_EMOTE_MAGMA_LAVA_SPLASH,
SPELL_EMOTE_SPELLCASTDIRECTED
});
}
void HandleTick(AuraEffect const* /*aurEff*/)
{
GetTarget()->CastSpell(GetTarget(), RAND(SPELL_EMOTE_MAGMA_LAVA_SPLASH, SPELL_EMOTE_SPELLCASTDIRECTED), true);
}
void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_magmaw_captured::HandleTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
class achievement_parasite_evening : public AchievementCriteriaScript
{
public:
@@ -1268,5 +1294,6 @@ void AddSC_boss_magmaw()
RegisterSpellScript(spell_magmaw_shadow_breath_targeting);
RegisterAuraScript(spell_magmaw_massive_crash);
RegisterAuraScript(spell_magmaw_impale_self);
RegisterAuraScript(spell_magmaw_captured);
new achievement_parasite_evening();
}
@@ -106,6 +106,11 @@ enum SummonGroups
SUMMON_GROUP_ATRAMEDES_INTRO = 0
};
enum Spells
{
SPELL_EMOTE_MAGMA_LAVA_SPLASH = 79461
};
class instance_blackwing_descent : public InstanceMapScript
{
public:
@@ -186,6 +191,9 @@ class instance_blackwing_descent : public InstanceMapScript
if (Creature* nefarian = GetCreature(DATA_NEFARIANS_END))
nefarian->AI()->JustSummoned(creature);
break;
case NPC_DRAKONID_DRUDGE:
creature->ApplySpellImmune(SPELL_EMOTE_MAGMA_LAVA_SPLASH, IMMUNITY_ID, SPELL_EMOTE_MAGMA_LAVA_SPLASH, true);
break;
default:
break;
}