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

View File

@@ -81,6 +81,14 @@ enum DoomrelSpells
SPELL_DEMONARMOR = 13787,
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
{
@@ -98,10 +106,8 @@ public:
break;
case GOSSIP_ACTION_INFO_DEF+2:
CloseGossipMenuFor(player);
//start event here
creature->setFaction(FACTION_HOSTILE);
creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
creature->AI()->AttackStart(player);
creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
// Start encounter
InstanceScript* instance = creature->GetInstanceScript();
if (instance)
instance->SetData64(DATA_EVENSTARTER, player->GetGUID());
@@ -131,19 +137,14 @@ public:
}
InstanceScript* instance;
uint32 ShadowVolley_Timer;
uint32 Immolate_Timer;
uint32 CurseOfWeakness_Timer;
uint32 DemonArmor_Timer;
EventMap _events;
bool Voidwalkers;
void Reset() override
{
ShadowVolley_Timer = 10000;
Immolate_Timer = 18000;
CurseOfWeakness_Timer = 5000;
DemonArmor_Timer = 16000;
Voidwalkers = false;
// Reset his gossip menu
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_NPC_FLAG_GOSSIP);
me->setFaction(FACTION_FRIEND);
@@ -158,6 +159,11 @@ public:
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
@@ -182,41 +188,40 @@ public:
if (!UpdateVictim())
return;
//ShadowVolley_Timer
if (ShadowVolley_Timer <= diff)
_events.Update(diff);
switch(_events.ExecuteEvent())
{
DoCastVictim(SPELL_SHADOWBOLTVOLLEY);
ShadowVolley_Timer = 12000;
} else ShadowVolley_Timer -= diff;
//Immolate_Timer
if (Immolate_Timer <= diff)
{
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(target, SPELL_IMMOLATE);
Immolate_Timer = 25000;
} else Immolate_Timer -= diff;
//CurseOfWeakness_Timer
if (CurseOfWeakness_Timer <= diff)
{
DoCastVictim(SPELL_CURSEOFWEAKNESS);
CurseOfWeakness_Timer = 45000;
} else CurseOfWeakness_Timer -= diff;
//DemonArmor_Timer
if (DemonArmor_Timer <= diff)
{
DoCast(me, SPELL_DEMONARMOR);
DemonArmor_Timer = 300000;
} else DemonArmor_Timer -= diff;
//Summon Voidwalkers
if (!Voidwalkers && HealthBelowPct(51))
{
DoCastVictim(SPELL_SUMMON_VOIDWALKERS, true);
Voidwalkers = true;
case EVENT_SPELL_SHADOWBOLTVOLLEY:
DoCastVictim(SPELL_SHADOWBOLTVOLLEY);
_events.ScheduleEvent(EVENT_SPELL_SHADOWBOLTVOLLEY, 12000);
break;
case EVENT_SPELL_IMMOLATE:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
{
DoCast(target, SPELL_IMMOLATE);
_events.ScheduleEvent(EVENT_SPELL_IMMOLATE, 25000);
}
// Didn't get a target, try again in 1s
_events.ScheduleEvent(EVENT_SPELL_IMMOLATE, 1000);
break;
case EVENT_SPELL_CURSEOFWEAKNESS:
DoCastVictim(SPELL_CURSEOFWEAKNESS);
_events.ScheduleEvent(EVENT_SPELL_CURSEOFWEAKNESS, 45000);
break;
case EVENT_SPELL_DEMONARMOR:
DoCast(me, SPELL_DEMONARMOR);
_events.ScheduleEvent(EVENT_SPELL_DEMONARMOR, 300000);
break;
case EVENT_SPELL_SUMMON_VOIDWALKERS:
if (!Voidwalkers && HealthBelowPct(51))
{
DoCastVictim(SPELL_SUMMON_VOIDWALKERS, true);
Voidwalkers = true;
}
// Not ready yet, try again in 1s
_events.ScheduleEvent(EVENT_SPELL_SUMMON_VOIDWALKERS, 1000);
break;
}
DoMeleeAttackIfReady();

View File

@@ -155,13 +155,13 @@ public:
case NPC_EMPEROR: EmperorGUID = creature->GetGUID(); break;
case NPC_PHALANX: PhalanxGUID = creature->GetGUID(); break;
case NPC_MOIRA: MoiraGUID = creature->GetGUID(); break;
case NPC_DOOMREL: TombBossGUIDs[0] = creature->GetGUID(); break;
case NPC_DOPEREL: TombBossGUIDs[1] = creature->GetGUID(); break;
case NPC_HATEREL: TombBossGUIDs[2] = creature->GetGUID(); break;
case NPC_VILEREL: TombBossGUIDs[3] = creature->GetGUID(); break;
case NPC_SEETHREL: TombBossGUIDs[4] = creature->GetGUID(); break;
case NPC_GLOOMREL: TombBossGUIDs[5] = creature->GetGUID(); break;
case NPC_ANGERREL: TombBossGUIDs[6] = creature->GetGUID(); break;
case NPC_ANGERREL: TombBossGUIDs[0] = creature->GetGUID(); break;
case NPC_SEETHREL: TombBossGUIDs[1] = creature->GetGUID(); break;
case NPC_DOPEREL: TombBossGUIDs[2] = creature->GetGUID(); break;
case NPC_GLOOMREL: TombBossGUIDs[3] = creature->GetGUID(); break;
case NPC_VILEREL: TombBossGUIDs[4] = creature->GetGUID(); break;
case NPC_HATEREL: TombBossGUIDs[5] = creature->GetGUID(); break;
case NPC_DOOMREL: TombBossGUIDs[6] = creature->GetGUID(); break;
case NPC_MAGMUS:
MagmusGUID = creature->GetGUID();
if (!creature->IsAlive())
@@ -441,8 +441,8 @@ public:
if (TombTimer <= diff)
{
TombTimer = TIMER_TOMBOFTHESEVEN;
++TombEventCounter;
TombOfSevenEvent();
++TombEventCounter;
// Check Killed bosses
for (uint8 i = 0; i < 7; ++i)
{