From f6bbbcc67f18ac9fc89f03f1d702d9dd292a4a9a Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 24 May 2026 09:34:08 -0300 Subject: [PATCH] feat(Core/Wintergrasp): toggle for VoA pre-battle kick (#25942) Co-authored-by: Claude Opus 4.7 (1M context) --- src/server/apps/worldserver/worldserver.conf.dist | 13 +++++++++++++ src/server/game/World/WorldConfig.cpp | 1 + src/server/game/World/WorldConfig.h | 1 + .../VaultOfArchavon/instance_vault_of_archavon.cpp | 6 ++++++ 4 files changed, 21 insertions(+) diff --git a/src/server/apps/worldserver/worldserver.conf.dist b/src/server/apps/worldserver/worldserver.conf.dist index 5ee8464a03..38225d5422 100644 --- a/src/server/apps/worldserver/worldserver.conf.dist +++ b/src/server/apps/worldserver/worldserver.conf.dist @@ -3675,6 +3675,19 @@ Wintergrasp.CrashRestartTimer = 10 Wintergrasp.SkipBattleSessionCount = 3500 +# +# Wintergrasp.KickVoAPlayers +# Description: Kick players from Vault of Archavon and freeze its bosses +# in the minutes leading up to a Wintergrasp battle, and +# block new entries during wartime / the 10-minute warmup. +# Requires a server restart to take effect (not reloadable). +# Default: 1 - (Enabled, players are warned then teleported to their +# homebind before the battle starts) +# 0 - (Disabled, players stay inside and bosses behave +# normally during Wintergrasp) + +Wintergrasp.KickVoAPlayers = 1 + # ################################################################################################### diff --git a/src/server/game/World/WorldConfig.cpp b/src/server/game/World/WorldConfig.cpp index f1d872c0a5..79050376b1 100644 --- a/src/server/game/World/WorldConfig.cpp +++ b/src/server/game/World/WorldConfig.cpp @@ -595,6 +595,7 @@ void WorldConfig::BuildConfigCache() SetConfigValue(CONFIG_WINTERGRASP_RESTART_AFTER_CRASH, "Wintergrasp.CrashRestartTimer", 10); SetConfigValue(CONFIG_WINTERGRASP_SKIP_BATTLE_SESSION_COUNT, "Wintergrasp.SkipBattleSessionCount", 3500); + SetConfigValue(CONFIG_WINTERGRASP_KICK_VOA_PLAYERS, "Wintergrasp.KickVoAPlayers", true, ConfigValueCache::Reloadable::No); SetConfigValue(CONFIG_BIRTHDAY_TIME, "BirthdayTime", 1222964635); SetConfigValue(CONFIG_MINIGOB_MANABONK, "Minigob.Manabonk.Enable", true); diff --git a/src/server/game/World/WorldConfig.h b/src/server/game/World/WorldConfig.h index a4b70c61b1..6cd12048e3 100644 --- a/src/server/game/World/WorldConfig.h +++ b/src/server/game/World/WorldConfig.h @@ -326,6 +326,7 @@ enum ServerConfigs CONFIG_WINTERGRASP_NOBATTLETIME, CONFIG_WINTERGRASP_RESTART_AFTER_CRASH, CONFIG_WINTERGRASP_SKIP_BATTLE_SESSION_COUNT, + CONFIG_WINTERGRASP_KICK_VOA_PLAYERS, CONFIG_PACKET_SPOOF_BANMODE, CONFIG_PACKET_SPOOF_BANDURATION, CONFIG_WARDEN_CLIENT_RESPONSE_DELAY, diff --git a/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp index 1dce8ce96e..6da762878c 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp @@ -22,6 +22,7 @@ #include "Player.h" #include "ScriptedCreature.h" #include "SpellAuras.h" +#include "World.h" #include "vault_of_archavon.h" /* Vault of Archavon encounters: @@ -73,6 +74,8 @@ public: if (checkTimer >= 60000) { checkTimer -= 60000; // one minute + if (!sWorld->getBoolConfig(CONFIG_WINTERGRASP_KICK_VOA_PLAYERS)) + return; if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG)) { if (!bf->IsWarTime()) @@ -133,6 +136,9 @@ public: if (m_auiEncounter[i] == IN_PROGRESS) return true; + if (!sWorld->getBoolConfig(CONFIG_WINTERGRASP_KICK_VOA_PLAYERS)) + return false; + Battlefield* bf = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG); if (!bf || bf->IsWarTime() || bf->GetTimer() <= 10 * MINUTE * IN_MILLISECONDS) return true;