mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-23 05:36:23 +00:00
fix(Scripts/BlackwingLair): Razorgore The Untamed misc improvements (#10205)
- Closes #10151
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user