From c70d2a67a0d40e081a24607c33a0d6cdd5a3961e Mon Sep 17 00:00:00 2001 From: hondacrx Date: Fri, 24 Jul 2020 13:18:37 -0400 Subject: [PATCH] - Add new commands .group set assistant, .group set maintank and .group set mainassist to toggle raid member flags. Port From (https://github.com/TrinityCore/TrinityCore/commit/17a0139b0e121b0d8d0f2a079fcfd49090ea35a4) --- Source/Framework/Constants/AccountConst.cs | 8 +-- Source/Framework/Constants/Language.cs | 5 +- Source/Game/Chat/Commands/GroupCommands.cs | 72 ++++++++++++++++++- Source/Game/Groups/Group.cs | 12 +++- ...020_07_16_04_world_2017_06_12_01_world.sql | 21 ++++++ 5 files changed, 107 insertions(+), 11 deletions(-) create mode 100644 sql/updates/world/master/2020_07_16_04_world_2017_06_12_01_world.sql diff --git a/Source/Framework/Constants/AccountConst.cs b/Source/Framework/Constants/AccountConst.cs index 16ae0eed9..0a10a8b55 100644 --- a/Source/Framework/Constants/AccountConst.cs +++ b/Source/Framework/Constants/AccountConst.cs @@ -766,10 +766,10 @@ namespace Framework.Constants CommandGobjectSpawngroup = 858, // Reserved For DynamicSpawning CommandGobjectDespawngroup = 859, // Reserved For DynamicSpawning CommandListRespawns = 860, // Reserved For DynamicSpawning - CommandGroupSet = 861, // Reserved - CommandGroupAssistant = 862, // Reserved - CommandGroupMaintank = 863, // Reserved - CommandGroupMainassist = 864, // Reserved + CommandGroupSet = 861, + CommandGroupAssistant = 862, + CommandGroupMaintank = 863, + CommandGroupMainassist = 864, CommandNpcShowloot = 865, // Reserved CommandListSpawnpoints = 866, // Reserved CommandReloadQuestGreetingLocale = 867, // Reserved diff --git a/Source/Framework/Constants/Language.cs b/Source/Framework/Constants/Language.cs index 05110b1b5..1d3a29bba 100644 --- a/Source/Framework/Constants/Language.cs +++ b/Source/Framework/Constants/Language.cs @@ -954,7 +954,10 @@ namespace Framework.Constants DisallowTicketsConfig = 1190, BanExists = 1191, ChangeAccountSuccess = 1192, - // Room For More Level 3 1193-1198 Not Used + NotInRaidGroup = 1193, + GroupRoleChanged = 1194, + LeaderCannotBeAssistant = 1195, + // Room for more level 3 1196-1198 not used // Debug Commands DebugAreatriggerLeft = 1999, diff --git a/Source/Game/Chat/Commands/GroupCommands.cs b/Source/Game/Chat/Commands/GroupCommands.cs index dea06af0d..c14f92592 100644 --- a/Source/Game/Chat/Commands/GroupCommands.cs +++ b/Source/Game/Chat/Commands/GroupCommands.cs @@ -54,7 +54,6 @@ namespace Game.Chat } Player gmPlayer = handler.GetSession().GetPlayer(); - Group gmGroup = gmPlayer.GetGroup(); Map gmMap = gmPlayer.GetMap(); bool toInstance = gmMap.Instanceable(); bool onlyLocalSummon = false; @@ -133,9 +132,8 @@ namespace Game.Chat Player player; Group group; ObjectGuid guid; - string nameStr = args.NextString(); - if (!handler.GetPlayerGroupAndGUIDByName(nameStr, out player, out group, out guid)) + if (!handler.GetPlayerGroupAndGUIDByName(args.NextString(), out player, out group, out guid)) return false; if (!group) @@ -348,5 +346,73 @@ namespace Game.Chat // And finish after every iterator is done. return true; } + + [CommandGroup("set", RBACPermissions.CommandGroupSet)] + class GroupSetCommands + { + [Command("assistant", RBACPermissions.CommandGroupAssistant)] + static bool HandleGroupSetAssistantCommand(StringArguments args, CommandHandler handler) + { + return GroupFlagCommand(args, handler, GroupMemberFlags.Assistant, "Assistant"); + } + + [Command("leader", RBACPermissions.CommandGroupLeader)] + static bool HandleGroupSetLeaderCommand(StringArguments args, CommandHandler handler) + { + return HandleGroupLeaderCommand(args, handler); + } + + [Command("mainassist", RBACPermissions.CommandGroupMainassist)] + static bool HandleGroupSetMainAssistCommand(StringArguments args, CommandHandler handler) + { + return GroupFlagCommand(args, handler, GroupMemberFlags.MainAssist, "Main Assist"); + } + + [Command("maintank", RBACPermissions.CommandGroupMaintank)] + static bool HandleGroupSetMainTankCommand(StringArguments args, CommandHandler handler) + { + return GroupFlagCommand(args, handler, GroupMemberFlags.MainTank, "Main Tank"); + } + + static bool GroupFlagCommand(StringArguments args, CommandHandler handler, GroupMemberFlags flag, string what) + { + Player player; + Group group; + ObjectGuid guid; + + if (!handler.GetPlayerGroupAndGUIDByName(args.NextString(), out player, out group, out guid)) + return false; + + if (!group) + { + handler.SendSysMessage(CypherStrings.NotInGroup, player.GetName()); + return false; + } + + if (!group.IsRaidGroup()) + { + handler.SendSysMessage(CypherStrings.NotInRaidGroup, player.GetName()); + return false; + } + + if (flag == GroupMemberFlags.Assistant && group.IsLeader(guid)) + { + handler.SendSysMessage(CypherStrings.LeaderCannotBeAssistant, player.GetName()); + return false; + } + + if (group.GetMemberFlags(guid).HasAnyFlag(flag)) + { + group.SetGroupMemberFlag(guid, false, flag); + handler.SendSysMessage(CypherStrings.GroupRoleChanged, player.GetName(), "no longer", what); + } + else + { + group.SetGroupMemberFlag(guid, true, flag); + handler.SendSysMessage(CypherStrings.GroupRoleChanged, player.GetName(), "now", what); + } + return true; + } + } } } diff --git a/Source/Game/Groups/Group.cs b/Source/Game/Groups/Group.cs index 37bdf9a5d..cea3355b2 100644 --- a/Source/Game/Groups/Group.cs +++ b/Source/Game/Groups/Group.cs @@ -2387,6 +2387,11 @@ namespace Game.Groups return GetLeaderGUID() == guid; } + public bool IsAssistant(ObjectGuid guid) + { + return GetMemberFlags(guid).HasAnyFlag(GroupMemberFlags.Assistant); + } + public ObjectGuid GetMemberGUID(string name) { foreach (var member in m_memberSlots) @@ -2395,12 +2400,13 @@ namespace Game.Groups return ObjectGuid.Empty; } - public bool IsAssistant(ObjectGuid guid) + public GroupMemberFlags GetMemberFlags(ObjectGuid guid) { var mslot = _getMemberSlot(guid); if (mslot == null) - return false; - return mslot.flags.HasAnyFlag(GroupMemberFlags.Assistant); + return 0; + + return mslot.flags; } public bool SameSubGroup(ObjectGuid guid1, ObjectGuid guid2) diff --git a/sql/updates/world/master/2020_07_16_04_world_2017_06_12_01_world.sql b/sql/updates/world/master/2020_07_16_04_world_2017_06_12_01_world.sql new file mode 100644 index 000000000..1011abf96 --- /dev/null +++ b/sql/updates/world/master/2020_07_16_04_world_2017_06_12_01_world.sql @@ -0,0 +1,21 @@ +-- +DELETE FROM `trinity_string` WHERE `entry` IN (1185,1186,1187); +INSERT INTO `trinity_string` (`entry`,`content_default`) VALUES + (1193, '%s is not in a raid group!'), + (1194, '%s %s has raid role \'%s\'.'), + (1195, 'The raid leader cannot be set as an assistant!'); + +DELETE FROM `command` WHERE `name` LIKE 'group set%'; +INSERT INTO `command` (`name`,`permission`,`help`) VALUES +('group set leader', 473, "Syntax: .group set leader [$characterName] + +Sets the given character (or selected) as his group's leader. Alias for '.group leader'."), +('group set assistant', 862, "Syntax: .group set assistant [$characterName] + +Toggles the given character's assistant state in his raid group."), +('group set maintank', 863, "Syntax: .group set maintank [$characterName] + +Toggles the given character's main tank flag in his raid group."), +('group set mainassist', 864, "Syntax: .group set mainassist [$characterName] + +Toggles the given character's main assist flag in his raid group."); \ No newline at end of file