diff --git a/data/sql/updates/pending_db_world/rev_1587562111390803800.sql b/data/sql/updates/pending_db_world/rev_1587562111390803800.sql new file mode 100644 index 000000000..ad9cfa54e --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1587562111390803800.sql @@ -0,0 +1,6 @@ +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1587562111390803800'); + +DELETE FROM `acore_string` WHERE entry IN (30083,30084); +INSERT INTO `acore_string` (`entry`, `content_default`) VALUES +(30083, 'You cannot share quests while in a Battleground.'), +(30084, 'You cannot start a Ready Check while in a Battlground.'); diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index acc5bfeb4..5804534b4 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -20,6 +20,7 @@ #include "Util.h" #include "SpellAuras.h" #include "Vehicle.h" +#include "Language.h" class Aura; @@ -742,6 +743,17 @@ void WorldSession::HandleRaidReadyCheckOpcode(WorldPacket& recvData) return; /********************/ + // Check if Ready Check in BG is enabled + if (sWorld->getBoolConfig(CONFIG_BATTLEGROUND_DISABLE_READY_CHECK_IN_BG)) + { + // Check if player is in BG + if (_player->InBattleground()) + { + _player->GetSession()->SendNotification(LANG_BG_READY_CHECK_ERROR); + return; + } + } + // everything's fine, do it WorldPacket data(MSG_RAID_READY_CHECK, 8); data << GetPlayer()->GetGUID(); diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index 4fb679840..525d5f38f 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -20,6 +20,7 @@ #include "BattlegroundAV.h" #include "ScriptMgr.h" #include "GameObjectAI.h" +#include "Language.h" #ifdef ELUNA #include "LuaEngine.h" #endif @@ -586,6 +587,17 @@ void WorldSession::HandlePushQuestToParty(WorldPacket& recvPacket) continue; } + // Check if Quest Share in BG is enabled + if (sWorld->getBoolConfig(CONFIG_BATTLEGROUND_DISABLE_QUEST_SHARE_IN_BG)) + { + // Check if player is in BG + if (_player->InBattleground()) + { + _player->GetSession()->SendNotification(LANG_BG_SHARE_QUEST_ERROR); + continue; + } + } + if (player->GetDivider() != 0) { _player->SendPushToPartyResponse(player, QUEST_PARTY_MSG_BUSY); diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 2799337bd..95a6ef0cc 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -1317,6 +1317,9 @@ enum AcoreStrings LANG_DEBUG_OPCODE_FILE_MISSING = 30080, LANG_REMOVEITEM_FAILURE = 30081, - LANG_REMOVEITEM_ERROR = 30082 + LANG_REMOVEITEM_ERROR = 30082, + + LANG_BG_SHARE_QUEST_ERROR = 30083, + LANG_BG_READY_CHECK_ERROR = 30084 }; #endif diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 2fccfa04b..5c9662923 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1142,6 +1142,8 @@ void World::LoadConfigSettings(bool reload) m_float_configs[CONFIG_LISTEN_RANGE_TEXTEMOTE] = sConfigMgr->GetFloatDefault("ListenRange.TextEmote", 25.0f); m_float_configs[CONFIG_LISTEN_RANGE_YELL] = sConfigMgr->GetFloatDefault("ListenRange.Yell", 300.0f); + m_bool_configs[CONFIG_BATTLEGROUND_DISABLE_QUEST_SHARE_IN_BG] = sConfigMgr->GetBoolDefault("Battleground.DisableQuestShareInBG", false); + m_bool_configs[CONFIG_BATTLEGROUND_DISABLE_READY_CHECK_IN_BG] = sConfigMgr->GetBoolDefault("Battleground.DisableReadyCheckInBG", false); m_bool_configs[CONFIG_BATTLEGROUND_CAST_DESERTER] = sConfigMgr->GetBoolDefault("Battleground.CastDeserter", true); m_bool_configs[CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE] = sConfigMgr->GetBoolDefault("Battleground.QueueAnnouncer.Enable", false); m_bool_configs[CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY] = sConfigMgr->GetBoolDefault("Battleground.QueueAnnouncer.PlayerOnly", false); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 4d9f5d068..fff15b2e4 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -116,6 +116,8 @@ enum WorldBoolConfigs CONFIG_DEATH_BONES_BG_OR_ARENA, CONFIG_DIE_COMMAND_MODE, CONFIG_DECLINED_NAMES_USED, + CONFIG_BATTLEGROUND_DISABLE_QUEST_SHARE_IN_BG, + CONFIG_BATTLEGROUND_DISABLE_READY_CHECK_IN_BG, CONFIG_BATTLEGROUND_CAST_DESERTER, CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE, CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY, diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 01b222244..bb780ed08 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -2762,6 +2762,22 @@ Battleground.TrackDeserters.Enable = 1 Battleground.InvitationType = 0 +# +# Battleground.DisableQuestShareInBG +# Description: Disables the ability to share quests while in a Battleground. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Battleground.DisableQuestShareInBG = 0 + +# +# Battleground.DisableReadyCheckInBG +# Description: Disables the ability to send a Ready Check survey while in a Battleground. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Battleground.DisableReadyCheckInBG = 0 + # # Battleground.RewardWinnerHonorFirst # Battleground.RewardWinnerArenaFirst