From 0eec867c3b2511e6dc8e747ee1608f3c64248d0c Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sat, 9 Oct 2021 19:57:23 +0200 Subject: [PATCH] feat(Core/LFG): Implemented LFG_OPTION_ENABLE_SEASONAL_BOSSES. (#8219) Closes #8098 --- src/server/game/DungeonFinding/LFGMgr.cpp | 6 ++++-- src/server/game/DungeonFinding/LFGMgr.h | 5 +++-- src/server/game/DungeonFinding/LFGScripts.cpp | 16 ++++++++-------- src/server/game/Handlers/LFGHandler.cpp | 2 +- src/server/game/World/World.cpp | 2 +- src/server/worldserver/worldserver.conf.dist | 10 ++++++---- 6 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index b62dde189..cd6929326 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -272,7 +272,7 @@ namespace lfg void LFGMgr::Update(uint32 tdiff, uint8 task) { - if (!isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) + if (!isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER | LFG_OPTION_ENABLE_SEASONAL_BOSSES)) return; if (task == 0) @@ -394,6 +394,8 @@ namespace lfg LfgDungeonSet const& dungeons = GetDungeonsByRandom(0); LfgLockMap lock; + bool onlySeasonalBosses = m_options == LFG_OPTION_ENABLE_SEASONAL_BOSSES; + float avgItemLevel = player->GetAverageItemLevelForDF(); for (LfgDungeonSet::const_iterator it = dungeons.begin(); it != dungeons.end(); ++it) @@ -405,7 +407,7 @@ namespace lfg DungeonProgressionRequirements const* ar = sObjectMgr->GetAccessRequirement(dungeon->map, Difficulty(dungeon->difficulty)); uint32 lockData = 0; - if (dungeon->expansion > expansion) + if (dungeon->expansion > expansion || (onlySeasonalBosses && !dungeon->seasonal)) lockData = LFG_LOCKSTATUS_INSUFFICIENT_EXPANSION; else if (DisableMgr::IsDisabledFor(DISABLE_TYPE_MAP, dungeon->map, player)) lockData = LFG_LOCKSTATUS_RAID_LOCKED; diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h index 82981c746..53244d43e 100644 --- a/src/server/game/DungeonFinding/LFGMgr.h +++ b/src/server/game/DungeonFinding/LFGMgr.h @@ -36,8 +36,9 @@ namespace lfg enum LfgOptions { - LFG_OPTION_ENABLE_DUNGEON_FINDER = 0x01, - LFG_OPTION_ENABLE_RAID_BROWSER = 0x02, + LFG_OPTION_ENABLE_DUNGEON_FINDER = 0x01, + LFG_OPTION_ENABLE_RAID_BROWSER = 0x02, + LFG_OPTION_ENABLE_SEASONAL_BOSSES = 0x04 }; enum LFGMgrEnum diff --git a/src/server/game/DungeonFinding/LFGScripts.cpp b/src/server/game/DungeonFinding/LFGScripts.cpp index 1d49f400a..e6a46362d 100644 --- a/src/server/game/DungeonFinding/LFGScripts.cpp +++ b/src/server/game/DungeonFinding/LFGScripts.cpp @@ -36,7 +36,7 @@ namespace lfg void LFGPlayerScript::OnLevelChanged(Player* player, uint8 /*oldLevel*/) { - if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) + if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER | LFG_OPTION_ENABLE_SEASONAL_BOSSES)) return; sLFGMgr->InitializeLockedDungeons(player); @@ -44,7 +44,7 @@ namespace lfg void LFGPlayerScript::OnLogout(Player* player) { - if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) + if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER | LFG_OPTION_ENABLE_SEASONAL_BOSSES)) return; if (!player->GetGroup() || !player->GetGroup()->isLFGGroup()) @@ -64,7 +64,7 @@ namespace lfg void LFGPlayerScript::OnLogin(Player* player) { - if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) + if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER | LFG_OPTION_ENABLE_SEASONAL_BOSSES)) return; // Temporal: Trying to determine when group data and LFG data gets desynched @@ -138,7 +138,7 @@ namespace lfg void LFGGroupScript::OnAddMember(Group* group, ObjectGuid guid) { - if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) + if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER | LFG_OPTION_ENABLE_SEASONAL_BOSSES)) return; ObjectGuid gguid = group->GetGUID(); @@ -183,7 +183,7 @@ namespace lfg (void)kicker; (void)reason; - if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) + if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER | LFG_OPTION_ENABLE_SEASONAL_BOSSES)) return; ObjectGuid gguid = group->GetGUID(); @@ -249,7 +249,7 @@ namespace lfg void LFGGroupScript::OnDisband(Group* group) { - if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) + if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER | LFG_OPTION_ENABLE_SEASONAL_BOSSES)) return; ObjectGuid gguid = group->GetGUID(); @@ -264,7 +264,7 @@ namespace lfg void LFGGroupScript::OnChangeLeader(Group* group, ObjectGuid newLeaderGuid, ObjectGuid oldLeaderGuid) { - if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) + if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER | LFG_OPTION_ENABLE_SEASONAL_BOSSES)) return; ObjectGuid gguid = group->GetGUID(); @@ -283,7 +283,7 @@ namespace lfg // used only with EXTRA_LOGS (void)guid; - if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) + if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER | LFG_OPTION_ENABLE_SEASONAL_BOSSES)) return; ObjectGuid gguid = group->GetGUID(); diff --git a/src/server/game/Handlers/LFGHandler.cpp b/src/server/game/Handlers/LFGHandler.cpp index 709300416..9ba38e02f 100644 --- a/src/server/game/Handlers/LFGHandler.cpp +++ b/src/server/game/Handlers/LFGHandler.cpp @@ -45,7 +45,7 @@ void BuildPartyLockDungeonBlock(WorldPacket& data, const lfg::LfgLockPartyMap& l void WorldSession::HandleLfgJoinOpcode(WorldPacket& recvData) { - if (!sLFGMgr->isOptionEnabled(lfg::LFG_OPTION_ENABLE_DUNGEON_FINDER | lfg::LFG_OPTION_ENABLE_RAID_BROWSER)) + if (!sLFGMgr->isOptionEnabled(lfg::LFG_OPTION_ENABLE_DUNGEON_FINDER | lfg::LFG_OPTION_ENABLE_RAID_BROWSER | lfg::LFG_OPTION_ENABLE_SEASONAL_BOSSES)) { recvData.rfinish(); return; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 001ccf346..484e3a385 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1320,7 +1320,7 @@ void World::LoadConfigSettings(bool reload) m_int_configs[CONFIG_WARDEN_CLIENT_RESPONSE_DELAY] = sConfigMgr->GetOption("Warden.ClientResponseDelay", 600); // Dungeon finder - m_int_configs[CONFIG_LFG_OPTIONSMASK] = sConfigMgr->GetOption("DungeonFinder.OptionsMask", 3); + m_int_configs[CONFIG_LFG_OPTIONSMASK] = sConfigMgr->GetOption("DungeonFinder.OptionsMask", 5); // Max instances per hour m_int_configs[CONFIG_MAX_INSTANCES_PER_HOUR] = sConfigMgr->GetOption("AccountInstancesPerHour", 5); diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 1458d239c..660403421 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -1246,11 +1246,13 @@ DeletedCharacterTicketTrace = 0 # DungeonFinder.OptionsMask # Description: Dungeon and raid finder system. # Value is a bitmask consisting of: -# LFG_OPTION_ENABLE_DUNGEON_FINDER = 1, Enable the dungeon finder browser -# LFG_OPTION_ENABLE_RAID_BROWSER = 2, Enable the raid browser -# Default: 1 +# LFG_OPTION_ENABLE_DUNGEON_FINDER = 1, Enable the dungeon finder browser +# LFG_OPTION_ENABLE_RAID_BROWSER = 2, Enable the raid browser +# LFG_OPTION_ENABLE_SEASONAL_BOSSES = 4, Enable seasonal bosses -DungeonFinder.OptionsMask = 1 +# Default: 5 + +DungeonFinder.OptionsMask = 5 # # AccountInstancesPerHour