fix(Scripts/BlackwingLair): Razorgore The Untamed misc improvements (#10205)

- Closes #10151
This commit is contained in:
UltraNix
2022-02-12 13:22:47 +01:00
committed by GitHub
parent 5febb28b4c
commit 61125a1ba1
5 changed files with 92 additions and 38 deletions

View File

@@ -51,6 +51,7 @@ enum BWLCreatureIds
NPC_BLACKWING_TASKMASTER = 12458,
NPC_BLACKWING_LEGIONAIRE = 12416,
NPC_BLACKWING_WARLOCK = 12459,
NPC_BLACKWING_MAGE = 12420,
NPC_VAELASTRAZ = 13020,
NPC_BROODLORD = 12017,
NPC_FIREMAW = 11983,
@@ -63,15 +64,16 @@ enum BWLCreatureIds
enum BWLGameObjectIds
{
GO_BLACK_DRAGON_EGG = 177807,
GO_PORTCULLIS_RAZORGORE = 175946,
GO_PORTCULLIS_VAELASTRASZ = 175185,
GO_PORTCULLIS_BROODLORD = 179365,
GO_PORTCULLIS_THREEDRAGONS = 179115,
GO_CHROMAGGUS_LEVER = 179148,
GO_PORTCULLIS_CHROMAGGUS = 179116,
GO_PORTCULLIS_NEFARIAN = 179117,
GO_SUPPRESSION_DEVICE = 179784
GO_BLACK_DRAGON_EGG = 177807,
GO_PORTCULLIS_RAZORGORE = 175946,
GO_PORTCULLIS_RAZORGORE_ROOM = 176964,
GO_PORTCULLIS_VAELASTRASZ = 175185,
GO_PORTCULLIS_BROODLORD = 179365,
GO_PORTCULLIS_THREEDRAGONS = 179115,
GO_CHROMAGGUS_LEVER = 179148,
GO_PORTCULLIS_CHROMAGGUS = 179116,
GO_PORTCULLIS_NEFARIAN = 179117,
GO_SUPPRESSION_DEVICE = 179784
};
enum BWLEvents

View File

@@ -31,9 +31,9 @@ enum Say
enum Spells
{
SPELL_MINDCONTROL = 42013,
SPELL_CHANNEL = 45537,
SPELL_MINDCONTROL = 19832,
SPELL_EGG_DESTROY = 19873,
SPELL_MIND_EXHAUSTION = 23958,
SPELL_CLEAVE = 19632,
SPELL_WARSTOMP = 24375,
@@ -73,6 +73,7 @@ public:
{
_Reset();
_charmerGUID.Clear();
secondPhase = false;
instance->SetData(DATA_EGG_EVENT, NOT_STARTED);
}
@@ -81,35 +82,62 @@ public:
{
_JustDied();
Talk(SAY_DEATH);
}
instance->SetData(DATA_EGG_EVENT, NOT_STARTED);
bool CanAIAttack(Unit const* target) const override
{
return !(target->GetTypeId() == TYPEID_UNIT && !secondPhase);
}
void DoChangePhase()
{
secondPhase = true;
_charmerGUID.Clear();
me->RemoveAllAuras();
me->SetHealth(me->GetMaxHealth());
events.ScheduleEvent(EVENT_CLEAVE, 15000);
events.ScheduleEvent(EVENT_STOMP, 35000);
events.ScheduleEvent(EVENT_FIREBALL, 7000);
events.ScheduleEvent(EVENT_CONFLAGRATION, 12000);
}
secondPhase = true;
me->RemoveAllAuras();
me->SetHealth(me->GetMaxHealth());
void SetGUID(ObjectGuid const guid, int32 /*id*/) override
{
_charmerGUID = guid;
}
void OnCharmed(bool apply) override
{
if (!apply)
{
if (Unit* charmer = ObjectAccessor::GetUnit(*me, _charmerGUID))
{
charmer->CastSpell(charmer, SPELL_MIND_EXHAUSTION, true);
}
}
}
void DoAction(int32 action) override
{
if (action == ACTION_PHASE_TWO)
{
DoChangePhase();
}
if (action == TALK_EGG_BROKEN_RAND)
{
Talk(urand(SAY_EGGS_BROKEN1, SAY_EGGS_BROKEN3));
}
}
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
{
if (!secondPhase)
damage = 0;
if (!secondPhase && damage >= me->GetHealth())
{
damage = me->GetHealth() - 1;
EnterEvadeMode();
}
}
void UpdateAI(uint32 diff) override
@@ -152,6 +180,7 @@ public:
private:
bool secondPhase;
ObjectGuid _charmerGUID;
};
CreatureAI* GetAI(Creature* creature) const override
@@ -168,9 +197,10 @@ public:
bool OnGossipHello(Player* player, GameObject* go) override
{
if (InstanceScript* instance = go->GetInstanceScript())
if (instance->GetData(DATA_EGG_EVENT) != DONE)
if (instance->GetData(DATA_EGG_EVENT) != DONE && !player->HasAura(SPELL_MIND_EXHAUSTION))
if (Creature* razor = ObjectAccessor::GetCreature(*go, instance->GetGuidData(DATA_RAZORGORE_THE_UNTAMED)))
{
razor->AI()->SetGUID(player->GetGUID());
razor->Attack(player, true);
player->CastSpell(razor, SPELL_MINDCONTROL);
}
@@ -193,15 +223,16 @@ public:
{
instance->SetData(DATA_EGG_EVENT, SPECIAL);
}
if (GameObject* egg = GetCaster()->FindNearestGameObject(GO_EGG, 100))
{
if (!egg)
return;
GetCaster()->GetAI()->DoAction(TALK_EGG_BROKEN_RAND);
if (Creature* razorgore = GetCaster()->ToCreature())
{
if (GameObject* egg = GetHitGObj())
{
razorgore->AI()->DoAction(TALK_EGG_BROKEN_RAND);
egg->SetLootState(GO_READY);
egg->UseDoorOrButton(10000);
}
}
}
void Register() override

View File

@@ -29,15 +29,16 @@
DoorData const doorData[] =
{
{ GO_PORTCULLIS_RAZORGORE, DATA_RAZORGORE_THE_UNTAMED, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 175946 || GUID 7230
{ GO_PORTCULLIS_VAELASTRASZ, DATA_VAELASTRAZ_THE_CORRUPT, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 175185 || GUID 7229
{ GO_PORTCULLIS_BROODLORD, DATA_BROODLORD_LASHLAYER, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179365 || GUID 75159
{ GO_PORTCULLIS_THREEDRAGONS, DATA_FIREMAW, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179115 || GUID 75165
{ GO_PORTCULLIS_THREEDRAGONS, DATA_EBONROC, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179115 || GUID 75165
{ GO_PORTCULLIS_THREEDRAGONS, DATA_FLAMEGOR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179115 || GUID 75165
{ GO_PORTCULLIS_CHROMAGGUS, DATA_CHROMAGGUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179116 || GUID 75161
{ GO_PORTCULLIS_NEFARIAN, DATA_NEFARIAN, DOOR_TYPE_ROOM, BOUNDARY_NONE}, // ID 179117 || GUID 75164
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE} // END
{ GO_PORTCULLIS_RAZORGORE, DATA_RAZORGORE_THE_UNTAMED, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 175946 || GUID 7230
{ GO_PORTCULLIS_RAZORGORE_ROOM, DATA_RAZORGORE_THE_UNTAMED, DOOR_TYPE_ROOM, BOUNDARY_NONE}, // ID 176964 || GUID 75158
{ GO_PORTCULLIS_VAELASTRASZ, DATA_VAELASTRAZ_THE_CORRUPT, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 175185 || GUID 7229
{ GO_PORTCULLIS_BROODLORD, DATA_BROODLORD_LASHLAYER, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179365 || GUID 75159
{ GO_PORTCULLIS_THREEDRAGONS, DATA_FIREMAW, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179115 || GUID 75165
{ GO_PORTCULLIS_THREEDRAGONS, DATA_EBONROC, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179115 || GUID 75165
{ GO_PORTCULLIS_THREEDRAGONS, DATA_FLAMEGOR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179115 || GUID 75165
{ GO_PORTCULLIS_CHROMAGGUS, DATA_CHROMAGGUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, // ID 179116 || GUID 75161
{ GO_PORTCULLIS_NEFARIAN, DATA_NEFARIAN, DOOR_TYPE_ROOM, BOUNDARY_NONE}, // ID 179117 || GUID 75164
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE} // END
};
Position const SummonPosition[8] =
@@ -52,7 +53,7 @@ Position const SummonPosition[8] =
{-7584.175781f, -989.6691289f, 407.199585f, 4.527447f},
};
uint32 const Entry[5] = {12422, 12458, 12416, 12420, 12459};
uint32 const Entry[3] = { 12422, 12416, 12420 };
class instance_blackwing_lair : public InstanceMapScript
{
@@ -92,6 +93,7 @@ public:
case NPC_BLACKWING_TASKMASTER:
case NPC_BLACKWING_LEGIONAIRE:
case NPC_BLACKWING_WARLOCK:
case NPC_BLACKWING_MAGE:
if (Creature* razor = instance->GetCreature(razorgoreGUID))
if (CreatureAI* razorAI = razor->AI())
razorAI->JustSummoned(creature);
@@ -111,7 +113,7 @@ public:
{
InstanceScript::OnGameObjectCreate(go);
switch(go->GetEntry())
switch (go->GetEntry())
{
case GO_BLACK_DRAGON_EGG:
if (GetBossState(DATA_FIREMAW) == DONE)
@@ -243,15 +245,22 @@ public:
_events.CancelEvent(EVENT_RAZOR_SPAWN);
EggEvent = data;
EggCount = 0;
for (ObjectGuid const& guid : EggList)
{
if (GameObject* egg = instance->GetGameObject(guid))
{
egg->Respawn();
}
}
break;
case SPECIAL:
if (++EggCount == 15)
if (++EggCount >= 15)
{
if (Creature* razor = instance->GetCreature(razorgoreGUID))
{
SetData(DATA_EGG_EVENT, DONE);
razor->RemoveAurasDueToSpell(42013); // MindControl
DoRemoveAurasDueToSpellOnPlayers(42013);
razor->RemoveAurasDueToSpell(19832); // MindControl
DoRemoveAurasDueToSpellOnPlayers(19832);
}
_events.ScheduleEvent(EVENT_RAZOR_PHASE_TWO, 1000);
_events.CancelEvent(EVENT_RAZOR_SPAWN);
@@ -300,7 +309,7 @@ public:
{
case EVENT_RAZOR_SPAWN:
for (uint8 i = urand(2, 5); i > 0; --i)
if (Creature* summon = instance->SummonCreature(Entry[urand(0, 4)], SummonPosition[urand(0, 7)]))
if (Creature* summon = instance->SummonCreature(Entry[urand(0, 2)], SummonPosition[urand(0, 7)]))
summon->AI()->DoZoneInCombat();
_events.ScheduleEvent(EVENT_RAZOR_SPAWN, 12000, 17000);
break;