Chat/Commands: Eradicate ChatHandler::extractOptFirstArg
Port From (https://github.com/TrinityCore/TrinityCore/commit/42be7836dfacd9e8d6b0c2b5d5f230ed6a55f088)
This commit is contained in:
@@ -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();
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)]
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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<ushort>(0), result.Read<float>(2), result.Read<float>(3), result.Read<float>(4), 0.0f);
|
||||
uint zoneId = result.Read<ushort>(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;
|
||||
|
||||
Reference in New Issue
Block a user