From 79cdb32e43acc2ddf8df90dc7a9ad507cc8ed40b Mon Sep 17 00:00:00 2001 From: hondacrx Date: Thu, 14 Sep 2023 04:36:13 -0400 Subject: [PATCH] Core/Players: Remove player from group on faction change if two side interaction group is not allowed. Port From (https://github.com/TrinityCore/TrinityCore/commit/f108a50abf82abd0973878ef88fdab47a408238c) --- Source/Framework/Database/Databases/CharacterDatabase.cs | 2 +- Source/Game/Handlers/CharacterHandler.cs | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Source/Framework/Database/Databases/CharacterDatabase.cs b/Source/Framework/Database/Databases/CharacterDatabase.cs index 13257ba39..609b61aff 100644 --- a/Source/Framework/Database/Databases/CharacterDatabase.cs +++ b/Source/Framework/Database/Databases/CharacterDatabase.cs @@ -508,7 +508,7 @@ namespace Framework.Database PrepareStatement(CharStatements.SEL_CHAR_HOMEBIND, "SELECT mapId, zoneId, posX, posY, posZ, orientation FROM character_homebind WHERE guid = ?"); PrepareStatement(CharStatements.SEL_CHAR_GUID_NAME_BY_ACC, "SELECT guid, name, online FROM characters WHERE account = ?"); PrepareStatement(CharStatements.SEL_CHAR_CUSTOMIZE_INFO, "SELECT name, race, class, gender, at_login FROM characters WHERE guid = ?"); - PrepareStatement(CharStatements.SEL_CHAR_RACE_OR_FACTION_CHANGE_INFOS, "SELECT at_login, knownTitles FROM characters WHERE guid = ?"); + PrepareStatement(CharStatements.SEL_CHAR_RACE_OR_FACTION_CHANGE_INFOS, "SELECT c.at_login, c.knownTitles, gm.guid FROM characters c LEFT JOIN group_member gm ON c.guid = gm.memberGuid WHERE c.guid = ?"); PrepareStatement(CharStatements.SEL_CHAR_COD_ITEM_MAIL, "SELECT id, messageType, mailTemplateId, sender, subject, body, money, has_items FROM mail WHERE receiver = ? AND has_items <> 0 AND cod <> 0"); PrepareStatement(CharStatements.SEL_CHAR_SOCIAL, "SELECT DISTINCT guid FROM character_social WHERE friend = ?"); PrepareStatement(CharStatements.SEL_CHAR_OLD_CHARS, "SELECT guid, deleteInfos_Account FROM characters WHERE deleteDate IS NOT NULL AND deleteDate < ?"); diff --git a/Source/Game/Handlers/CharacterHandler.cs b/Source/Game/Handlers/CharacterHandler.cs index f72726677..3655d0e4e 100644 --- a/Source/Game/Handlers/CharacterHandler.cs +++ b/Source/Game/Handlers/CharacterHandler.cs @@ -1761,6 +1761,7 @@ namespace Game AtLoginFlags atLoginFlags = (AtLoginFlags)result.Read(0); string knownTitlesStr = result.Read(1); + uint groupId = !result.IsNull(2) ? result.Read(2) : 0; AtLoginFlags usedLoginFlag = (factionChangeInfo.FactionChange ? AtLoginFlags.ChangeFaction : AtLoginFlags.ChangeRace); if (!atLoginFlags.HasAnyFlag(usedLoginFlag)) @@ -1989,6 +1990,13 @@ namespace Game Player.LeaveAllArenaTeams(factionChangeInfo.Guid); } + if (groupId != 0 && !WorldConfig.GetBoolValue(WorldCfg.AllowTwoSideInteractionGroup)) + { + Group group = Global.GroupMgr.GetGroupByDbStoreId(groupId); + if (group != null) + group.RemoveMember(factionChangeInfo.Guid); + } + if (!HasPermission(RBACPermissions.TwoSideAddFriend)) { // Delete Friend List