Update some commands to new system.

This commit is contained in:
hondacrx
2022-11-09 17:30:12 -05:00
parent bca92b80b9
commit c4ce4e45f8
9 changed files with 269 additions and 441 deletions
+3
View File
@@ -241,6 +241,9 @@ namespace Game.Chat
case nameof(Tail): case nameof(Tail):
val = new Tail(); val = new Tail();
return val.TryConsume(handler, args); return val.TryConsume(handler, args);
case nameof(QuotedString):
val = new QuotedString();
return val.TryConsume(handler, args);
case nameof(PlayerIdentifier): case nameof(PlayerIdentifier):
val = new PlayerIdentifier(); val = new PlayerIdentifier();
return val.TryConsume(handler, args); return val.TryConsume(handler, args);
+1 -1
View File
@@ -143,7 +143,7 @@ namespace Game.Chat
return null; return null;
if (!str.Contains("\"")) if (!str.Contains("\""))
return null; return str;
return str.Replace("\"", String.Empty); return str.Replace("\"", String.Empty);
} }
+47 -3
View File
@@ -85,9 +85,8 @@ namespace Game.Chat
_guid = ObjectGuid.Create(HighGuid.Player, tempVal); _guid = ObjectGuid.Create(HighGuid.Player, tempVal);
if ((_player = Global.ObjAccessor.FindPlayerByLowGUID(_guid.GetCounter())) != null) if ((_player = Global.ObjAccessor.FindPlayerByLowGUID(_guid.GetCounter())) != null)
_name = _player.GetName(); _name = _player.GetName();
else else if (!Global.CharacterCacheStorage.GetCharacterNameByGuid(_guid, out _name))
if (!Global.CharacterCacheStorage.GetCharacterNameByGuid(_guid, out _name)) return ChatCommandResult.FromErrorMessage(handler.GetParsedString(CypherStrings.CmdparserCharGuidNoExist, _guid.ToString()));
return ChatCommandResult.FromErrorMessage(handler.GetParsedString(CypherStrings.CmdparserCharGuidNoExist, _guid.ToString()));
return next; return next;
} }
else else
@@ -185,4 +184,49 @@ namespace Game.Chat
return new ChatCommandResult(str); return new ChatCommandResult(str);
} }
} }
struct QuotedString
{
string str;
public bool IsEmpty() { return str.IsEmpty(); }
public static implicit operator string(QuotedString quotedString)
{
return quotedString.str;
}
public ChatCommandResult TryConsume(CommandHandler handler, string args)
{
str = "";
if (args.IsEmpty())
return ChatCommandResult.FromErrorMessage("");
if ((args[0] != '"') && (args[0] != '\''))
return CommandArgs.TryConsume(out dynamic str, typeof(string), handler, args);
char QUOTE = args[0];
for (var i = 1; i < args.Length; ++i)
{
if (args[i] == QUOTE)
{
var (remainingToken, tail) = args.Substring(i + 1).Tokenize();
if (remainingToken.IsEmpty()) // if this is not empty, then we did not consume the full token
return new ChatCommandResult(tail);
else
return ChatCommandResult.FromErrorMessage("");
}
if (args[i] == '\\')
{
++i;
if (!(i < args.Length))
break;
}
str += args[i];
}
// if we reach this, we did not find a closing quote
return ChatCommandResult.FromErrorMessage("");
}
}
} }
+67 -117
View File
@@ -17,7 +17,6 @@
using Framework.Constants; using Framework.Constants;
using Framework.Database; using Framework.Database;
using Framework.IO;
using Game.Entities; using Game.Entities;
using System; using System;
using System.Net; using System.Net;
@@ -28,33 +27,24 @@ namespace Game.Chat.Commands
class BanCommands class BanCommands
{ {
[Command("account", RBACPermissions.CommandBanAccount, true)] [Command("account", RBACPermissions.CommandBanAccount, true)]
static bool HandleBanAccountCommand(CommandHandler handler, StringArguments args) static bool HandleBanAccountCommand(CommandHandler handler, string playerName, uint duration, string reason)
{ {
return HandleBanHelper(BanMode.Account, args, handler); return HandleBanHelper(BanMode.Account, playerName, duration, reason, handler);
} }
[Command("character", RBACPermissions.CommandBanCharacter, true)] [Command("character", RBACPermissions.CommandBanCharacter, true)]
static bool HandleBanCharacterCommand(CommandHandler handler, StringArguments args) static bool HandleBanCharacterCommand(CommandHandler handler, string playerName, uint duration, string reason)
{ {
if (args.Empty()) if (playerName.IsEmpty())
return false; return false;
string name = args.NextString(); if (duration == 0)
if (string.IsNullOrEmpty(name))
return false; return false;
string durationStr = args.NextString(); if (reason.IsEmpty())
if (string.IsNullOrEmpty(durationStr))
return false; return false;
if (!uint.TryParse(durationStr, out uint duration)) if (!ObjectManager.NormalizePlayerName(ref playerName))
return false;
string reasonStr = args.NextString("");
if (string.IsNullOrEmpty(reasonStr))
return false;
if (!ObjectManager.NormalizePlayerName(ref name))
{ {
handler.SendSysMessage(CypherStrings.PlayerNotFound); handler.SendSysMessage(CypherStrings.PlayerNotFound);
return false; return false;
@@ -62,31 +52,31 @@ namespace Game.Chat.Commands
string author = handler.GetSession() != null ? handler.GetSession().GetPlayerName() : "Server"; string author = handler.GetSession() != null ? handler.GetSession().GetPlayerName() : "Server";
switch (Global.WorldMgr.BanCharacter(name, durationStr, reasonStr, author)) switch (Global.WorldMgr.BanCharacter(playerName, duration, reason, author))
{ {
case BanReturn.Success: case BanReturn.Success:
{
if (duration > 0)
{ {
if (duration > 0) if (WorldConfig.GetBoolValue(WorldCfg.ShowBanInWorld))
{ Global.WorldMgr.SendWorldText(CypherStrings.BanCharacterYoubannedmessageWorld, author, playerName, Time.secsToTimeString(duration, TimeFormat.ShortText), reason);
if (WorldConfig.GetBoolValue(WorldCfg.ShowBanInWorld))
Global.WorldMgr.SendWorldText(CypherStrings.BanCharacterYoubannedmessageWorld, author, name, Time.secsToTimeString(Time.TimeStringToSecs(durationStr), TimeFormat.ShortText), reasonStr);
else
handler.SendSysMessage(CypherStrings.BanYoubanned, name, Time.secsToTimeString(Time.TimeStringToSecs(durationStr), TimeFormat.ShortText), reasonStr);
}
else else
{ handler.SendSysMessage(CypherStrings.BanYoubanned, playerName, Time.secsToTimeString(duration, TimeFormat.ShortText), reason);
if (WorldConfig.GetBoolValue(WorldCfg.ShowBanInWorld))
Global.WorldMgr.SendWorldText(CypherStrings.BanCharacterYoupermbannedmessageWorld, author, name, reasonStr);
else
handler.SendSysMessage(CypherStrings.BanYoupermbanned, name, reasonStr);
}
break;
} }
case BanReturn.Notfound: else
{ {
handler.SendSysMessage(CypherStrings.BanNotfound, "character", name); if (WorldConfig.GetBoolValue(WorldCfg.ShowBanInWorld))
return false; Global.WorldMgr.SendWorldText(CypherStrings.BanCharacterYoupermbannedmessageWorld, author, playerName, reason);
else
handler.SendSysMessage(CypherStrings.BanYoupermbanned, playerName, reason);
} }
break;
}
case BanReturn.Notfound:
{
handler.SendSysMessage(CypherStrings.BanNotfound, "character", playerName);
return false;
}
default: default:
break; break;
} }
@@ -95,32 +85,23 @@ namespace Game.Chat.Commands
} }
[Command("playeraccount", RBACPermissions.CommandBanPlayeraccount, true)] [Command("playeraccount", RBACPermissions.CommandBanPlayeraccount, true)]
static bool HandleBanAccountByCharCommand(CommandHandler handler, StringArguments args) static bool HandleBanAccountByCharCommand(CommandHandler handler, string playerName, uint duration, string reason)
{ {
return HandleBanHelper(BanMode.Character, args, handler); return HandleBanHelper(BanMode.Character, playerName, duration, reason, handler);
} }
[Command("ip", RBACPermissions.CommandBanIp, true)] [Command("ip", RBACPermissions.CommandBanIp, true)]
static bool HandleBanIPCommand(CommandHandler handler, StringArguments args) static bool HandleBanIPCommand(CommandHandler handler, string ipAddress, uint duration, string reason)
{ {
return HandleBanHelper(BanMode.IP, args, handler); return HandleBanHelper(BanMode.IP, ipAddress, duration, reason, handler);
} }
static bool HandleBanHelper(BanMode mode, StringArguments args, CommandHandler handler) static bool HandleBanHelper(BanMode mode, string nameOrIP, uint duration, string reason, CommandHandler handler)
{ {
if (args.Empty()) if (nameOrIP.IsEmpty())
return false; return false;
string nameOrIP = args.NextString(); if (reason.IsEmpty())
if (string.IsNullOrEmpty(nameOrIP))
return false;
string durationStr = args.NextString();
if (!uint.TryParse(durationStr, out uint duration))
return false;
string reasonStr = args.NextString("");
if (string.IsNullOrEmpty(reasonStr))
return false; return false;
switch (mode) switch (mode)
@@ -139,22 +120,22 @@ namespace Game.Chat.Commands
} }
string author = handler.GetSession() ? handler.GetSession().GetPlayerName() : "Server"; string author = handler.GetSession() ? handler.GetSession().GetPlayerName() : "Server";
switch (Global.WorldMgr.BanAccount(mode, nameOrIP, durationStr, reasonStr, author)) switch (Global.WorldMgr.BanAccount(mode, nameOrIP, duration, reason, author))
{ {
case BanReturn.Success: case BanReturn.Success:
if (duration > 0) if (duration > 0)
{ {
if (WorldConfig.GetBoolValue(WorldCfg.ShowBanInWorld)) if (WorldConfig.GetBoolValue(WorldCfg.ShowBanInWorld))
Global.WorldMgr.SendWorldText(CypherStrings.BanAccountYoubannedmessageWorld, author, nameOrIP, Time.secsToTimeString(Time.TimeStringToSecs(durationStr)), reasonStr); Global.WorldMgr.SendWorldText(CypherStrings.BanAccountYoubannedmessageWorld, author, nameOrIP, Time.secsToTimeString(duration), reason);
else else
handler.SendSysMessage(CypherStrings.BanYoubanned, nameOrIP, Time.secsToTimeString(Time.TimeStringToSecs(durationStr), TimeFormat.ShortText), reasonStr); handler.SendSysMessage(CypherStrings.BanYoubanned, nameOrIP, Time.secsToTimeString(duration, TimeFormat.ShortText), reason);
} }
else else
{ {
if (WorldConfig.GetBoolValue(WorldCfg.ShowBanInWorld)) if (WorldConfig.GetBoolValue(WorldCfg.ShowBanInWorld))
Global.WorldMgr.SendWorldText(CypherStrings.BanAccountYoupermbannedmessageWorld, author, nameOrIP, reasonStr); Global.WorldMgr.SendWorldText(CypherStrings.BanAccountYoupermbannedmessageWorld, author, nameOrIP, reason);
else else
handler.SendSysMessage(CypherStrings.BanYoupermbanned, nameOrIP, reasonStr); handler.SendSysMessage(CypherStrings.BanYoupermbanned, nameOrIP, reason);
} }
break; break;
case BanReturn.SyntaxError: case BanReturn.SyntaxError:
@@ -186,13 +167,9 @@ namespace Game.Chat.Commands
class BanInfoCommands class BanInfoCommands
{ {
[Command("account", RBACPermissions.CommandBaninfoAccount, true)] [Command("account", RBACPermissions.CommandBaninfoAccount, true)]
static bool HandleBanInfoAccountCommand(CommandHandler handler, StringArguments args) static bool HandleBanInfoAccountCommand(CommandHandler handler, string accountName)
{ {
if (args.Empty()) if (accountName.IsEmpty())
return false;
string accountName = args.NextString("");
if (string.IsNullOrEmpty(accountName))
return false; return false;
uint accountId = Global.AccountMgr.GetId(accountName); uint accountId = Global.AccountMgr.GetId(accountName);
@@ -206,12 +183,8 @@ namespace Game.Chat.Commands
} }
[Command("character", RBACPermissions.CommandBaninfoCharacter, true)] [Command("character", RBACPermissions.CommandBaninfoCharacter, true)]
static bool HandleBanInfoCharacterCommand(CommandHandler handler, StringArguments args) static bool HandleBanInfoCharacterCommand(CommandHandler handler, string name)
{ {
if (args.Empty())
return false;
string name = args.NextString();
if (!ObjectManager.NormalizePlayerName(ref name)) if (!ObjectManager.NormalizePlayerName(ref name))
{ {
handler.SendSysMessage(CypherStrings.BaninfoNocharacter); handler.SendSysMessage(CypherStrings.BaninfoNocharacter);
@@ -251,7 +224,7 @@ namespace Game.Chat.Commands
active = true; active = true;
bool permanent = (result.Read<long>(1) == 0L); bool permanent = (result.Read<long>(1) == 0L);
string banTime = permanent ? handler.GetCypherString(CypherStrings.BaninfoInfinite) : Time.secsToTimeString(result.Read<ulong>(1), TimeFormat.ShortText); string banTime = permanent ? handler.GetCypherString(CypherStrings.BaninfoInfinite) : Time.secsToTimeString(result.Read<ulong>(1), TimeFormat.ShortText);
handler.SendSysMessage(CypherStrings.BaninfoHistoryentry, Time.UnixTimeToDateTime(result.Read<long>(0)).ToShortTimeString(), banTime, handler.SendSysMessage(CypherStrings.BaninfoHistoryentry, Time.UnixTimeToDateTime(result.Read<long>(0)).ToShortTimeString(), banTime,
active ? handler.GetCypherString(CypherStrings.Yes) : handler.GetCypherString(CypherStrings.No), result.Read<string>(4), result.Read<string>(5)); active ? handler.GetCypherString(CypherStrings.Yes) : handler.GetCypherString(CypherStrings.No), result.Read<string>(4), result.Read<string>(5));
} }
while (result.NextRow()); while (result.NextRow());
@@ -260,13 +233,9 @@ namespace Game.Chat.Commands
} }
[Command("ip", RBACPermissions.CommandBaninfoIp, true)] [Command("ip", RBACPermissions.CommandBaninfoIp, true)]
static bool HandleBanInfoIPCommand(CommandHandler handler, StringArguments args) static bool HandleBanInfoIPCommand(CommandHandler handler, string ip)
{ {
if (args.Empty()) if (ip.IsEmpty())
return false;
string ip = args.NextString("");
if (string.IsNullOrEmpty(ip))
return false; return false;
SQLResult result = DB.Login.Query("SELECT ip, FROM_UNIXTIME(bandate), FROM_UNIXTIME(unbandate), unbandate-UNIX_TIMESTAMP(), banreason, bannedby, unbandate-bandate FROM ip_banned WHERE ip = '{0}'", ip); SQLResult result = DB.Login.Query("SELECT ip, FROM_UNIXTIME(bandate), FROM_UNIXTIME(unbandate), unbandate-UNIX_TIMESTAMP(), banreason, bannedby, unbandate-bandate FROM ip_banned WHERE ip = '{0}'", ip);
@@ -277,8 +246,8 @@ namespace Game.Chat.Commands
} }
bool permanent = result.Read<ulong>(6) == 0; bool permanent = result.Read<ulong>(6) == 0;
handler.SendSysMessage(CypherStrings.BaninfoIpentry, result.Read<string>(0), result.Read<string>(1), permanent ? handler.GetCypherString( CypherStrings.BaninfoNever) : result.Read<string>(2), handler.SendSysMessage(CypherStrings.BaninfoIpentry, result.Read<string>(0), result.Read<string>(1), permanent ? handler.GetCypherString(CypherStrings.BaninfoNever) : result.Read<string>(2),
permanent ? handler.GetCypherString( CypherStrings.BaninfoInfinite) : Time.secsToTimeString(result.Read<ulong>(3), TimeFormat.ShortText), result.Read<string>(4), result.Read<string>(5)); permanent ? handler.GetCypherString(CypherStrings.BaninfoInfinite) : Time.secsToTimeString(result.Read<ulong>(3), TimeFormat.ShortText), result.Read<string>(4), result.Read<string>(5));
return true; return true;
} }
@@ -308,23 +277,19 @@ namespace Game.Chat.Commands
return true; return true;
} }
} }
[CommandGroup("banlist")] [CommandGroup("banlist")]
class BanListCommands class BanListCommands
{ {
[Command("account", RBACPermissions.CommandBanlistAccount, true)] [Command("account", RBACPermissions.CommandBanlistAccount, true)]
static bool HandleBanListAccountCommand(CommandHandler handler, StringArguments args) static bool HandleBanListAccountCommand(CommandHandler handler, [OptionalArg] string filter)
{ {
PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.DelExpiredIpBans); PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.DelExpiredIpBans);
DB.Login.Execute(stmt); DB.Login.Execute(stmt);
string filterStr = args.NextString();
string filter = !string.IsNullOrEmpty(filterStr) ? filterStr : "";
SQLResult result; SQLResult result;
if (string.IsNullOrEmpty(filter)) if (filter.IsEmpty())
{ {
stmt = DB.Login.GetPreparedStatement(LoginStatements.SEL_ACCOUNT_BANNED_ALL); stmt = DB.Login.GetPreparedStatement(LoginStatements.SEL_ACCOUNT_BANNED_ALL);
result = DB.Login.Query(stmt); result = DB.Login.Query(stmt);
@@ -346,13 +311,9 @@ namespace Game.Chat.Commands
} }
[Command("character", RBACPermissions.CommandBanlistCharacter, true)] [Command("character", RBACPermissions.CommandBanlistCharacter, true)]
static bool HandleBanListCharacterCommand(CommandHandler handler, StringArguments args) static bool HandleBanListCharacterCommand(CommandHandler handler, string filter)
{ {
if (args.Empty()) if (filter.IsEmpty())
return false;
string filter = args.NextString();
if (string.IsNullOrEmpty(filter))
return false; return false;
PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_GUID_BY_NAME_FILTER); PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_GUID_BY_NAME_FILTER);
@@ -431,17 +392,14 @@ namespace Game.Chat.Commands
} }
[Command("ip", RBACPermissions.CommandBanlistIp, true)] [Command("ip", RBACPermissions.CommandBanlistIp, true)]
static bool HandleBanListIPCommand(CommandHandler handler, StringArguments args) static bool HandleBanListIPCommand(CommandHandler handler, [OptionalArg] string filter)
{ {
PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.DelExpiredIpBans); PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.DelExpiredIpBans);
DB.Login.Execute(stmt); DB.Login.Execute(stmt);
string filterStr = args.NextString();
string filter = !string.IsNullOrEmpty(filterStr) ? filterStr : "";
SQLResult result; SQLResult result;
if (string.IsNullOrEmpty(filter)) if (filter.IsEmpty())
{ {
stmt = DB.Login.GetPreparedStatement(LoginStatements.SEL_IP_BANNED_ALL); stmt = DB.Login.GetPreparedStatement(LoginStatements.SEL_IP_BANNED_ALL);
result = DB.Login.Query(stmt); result = DB.Login.Query(stmt);
@@ -570,7 +528,7 @@ namespace Game.Chat.Commands
} }
else else
{ {
long timeUnban = banInfo.Read <uint>(1); long timeUnban = banInfo.Read<uint>(1);
DateTime tmUnban; DateTime tmUnban;
tmUnban = Time.UnixTimeToDateTime(timeUnban); tmUnban = Time.UnixTimeToDateTime(timeUnban);
handler.SendSysMessage("|{0}|{1:D2}-{2:D2}-{3:D2} {4:D2}:{5:D2}|{6:D2}-{7:D2}-{8:D2} {9:D2}:{10:D2}|{11}|{12}|", handler.SendSysMessage("|{0}|{1:D2}-{2:D2}-{3:D2} {4:D2}:{5:D2}|{6:D2}-{7:D2}-{8:D2} {9:D2}:{10:D2}|{11}|{12}|",
@@ -595,18 +553,14 @@ namespace Game.Chat.Commands
class UnBanCommands class UnBanCommands
{ {
[Command("account", RBACPermissions.CommandUnbanAccount, true)] [Command("account", RBACPermissions.CommandUnbanAccount, true)]
static bool HandleUnBanAccountCommand(CommandHandler handler, StringArguments args) static bool HandleUnBanAccountCommand(CommandHandler handler, string name)
{ {
return HandleUnBanHelper(BanMode.Account, args, handler); return HandleUnBanHelper(BanMode.Account, name, handler);
} }
[Command("character", RBACPermissions.CommandUnbanCharacter, true)] [Command("character", RBACPermissions.CommandUnbanCharacter, true)]
static bool HandleUnBanCharacterCommand(CommandHandler handler, StringArguments args) static bool HandleUnBanCharacterCommand(CommandHandler handler, string name)
{ {
if (args.Empty())
return false;
string name = args.NextString();
if (!ObjectManager.NormalizePlayerName(ref name)) if (!ObjectManager.NormalizePlayerName(ref name))
{ {
handler.SendSysMessage(CypherStrings.PlayerNotFound); handler.SendSysMessage(CypherStrings.PlayerNotFound);
@@ -624,47 +578,43 @@ namespace Game.Chat.Commands
} }
[Command("playeraccount", RBACPermissions.CommandUnbanPlayeraccount, true)] [Command("playeraccount", RBACPermissions.CommandUnbanPlayeraccount, true)]
static bool HandleUnBanAccountByCharCommand(CommandHandler handler, StringArguments args) static bool HandleUnBanAccountByCharCommand(CommandHandler handler, string name)
{ {
return HandleUnBanHelper(BanMode.Character, args, handler); return HandleUnBanHelper(BanMode.Character, name, handler);
} }
[Command("ip", RBACPermissions.CommandUnbanIp, true)] [Command("ip", RBACPermissions.CommandUnbanIp, true)]
static bool HandleUnBanIPCommand(CommandHandler handler, StringArguments args) static bool HandleUnBanIPCommand(CommandHandler handler, string ip)
{ {
return HandleUnBanHelper(BanMode.IP, args, handler); return HandleUnBanHelper(BanMode.IP, ip, handler);
} }
static bool HandleUnBanHelper(BanMode mode, StringArguments args, CommandHandler handler) static bool HandleUnBanHelper(BanMode mode, string nameOrIp, CommandHandler handler)
{ {
if (args.Empty()) if (nameOrIp.IsEmpty())
return false;
string nameOrIP = args.NextString();
if (string.IsNullOrEmpty(nameOrIP))
return false; return false;
switch (mode) switch (mode)
{ {
case BanMode.Character: case BanMode.Character:
if (!ObjectManager.NormalizePlayerName(ref nameOrIP)) if (!ObjectManager.NormalizePlayerName(ref nameOrIp))
{ {
handler.SendSysMessage(CypherStrings.PlayerNotFound); handler.SendSysMessage(CypherStrings.PlayerNotFound);
return false; return false;
} }
break; break;
case BanMode.IP: case BanMode.IP:
if (!IPAddress.TryParse(nameOrIP, out _)) if (!IPAddress.TryParse(nameOrIp, out _))
return false; return false;
break; break;
} }
if (Global.WorldMgr.RemoveBanAccount(mode, nameOrIP)) if (Global.WorldMgr.RemoveBanAccount(mode, nameOrIp))
handler.SendSysMessage(CypherStrings.UnbanUnbanned, nameOrIP); handler.SendSysMessage(CypherStrings.UnbanUnbanned, nameOrIp);
else else
handler.SendSysMessage(CypherStrings.UnbanError, nameOrIP); handler.SendSysMessage(CypherStrings.UnbanError, nameOrIp);
return true; return true;
} }
} }
} }
+41 -132
View File
@@ -17,8 +17,8 @@
using Framework.Constants; using Framework.Constants;
using Framework.Database; using Framework.Database;
using Framework.IO;
using Game.DataStorage; using Game.DataStorage;
using System;
namespace Game.Chat.Commands namespace Game.Chat.Commands
{ {
@@ -28,19 +28,14 @@ namespace Game.Chat.Commands
[CommandGroup("add")] [CommandGroup("add")]
class DisableAddCommands class DisableAddCommands
{ {
static bool HandleAddDisables(StringArguments args, CommandHandler handler, DisableType disableType) static bool HandleAddDisables(uint entry, uint flags, string disableComment, CommandHandler handler, DisableType disableType)
{ {
uint entry = args.NextUInt32();
if (entry == 0) if (entry == 0)
return false; return false;
uint flags = args.NextUInt32(); if (disableComment.IsEmpty())
string disableComment = args.NextString("");
if (string.IsNullOrEmpty(disableComment))
return false; return false;
string disableTypeStr = "";
switch (disableType) switch (disableType)
{ {
case DisableType.Spell: case DisableType.Spell:
@@ -50,7 +45,6 @@ namespace Game.Chat.Commands
handler.SendSysMessage(CypherStrings.CommandNospellfound); handler.SendSysMessage(CypherStrings.CommandNospellfound);
return false; return false;
} }
disableTypeStr = "spell";
break; break;
} }
case DisableType.Quest: case DisableType.Quest:
@@ -60,7 +54,6 @@ namespace Game.Chat.Commands
handler.SendSysMessage(CypherStrings.CommandNoquestfound, entry); handler.SendSysMessage(CypherStrings.CommandNoquestfound, entry);
return false; return false;
} }
disableTypeStr = "quest";
break; break;
} }
case DisableType.Map: case DisableType.Map:
@@ -70,7 +63,6 @@ namespace Game.Chat.Commands
handler.SendSysMessage(CypherStrings.CommandNomapfound); handler.SendSysMessage(CypherStrings.CommandNomapfound);
return false; return false;
} }
disableTypeStr = "map";
break; break;
} }
case DisableType.Battleground: case DisableType.Battleground:
@@ -80,7 +72,6 @@ namespace Game.Chat.Commands
handler.SendSysMessage(CypherStrings.CommandNoBattlegroundFound); handler.SendSysMessage(CypherStrings.CommandNoBattlegroundFound);
return false; return false;
} }
disableTypeStr = "Battleground";
break; break;
} }
case DisableType.Criteria: case DisableType.Criteria:
@@ -90,7 +81,6 @@ namespace Game.Chat.Commands
handler.SendSysMessage(CypherStrings.CommandNoAchievementCriteriaFound); handler.SendSysMessage(CypherStrings.CommandNoAchievementCriteriaFound);
return false; return false;
} }
disableTypeStr = "criteria";
break; break;
} }
case DisableType.OutdoorPVP: case DisableType.OutdoorPVP:
@@ -100,7 +90,6 @@ namespace Game.Chat.Commands
handler.SendSysMessage(CypherStrings.CommandNoOutdoorPvpForund); handler.SendSysMessage(CypherStrings.CommandNoOutdoorPvpForund);
return false; return false;
} }
disableTypeStr = "outdoorpvp";
break; break;
} }
case DisableType.VMAP: case DisableType.VMAP:
@@ -110,7 +99,6 @@ namespace Game.Chat.Commands
handler.SendSysMessage(CypherStrings.CommandNomapfound); handler.SendSysMessage(CypherStrings.CommandNomapfound);
return false; return false;
} }
disableTypeStr = "vmap";
break; break;
} }
case DisableType.MMAP: case DisableType.MMAP:
@@ -120,7 +108,6 @@ namespace Game.Chat.Commands
handler.SendSysMessage(CypherStrings.CommandNomapfound); handler.SendSysMessage(CypherStrings.CommandNomapfound);
return false; return false;
} }
disableTypeStr = "mmap";
break; break;
} }
default: default:
@@ -133,7 +120,7 @@ namespace Game.Chat.Commands
SQLResult result = DB.World.Query(stmt); SQLResult result = DB.World.Query(stmt);
if (!result.IsEmpty()) if (!result.IsEmpty())
{ {
handler.SendSysMessage("This {0} (Id: {1}) is already disabled.", disableTypeStr, entry); handler.SendSysMessage($"This {disableType} (Id: {entry}) is already disabled.");
return false; return false;
} }
@@ -144,128 +131,74 @@ namespace Game.Chat.Commands
stmt.AddValue(3, disableComment); stmt.AddValue(3, disableComment);
DB.World.Execute(stmt); DB.World.Execute(stmt);
handler.SendSysMessage("Add Disabled {0} (Id: {1}) for reason {2}", disableTypeStr, entry, disableComment); handler.SendSysMessage($"Add Disabled {disableType} (Id: {entry}) for reason {disableComment}");
return true; return true;
} }
[Command("spell", RBACPermissions.CommandDisableAddSpell, true)] [Command("spell", RBACPermissions.CommandDisableAddSpell, true)]
static bool HandleAddDisableSpellCommand(CommandHandler handler, StringArguments args) static bool HandleAddDisableSpellCommand(CommandHandler handler, uint entry, uint flags, string disableComment)
{ {
if (args.Empty()) return HandleAddDisables(entry, flags, disableComment, handler, DisableType.Spell);
return false;
return HandleAddDisables(args, handler, DisableType.Spell);
} }
[Command("quest", RBACPermissions.CommandDisableAddQuest, true)] [Command("quest", RBACPermissions.CommandDisableAddQuest, true)]
static bool HandleAddDisableQuestCommand(CommandHandler handler, StringArguments args) static bool HandleAddDisableQuestCommand(CommandHandler handler, uint entry, uint flags, string disableComment)
{ {
if (args.Empty()) return HandleAddDisables(entry, flags, disableComment, handler, DisableType.Quest);
return false;
return HandleAddDisables(args, handler, DisableType.Quest);
} }
[Command("map", RBACPermissions.CommandDisableAddMap, true)] [Command("map", RBACPermissions.CommandDisableAddMap, true)]
static bool HandleAddDisableMapCommand(CommandHandler handler, StringArguments args) static bool HandleAddDisableMapCommand(CommandHandler handler, uint entry, uint flags, string disableComment)
{ {
if (args.Empty()) return HandleAddDisables(entry, flags, disableComment, handler, DisableType.Map);
return false;
return HandleAddDisables(args, handler, DisableType.Map);
} }
[Command("Battleground", RBACPermissions.CommandDisableAddBattleground, true)] [Command("Battleground", RBACPermissions.CommandDisableAddBattleground, true)]
static bool HandleAddDisableBattlegroundCommand(CommandHandler handler, StringArguments args) static bool HandleAddDisableBattlegroundCommand(CommandHandler handler, uint entry, uint flags, string disableComment)
{ {
if (args.Empty()) return HandleAddDisables(entry, flags, disableComment, handler, DisableType.Battleground);
return false;
return HandleAddDisables(args, handler, DisableType.Battleground);
} }
[Command("criteria", RBACPermissions.CommandDisableAddCriteria, true)] [Command("criteria", RBACPermissions.CommandDisableAddCriteria, true)]
static bool HandleAddDisableCriteriaCommand(CommandHandler handler, StringArguments args) static bool HandleAddDisableCriteriaCommand(CommandHandler handler, uint entry, uint flags, string disableComment)
{ {
if (args.Empty()) return HandleAddDisables(entry, flags, disableComment, handler, DisableType.Criteria);
return false;
return HandleAddDisables(args, handler, DisableType.Criteria);
} }
[Command("outdoorpvp", RBACPermissions.CommandDisableAddOutdoorpvp, true)] [Command("outdoorpvp", RBACPermissions.CommandDisableAddOutdoorpvp, true)]
static bool HandleAddDisableOutdoorPvPCommand(CommandHandler handler, StringArguments args) static bool HandleAddDisableOutdoorPvPCommand(CommandHandler handler, uint entry, uint flags, string disableComment)
{ {
if (args.Empty()) return HandleAddDisables(entry, flags, disableComment, handler, DisableType.OutdoorPVP);
return false;
HandleAddDisables(args, handler, DisableType.OutdoorPVP);
return true;
} }
[Command("vmap", RBACPermissions.CommandDisableAddVmap, true)] [Command("vmap", RBACPermissions.CommandDisableAddVmap, true)]
static bool HandleAddDisableVmapCommand(CommandHandler handler, StringArguments args) static bool HandleAddDisableVmapCommand(CommandHandler handler, uint entry, uint flags, string disableComment)
{ {
if (args.Empty()) return HandleAddDisables(entry, flags, disableComment, handler, DisableType.VMAP);
return false;
return HandleAddDisables(args, handler, DisableType.VMAP);
} }
[Command("mmap", RBACPermissions.CommandDisableAddMmap, true)] [Command("mmap", RBACPermissions.CommandDisableAddMmap, true)]
static bool HandleAddDisableMMapCommand(CommandHandler handler, StringArguments args) static bool HandleAddDisableMMapCommand(CommandHandler handler, uint entry, uint flags, string disableComment)
{ {
if (args.Empty()) return HandleAddDisables(entry, flags, disableComment, handler, DisableType.MMAP);
return false;
return HandleAddDisables(args, handler, DisableType.MMAP);
} }
} }
[CommandGroup("remove")] [CommandGroup("remove")]
class DisableRemoveCommands class DisableRemoveCommands
{ {
static bool HandleRemoveDisables(StringArguments args, CommandHandler handler, DisableType disableType) static bool HandleRemoveDisables(uint entry, CommandHandler handler, DisableType disableType)
{ {
if (!uint.TryParse(args.NextString(), out uint entry) || entry == 0) if (entry == 0)
return false; return false;
string disableTypeStr = "";
switch (disableType)
{
case DisableType.Spell:
disableTypeStr = "spell";
break;
case DisableType.Quest:
disableTypeStr = "quest";
break;
case DisableType.Map:
disableTypeStr = "map";
break;
case DisableType.Battleground:
disableTypeStr = "Battleground";
break;
case DisableType.Criteria:
disableTypeStr = "criteria";
break;
case DisableType.OutdoorPVP:
disableTypeStr = "outdoorpvp";
break;
case DisableType.VMAP:
disableTypeStr = "vmap";
break;
case DisableType.MMAP:
disableTypeStr = "mmap";
break;
}
PreparedStatement stmt = DB.World.GetPreparedStatement(WorldStatements.SEL_DISABLES); PreparedStatement stmt = DB.World.GetPreparedStatement(WorldStatements.SEL_DISABLES);
stmt.AddValue(0, entry); stmt.AddValue(0, entry);
stmt.AddValue(1, (byte)disableType); stmt.AddValue(1, (byte)disableType);
SQLResult result = DB.World.Query(stmt); SQLResult result = DB.World.Query(stmt);
if (result.IsEmpty()) if (result.IsEmpty())
{ {
handler.SendSysMessage("This {0} (Id: {1}) is not disabled.", disableTypeStr, entry); handler.SendSysMessage($"This {disableType} (Id: {entry}) is not disabled.");
return false; return false;
} }
@@ -274,80 +207,56 @@ namespace Game.Chat.Commands
stmt.AddValue(1, (byte)disableType); stmt.AddValue(1, (byte)disableType);
DB.World.Execute(stmt); DB.World.Execute(stmt);
handler.SendSysMessage("Remove Disabled {0} (Id: {1})", disableTypeStr, entry); handler.SendSysMessage($"Remove Disabled {disableType} (Id: {entry})");
return true; return true;
} }
[Command("spell", RBACPermissions.CommandDisableRemoveSpell, true)] [Command("spell", RBACPermissions.CommandDisableRemoveSpell, true)]
static bool HandleRemoveDisableSpellCommand(CommandHandler handler, StringArguments args) static bool HandleRemoveDisableSpellCommand(CommandHandler handler, uint entry)
{ {
if (args.Empty()) return HandleRemoveDisables(entry, handler, DisableType.Spell);
return false;
return HandleRemoveDisables(args, handler, DisableType.Spell);
} }
[Command("quest", RBACPermissions.CommandDisableRemoveQuest, true)] [Command("quest", RBACPermissions.CommandDisableRemoveQuest, true)]
static bool HandleRemoveDisableQuestCommand(CommandHandler handler, StringArguments args) static bool HandleRemoveDisableQuestCommand(CommandHandler handler, uint entry)
{ {
if (args.Empty()) return HandleRemoveDisables(entry, handler, DisableType.Quest);
return false;
return HandleRemoveDisables(args, handler, DisableType.Quest);
} }
[Command("map", RBACPermissions.CommandDisableRemoveMap, true)] [Command("map", RBACPermissions.CommandDisableRemoveMap, true)]
static bool HandleRemoveDisableMapCommand(CommandHandler handler, StringArguments args) static bool HandleRemoveDisableMapCommand(CommandHandler handler, uint entry)
{ {
if (args.Empty()) return HandleRemoveDisables(entry, handler, DisableType.Map);
return false;
return HandleRemoveDisables(args, handler, DisableType.Map);
} }
[Command("Battleground", RBACPermissions.CommandDisableRemoveBattleground, true)] [Command("Battleground", RBACPermissions.CommandDisableRemoveBattleground, true)]
static bool HandleRemoveDisableBattlegroundCommand(CommandHandler handler, StringArguments args) static bool HandleRemoveDisableBattlegroundCommand(CommandHandler handler, uint entry)
{ {
if (args.Empty()) return HandleRemoveDisables(entry, handler, DisableType.Battleground);
return false;
return HandleRemoveDisables(args, handler, DisableType.Battleground);
} }
[Command("criteria", RBACPermissions.CommandDisableRemoveCriteria, true)] [Command("criteria", RBACPermissions.CommandDisableRemoveCriteria, true)]
static bool HandleRemoveDisableCriteriaCommand(CommandHandler handler, StringArguments args) static bool HandleRemoveDisableCriteriaCommand(CommandHandler handler, uint entry)
{ {
if (args.Empty()) return HandleRemoveDisables(entry, handler, DisableType.Criteria);
return false;
return HandleRemoveDisables(args, handler, DisableType.Criteria);
} }
[Command("outdoorpvp", RBACPermissions.CommandDisableRemoveOutdoorpvp, true)] [Command("outdoorpvp", RBACPermissions.CommandDisableRemoveOutdoorpvp, true)]
static bool HandleRemoveDisableOutdoorPvPCommand(CommandHandler handler, StringArguments args) static bool HandleRemoveDisableOutdoorPvPCommand(CommandHandler handler, uint entry)
{ {
if (args.Empty()) return HandleRemoveDisables(entry, handler, DisableType.OutdoorPVP);
return false;
return HandleRemoveDisables(args, handler, DisableType.OutdoorPVP);
} }
[Command("vmap", RBACPermissions.CommandDisableRemoveVmap, true)] [Command("vmap", RBACPermissions.CommandDisableRemoveVmap, true)]
static bool HandleRemoveDisableVmapCommand(CommandHandler handler, StringArguments args) static bool HandleRemoveDisableVmapCommand(CommandHandler handler, uint entry)
{ {
if (args.Empty()) return HandleRemoveDisables(entry, handler, DisableType.VMAP);
return false;
return HandleRemoveDisables(args, handler, DisableType.VMAP);
} }
[Command("mmap", RBACPermissions.CommandDisableRemoveMmap, true)] [Command("mmap", RBACPermissions.CommandDisableRemoveMmap, true)]
static bool HandleRemoveDisableMMapCommand(CommandHandler handler, StringArguments args) static bool HandleRemoveDisableMMapCommand(CommandHandler handler, uint entry)
{ {
if (args.Empty()) return HandleRemoveDisables(entry, handler, DisableType.MMAP);
return false;
return HandleRemoveDisables(args, handler, DisableType.MMAP);
} }
} }
} }
+37 -59
View File
@@ -32,13 +32,9 @@ namespace Game.Chat
class GroupCommands class GroupCommands
{ {
[Command("disband", RBACPermissions.CommandGroupDisband)] [Command("disband", RBACPermissions.CommandGroupDisband)]
static bool HandleGroupDisbandCommand(CommandHandler handler, StringArguments args) static bool HandleGroupDisbandCommand(CommandHandler handler, string name)
{ {
Player player; if (!handler.GetPlayerGroupAndGUIDByName(name, out Player player, out Group group, out _))
Group group;
string nameStr = args.NextString();
if (!handler.GetPlayerGroupAndGUIDByName(nameStr, out player, out group, out _))
return false; return false;
if (!group) if (!group)
@@ -52,19 +48,9 @@ namespace Game.Chat
} }
[Command("join", RBACPermissions.CommandGroupJoin)] [Command("join", RBACPermissions.CommandGroupJoin)]
static bool HandleGroupJoinCommand(CommandHandler handler, StringArguments args) static bool HandleGroupJoinCommand(CommandHandler handler, string playerNameGroup, string playerName)
{ {
if (args.Empty()) if (!handler.GetPlayerGroupAndGUIDByName(playerNameGroup, out Player playerSource, out Group groupSource, out _, true))
return false;
Player playerSource;
Player playerTarget;
Group groupSource;
Group groupTarget;
string nameplgrStr = args.NextString();
string nameplStr = args.NextString();
if (!handler.GetPlayerGroupAndGUIDByName(nameplgrStr, out playerSource, out groupSource, out _, true))
return false; return false;
if (!groupSource) if (!groupSource)
@@ -73,7 +59,7 @@ namespace Game.Chat
return false; return false;
} }
if (!handler.GetPlayerGroupAndGUIDByName(nameplStr, out playerTarget, out groupTarget, out _, true)) if (!handler.GetPlayerGroupAndGUIDByName(playerName, out Player playerTarget, out Group groupTarget, out _, true))
return false; return false;
if (groupTarget || playerTarget.GetGroup() == groupSource) if (groupTarget || playerTarget.GetGroup() == groupSource)
@@ -95,13 +81,9 @@ namespace Game.Chat
} }
[Command("leader", RBACPermissions.CommandGroupLeader)] [Command("leader", RBACPermissions.CommandGroupLeader)]
static bool HandleGroupLeaderCommand(CommandHandler handler, StringArguments args) static bool HandleGroupLeaderCommand(CommandHandler handler, string name)
{ {
Player player; if (!handler.GetPlayerGroupAndGUIDByName(name, out Player player, out Group group, out ObjectGuid guid))
Group group;
ObjectGuid guid;
if (!handler.GetPlayerGroupAndGUIDByName(args.NextString(), out player, out group, out guid))
return false; return false;
if (!group) if (!group)
@@ -277,14 +259,9 @@ namespace Game.Chat
} }
[Command("remove", RBACPermissions.CommandGroupRemove)] [Command("remove", RBACPermissions.CommandGroupRemove)]
static bool HandleGroupRemoveCommand(CommandHandler handler, StringArguments args) static bool HandleGroupRemoveCommand(CommandHandler handler, string name)
{ {
Player player; if (!handler.GetPlayerGroupAndGUIDByName(name, out Player player, out Group group, out ObjectGuid guid))
Group group;
ObjectGuid guid;
string nameStr = args.NextString();
if (!handler.GetPlayerGroupAndGUIDByName(nameStr, out player, out group, out guid))
return false; return false;
if (!group) if (!group)
@@ -298,13 +275,14 @@ namespace Game.Chat
} }
[Command("repair", RBACPermissions.CommandRepairitems, true)] [Command("repair", RBACPermissions.CommandRepairitems, true)]
static bool HandleGroupRepairCommand(CommandHandler handler, StringArguments args) static bool HandleGroupRepairCommand(CommandHandler handler, PlayerIdentifier playerTarget)
{ {
Player playerTarget; if (playerTarget == null)
if (!handler.ExtractPlayerTarget(args, out playerTarget)) playerTarget = PlayerIdentifier.FromTargetOrSelf(handler);
if (playerTarget == null || !playerTarget.IsConnected())
return false; return false;
Group groupTarget = playerTarget.GetGroup(); Group groupTarget = playerTarget.GetConnectedPlayer().GetGroup();
if (groupTarget == null) if (groupTarget == null)
return false; return false;
@@ -319,13 +297,14 @@ namespace Game.Chat
} }
[Command("revive", RBACPermissions.CommandRevive, true)] [Command("revive", RBACPermissions.CommandRevive, true)]
static bool HandleGroupReviveCommand(CommandHandler handler, StringArguments args) static bool HandleGroupReviveCommand(CommandHandler handler, PlayerIdentifier playerTarget)
{ {
Player playerTarget; if (playerTarget == null)
if (!handler.ExtractPlayerTarget(args, out playerTarget)) playerTarget = PlayerIdentifier.FromTargetOrSelf(handler);
if (playerTarget == null || !playerTarget.IsConnected())
return false; return false;
Group groupTarget = playerTarget.GetGroup(); Group groupTarget = playerTarget.GetConnectedPlayer().GetGroup();
if (groupTarget == null) if (groupTarget == null)
return false; return false;
@@ -344,12 +323,15 @@ namespace Game.Chat
} }
[Command("summon", RBACPermissions.CommandGroupSummon)] [Command("summon", RBACPermissions.CommandGroupSummon)]
static bool HandleGroupSummonCommand(CommandHandler handler, StringArguments args) static bool HandleGroupSummonCommand(CommandHandler handler, PlayerIdentifier playerTarget)
{ {
Player target; if (playerTarget == null)
if (!handler.ExtractPlayerTarget(args, out target)) playerTarget = PlayerIdentifier.FromTargetOrSelf(handler);
if (playerTarget == null || !playerTarget.IsConnected())
return false; return false;
Player target = playerTarget.GetConnectedPlayer();
// check online security // check online security
if (handler.HasLowerSecurity(target, ObjectGuid.Empty)) if (handler.HasLowerSecurity(target, ObjectGuid.Empty))
return false; return false;
@@ -437,36 +419,32 @@ namespace Game.Chat
class GroupSetCommands class GroupSetCommands
{ {
[Command("assistant", RBACPermissions.CommandGroupAssistant)] [Command("assistant", RBACPermissions.CommandGroupAssistant)]
static bool HandleGroupSetAssistantCommand(CommandHandler handler, StringArguments args) static bool HandleGroupSetAssistantCommand(CommandHandler handler, string name)
{ {
return GroupFlagCommand(args, handler, GroupMemberFlags.Assistant, "Assistant"); return GroupFlagCommand(name, handler, GroupMemberFlags.Assistant);
} }
[Command("leader", RBACPermissions.CommandGroupLeader)] [Command("leader", RBACPermissions.CommandGroupLeader)]
static bool HandleGroupSetLeaderCommand(CommandHandler handler, StringArguments args) static bool HandleGroupSetLeaderCommand(CommandHandler handler, string name)
{ {
return HandleGroupLeaderCommand(handler, args); return HandleGroupLeaderCommand(handler, name);
} }
[Command("mainassist", RBACPermissions.CommandGroupMainassist)] [Command("mainassist", RBACPermissions.CommandGroupMainassist)]
static bool HandleGroupSetMainAssistCommand(CommandHandler handler, StringArguments args) static bool HandleGroupSetMainAssistCommand(CommandHandler handler, string name)
{ {
return GroupFlagCommand(args, handler, GroupMemberFlags.MainAssist, "Main Assist"); return GroupFlagCommand(name, handler, GroupMemberFlags.MainAssist);
} }
[Command("maintank", RBACPermissions.CommandGroupMaintank)] [Command("maintank", RBACPermissions.CommandGroupMaintank)]
static bool HandleGroupSetMainTankCommand(CommandHandler handler, StringArguments args) static bool HandleGroupSetMainTankCommand(CommandHandler handler, string name)
{ {
return GroupFlagCommand(args, handler, GroupMemberFlags.MainTank, "Main Tank"); return GroupFlagCommand(name, handler, GroupMemberFlags.MainTank);
} }
static bool GroupFlagCommand(StringArguments args, CommandHandler handler, GroupMemberFlags flag, string what) static bool GroupFlagCommand(string name, CommandHandler handler, GroupMemberFlags flag)
{ {
Player player; if (!handler.GetPlayerGroupAndGUIDByName(name, out Player player, out Group group, out ObjectGuid guid))
Group group;
ObjectGuid guid;
if (!handler.GetPlayerGroupAndGUIDByName(args.NextString(), out player, out group, out guid))
return false; return false;
if (!group) if (!group)
@@ -490,12 +468,12 @@ namespace Game.Chat
if (group.GetMemberFlags(guid).HasAnyFlag(flag)) if (group.GetMemberFlags(guid).HasAnyFlag(flag))
{ {
group.SetGroupMemberFlag(guid, false, flag); group.SetGroupMemberFlag(guid, false, flag);
handler.SendSysMessage(CypherStrings.GroupRoleChanged, player.GetName(), "no longer", what); handler.SendSysMessage(CypherStrings.GroupRoleChanged, player.GetName(), "no longer", flag);
} }
else else
{ {
group.SetGroupMemberFlag(guid, true, flag); group.SetGroupMemberFlag(guid, true, flag);
handler.SendSysMessage(CypherStrings.GroupRoleChanged, player.GetName(), "now", what); handler.SendSysMessage(CypherStrings.GroupRoleChanged, player.GetName(), "now", flag);
} }
return true; return true;
} }
+23 -32
View File
@@ -70,10 +70,9 @@ namespace Game.Chat
} }
[Command("delete", RBACPermissions.CommandGuildDelete, true)] [Command("delete", RBACPermissions.CommandGuildDelete, true)]
static bool HandleGuildDeleteCommand(CommandHandler handler, StringArguments args) static bool HandleGuildDeleteCommand(CommandHandler handler, QuotedString guildName)
{ {
string guildName = handler.ExtractQuotedArg(args.NextString()); if (guildName.IsEmpty())
if (string.IsNullOrEmpty(guildName))
return false; return false;
Guild guild = Global.GuildMgr.GetGuildByName(guildName); Guild guild = Global.GuildMgr.GetGuildByName(guildName);
@@ -85,37 +84,34 @@ namespace Game.Chat
} }
[Command("invite", RBACPermissions.CommandGuildInvite, true)] [Command("invite", RBACPermissions.CommandGuildInvite, true)]
static bool HandleGuildInviteCommand(CommandHandler handler, StringArguments args) static bool HandleGuildInviteCommand(CommandHandler handler, PlayerIdentifier targetIdentifier, QuotedString guildName)
{ {
if (args.Empty()) if (targetIdentifier == null)
targetIdentifier = PlayerIdentifier.FromTargetOrSelf(handler);
if (targetIdentifier == null)
return false; return false;
Player target; if (guildName.IsEmpty())
if (!handler.ExtractPlayerTarget(args[0] != '"' ? args : null, out target))
return false;
string guildName = handler.ExtractQuotedArg(args.NextString());
if (string.IsNullOrEmpty(guildName))
return false; return false;
Guild targetGuild = Global.GuildMgr.GetGuildByName(guildName); Guild targetGuild = Global.GuildMgr.GetGuildByName(guildName);
if (targetGuild == null) if (targetGuild == null)
return false; return false;
targetGuild.AddMember(null, target.GetGUID()); targetGuild.AddMember(null, targetIdentifier.GetGUID());
return true; return true;
} }
[Command("uninvite", RBACPermissions.CommandGuildUninvite, true)] [Command("uninvite", RBACPermissions.CommandGuildUninvite, true)]
static bool HandleGuildUninviteCommand(CommandHandler handler, StringArguments args) static bool HandleGuildUninviteCommand(CommandHandler handler, PlayerIdentifier targetIdentifier, QuotedString guildName)
{ {
Player target; if (targetIdentifier == null)
ObjectGuid targetGuid; targetIdentifier = PlayerIdentifier.FromTargetOrSelf(handler);
if (!handler.ExtractPlayerTarget(args, out target, out targetGuid)) if (targetIdentifier == null)
return false; return false;
ulong guildId = target != null ? target.GetGuildId() : Global.CharacterCacheStorage.GetCharacterGuildIdByGuid(targetGuid); ulong guildId = targetIdentifier.IsConnected() ? targetIdentifier.GetConnectedPlayer().GetGuildId() : Global.CharacterCacheStorage.GetCharacterGuildIdByGuid(targetIdentifier.GetGUID());
if (guildId == 0) if (guildId == 0)
return false; return false;
@@ -123,7 +119,7 @@ namespace Game.Chat
if (targetGuild == null) if (targetGuild == null)
return false; return false;
targetGuild.DeleteMember(null, targetGuid, false, true, true); targetGuild.DeleteMember(null, targetIdentifier.GetGUID(), false, true, true);
return true; return true;
} }
@@ -147,45 +143,40 @@ namespace Game.Chat
} }
[Command("rename", RBACPermissions.CommandGuildRename, true)] [Command("rename", RBACPermissions.CommandGuildRename, true)]
static bool HandleGuildRenameCommand(CommandHandler handler, StringArguments args) static bool HandleGuildRenameCommand(CommandHandler handler, QuotedString oldGuildName, QuotedString newGuildName)
{ {
if (args.Empty()) if (oldGuildName.IsEmpty())
return false;
string oldGuildStr = handler.ExtractQuotedArg(args.NextString());
if (string.IsNullOrEmpty(oldGuildStr))
{ {
handler.SendSysMessage(CypherStrings.BadValue); handler.SendSysMessage(CypherStrings.BadValue);
return false; return false;
} }
string newGuildStr = handler.ExtractQuotedArg(args.NextString()); if (newGuildName.IsEmpty())
if (string.IsNullOrEmpty(newGuildStr))
{ {
handler.SendSysMessage(CypherStrings.InsertGuildName); handler.SendSysMessage(CypherStrings.InsertGuildName);
return false; return false;
} }
Guild guild = Global.GuildMgr.GetGuildByName(oldGuildStr); Guild guild = Global.GuildMgr.GetGuildByName(oldGuildName);
if (!guild) if (!guild)
{ {
handler.SendSysMessage(CypherStrings.CommandCouldnotfind, oldGuildStr); handler.SendSysMessage(CypherStrings.CommandCouldnotfind, oldGuildName);
return false; return false;
} }
if (Global.GuildMgr.GetGuildByName(newGuildStr)) if (Global.GuildMgr.GetGuildByName(newGuildName))
{ {
handler.SendSysMessage(CypherStrings.GuildRenameAlreadyExists, newGuildStr); handler.SendSysMessage(CypherStrings.GuildRenameAlreadyExists, newGuildName);
return false; return false;
} }
if (!guild.SetName(newGuildStr)) if (!guild.SetName(newGuildName))
{ {
handler.SendSysMessage(CypherStrings.BadValue); handler.SendSysMessage(CypherStrings.BadValue);
return false; return false;
} }
handler.SendSysMessage(CypherStrings.GuildRenameDone, oldGuildStr, newGuildStr); handler.SendSysMessage(CypherStrings.GuildRenameDone, oldGuildName, newGuildName);
return true; return true;
} }
+43 -94
View File
@@ -15,11 +15,12 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
using Framework.Collections;
using Framework.Constants; using Framework.Constants;
using Framework.Database; using Framework.Database;
using Framework.IO;
using Game.Entities; using Game.Entities;
using Game.Mails; using Game.Mails;
using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Game.Chat.Commands namespace Game.Chat.Commands
@@ -28,29 +29,15 @@ namespace Game.Chat.Commands
class SendCommands class SendCommands
{ {
[Command("mail", RBACPermissions.CommandSendMail, true)] [Command("mail", RBACPermissions.CommandSendMail, true)]
static bool HandleSendMailCommand(CommandHandler handler, StringArguments args) static bool HandleSendMailCommand(CommandHandler handler, PlayerIdentifier playerIdentifier, QuotedString subject, QuotedString text)
{ {
// format: name "subject text" "mail text" // format: name "subject text" "mail text"
Player target; if (playerIdentifier == null)
ObjectGuid targetGuid; playerIdentifier = PlayerIdentifier.FromTarget(handler);
string targetName; if (playerIdentifier == null)
if (!handler.ExtractPlayerTarget(args, out target, out targetGuid, out targetName))
return false; return false;
string tail1 = args.NextString(""); if (subject.IsEmpty() || text.IsEmpty())
if (string.IsNullOrEmpty(tail1))
return false;
string subject = handler.ExtractQuotedArg(tail1);
if (string.IsNullOrEmpty(subject))
return false;
string tail2 = args.NextString("");
if (string.IsNullOrEmpty(tail2))
return false;
string text = handler.ExtractQuotedArg(tail2);
if (string.IsNullOrEmpty(text))
return false; return false;
// from console show not existed sender // from console show not existed sender
@@ -59,78 +46,58 @@ namespace Game.Chat.Commands
// @todo Fix poor design // @todo Fix poor design
SQLTransaction trans = new(); SQLTransaction trans = new();
new MailDraft(subject, text) new MailDraft(subject, text)
.SendMailTo(trans, new MailReceiver(target, targetGuid.GetCounter()), sender); .SendMailTo(trans, new MailReceiver(playerIdentifier.GetGUID().GetCounter()), sender);
DB.Characters.CommitTransaction(trans); DB.Characters.CommitTransaction(trans);
string nameLink = handler.PlayerLink(targetName); string nameLink = handler.PlayerLink(playerIdentifier.GetName());
handler.SendSysMessage(CypherStrings.MailSent, nameLink); handler.SendSysMessage(CypherStrings.MailSent, nameLink);
return true; return true;
} }
[Command("items", RBACPermissions.CommandSendItems, true)] [Command("items", RBACPermissions.CommandSendItems, true)]
static bool HandleSendItemsCommand(CommandHandler handler, StringArguments args) static bool HandleSendItemsCommand(CommandHandler handler, PlayerIdentifier playerIdentifier, QuotedString subject, QuotedString text, string itemsStr)
{ {
// format: name "subject text" "mail text" item1[:count1] item2[:count2] ... item12[:count12] // format: name "subject text" "mail text" item1[:count1] item2[:count2] ... item12[:count12]
Player receiver; if (playerIdentifier == null)
ObjectGuid receiverGuid; playerIdentifier = PlayerIdentifier.FromTarget(handler);
string receiverName; if (playerIdentifier == null)
if (!handler.ExtractPlayerTarget(args, out receiver, out receiverGuid, out receiverName))
return false; return false;
string tail1 = args.NextString(""); if (subject.IsEmpty() || text.IsEmpty())
if (string.IsNullOrEmpty(tail1))
return false;
string subject = handler.ExtractQuotedArg(tail1);
if (string.IsNullOrEmpty(subject))
return false;
string tail2 = args.NextString("");
if (string.IsNullOrEmpty(tail2))
return false;
string text = handler.ExtractQuotedArg(tail2);
if (string.IsNullOrEmpty(text))
return false; return false;
// extract items // extract items
List<KeyValuePair<uint, uint>> items = new(); List<KeyValuePair<uint, uint>> items = new();
// get all tail string var tokens = new StringArray(itemsStr, ' ');
StringArguments tail = new(args.NextString("")); for (var i = 0; i < tokens.Length; ++i)
// get from tail next item str
StringArguments itemStr;
while (!(itemStr = new StringArguments(tail.NextString(" "))).Empty())
{ {
// parse item str // parse item str
string itemIdStr = itemStr.NextString(":"); string[] itemIdAndCountStr = tokens[i].Split(':');
string itemCountStr = itemStr.NextString(" "); if (!uint.TryParse(itemIdAndCountStr[0], out uint itemId) || itemId == 0)
if (!uint.TryParse(itemIdStr, out uint itemId) || itemId == 0)
return false; return false;
ItemTemplate item_proto = Global.ObjectMgr.GetItemTemplate(itemId); ItemTemplate itemProto = Global.ObjectMgr.GetItemTemplate(itemId);
if (item_proto == null) if (itemProto == null)
{ {
handler.SendSysMessage(CypherStrings.CommandItemidinvalid, itemId); handler.SendSysMessage(CypherStrings.CommandItemidinvalid, itemId);
return false; return false;
} }
if (string.IsNullOrEmpty(itemCountStr) || !uint.TryParse(itemCountStr, out uint itemCount)) if (itemIdAndCountStr[1].IsEmpty() || !uint.TryParse(itemIdAndCountStr[1], out uint itemCount))
itemCount = 1; itemCount = 1;
if (itemCount < 1 || (item_proto.GetMaxCount() > 0 && itemCount > item_proto.GetMaxCount())) if (itemCount < 1 || (itemProto.GetMaxCount() > 0 && itemCount > itemProto.GetMaxCount()))
{ {
handler.SendSysMessage(CypherStrings.CommandInvalidItemCount, itemCount, itemId); handler.SendSysMessage(CypherStrings.CommandInvalidItemCount, itemCount, itemId);
return false; return false;
} }
while (itemCount > item_proto.GetMaxStackSize()) while (itemCount > itemProto.GetMaxStackSize())
{ {
items.Add(new KeyValuePair<uint, uint>(itemId, item_proto.GetMaxStackSize())); items.Add(new KeyValuePair<uint, uint>(itemId, itemProto.GetMaxStackSize()));
itemCount -= item_proto.GetMaxStackSize(); itemCount -= itemProto.GetMaxStackSize();
} }
items.Add(new KeyValuePair<uint, uint>(itemId, itemCount)); items.Add(new KeyValuePair<uint, uint>(itemId, itemCount));
@@ -160,44 +127,26 @@ namespace Game.Chat.Commands
} }
} }
draft.SendMailTo(trans, new MailReceiver(receiver, receiverGuid.GetCounter()), sender); draft.SendMailTo(trans, new MailReceiver(playerIdentifier.GetGUID().GetCounter()), sender);
DB.Characters.CommitTransaction(trans); DB.Characters.CommitTransaction(trans);
string nameLink = handler.PlayerLink(receiverName); string nameLink = handler.PlayerLink(playerIdentifier.GetName());
handler.SendSysMessage(CypherStrings.MailSent, nameLink); handler.SendSysMessage(CypherStrings.MailSent, nameLink);
return true; return true;
} }
[Command("money", RBACPermissions.CommandSendMoney, true)] [Command("money", RBACPermissions.CommandSendMoney, true)]
static bool HandleSendMoneyCommand(CommandHandler handler, StringArguments args) static bool HandleSendMoneyCommand(CommandHandler handler, PlayerIdentifier playerIdentifier, QuotedString subject, QuotedString text, long money)
{ {
// format: name "subject text" "mail text" money // format: name "subject text" "mail text" money
if (playerIdentifier == null)
Player receiver; playerIdentifier = PlayerIdentifier.FromTarget(handler);
ObjectGuid receiverGuid; if (playerIdentifier == null)
string receiverName;
if (!handler.ExtractPlayerTarget(args, out receiver, out receiverGuid, out receiverName))
return false; return false;
string tail1 = args.NextString(""); if (subject.IsEmpty() || text.IsEmpty())
if (string.IsNullOrEmpty(tail1))
return false; return false;
string subject = handler.ExtractQuotedArg(tail1);
if (string.IsNullOrEmpty(subject))
return false;
string tail2 = args.NextString("");
if (string.IsNullOrEmpty(tail2))
return false;
string text = handler.ExtractQuotedArg(tail2);
if (string.IsNullOrEmpty(text))
return false;
if (!long.TryParse(args.NextString(""), out long money))
money = 0;
if (money <= 0) if (money <= 0)
return false; return false;
@@ -208,40 +157,40 @@ namespace Game.Chat.Commands
new MailDraft(subject, text) new MailDraft(subject, text)
.AddMoney((uint)money) .AddMoney((uint)money)
.SendMailTo(trans, new MailReceiver(receiver, receiverGuid.GetCounter()), sender); .SendMailTo(trans, new MailReceiver(playerIdentifier.GetGUID().GetCounter()), sender);
DB.Characters.CommitTransaction(trans); DB.Characters.CommitTransaction(trans);
string nameLink = handler.PlayerLink(receiverName); string nameLink = handler.PlayerLink(playerIdentifier.GetName());
handler.SendSysMessage(CypherStrings.MailSent, nameLink); handler.SendSysMessage(CypherStrings.MailSent, nameLink);
return true; return true;
} }
[Command("message", RBACPermissions.CommandSendMessage, true)] [Command("message", RBACPermissions.CommandSendMessage, true)]
static bool HandleSendMessageCommand(CommandHandler handler, StringArguments args) static bool HandleSendMessageCommand(CommandHandler handler, PlayerIdentifier playerIdentifier, QuotedString msgStr)
{ {
// - Find the player // - Find the player
Player player; if (playerIdentifier == null)
if (!handler.ExtractPlayerTarget(args, out player)) playerIdentifier = PlayerIdentifier.FromTarget(handler);
if (playerIdentifier == null || !playerIdentifier.IsConnected())
return false; return false;
string msgStr = args.NextString(""); if (!msgStr.IsEmpty())
if (string.IsNullOrEmpty(msgStr))
return false; return false;
// Check that he is not logging out. // Check that he is not logging out.
if (player.GetSession().IsLogingOut()) if (playerIdentifier.GetConnectedPlayer().GetSession().IsLogingOut())
{ {
handler.SendSysMessage(CypherStrings.PlayerNotFound); handler.SendSysMessage(CypherStrings.PlayerNotFound);
return false; return false;
} }
// - Send the message // - Send the message
player.GetSession().SendNotification("{0}", msgStr); playerIdentifier.GetConnectedPlayer().GetSession().SendNotification("{0}", msgStr);
player.GetSession().SendNotification("|cffff0000[Message from administrator]:|r"); playerIdentifier.GetConnectedPlayer().GetSession().SendNotification("|cffff0000[Message from administrator]:|r");
// Confirmation message // Confirmation message
string nameLink = handler.GetNameLink(player); string nameLink = handler.GetNameLink(playerIdentifier.GetConnectedPlayer());
handler.SendSysMessage(CypherStrings.Sendmessage, nameLink, msgStr); handler.SendSysMessage(CypherStrings.Sendmessage, nameLink, msgStr);
return true; return true;
+7 -3
View File
@@ -1745,12 +1745,16 @@ namespace Game
/// Ban an account or ban an IP address, duration will be parsed using TimeStringToSecs if it is positive, otherwise permban /// Ban an account or ban an IP address, duration will be parsed using TimeStringToSecs if it is positive, otherwise permban
public BanReturn BanCharacter(string name, string duration, string reason, string author) public BanReturn BanCharacter(string name, string duration, string reason, string author)
{
uint durationSecs = Time.TimeStringToSecs(duration);
return BanAccount(BanMode.Character, name, durationSecs, reason, author);
}
public BanReturn BanCharacter(string name, uint durationSecs, string reason, string author)
{ {
Player pBanned = Global.ObjAccessor.FindConnectedPlayerByName(name); Player pBanned = Global.ObjAccessor.FindConnectedPlayerByName(name);
ObjectGuid guid; ObjectGuid guid;
uint duration_secs = Time.TimeStringToSecs(duration);
// Pick a player to ban if not online // Pick a player to ban if not online
if (!pBanned) if (!pBanned)
{ {
@@ -1771,7 +1775,7 @@ namespace Game
stmt = DB.Characters.GetPreparedStatement(CharStatements.INS_CHARACTER_BAN); stmt = DB.Characters.GetPreparedStatement(CharStatements.INS_CHARACTER_BAN);
stmt.AddValue(0, guid.GetCounter()); stmt.AddValue(0, guid.GetCounter());
stmt.AddValue(1, (long)duration_secs); stmt.AddValue(1, (long)durationSecs);
stmt.AddValue(2, author); stmt.AddValue(2, author);
stmt.AddValue(3, reason); stmt.AddValue(3, reason);
trans.Append(stmt); trans.Append(stmt);