From a1707b2d141733263c00dad667c535fff185b469 Mon Sep 17 00:00:00 2001 From: Revision Date: Mon, 25 Apr 2022 14:29:44 +0200 Subject: [PATCH] feat(Core/Player): Allow stay in group when logged out (#10887) * Config option * Extra check * Fixes Updated some comments Removed the config option from the first if since it's not necessary (afaik) * REVERT Reverting the if to what I had it at originally until I can get some input on it... * Updated if Got some input and this is working as intended * Update World.cpp * Update src/server/worldserver/worldserver.conf.dist Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com> --- src/server/game/Server/WorldSession.cpp | 9 +++++---- src/server/game/World/IWorld.h | 1 + src/server/game/World/World.cpp | 2 ++ src/server/worldserver/worldserver.conf.dist | 9 +++++++++ 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index bf16987ee..cbf0655c4 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -616,12 +616,13 @@ void WorldSession::LogoutPlayer(bool save) // there are some positive auras from boss encounters that can be kept by logging out and logging in after boss is dead, and may be used on next bosses _player->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_CHANGE_MAP); - ///- If the player is in a group (or invited), remove him. If the group if then only 1 person, disband the group. - _player->UninviteFromGroup(); + ///- If the player is in a group and LeaveGroupOnLogout is enabled or if the player is invited to a group, remove him. If the group is then only 1 person, disband the group. + if (!_player->GetGroup() || sWorld->getBoolConfig(CONFIG_LEAVE_GROUP_ON_LOGOUT)) + _player->UninviteFromGroup(); // remove player from the group if he is: - // a) in group; b) not in raid group; c) logging out normally (not being kicked or disconnected) - if (_player->GetGroup() && !_player->GetGroup()->isRaidGroup() && !_player->GetGroup()->isLFGGroup() && m_Socket) + // a) in group; b) not in raid group; c) logging out normally (not being kicked or disconnected) d) LeaveGroupOnLogout is enabled + if (_player->GetGroup() && !_player->GetGroup()->isRaidGroup() && !_player->GetGroup()->isLFGGroup() && m_Socket && sWorld->getBoolConfig(CONFIG_LEAVE_GROUP_ON_LOGOUT)) _player->RemoveFromGroup(); // pussywizard: checked second time after being removed from a group diff --git a/src/server/game/World/IWorld.h b/src/server/game/World/IWorld.h index 3a5e21ce2..da1d2bcdd 100644 --- a/src/server/game/World/IWorld.h +++ b/src/server/game/World/IWorld.h @@ -174,6 +174,7 @@ enum WorldBoolConfigs CONFIG_PLAYER_SETTINGS_ENABLED, CONFIG_ALLOW_JOIN_BG_AND_LFG, CONFIG_MISS_CHANCE_MULTIPLIER_ONLY_FOR_PLAYERS, + CONFIG_LEAVE_GROUP_ON_LOGOUT, BOOL_CONFIG_VALUE_COUNT }; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index a49eb4c68..0d1363cfa 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1263,6 +1263,8 @@ void World::LoadConfigSettings(bool reload) m_bool_configs[CONFIG_ALLOW_JOIN_BG_AND_LFG] = sConfigMgr->GetOption("JoinBGAndLFG.Enable", false); + m_bool_configs[CONFIG_LEAVE_GROUP_ON_LOGOUT] = sConfigMgr->GetOption("LeaveGroupOnLogout.Enabled", true); + m_int_configs[CONFIG_CHANGE_FACTION_MAX_MONEY] = sConfigMgr->GetOption("ChangeFaction.MaxMoney", 0); ///- Read the "Data" directory from the config file diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index cb2204d09..45ff2bdc3 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -3709,6 +3709,15 @@ EnablePlayerSettings = 0 JoinBGAndLFG.Enable = 0 +# +# LeaveGroupOnLogout.Enabled +# Description: Should the player leave their group when they log out? +# (It does not affect raids or dungeon finder groups) +# +# Default: 1 - (Enabled) + +LeaveGroupOnLogout.Enabled = 1 + # # ChangeFaction.MaxMoney # Description: Maximum amount of gold allowed on the character to perform a faction change.