From a1c415b22690535b575d1e99d656f648dba9c8b3 Mon Sep 17 00:00:00 2001 From: IntelligentQuantum Date: Tue, 25 Jan 2022 12:51:01 +0330 Subject: [PATCH] feat(Core/Player): allow to queue both RDF & BGs together (#10102) --- src/server/game/DungeonFinding/LFGMgr.cpp | 17 +++++++++++++---- .../game/Handlers/BattleGroundHandler.cpp | 14 ++++++++++---- src/server/game/World/IWorld.h | 1 + src/server/game/World/World.cpp | 2 ++ src/server/worldserver/worldserver.conf.dist | 8 ++++++++ 5 files changed, 34 insertions(+), 8 deletions(-) diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 9eca8f018..0f92d9d8e 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -605,8 +605,11 @@ namespace lfg if (!isRaid && joinData.result == LFG_JOIN_OK) { // Check player or group member restrictions - if (player->InBattleground() || player->InArena() || player->InBattlegroundQueue()) - joinData.result = LFG_JOIN_USING_BG_SYSTEM; + if (!sWorld->getBoolConfig(CONFIG_ALLOW_JOIN_BG_AND_LFG)) + { + if (player->InBattleground() || player->InArena() || player->InBattlegroundQueue()) + joinData.result = LFG_JOIN_USING_BG_SYSTEM; + } else if (player->HasAura(LFG_SPELL_DUNGEON_DESERTER)) joinData.result = LFG_JOIN_DESERTER; else if (dungeons.empty()) @@ -623,9 +626,15 @@ namespace lfg if (Player* plrg = itr->GetSource()) { if (plrg->HasAura(LFG_SPELL_DUNGEON_DESERTER)) + { joinData.result = LFG_JOIN_PARTY_DESERTER; - else if (plrg->InBattleground() || plrg->InArena() || plrg->InBattlegroundQueue()) - joinData.result = LFG_JOIN_USING_BG_SYSTEM; + } + else if (!sWorld->getBoolConfig(CONFIG_ALLOW_JOIN_BG_AND_LFG)) + { + if (plrg->InBattleground() || plrg->InArena() || plrg->InBattlegroundQueue()) + joinData.result = LFG_JOIN_USING_BG_SYSTEM; + } + ++memberCount; players.insert(plrg->GetGUID()); } diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp index 172d86c73..ad2de1ec2 100644 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -154,8 +154,11 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) { if (GetPlayer()->InBattleground()) // currently in battleground err = ERR_BATTLEGROUND_NOT_IN_BATTLEGROUND; - else if (GetPlayer()->isUsingLfg()) // using lfg system - err = ERR_LFG_CANT_USE_BATTLEGROUND; + else if (!sWorld->getBoolConfig(CONFIG_ALLOW_JOIN_BG_AND_LFG)) + { + if (GetPlayer()->isUsingLfg()) // using lfg system + err = ERR_LFG_CANT_USE_BATTLEGROUND; + } else if (!_player->CanJoinToBattleground()) // has deserter debuff err = ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS; else if (_player->InBattlegroundQueueForBattlegroundQueueType(bgQueueTypeIdRandom)) // queued for random bg, so can't queue for anything else @@ -672,8 +675,11 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData) { if (GetPlayer()->InBattleground()) // currently in battleground err = ERR_BATTLEGROUND_NOT_IN_BATTLEGROUND; - else if (GetPlayer()->isUsingLfg()) // using lfg system - err = ERR_LFG_CANT_USE_BATTLEGROUND; + else if (!sWorld->getBoolConfig(CONFIG_ALLOW_JOIN_BG_AND_LFG)) + { + if (GetPlayer()->isUsingLfg()) // using lfg system + err = ERR_LFG_CANT_USE_BATTLEGROUND; + } if (err <= 0) { diff --git a/src/server/game/World/IWorld.h b/src/server/game/World/IWorld.h index c736e1c69..d3971cb50 100644 --- a/src/server/game/World/IWorld.h +++ b/src/server/game/World/IWorld.h @@ -172,6 +172,7 @@ enum WorldBoolConfigs CONFIG_ALLOW_LOGGING_IP_ADDRESSES_IN_DATABASE, CONFIG_REALM_LOGIN_ENABLED, CONFIG_PLAYER_SETTINGS_ENABLED, + CONFIG_ALLOW_JOIN_BG_AND_LFG, BOOL_CONFIG_VALUE_COUNT }; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 0e2a29ba8..bf8c4f433 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1242,6 +1242,8 @@ void World::LoadConfigSettings(bool reload) m_bool_configs[CONFIG_PLAYER_SETTINGS_ENABLED] = sConfigMgr->GetOption("EnablePlayerSettings", 0); + m_bool_configs[CONFIG_ALLOW_JOIN_BG_AND_LFG] = sConfigMgr->GetOption("JoinBGAndLFG.Enable", false); + ///- Read the "Data" directory from the config file std::string dataPath = sConfigMgr->GetOption("DataDir", "./"); if (dataPath.empty() || (dataPath.at(dataPath.length() - 1) != '/' && dataPath.at(dataPath.length() - 1) != '\\')) diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index c44f00ebf..3a199e2c9 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -3622,6 +3622,14 @@ LFG.KickPreventionTimer = 900 EnablePlayerSettings = 0 +# +# JoinBGAndLFG.Enable +# Description: Allow queueing for BG and LFG at the same time. +# Default: 0 - Disabled +# 1 - Enabled + +JoinBGAndLFG.Enable = 0 + # ###################################################################################################