diff options
author | Ovahlord <dreadkiller@gmx.de> | 2024-06-22 19:27:38 +0200 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2024-06-22 19:27:38 +0200 |
commit | 6c5202ee531ca55bc3fcad13662ef77806c9eeee (patch) | |
tree | c1e28e8e773c09246c46bf6c38b994122a7cd6c9 /src | |
parent | b440d589df8a05573e84f25e55b6d7b41b4bc211 (diff) |
Core/LFG: fixed initialization and checks for random dungeons
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/DungeonFinding/LFGMgr.cpp | 49 | ||||
-rw-r--r-- | src/server/game/DungeonFinding/LFGMgr.h | 2 |
2 files changed, 30 insertions, 21 deletions
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index e5f46a234c1..ff2a50d8af5 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -200,7 +200,7 @@ void LFGMgr::LoadLFGDungeons(bool reload /* = false */) if (!dungeon) continue; - if (!sDB2Manager.GetMapDifficultyData(dungeon->MapID, Difficulty(dungeon->DifficultyID))) + if (dungeon->MapID != -1 && !sDB2Manager.GetMapDifficultyData(dungeon->MapID, Difficulty(dungeon->DifficultyID))) continue; switch (dungeon->TypeID) @@ -842,8 +842,11 @@ void LFGMgr::GetCompatibleDungeons(LfgDungeonSet* dungeons, GuidSet const& playe { LFGDungeonData const* dungeon = GetLFGDungeon(dungeonId); ASSERT(dungeon); + if (dungeon->map == -1) + continue; + ASSERT(player); - MapDb2Entries entries{ dungeon->map, Difficulty(dungeon->difficulty) }; + MapDb2Entries entries{ static_cast<uint32>(dungeon->map), Difficulty(dungeon->difficulty) }; if (InstanceLock* playerBind = sInstanceLockMgr.FindActiveInstanceLock(guid, entries)) { uint32 dungeonInstanceId = playerBind->GetInstanceId(); @@ -1755,12 +1758,15 @@ LfgLockMap LFGMgr::GetLockedDungeons(ObjectGuid guid) return LFG_LOCKSTATUS_RAID_LOCKED; if (dungeon->expansion > expansion) return LFG_LOCKSTATUS_INSUFFICIENT_EXPANSION; - if (DisableMgr::IsDisabledFor(DISABLE_TYPE_MAP, dungeon->map, player)) - return LFG_LOCKSTATUS_NOT_IN_SEASON; - if (DisableMgr::IsDisabledFor(DISABLE_TYPE_LFG_MAP, dungeon->map, player)) - return LFG_LOCKSTATUS_RAID_LOCKED; - if (sInstanceLockMgr.FindActiveInstanceLock(guid, { dungeon->map, Difficulty(dungeon->difficulty) })) - return LFG_LOCKSTATUS_RAID_LOCKED; + if (dungeon->map != -1) + { + if (DisableMgr::IsDisabledFor(DISABLE_TYPE_MAP, dungeon->map, player)) + return LFG_LOCKSTATUS_NOT_IN_SEASON; + if (DisableMgr::IsDisabledFor(DISABLE_TYPE_LFG_MAP, dungeon->map, player)) + return LFG_LOCKSTATUS_RAID_LOCKED; + if (sInstanceLockMgr.FindActiveInstanceLock(guid, { static_cast<uint32>(dungeon->map), Difficulty(dungeon->difficulty) })) + return LFG_LOCKSTATUS_RAID_LOCKED; + } if (dungeon->minLevel > level) return LFG_LOCKSTATUS_TOO_LOW_LEVEL; if (dungeon->maxLevel < level) @@ -1769,22 +1775,25 @@ LfgLockMap LFGMgr::GetLockedDungeons(ObjectGuid guid) return LFG_LOCKSTATUS_NOT_IN_SEASON; if (dungeon->requiredItemLevel > player->GetAverageItemLevel()) return LFG_LOCKSTATUS_TOO_LOW_GEAR_SCORE; - if (AccessRequirement const* ar = sObjectMgr->GetAccessRequirement(dungeon->map, Difficulty(dungeon->difficulty))) + if (dungeon->map != -1) { - if (ar->achievement && !player->HasAchieved(ar->achievement)) - return LFG_LOCKSTATUS_MISSING_ACHIEVEMENT; - if (player->GetTeam() == ALLIANCE && ar->quest_A && !player->GetQuestRewardStatus(ar->quest_A)) - return LFG_LOCKSTATUS_QUEST_NOT_COMPLETED; - if (player->GetTeam() == HORDE && ar->quest_H && !player->GetQuestRewardStatus(ar->quest_H)) - return LFG_LOCKSTATUS_QUEST_NOT_COMPLETED; - - if (ar->item) + if (AccessRequirement const* ar = sObjectMgr->GetAccessRequirement(dungeon->map, Difficulty(dungeon->difficulty))) { - if (!player->HasItemCount(ar->item) && (!ar->item2 || !player->HasItemCount(ar->item2))) + if (ar->achievement && !player->HasAchieved(ar->achievement)) + return LFG_LOCKSTATUS_MISSING_ACHIEVEMENT; + if (player->GetTeam() == ALLIANCE && ar->quest_A && !player->GetQuestRewardStatus(ar->quest_A)) + return LFG_LOCKSTATUS_QUEST_NOT_COMPLETED; + if (player->GetTeam() == HORDE && ar->quest_H && !player->GetQuestRewardStatus(ar->quest_H)) + return LFG_LOCKSTATUS_QUEST_NOT_COMPLETED; + + if (ar->item) + { + if (!player->HasItemCount(ar->item) && (!ar->item2 || !player->HasItemCount(ar->item2))) + return LFG_LOCKSTATUS_MISSING_ITEM; + } + else if (ar->item2 && !player->HasItemCount(ar->item2)) return LFG_LOCKSTATUS_MISSING_ITEM; } - else if (ar->item2 && !player->HasItemCount(ar->item2)) - return LFG_LOCKSTATUS_MISSING_ITEM; } /* @todo VoA closed if WG is not under team control (LFG_LOCKSTATUS_RAID_LOCKED) diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h index b9650e8c80f..e196ae41f74 100644 --- a/src/server/game/DungeonFinding/LFGMgr.h +++ b/src/server/game/DungeonFinding/LFGMgr.h @@ -298,7 +298,7 @@ struct LFGDungeonData uint32 id; std::string name; - uint32 map; + int16 map; uint8 type; uint8 expansion; uint8 group; |