From e6db88fa14a62e36e3f4dc75e96178f12c7b6158 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Wed, 8 Jun 2022 15:49:43 -0400 Subject: [PATCH] Chat/Commands: Eradicate ChatHandler::extractOptFirstArg Port From (https://github.com/TrinityCore/TrinityCore/commit/42be7836dfacd9e8d6b0c2b5d5f230ed6a55f088) --- Source/Game/Chat/CommandArgs.cs | 4 - Source/Game/Chat/CommandHandler.cs | 27 ------- Source/Game/Chat/Commands/GuildCommands.cs | 22 ++---- Source/Game/Chat/Commands/MiscCommands.cs | 89 +++++++++++----------- Source/Game/Chat/Commands/TeleCommands.cs | 32 ++++---- 5 files changed, 65 insertions(+), 109 deletions(-) diff --git a/Source/Game/Chat/CommandArgs.cs b/Source/Game/Chat/CommandArgs.cs index 46990d6b8..ec7bfb301 100644 --- a/Source/Game/Chat/CommandArgs.cs +++ b/Source/Game/Chat/CommandArgs.cs @@ -40,7 +40,6 @@ namespace Game.Chat { int oldPos = args.GetCurrentPosition(); - //Is this a hyperlink? if (ParseArgument(out dynamic value, parameterTypes[index], args)) index++; @@ -68,9 +67,6 @@ namespace Game.Chat if (args.IsAtEnd()) return false; - if (Hyperlink.TryParse(out value, type, args)) - return value; - if (type.IsEnum) type = type.GetEnumUnderlyingType(); diff --git a/Source/Game/Chat/CommandHandler.cs b/Source/Game/Chat/CommandHandler.cs index d7268243c..056e9ce4b 100644 --- a/Source/Game/Chat/CommandHandler.cs +++ b/Source/Game/Chat/CommandHandler.cs @@ -322,33 +322,6 @@ namespace Game.Chat return null; } - public void ExtractOptFirstArg(StringArguments args, out string arg1, out string arg2) - { - string p1 = args.NextString(); - string p2 = args.NextString(); - - if (string.IsNullOrEmpty(p2)) - { - p2 = p1; - p1 = null; - } - - arg1 = p1; - arg2 = p2; - } - - public GameTele ExtractGameTeleFromLink(StringArguments args) - { - string cId = ExtractKeyFromLink(args, "Htele"); - if (string.IsNullOrEmpty(cId)) - return null; - - if (uint.TryParse(cId, out uint id)) - return Global.ObjectMgr.GetGameTele(id); - - return Global.ObjectMgr.GetGameTele(cId); - } - public string ExtractQuotedArg(string str) { if (string.IsNullOrEmpty(str)) diff --git a/Source/Game/Chat/Commands/GuildCommands.cs b/Source/Game/Chat/Commands/GuildCommands.cs index 2ab314fa7..e49a45cf6 100644 --- a/Source/Game/Chat/Commands/GuildCommands.cs +++ b/Source/Game/Chat/Commands/GuildCommands.cs @@ -128,20 +128,15 @@ namespace Game.Chat } [Command("rank", RBACPermissions.CommandGuildRank, true)] - static bool HandleGuildRankCommand(CommandHandler handler, StringArguments args) + static bool HandleGuildRankCommand(CommandHandler handler, string playerName, byte rank) { - string nameStr; - string rankStr; - handler.ExtractOptFirstArg(args, out nameStr, out rankStr); - if (string.IsNullOrEmpty(rankStr)) + var player = PlayerIdentifier.ParseFromString(playerName); + if (player == null) + player = PlayerIdentifier.FromTargetOrSelf(handler); + if (player == null) return false; - Player target; - ObjectGuid targetGuid; - if (!handler.ExtractPlayerTarget(new StringArguments(nameStr), out target, out targetGuid, out _)) - return false; - - ulong guildId = target ? target.GetGuildId() : Global.CharacterCacheStorage.GetCharacterGuildIdByGuid(targetGuid); + ulong guildId = player.IsConnected() ? player.GetConnectedPlayer().GetGuildId() : Global.CharacterCacheStorage.GetCharacterGuildIdByGuid(player.GetGUID()); if (guildId == 0) return false; @@ -149,10 +144,7 @@ namespace Game.Chat if (!targetGuild) return false; - if (!byte.TryParse(rankStr, out byte newRank)) - return false; - - return targetGuild.ChangeMemberRank(null, targetGuid, (GuildRankId)newRank); + return targetGuild.ChangeMemberRank(null, player.GetGUID(), (GuildRankId)rank); } [Command("rename", RBACPermissions.CommandGuildRename, true)] diff --git a/Source/Game/Chat/Commands/MiscCommands.cs b/Source/Game/Chat/Commands/MiscCommands.cs index 2a9366eaa..221d4cf2c 100644 --- a/Source/Game/Chat/Commands/MiscCommands.cs +++ b/Source/Game/Chat/Commands/MiscCommands.cs @@ -1241,26 +1241,22 @@ namespace Game.Chat // mute player for the specified duration [CommandNonGroup("mute", RBACPermissions.CommandMute, true)] - static bool HandleMuteCommand(CommandHandler handler, StringArguments args) + static bool HandleMuteCommand(CommandHandler handler, string playerName, uint muteTime, string muteReason) { - string nameStr; - string delayStr; - handler.ExtractOptFirstArg(args, out nameStr, out delayStr); - if (string.IsNullOrEmpty(delayStr)) + if (muteReason.IsEmpty()) + muteReason = handler.GetCypherString(CypherStrings.NoReason); + + var player = PlayerIdentifier.ParseFromString(playerName); + if (player == null) + player = PlayerIdentifier.FromTarget(handler); + if (player == null) + { + handler.SendSysMessage(CypherStrings.PlayerNotFound); return false; + } - string muteReason = args.NextString(); - string muteReasonStr = "No reason"; - if (muteReason != null) - muteReasonStr = muteReason; - - Player target; - ObjectGuid targetGuid; - string targetName; - if (!handler.ExtractPlayerTarget(new StringArguments(nameStr), out target, out targetGuid, out targetName)) - return false; - - uint accountId = target ? target.GetSession().GetAccountId() : Global.CharacterCacheStorage.GetCharacterAccountIdByGuid(targetGuid); + Player target = player.GetConnectedPlayer(); + uint accountId = target != null ? target.GetSession().GetAccountId() : Global.CharacterCacheStorage.GetCharacterAccountIdByGuid(player.GetGUID()); // find only player from same account if any if (!target) @@ -1270,55 +1266,56 @@ namespace Game.Chat target = session.GetPlayer(); } - if (!uint.TryParse(delayStr, out uint notSpeakTime)) - return false; - // must have strong lesser security level - if (handler.HasLowerSecurity(target, targetGuid, true)) + if (handler.HasLowerSecurity(target, player.GetGUID(), true)) return false; PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.UPD_MUTE_TIME); string muteBy; - if (handler.GetSession() != null) - muteBy = handler.GetSession().GetPlayerName(); + Player gmPlayer = handler.GetPlayer(); + if (gmPlayer != null) + muteBy = gmPlayer.GetName(); else - muteBy = "Console"; + muteBy = handler.GetCypherString(CypherStrings.Console); if (target) { // Target is online, mute will be in effect right away. - long muteTime = GameTime.GetGameTime() + notSpeakTime * Time.Minute; - target.GetSession().m_muteTime = muteTime; - stmt.AddValue(0, muteTime); - string nameLink = handler.PlayerLink(targetName); - - if (WorldConfig.GetBoolValue(WorldCfg.ShowMuteInWorld)) - { - Global.WorldMgr.SendWorldText(CypherStrings.CommandMutemessageWorld, (handler.GetSession() != null ? handler.GetSession().GetPlayerName() : "Server"), nameLink, notSpeakTime, muteReasonStr); - target.SendSysMessage(CypherStrings.YourChatDisabled, notSpeakTime, muteBy, muteReasonStr); - } - else - { - target.SendSysMessage(CypherStrings.YourChatDisabled, notSpeakTime, muteBy, muteReasonStr); - } + long mutedUntil = GameTime.GetGameTime() + muteTime * Time.Minute; + target.GetSession().m_muteTime = mutedUntil; + stmt.AddValue(0, mutedUntil); } else { - // Target is offline, mute will be in effect starting from the next login. - int muteTime = -(int)(notSpeakTime * Time.Minute); - stmt.AddValue(0, muteTime); + stmt.AddValue(0, -(muteTime * Time.Minute)); } - stmt.AddValue(1, muteReasonStr); + stmt.AddValue(1, muteReason); stmt.AddValue(2, muteBy); stmt.AddValue(3, accountId); DB.Login.Execute(stmt); - string nameLink_ = handler.PlayerLink(targetName); - if (WorldConfig.GetBoolValue(WorldCfg.ShowMuteInWorld) && !target) - Global.WorldMgr.SendWorldText(CypherStrings.CommandMutemessageWorld, handler.GetSession().GetPlayerName(), nameLink_, notSpeakTime, muteReasonStr); + stmt = DB.Login.GetPreparedStatement(LoginStatements.INS_ACCOUNT_MUTE); + stmt.AddValue(0, accountId); + stmt.AddValue(1, muteTime); + stmt.AddValue(2, muteBy); + stmt.AddValue(3, muteReason); + DB.Login.Execute(stmt); + + string nameLink = handler.PlayerLink(player.GetName()); + + if (WorldConfig.GetBoolValue(WorldCfg.ShowMuteInWorld)) + Global.WorldMgr.SendWorldText(CypherStrings.CommandMutemessageWorld, muteBy, nameLink, muteTime, muteReason); + if (target) + { + target.SendSysMessage(CypherStrings.YourChatDisabled, muteTime, muteBy, muteReason); + handler.SendSysMessage(CypherStrings.YouDisableChat, nameLink, muteTime, muteReason); + } else - handler.SendSysMessage(target ? CypherStrings.YouDisableChat : CypherStrings.CommandDisableChatDelayed, nameLink_, notSpeakTime, muteReasonStr); + { + handler.SendSysMessage(CypherStrings.CommandDisableChatDelayed, nameLink, muteTime, muteReason); + } + return true; } diff --git a/Source/Game/Chat/Commands/TeleCommands.cs b/Source/Game/Chat/Commands/TeleCommands.cs index 411408878..3621a0b8d 100644 --- a/Source/Game/Chat/Commands/TeleCommands.cs +++ b/Source/Game/Chat/Commands/TeleCommands.cs @@ -182,23 +182,24 @@ namespace Game.Chat } [Command("name", RBACPermissions.CommandTeleName, true)] - static bool HandleTeleNameCommand(CommandHandler handler, StringArguments args) + static bool HandleTeleNameCommand(CommandHandler handler, string playerName, string where) { - handler.ExtractOptFirstArg(args, out string nameStr, out string teleStr); - if (teleStr.IsEmpty()) + var player = PlayerIdentifier.ParseFromString(playerName); + if (player == null) + player = PlayerIdentifier.FromTargetOrSelf(handler); + if (player == null) return false; + + Player target = player.GetConnectedPlayer(); - if (!handler.ExtractPlayerTarget(new StringArguments(nameStr), out Player target, out ObjectGuid targetGuid, out string targetName)) - return false; - - if (teleStr.Equals("home", StringComparison.OrdinalIgnoreCase)) // References target's homebind + if (where.Equals("home", StringComparison.OrdinalIgnoreCase)) // References target's homebind { if (target) target.TeleportTo(target.GetHomebind()); else { PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CHAR_HOMEBIND); - stmt.AddValue(0, targetGuid.GetCounter()); + stmt.AddValue(0, player.GetGUID().GetCounter()); SQLResult result = DB.Characters.Query(stmt); if (!result.IsEmpty()) @@ -206,7 +207,7 @@ namespace Game.Chat WorldLocation loc = new(result.Read(0), result.Read(2), result.Read(3), result.Read(4), 0.0f); uint zoneId = result.Read(1); - Player.SavePositionInDB(loc, zoneId, targetGuid); + Player.SavePositionInDB(loc, zoneId, player.GetGUID()); } } @@ -214,12 +215,9 @@ namespace Game.Chat } // id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r - GameTele tele = handler.ExtractGameTeleFromLink(new StringArguments(teleStr)); + GameTele tele = Global.ObjectMgr.GetGameTele(where); if (tele == null) - { - handler.SendSysMessage(CypherStrings.CommandTeleNotfound); return false; - } if (target) { @@ -227,7 +225,7 @@ namespace Game.Chat if (handler.HasLowerSecurity(target, ObjectGuid.Empty)) return false; - string chrNameLink = handler.PlayerLink(targetName); + string chrNameLink = handler.PlayerLink(target.GetName()); if (target.IsBeingTeleported() == true) { @@ -250,15 +248,15 @@ namespace Game.Chat else { // check offline security - if (handler.HasLowerSecurity(null, targetGuid)) + if (handler.HasLowerSecurity(null, target.GetGUID())) return false; - string nameLink = handler.PlayerLink(targetName); + string nameLink = handler.PlayerLink(target.GetName()); handler.SendSysMessage(CypherStrings.TeleportingTo, nameLink, handler.GetCypherString(CypherStrings.Offline), tele.name); Player.SavePositionInDB(new WorldLocation(tele.mapId, tele.posX, tele.posY, tele.posZ, tele.orientation), - Global.MapMgr.GetZoneId(PhasingHandler.EmptyPhaseShift, tele.mapId, tele.posX, tele.posY, tele.posZ), targetGuid); + Global.MapMgr.GetZoneId(PhasingHandler.EmptyPhaseShift, tele.mapId, tele.posX, tele.posY, tele.posZ), target.GetGUID()); } return true;