fix(Scripts/BlackMorass): Fixed mob waves sequence. (#14863)

This commit is contained in:
UltraNix
2023-03-11 11:46:22 +01:00
committed by GitHub
parent 5f2752a40f
commit c1c877060c
4 changed files with 188 additions and 5 deletions

View File

@@ -207,10 +207,14 @@ public:
case NPC_RIFT_LORD:
case NPC_RIFT_LORD_2:
case NPC_INFINITE_ASSASIN:
case NPC_INFINITE_ASSASIN_2:
case NPC_INFINITE_WHELP:
case NPC_INFINITE_CRONOMANCER:
case NPC_INFINITE_CHRONOMANCER:
case NPC_INFINITE_CHRONOMANCER_2:
case NPC_INFINITE_EXECUTIONER:
case NPC_INFINITE_EXECUTIONER_2:
case NPC_INFINITE_VANQUISHER:
case NPC_INFINITE_VANQUISHER_2:
case NPC_DP_BEAM_STALKER:
_encounterNPCs.insert(creature->GetGUID());
break;
@@ -248,10 +252,14 @@ public:
case NPC_RIFT_LORD:
case NPC_RIFT_LORD_2:
case NPC_INFINITE_ASSASIN:
case NPC_INFINITE_ASSASIN_2:
case NPC_INFINITE_WHELP:
case NPC_INFINITE_CRONOMANCER:
case NPC_INFINITE_CHRONOMANCER:
case NPC_INFINITE_CHRONOMANCER_2:
case NPC_INFINITE_EXECUTIONER:
case NPC_INFINITE_EXECUTIONER_2:
case NPC_INFINITE_VANQUISHER:
case NPC_INFINITE_VANQUISHER_2:
_encounterNPCs.erase(creature->GetGUID());
break;
}

View File

@@ -43,6 +43,10 @@ enum medivhMisc
EVENT_OUTRO_8 = 17
};
static std::vector<uint32> firstWave = { NPC_INFINITE_ASSASIN, NPC_INFINITE_WHELP, NPC_INFINITE_CHRONOMANCER };
static std::vector<uint32> secondWave = { NPC_INFINITE_EXECUTIONER, NPC_INFINITE_CHRONOMANCER, NPC_INFINITE_WHELP, NPC_INFINITE_ASSASIN };
static std::vector<uint32> thirdWave = { NPC_INFINITE_EXECUTIONER, NPC_INFINITE_VANQUISHER, NPC_INFINITE_CHRONOMANCER, NPC_INFINITE_ASSASIN };
class NpcRunToHome : public BasicEvent
{
public:
@@ -258,12 +262,27 @@ struct npc_time_rift : public NullCreatureAI
void Reset() override
{
if (_instance->GetData(DATA_RIFT_NUMBER) > 18)
uint32 riftNumer = _instance->GetData(DATA_RIFT_NUMBER);
if (riftNumer >= 18)
{
me->DespawnOrUnsummon(30000);
return;
}
if (riftNumer < 6)
{
waveMobs = firstWave;
}
else if (riftNumer < 12)
{
waveMobs = secondWave;
}
else
{
waveMobs = thirdWave;
}
waveMobIndex = 0;
events.ScheduleEvent(EVENT_SUMMON_AT_RIFT, 16s);
events.ScheduleEvent(EVENT_SUMMON_BOSS, 6s);
}
@@ -294,7 +313,7 @@ struct npc_time_rift : public NullCreatureAI
void DoSelectSummon()
{
uint32 entry = RAND(NPC_INFINITE_ASSASIN, NPC_INFINITE_WHELP, NPC_INFINITE_CRONOMANCER, NPC_INFINITE_EXECUTIONER, NPC_INFINITE_VANQUISHER);
uint32 entry = waveMobs[waveMobIndex];
if (entry == NPC_INFINITE_WHELP)
{
DoSummonAtRift(entry);
@@ -303,8 +322,34 @@ struct npc_time_rift : public NullCreatureAI
}
else
{
if (urand(0, 1))
{
switch (entry)
{
case NPC_INFINITE_ASSASIN:
entry = NPC_INFINITE_ASSASIN_2;
break;
case NPC_INFINITE_CHRONOMANCER:
entry = NPC_INFINITE_CHRONOMANCER_2;
break;
case NPC_INFINITE_EXECUTIONER:
entry = NPC_INFINITE_EXECUTIONER_2;
break;
case NPC_INFINITE_VANQUISHER:
entry = NPC_INFINITE_VANQUISHER_2;
break;
default:
break;
}
}
DoSummonAtRift(entry);
}
if (++waveMobIndex >= waveMobs.size())
{
waveMobIndex = 0;
}
}
void SummonedCreatureDies(Creature* creature, Unit* /*killer*/) override
@@ -368,6 +413,8 @@ private:
EventMap _events;
InstanceScript* _instance;
ObjectGuid _riftKeeperGUID;
std::vector<uint32> waveMobs;
uint8 waveMobIndex;
};
struct npc_black_morass_summoned_add : public SmartAI

View File

@@ -77,10 +77,15 @@ enum CreatureIds
NPC_INFINITE_ASSASIN = 17835,
NPC_INFINITE_WHELP = 21818,
NPC_INFINITE_CRONOMANCER = 17892,
NPC_INFINITE_CHRONOMANCER = 17892,
NPC_INFINITE_EXECUTIONER = 18994,
NPC_INFINITE_VANQUISHER = 18995,
NPC_INFINITE_ASSASIN_2 = 21137,
NPC_INFINITE_CHRONOMANCER_2 = 21136,
NPC_INFINITE_EXECUTIONER_2 = 21138,
NPC_INFINITE_VANQUISHER_2 = 21139,
NPC_DP_EMITTER_STALKER = 18582,
NPC_DP_CRYSTAL_STALKER = 18553,
NPC_DP_BEAM_STALKER = 18555