fix(Core/Dungeon) BRD - The seven minibosses re-order (#1792)

* Boss re-order

1st attacker is Anger'rel ID 9035
2nd attacker is Seeth'rel ID 9038
3rd Attacker is Dope'rel ID 9040
4th Attacker is Gloom'rel ID 9037
5th attacker is Vile'rel ID 9036
6th attacker is Hate'rel ID 9034
7th attacker is Doom'rel after his death spawnt the chest and the doors go back to ID 9039

* Domrel eventmap

swapped timers to events

* Update boss_tomb_of_seven.cpp

* Update boss_tomb_of_seven.cpp

* Update boss_tomb_of_seven.cpp

* Update boss_tomb_of_seven.cpp

* Update boss_tomb_of_seven.cpp

* Doomrel ain't the first boss

* Don't ignore first boss

* Gossip option

* Gossip done
This commit is contained in:
Pondaveia
2019-05-10 01:30:05 +01:00
committed by Poszer
parent 2a7c7b96aa
commit 609c410605
2 changed files with 59 additions and 54 deletions
@@ -81,6 +81,14 @@ enum DoomrelSpells
SPELL_DEMONARMOR = 13787, SPELL_DEMONARMOR = 13787,
SPELL_SUMMON_VOIDWALKERS = 15092 SPELL_SUMMON_VOIDWALKERS = 15092
}; };
enum DoomrelEvents
{
EVENT_SPELL_SHADOWBOLTVOLLEY = 1,
EVENT_SPELL_IMMOLATE = 2,
EVENT_SPELL_CURSEOFWEAKNESS = 3,
EVENT_SPELL_DEMONARMOR = 4,
EVENT_SPELL_SUMMON_VOIDWALKERS = 5,
};
class boss_doomrel : public CreatureScript class boss_doomrel : public CreatureScript
{ {
@@ -98,10 +106,8 @@ public:
break; break;
case GOSSIP_ACTION_INFO_DEF+2: case GOSSIP_ACTION_INFO_DEF+2:
CloseGossipMenuFor(player); CloseGossipMenuFor(player);
//start event here creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
creature->setFaction(FACTION_HOSTILE); // Start encounter
creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
creature->AI()->AttackStart(player);
InstanceScript* instance = creature->GetInstanceScript(); InstanceScript* instance = creature->GetInstanceScript();
if (instance) if (instance)
instance->SetData64(DATA_EVENSTARTER, player->GetGUID()); instance->SetData64(DATA_EVENSTARTER, player->GetGUID());
@@ -131,19 +137,14 @@ public:
} }
InstanceScript* instance; InstanceScript* instance;
uint32 ShadowVolley_Timer; EventMap _events;
uint32 Immolate_Timer;
uint32 CurseOfWeakness_Timer;
uint32 DemonArmor_Timer;
bool Voidwalkers; bool Voidwalkers;
void Reset() override void Reset() override
{ {
ShadowVolley_Timer = 10000;
Immolate_Timer = 18000;
CurseOfWeakness_Timer = 5000;
DemonArmor_Timer = 16000;
Voidwalkers = false; Voidwalkers = false;
// Reset his gossip menu
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_NPC_FLAG_GOSSIP);
me->setFaction(FACTION_FRIEND); me->setFaction(FACTION_FRIEND);
@@ -158,6 +159,11 @@ public:
void EnterCombat(Unit* /*who*/) override void EnterCombat(Unit* /*who*/) override
{ {
_events.ScheduleEvent(EVENT_SPELL_SHADOWBOLTVOLLEY, 10000);
_events.ScheduleEvent(EVENT_SPELL_IMMOLATE, 18000);
_events.ScheduleEvent(EVENT_SPELL_CURSEOFWEAKNESS, 5000);
_events.ScheduleEvent(EVENT_SPELL_DEMONARMOR, 16000);
_events.ScheduleEvent(EVENT_SPELL_SUMMON_VOIDWALKERS, 1000);
} }
void EnterEvadeMode() override void EnterEvadeMode() override
@@ -182,41 +188,40 @@ public:
if (!UpdateVictim()) if (!UpdateVictim())
return; return;
//ShadowVolley_Timer _events.Update(diff);
if (ShadowVolley_Timer <= diff)
switch(_events.ExecuteEvent())
{ {
DoCastVictim(SPELL_SHADOWBOLTVOLLEY); case EVENT_SPELL_SHADOWBOLTVOLLEY:
ShadowVolley_Timer = 12000; DoCastVictim(SPELL_SHADOWBOLTVOLLEY);
} else ShadowVolley_Timer -= diff; _events.ScheduleEvent(EVENT_SPELL_SHADOWBOLTVOLLEY, 12000);
break;
//Immolate_Timer case EVENT_SPELL_IMMOLATE:
if (Immolate_Timer <= diff) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
{ {
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCast(target, SPELL_IMMOLATE);
DoCast(target, SPELL_IMMOLATE); _events.ScheduleEvent(EVENT_SPELL_IMMOLATE, 25000);
}
Immolate_Timer = 25000; // Didn't get a target, try again in 1s
} else Immolate_Timer -= diff; _events.ScheduleEvent(EVENT_SPELL_IMMOLATE, 1000);
break;
//CurseOfWeakness_Timer case EVENT_SPELL_CURSEOFWEAKNESS:
if (CurseOfWeakness_Timer <= diff) DoCastVictim(SPELL_CURSEOFWEAKNESS);
{ _events.ScheduleEvent(EVENT_SPELL_CURSEOFWEAKNESS, 45000);
DoCastVictim(SPELL_CURSEOFWEAKNESS); break;
CurseOfWeakness_Timer = 45000; case EVENT_SPELL_DEMONARMOR:
} else CurseOfWeakness_Timer -= diff; DoCast(me, SPELL_DEMONARMOR);
_events.ScheduleEvent(EVENT_SPELL_DEMONARMOR, 300000);
//DemonArmor_Timer break;
if (DemonArmor_Timer <= diff) case EVENT_SPELL_SUMMON_VOIDWALKERS:
{ if (!Voidwalkers && HealthBelowPct(51))
DoCast(me, SPELL_DEMONARMOR); {
DemonArmor_Timer = 300000; DoCastVictim(SPELL_SUMMON_VOIDWALKERS, true);
} else DemonArmor_Timer -= diff; Voidwalkers = true;
}
//Summon Voidwalkers // Not ready yet, try again in 1s
if (!Voidwalkers && HealthBelowPct(51)) _events.ScheduleEvent(EVENT_SPELL_SUMMON_VOIDWALKERS, 1000);
{ break;
DoCastVictim(SPELL_SUMMON_VOIDWALKERS, true);
Voidwalkers = true;
} }
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
@@ -155,13 +155,13 @@ public:
case NPC_EMPEROR: EmperorGUID = creature->GetGUID(); break; case NPC_EMPEROR: EmperorGUID = creature->GetGUID(); break;
case NPC_PHALANX: PhalanxGUID = creature->GetGUID(); break; case NPC_PHALANX: PhalanxGUID = creature->GetGUID(); break;
case NPC_MOIRA: MoiraGUID = creature->GetGUID(); break; case NPC_MOIRA: MoiraGUID = creature->GetGUID(); break;
case NPC_DOOMREL: TombBossGUIDs[0] = creature->GetGUID(); break; case NPC_ANGERREL: TombBossGUIDs[0] = creature->GetGUID(); break;
case NPC_DOPEREL: TombBossGUIDs[1] = creature->GetGUID(); break; case NPC_SEETHREL: TombBossGUIDs[1] = creature->GetGUID(); break;
case NPC_HATEREL: TombBossGUIDs[2] = creature->GetGUID(); break; case NPC_DOPEREL: TombBossGUIDs[2] = creature->GetGUID(); break;
case NPC_VILEREL: TombBossGUIDs[3] = creature->GetGUID(); break; case NPC_GLOOMREL: TombBossGUIDs[3] = creature->GetGUID(); break;
case NPC_SEETHREL: TombBossGUIDs[4] = creature->GetGUID(); break; case NPC_VILEREL: TombBossGUIDs[4] = creature->GetGUID(); break;
case NPC_GLOOMREL: TombBossGUIDs[5] = creature->GetGUID(); break; case NPC_HATEREL: TombBossGUIDs[5] = creature->GetGUID(); break;
case NPC_ANGERREL: TombBossGUIDs[6] = creature->GetGUID(); break; case NPC_DOOMREL: TombBossGUIDs[6] = creature->GetGUID(); break;
case NPC_MAGMUS: case NPC_MAGMUS:
MagmusGUID = creature->GetGUID(); MagmusGUID = creature->GetGUID();
if (!creature->IsAlive()) if (!creature->IsAlive())
@@ -441,8 +441,8 @@ public:
if (TombTimer <= diff) if (TombTimer <= diff)
{ {
TombTimer = TIMER_TOMBOFTHESEVEN; TombTimer = TIMER_TOMBOFTHESEVEN;
++TombEventCounter;
TombOfSevenEvent(); TombOfSevenEvent();
++TombEventCounter;
// Check Killed bosses // Check Killed bosses
for (uint8 i = 0; i < 7; ++i) for (uint8 i = 0; i < 7; ++i)
{ {