From e2eb9fb82b3050d292a5b2f1ca0b7cec548bf666 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 12 Mar 2023 13:27:39 -0300 Subject: [PATCH] fix(Scripts/BlackMorass): Don't pick the same rift spot in succession (#15359) --- .../instance_the_black_morass.cpp | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp index 4831df6a3..57fa05fde 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp @@ -150,7 +150,7 @@ public: _canSpawnPortal = true; }); - ScheduleNextPortal(2min + 30s); + ScheduleNextPortal(2min + 30s, Position(0.0f, 0.0f, 0.0f, 0.0f)); break; } default: @@ -173,11 +173,11 @@ public: player->SendUpdateWorldState(WORLD_STATE_BM_RIFT, _currentRift); } - void ScheduleNextPortal(Milliseconds time) + void ScheduleNextPortal(Milliseconds time, Position lastPosition) { _scheduler.CancelGroup(CONTEXT_GROUP_RIFTS); - _scheduler.Schedule(time, [this](TaskContext context) + _scheduler.Schedule(time, [this, lastPosition](TaskContext context) { if (GetCreature(DATA_MEDIVH)) { @@ -190,7 +190,18 @@ public: Position spawnPos; if (!_availableRiftPositions.empty()) { - spawnPos = Acore::Containers::SelectRandomContainerElement(_availableRiftPositions); + if (_availableRiftPositions.size() > 1) + { + spawnPos = Acore::Containers::SelectRandomContainerElementIf(_availableRiftPositions, [&](Position pos) -> bool + { + return pos != lastPosition; + }); + } + else + { + spawnPos = Acore::Containers::SelectRandomContainerElement(_availableRiftPositions); + } + _availableRiftPositions.remove(spawnPos); DoUpdateWorldState(WORLD_STATE_BM_RIFT, ++_currentRift); @@ -254,13 +265,13 @@ public: case NPC_TIME_RIFT: if (_currentRift < 18) { - if (!_availableRiftPositions.empty() && _availableRiftPositions.size() < 3) + if (_availableRiftPositions.size() < 3) { - ScheduleNextPortal((_currentRift >= 13 ? 2min : 90s)); + ScheduleNextPortal((_currentRift >= 13 ? 2min : 90s), creature->GetHomePosition()); } else { - ScheduleNextPortal(4s); + ScheduleNextPortal(1s, creature->GetHomePosition()); } } @@ -301,7 +312,7 @@ public: DoUpdateWorldState(WORLD_STATE_BM_SHIELD, _shieldPercent); DoUpdateWorldState(WORLD_STATE_BM_RIFT, _currentRift); - ScheduleNextPortal(3s); + ScheduleNextPortal(3s, Position(0.0f, 0.0f, 0.0f, 0.0f)); for (ObjectGuid const& guid : _encounterNPCs) {