fix(script/LBRS): Urok Doomhowl improvements (#7960)

This commit is contained in:
patou01
2021-11-05 11:18:53 +01:00
committed by GitHub
parent f7c9b7de14
commit 99485195d2
4 changed files with 114 additions and 11 deletions

View File

@@ -73,6 +73,8 @@ enum CreaturesIds
NPC_BLACKHAND_VETERAN = 9819,
NPC_BLACKHAND_INCARCERATOR = 10316,
NPC_LORD_VICTOR_NEFARIUS = 10162,
NPC_UROK_MAGUS = 10602,
NPC_UROK_ENFORCER = 10601,
NPC_FINKLE_EINHORN = 10776
};
@@ -121,6 +123,8 @@ enum GameObjectsIds
GO_PORTCULLIS_TOBOSSROOMS = 175186,
// Urok Doomhowl
GO_UROK_PILE = 175621,
GO_UROK_CHALLENGE = 175584,
GO_UROK_CIRCLE = 175571
};
enum npcspells

View File

@@ -58,6 +58,8 @@ public:
{
me->CastSpell(me, SPELL_UROK_SPAWN, true);
BossAI::InitializeAI();
Talk(SAY_SUMMON);
DoZoneInCombat(nullptr, 100.0f);
}
void EnterCombat(Unit* /*who*/) override
@@ -65,7 +67,7 @@ public:
_EnterCombat();
events.ScheduleEvent(SPELL_REND, urand(17000, 20000));
events.ScheduleEvent(SPELL_STRIKE, urand(10000, 12000));
Talk(SAY_AGGRO);
events.ScheduleEvent(SPELL_INTIMIDATING_ROAR, urand(25000, 30000));
}
void JustDied(Unit* /*killer*/) override
@@ -95,6 +97,10 @@ public:
DoCastVictim(SPELL_STRIKE);
events.ScheduleEvent(SPELL_STRIKE, urand(8000, 10000));
break;
case SPELL_INTIMIDATING_ROAR:
DoCastVictim(SPELL_INTIMIDATING_ROAR);
events.ScheduleEvent(SPELL_INTIMIDATING_ROAR, urand(40000, 45000));
break;
default:
break;
}

View File

@@ -33,13 +33,7 @@ uint32 const DragonspireMobs[3] = { NPC_BLACKHAND_DREADWEAVER, NPC_BLACKHAND_SUM
enum EventIds
{
EVENT_DARGONSPIRE_ROOM_STORE = 1,
EVENT_DARGONSPIRE_ROOM_CHECK = 2,
EVENT_UROK_DOOMHOWL_SPAWNS_1 = 3,
EVENT_UROK_DOOMHOWL_SPAWNS_2 = 4,
EVENT_UROK_DOOMHOWL_SPAWNS_3 = 5,
EVENT_UROK_DOOMHOWL_SPAWNS_4 = 6,
EVENT_UROK_DOOMHOWL_SPAWNS_5 = 7,
EVENT_UROK_DOOMHOWL_SPAWN_IN = 8
EVENT_DARGONSPIRE_ROOM_CHECK = 2
};
enum Texts
@@ -76,6 +70,11 @@ public:
{
switch (creature->GetEntry())
{
case NPC_UROK_MAGUS:
[[fallthrough]];
case NPC_UROK_ENFORCER:
UrokMobs.push_back(creature->GetGUID());
break;
case NPC_HIGHLORD_OMOKK:
HighlordOmokk = creature->GetGUID();
break;
@@ -239,7 +238,13 @@ public:
HandleGameObject(ObjectGuid::Empty, true, go);
break;
case GO_UROK_PILE:
go_urok_pile = go->GetGUID();
go_urokPile = go->GetGUID();
break;
case GO_UROK_CIRCLE:
go_urokOgreCirles.push_back(go->GetGUID());
break;
case GO_UROK_CHALLENGE:
go_urokChallenge = go->GetGUID();
break;
default:
break;
@@ -303,8 +308,11 @@ public:
case EVENT_UROK_DOOMHOWL:
if (GetBossState(DATA_UROK_DOOMHOWL) == NOT_STARTED)
{
if (GameObject* pile = instance->GetGameObject(go_urok_pile))
SetBossState(DATA_UROK_DOOMHOWL, IN_PROGRESS);
if (GameObject* pile = instance->GetGameObject(go_urokPile))
{
pile->SetLootState(GO_JUST_DEACTIVATED);
}
}
break;
default:
@@ -322,6 +330,39 @@ public:
if (GetBossState(DATA_DRAGONSPIRE_ROOM) != DONE)
Events.ScheduleEvent(EVENT_DARGONSPIRE_ROOM_STORE, 1000);
}
break;
case DATA_UROK_DOOMHOWL:
if (data == FAIL)
{
if (!(GetBossState(DATA_UROK_DOOMHOWL) == NOT_STARTED))
{
SetBossState(DATA_UROK_DOOMHOWL, NOT_STARTED);
if (GameObject* challenge = instance->GetGameObject(go_urokChallenge))
{
challenge->Delete();
}
if (GameObject* pile = instance->GetGameObject(go_urokPile))
{
pile->SetLootState(GO_READY);
pile->Respawn();
}
for (const auto& circleGUID : go_urokOgreCirles)
{
if (GameObject* circle = instance->GetGameObject(circleGUID))
{
circle->Delete();
}
}
for (const auto& mobGUID: UrokMobs)
{
if (Creature* mob = instance->GetCreature(mobGUID))
{
mob->DespawnOrUnsummon();
}
}
}
}
break;
default:
break;
}
@@ -592,7 +633,10 @@ public:
GuidVector runecreaturelist[7];
ObjectGuid go_portcullis_active;
ObjectGuid go_portcullis_tobossrooms;
ObjectGuid go_urok_pile;
ObjectGuid go_urokPile;
ObjectGuid go_urokChallenge;
std::vector<ObjectGuid> go_urokOgreCirles;
std::vector<ObjectGuid> UrokMobs;
};
InstanceScript* GetInstanceScript(InstanceMap* map) const override