Scripts/BWD: scripted Drakonoid Chainwielder and Drakonoid Drudge trash npcs and scripted Magmaw's emote visual while chained
This commit is contained in:
1 parent
51c0907e5a
commit
580e12e5a6
6 files changed
+233
-1
No files matched your search
+106
@@ -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();
|
||||
}
|
||||
+5
-1
@@ -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();
|
||||
}
|
||||
+8
@@ -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;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user