Update some commands to new system.
This commit is contained in:
@@ -241,6 +241,9 @@ namespace Game.Chat
|
||||
case nameof(Tail):
|
||||
val = new Tail();
|
||||
return val.TryConsume(handler, args);
|
||||
case nameof(QuotedString):
|
||||
val = new QuotedString();
|
||||
return val.TryConsume(handler, args);
|
||||
case nameof(PlayerIdentifier):
|
||||
val = new PlayerIdentifier();
|
||||
return val.TryConsume(handler, args);
|
||||
|
||||
@@ -143,7 +143,7 @@ namespace Game.Chat
|
||||
return null;
|
||||
|
||||
if (!str.Contains("\""))
|
||||
return null;
|
||||
return str;
|
||||
|
||||
return str.Replace("\"", String.Empty);
|
||||
}
|
||||
|
||||
@@ -85,9 +85,8 @@ namespace Game.Chat
|
||||
_guid = ObjectGuid.Create(HighGuid.Player, tempVal);
|
||||
if ((_player = Global.ObjAccessor.FindPlayerByLowGUID(_guid.GetCounter())) != null)
|
||||
_name = _player.GetName();
|
||||
else
|
||||
if (!Global.CharacterCacheStorage.GetCharacterNameByGuid(_guid, out _name))
|
||||
return ChatCommandResult.FromErrorMessage(handler.GetParsedString(CypherStrings.CmdparserCharGuidNoExist, _guid.ToString()));
|
||||
else if (!Global.CharacterCacheStorage.GetCharacterNameByGuid(_guid, out _name))
|
||||
return ChatCommandResult.FromErrorMessage(handler.GetParsedString(CypherStrings.CmdparserCharGuidNoExist, _guid.ToString()));
|
||||
return next;
|
||||
}
|
||||
else
|
||||
@@ -185,4 +184,49 @@ namespace Game.Chat
|
||||
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("");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
|
||||
using Framework.Constants;
|
||||
using Framework.Database;
|
||||
using Framework.IO;
|
||||
using Game.Entities;
|
||||
using System;
|
||||
using System.Net;
|
||||
@@ -28,33 +27,24 @@ namespace Game.Chat.Commands
|
||||
class BanCommands
|
||||
{
|
||||
[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)]
|
||||
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;
|
||||
|
||||
string name = args.NextString();
|
||||
if (string.IsNullOrEmpty(name))
|
||||
if (duration == 0)
|
||||
return false;
|
||||
|
||||
string durationStr = args.NextString();
|
||||
if (string.IsNullOrEmpty(durationStr))
|
||||
if (reason.IsEmpty())
|
||||
return false;
|
||||
|
||||
if (!uint.TryParse(durationStr, out uint duration))
|
||||
return false;
|
||||
|
||||
string reasonStr = args.NextString("");
|
||||
if (string.IsNullOrEmpty(reasonStr))
|
||||
return false;
|
||||
|
||||
if (!ObjectManager.NormalizePlayerName(ref name))
|
||||
if (!ObjectManager.NormalizePlayerName(ref playerName))
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.PlayerNotFound);
|
||||
return false;
|
||||
@@ -62,31 +52,31 @@ namespace Game.Chat.Commands
|
||||
|
||||
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:
|
||||
{
|
||||
if (duration > 0)
|
||||
{
|
||||
if (duration > 0)
|
||||
{
|
||||
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);
|
||||
}
|
||||
if (WorldConfig.GetBoolValue(WorldCfg.ShowBanInWorld))
|
||||
Global.WorldMgr.SendWorldText(CypherStrings.BanCharacterYoubannedmessageWorld, author, playerName, Time.secsToTimeString(duration, TimeFormat.ShortText), reason);
|
||||
else
|
||||
{
|
||||
if (WorldConfig.GetBoolValue(WorldCfg.ShowBanInWorld))
|
||||
Global.WorldMgr.SendWorldText(CypherStrings.BanCharacterYoupermbannedmessageWorld, author, name, reasonStr);
|
||||
else
|
||||
handler.SendSysMessage(CypherStrings.BanYoupermbanned, name, reasonStr);
|
||||
}
|
||||
break;
|
||||
handler.SendSysMessage(CypherStrings.BanYoubanned, playerName, Time.secsToTimeString(duration, TimeFormat.ShortText), reason);
|
||||
}
|
||||
case BanReturn.Notfound:
|
||||
else
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.BanNotfound, "character", name);
|
||||
return false;
|
||||
if (WorldConfig.GetBoolValue(WorldCfg.ShowBanInWorld))
|
||||
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:
|
||||
break;
|
||||
}
|
||||
@@ -95,32 +85,23 @@ namespace Game.Chat.Commands
|
||||
}
|
||||
|
||||
[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)]
|
||||
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;
|
||||
|
||||
string nameOrIP = args.NextString();
|
||||
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))
|
||||
if (reason.IsEmpty())
|
||||
return false;
|
||||
|
||||
switch (mode)
|
||||
@@ -139,22 +120,22 @@ namespace Game.Chat.Commands
|
||||
}
|
||||
|
||||
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:
|
||||
if (duration > 0)
|
||||
{
|
||||
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
|
||||
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
|
||||
{
|
||||
if (WorldConfig.GetBoolValue(WorldCfg.ShowBanInWorld))
|
||||
Global.WorldMgr.SendWorldText(CypherStrings.BanAccountYoupermbannedmessageWorld, author, nameOrIP, reasonStr);
|
||||
Global.WorldMgr.SendWorldText(CypherStrings.BanAccountYoupermbannedmessageWorld, author, nameOrIP, reason);
|
||||
else
|
||||
handler.SendSysMessage(CypherStrings.BanYoupermbanned, nameOrIP, reasonStr);
|
||||
handler.SendSysMessage(CypherStrings.BanYoupermbanned, nameOrIP, reason);
|
||||
}
|
||||
break;
|
||||
case BanReturn.SyntaxError:
|
||||
@@ -186,13 +167,9 @@ namespace Game.Chat.Commands
|
||||
class BanInfoCommands
|
||||
{
|
||||
[Command("account", RBACPermissions.CommandBaninfoAccount, true)]
|
||||
static bool HandleBanInfoAccountCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleBanInfoAccountCommand(CommandHandler handler, string accountName)
|
||||
{
|
||||
if (args.Empty())
|
||||
return false;
|
||||
|
||||
string accountName = args.NextString("");
|
||||
if (string.IsNullOrEmpty(accountName))
|
||||
if (accountName.IsEmpty())
|
||||
return false;
|
||||
|
||||
uint accountId = Global.AccountMgr.GetId(accountName);
|
||||
@@ -206,12 +183,8 @@ namespace Game.Chat.Commands
|
||||
}
|
||||
|
||||
[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))
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.BaninfoNocharacter);
|
||||
@@ -251,7 +224,7 @@ namespace Game.Chat.Commands
|
||||
active = true;
|
||||
bool permanent = (result.Read<long>(1) == 0L);
|
||||
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));
|
||||
}
|
||||
while (result.NextRow());
|
||||
@@ -260,13 +233,9 @@ namespace Game.Chat.Commands
|
||||
}
|
||||
|
||||
[Command("ip", RBACPermissions.CommandBaninfoIp, true)]
|
||||
static bool HandleBanInfoIPCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleBanInfoIPCommand(CommandHandler handler, string ip)
|
||||
{
|
||||
if (args.Empty())
|
||||
return false;
|
||||
|
||||
string ip = args.NextString("");
|
||||
if (string.IsNullOrEmpty(ip))
|
||||
if (ip.IsEmpty())
|
||||
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);
|
||||
@@ -277,8 +246,8 @@ namespace Game.Chat.Commands
|
||||
}
|
||||
|
||||
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),
|
||||
permanent ? handler.GetCypherString( CypherStrings.BaninfoInfinite) : Time.secsToTimeString(result.Read<ulong>(3), TimeFormat.ShortText), result.Read<string>(4), result.Read<string>(5));
|
||||
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));
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -308,23 +277,19 @@ namespace Game.Chat.Commands
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[CommandGroup("banlist")]
|
||||
class BanListCommands
|
||||
{
|
||||
[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);
|
||||
DB.Login.Execute(stmt);
|
||||
|
||||
string filterStr = args.NextString();
|
||||
string filter = !string.IsNullOrEmpty(filterStr) ? filterStr : "";
|
||||
|
||||
SQLResult result;
|
||||
if (string.IsNullOrEmpty(filter))
|
||||
if (filter.IsEmpty())
|
||||
{
|
||||
stmt = DB.Login.GetPreparedStatement(LoginStatements.SEL_ACCOUNT_BANNED_ALL);
|
||||
result = DB.Login.Query(stmt);
|
||||
@@ -346,13 +311,9 @@ namespace Game.Chat.Commands
|
||||
}
|
||||
|
||||
[Command("character", RBACPermissions.CommandBanlistCharacter, true)]
|
||||
static bool HandleBanListCharacterCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleBanListCharacterCommand(CommandHandler handler, string filter)
|
||||
{
|
||||
if (args.Empty())
|
||||
return false;
|
||||
|
||||
string filter = args.NextString();
|
||||
if (string.IsNullOrEmpty(filter))
|
||||
if (filter.IsEmpty())
|
||||
return false;
|
||||
|
||||
PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_GUID_BY_NAME_FILTER);
|
||||
@@ -431,17 +392,14 @@ namespace Game.Chat.Commands
|
||||
}
|
||||
|
||||
[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);
|
||||
DB.Login.Execute(stmt);
|
||||
|
||||
string filterStr = args.NextString();
|
||||
string filter = !string.IsNullOrEmpty(filterStr) ? filterStr : "";
|
||||
|
||||
SQLResult result;
|
||||
|
||||
if (string.IsNullOrEmpty(filter))
|
||||
if (filter.IsEmpty())
|
||||
{
|
||||
stmt = DB.Login.GetPreparedStatement(LoginStatements.SEL_IP_BANNED_ALL);
|
||||
result = DB.Login.Query(stmt);
|
||||
@@ -570,7 +528,7 @@ namespace Game.Chat.Commands
|
||||
}
|
||||
else
|
||||
{
|
||||
long timeUnban = banInfo.Read <uint>(1);
|
||||
long timeUnban = banInfo.Read<uint>(1);
|
||||
DateTime tmUnban;
|
||||
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}|",
|
||||
@@ -595,18 +553,14 @@ namespace Game.Chat.Commands
|
||||
class UnBanCommands
|
||||
{
|
||||
[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)]
|
||||
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))
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.PlayerNotFound);
|
||||
@@ -624,47 +578,43 @@ namespace Game.Chat.Commands
|
||||
}
|
||||
|
||||
[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)]
|
||||
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())
|
||||
return false;
|
||||
|
||||
string nameOrIP = args.NextString();
|
||||
if (string.IsNullOrEmpty(nameOrIP))
|
||||
if (nameOrIp.IsEmpty())
|
||||
return false;
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
case BanMode.Character:
|
||||
if (!ObjectManager.NormalizePlayerName(ref nameOrIP))
|
||||
if (!ObjectManager.NormalizePlayerName(ref nameOrIp))
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.PlayerNotFound);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case BanMode.IP:
|
||||
if (!IPAddress.TryParse(nameOrIP, out _))
|
||||
if (!IPAddress.TryParse(nameOrIp, out _))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (Global.WorldMgr.RemoveBanAccount(mode, nameOrIP))
|
||||
handler.SendSysMessage(CypherStrings.UnbanUnbanned, nameOrIP);
|
||||
if (Global.WorldMgr.RemoveBanAccount(mode, nameOrIp))
|
||||
handler.SendSysMessage(CypherStrings.UnbanUnbanned, nameOrIp);
|
||||
else
|
||||
handler.SendSysMessage(CypherStrings.UnbanError, nameOrIP);
|
||||
handler.SendSysMessage(CypherStrings.UnbanError, nameOrIp);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,8 +17,8 @@
|
||||
|
||||
using Framework.Constants;
|
||||
using Framework.Database;
|
||||
using Framework.IO;
|
||||
using Game.DataStorage;
|
||||
using System;
|
||||
|
||||
namespace Game.Chat.Commands
|
||||
{
|
||||
@@ -28,19 +28,14 @@ namespace Game.Chat.Commands
|
||||
[CommandGroup("add")]
|
||||
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)
|
||||
return false;
|
||||
|
||||
uint flags = args.NextUInt32();
|
||||
|
||||
string disableComment = args.NextString("");
|
||||
if (string.IsNullOrEmpty(disableComment))
|
||||
if (disableComment.IsEmpty())
|
||||
return false;
|
||||
|
||||
string disableTypeStr = "";
|
||||
switch (disableType)
|
||||
{
|
||||
case DisableType.Spell:
|
||||
@@ -50,7 +45,6 @@ namespace Game.Chat.Commands
|
||||
handler.SendSysMessage(CypherStrings.CommandNospellfound);
|
||||
return false;
|
||||
}
|
||||
disableTypeStr = "spell";
|
||||
break;
|
||||
}
|
||||
case DisableType.Quest:
|
||||
@@ -60,7 +54,6 @@ namespace Game.Chat.Commands
|
||||
handler.SendSysMessage(CypherStrings.CommandNoquestfound, entry);
|
||||
return false;
|
||||
}
|
||||
disableTypeStr = "quest";
|
||||
break;
|
||||
}
|
||||
case DisableType.Map:
|
||||
@@ -70,7 +63,6 @@ namespace Game.Chat.Commands
|
||||
handler.SendSysMessage(CypherStrings.CommandNomapfound);
|
||||
return false;
|
||||
}
|
||||
disableTypeStr = "map";
|
||||
break;
|
||||
}
|
||||
case DisableType.Battleground:
|
||||
@@ -80,7 +72,6 @@ namespace Game.Chat.Commands
|
||||
handler.SendSysMessage(CypherStrings.CommandNoBattlegroundFound);
|
||||
return false;
|
||||
}
|
||||
disableTypeStr = "Battleground";
|
||||
break;
|
||||
}
|
||||
case DisableType.Criteria:
|
||||
@@ -90,7 +81,6 @@ namespace Game.Chat.Commands
|
||||
handler.SendSysMessage(CypherStrings.CommandNoAchievementCriteriaFound);
|
||||
return false;
|
||||
}
|
||||
disableTypeStr = "criteria";
|
||||
break;
|
||||
}
|
||||
case DisableType.OutdoorPVP:
|
||||
@@ -100,7 +90,6 @@ namespace Game.Chat.Commands
|
||||
handler.SendSysMessage(CypherStrings.CommandNoOutdoorPvpForund);
|
||||
return false;
|
||||
}
|
||||
disableTypeStr = "outdoorpvp";
|
||||
break;
|
||||
}
|
||||
case DisableType.VMAP:
|
||||
@@ -110,7 +99,6 @@ namespace Game.Chat.Commands
|
||||
handler.SendSysMessage(CypherStrings.CommandNomapfound);
|
||||
return false;
|
||||
}
|
||||
disableTypeStr = "vmap";
|
||||
break;
|
||||
}
|
||||
case DisableType.MMAP:
|
||||
@@ -120,7 +108,6 @@ namespace Game.Chat.Commands
|
||||
handler.SendSysMessage(CypherStrings.CommandNomapfound);
|
||||
return false;
|
||||
}
|
||||
disableTypeStr = "mmap";
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@@ -133,7 +120,7 @@ namespace Game.Chat.Commands
|
||||
SQLResult result = DB.World.Query(stmt);
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -144,128 +131,74 @@ namespace Game.Chat.Commands
|
||||
stmt.AddValue(3, disableComment);
|
||||
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;
|
||||
}
|
||||
|
||||
[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 false;
|
||||
|
||||
return HandleAddDisables(args, handler, DisableType.Spell);
|
||||
return HandleAddDisables(entry, flags, disableComment, handler, DisableType.Spell);
|
||||
}
|
||||
|
||||
[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 false;
|
||||
|
||||
return HandleAddDisables(args, handler, DisableType.Quest);
|
||||
return HandleAddDisables(entry, flags, disableComment, handler, DisableType.Quest);
|
||||
}
|
||||
|
||||
[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 false;
|
||||
|
||||
return HandleAddDisables(args, handler, DisableType.Map);
|
||||
return HandleAddDisables(entry, flags, disableComment, handler, DisableType.Map);
|
||||
}
|
||||
|
||||
[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 false;
|
||||
|
||||
return HandleAddDisables(args, handler, DisableType.Battleground);
|
||||
return HandleAddDisables(entry, flags, disableComment, handler, DisableType.Battleground);
|
||||
}
|
||||
|
||||
[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 false;
|
||||
|
||||
return HandleAddDisables(args, handler, DisableType.Criteria);
|
||||
return HandleAddDisables(entry, flags, disableComment, handler, DisableType.Criteria);
|
||||
}
|
||||
|
||||
[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 false;
|
||||
|
||||
HandleAddDisables(args, handler, DisableType.OutdoorPVP);
|
||||
return true;
|
||||
return HandleAddDisables(entry, flags, disableComment, handler, DisableType.OutdoorPVP);
|
||||
}
|
||||
|
||||
[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 false;
|
||||
|
||||
return HandleAddDisables(args, handler, DisableType.VMAP);
|
||||
return HandleAddDisables(entry, flags, disableComment, handler, DisableType.VMAP);
|
||||
}
|
||||
|
||||
[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 false;
|
||||
|
||||
return HandleAddDisables(args, handler, DisableType.MMAP);
|
||||
return HandleAddDisables(entry, flags, disableComment, handler, DisableType.MMAP);
|
||||
}
|
||||
}
|
||||
|
||||
[CommandGroup("remove")]
|
||||
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;
|
||||
|
||||
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);
|
||||
stmt.AddValue(0, entry);
|
||||
stmt.AddValue(1, (byte)disableType);
|
||||
SQLResult result = DB.World.Query(stmt);
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -274,80 +207,56 @@ namespace Game.Chat.Commands
|
||||
stmt.AddValue(1, (byte)disableType);
|
||||
DB.World.Execute(stmt);
|
||||
|
||||
handler.SendSysMessage("Remove Disabled {0} (Id: {1})", disableTypeStr, entry);
|
||||
handler.SendSysMessage($"Remove Disabled {disableType} (Id: {entry})");
|
||||
return true;
|
||||
}
|
||||
|
||||
[Command("spell", RBACPermissions.CommandDisableRemoveSpell, true)]
|
||||
static bool HandleRemoveDisableSpellCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleRemoveDisableSpellCommand(CommandHandler handler, uint entry)
|
||||
{
|
||||
if (args.Empty())
|
||||
return false;
|
||||
|
||||
return HandleRemoveDisables(args, handler, DisableType.Spell);
|
||||
return HandleRemoveDisables(entry, handler, DisableType.Spell);
|
||||
}
|
||||
|
||||
[Command("quest", RBACPermissions.CommandDisableRemoveQuest, true)]
|
||||
static bool HandleRemoveDisableQuestCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleRemoveDisableQuestCommand(CommandHandler handler, uint entry)
|
||||
{
|
||||
if (args.Empty())
|
||||
return false;
|
||||
|
||||
return HandleRemoveDisables(args, handler, DisableType.Quest);
|
||||
return HandleRemoveDisables(entry, handler, DisableType.Quest);
|
||||
}
|
||||
|
||||
[Command("map", RBACPermissions.CommandDisableRemoveMap, true)]
|
||||
static bool HandleRemoveDisableMapCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleRemoveDisableMapCommand(CommandHandler handler, uint entry)
|
||||
{
|
||||
if (args.Empty())
|
||||
return false;
|
||||
|
||||
return HandleRemoveDisables(args, handler, DisableType.Map);
|
||||
return HandleRemoveDisables(entry, handler, DisableType.Map);
|
||||
}
|
||||
|
||||
[Command("Battleground", RBACPermissions.CommandDisableRemoveBattleground, true)]
|
||||
static bool HandleRemoveDisableBattlegroundCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleRemoveDisableBattlegroundCommand(CommandHandler handler, uint entry)
|
||||
{
|
||||
if (args.Empty())
|
||||
return false;
|
||||
|
||||
return HandleRemoveDisables(args, handler, DisableType.Battleground);
|
||||
return HandleRemoveDisables(entry, handler, DisableType.Battleground);
|
||||
}
|
||||
|
||||
[Command("criteria", RBACPermissions.CommandDisableRemoveCriteria, true)]
|
||||
static bool HandleRemoveDisableCriteriaCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleRemoveDisableCriteriaCommand(CommandHandler handler, uint entry)
|
||||
{
|
||||
if (args.Empty())
|
||||
return false;
|
||||
|
||||
return HandleRemoveDisables(args, handler, DisableType.Criteria);
|
||||
return HandleRemoveDisables(entry, handler, DisableType.Criteria);
|
||||
}
|
||||
|
||||
[Command("outdoorpvp", RBACPermissions.CommandDisableRemoveOutdoorpvp, true)]
|
||||
static bool HandleRemoveDisableOutdoorPvPCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleRemoveDisableOutdoorPvPCommand(CommandHandler handler, uint entry)
|
||||
{
|
||||
if (args.Empty())
|
||||
return false;
|
||||
|
||||
return HandleRemoveDisables(args, handler, DisableType.OutdoorPVP);
|
||||
return HandleRemoveDisables(entry, handler, DisableType.OutdoorPVP);
|
||||
}
|
||||
|
||||
[Command("vmap", RBACPermissions.CommandDisableRemoveVmap, true)]
|
||||
static bool HandleRemoveDisableVmapCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleRemoveDisableVmapCommand(CommandHandler handler, uint entry)
|
||||
{
|
||||
if (args.Empty())
|
||||
return false;
|
||||
|
||||
return HandleRemoveDisables(args, handler, DisableType.VMAP);
|
||||
return HandleRemoveDisables(entry, handler, DisableType.VMAP);
|
||||
}
|
||||
|
||||
[Command("mmap", RBACPermissions.CommandDisableRemoveMmap, true)]
|
||||
static bool HandleRemoveDisableMMapCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleRemoveDisableMMapCommand(CommandHandler handler, uint entry)
|
||||
{
|
||||
if (args.Empty())
|
||||
return false;
|
||||
|
||||
return HandleRemoveDisables(args, handler, DisableType.MMAP);
|
||||
return HandleRemoveDisables(entry, handler, DisableType.MMAP);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,13 +32,9 @@ namespace Game.Chat
|
||||
class GroupCommands
|
||||
{
|
||||
[Command("disband", RBACPermissions.CommandGroupDisband)]
|
||||
static bool HandleGroupDisbandCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleGroupDisbandCommand(CommandHandler handler, string name)
|
||||
{
|
||||
Player player;
|
||||
Group group;
|
||||
string nameStr = args.NextString();
|
||||
|
||||
if (!handler.GetPlayerGroupAndGUIDByName(nameStr, out player, out group, out _))
|
||||
if (!handler.GetPlayerGroupAndGUIDByName(name, out Player player, out Group group, out _))
|
||||
return false;
|
||||
|
||||
if (!group)
|
||||
@@ -52,19 +48,9 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[Command("join", RBACPermissions.CommandGroupJoin)]
|
||||
static bool HandleGroupJoinCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleGroupJoinCommand(CommandHandler handler, string playerNameGroup, string playerName)
|
||||
{
|
||||
if (args.Empty())
|
||||
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))
|
||||
if (!handler.GetPlayerGroupAndGUIDByName(playerNameGroup, out Player playerSource, out Group groupSource, out _, true))
|
||||
return false;
|
||||
|
||||
if (!groupSource)
|
||||
@@ -73,7 +59,7 @@ namespace Game.Chat
|
||||
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;
|
||||
|
||||
if (groupTarget || playerTarget.GetGroup() == groupSource)
|
||||
@@ -95,13 +81,9 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[Command("leader", RBACPermissions.CommandGroupLeader)]
|
||||
static bool HandleGroupLeaderCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleGroupLeaderCommand(CommandHandler handler, string name)
|
||||
{
|
||||
Player player;
|
||||
Group group;
|
||||
ObjectGuid guid;
|
||||
|
||||
if (!handler.GetPlayerGroupAndGUIDByName(args.NextString(), out player, out group, out guid))
|
||||
if (!handler.GetPlayerGroupAndGUIDByName(name, out Player player, out Group group, out ObjectGuid guid))
|
||||
return false;
|
||||
|
||||
if (!group)
|
||||
@@ -277,14 +259,9 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[Command("remove", RBACPermissions.CommandGroupRemove)]
|
||||
static bool HandleGroupRemoveCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleGroupRemoveCommand(CommandHandler handler, string name)
|
||||
{
|
||||
Player player;
|
||||
Group group;
|
||||
ObjectGuid guid;
|
||||
string nameStr = args.NextString();
|
||||
|
||||
if (!handler.GetPlayerGroupAndGUIDByName(nameStr, out player, out group, out guid))
|
||||
if (!handler.GetPlayerGroupAndGUIDByName(name, out Player player, out Group group, out ObjectGuid guid))
|
||||
return false;
|
||||
|
||||
if (!group)
|
||||
@@ -298,13 +275,14 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[Command("repair", RBACPermissions.CommandRepairitems, true)]
|
||||
static bool HandleGroupRepairCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleGroupRepairCommand(CommandHandler handler, PlayerIdentifier playerTarget)
|
||||
{
|
||||
Player playerTarget;
|
||||
if (!handler.ExtractPlayerTarget(args, out playerTarget))
|
||||
if (playerTarget == null)
|
||||
playerTarget = PlayerIdentifier.FromTargetOrSelf(handler);
|
||||
if (playerTarget == null || !playerTarget.IsConnected())
|
||||
return false;
|
||||
|
||||
Group groupTarget = playerTarget.GetGroup();
|
||||
Group groupTarget = playerTarget.GetConnectedPlayer().GetGroup();
|
||||
if (groupTarget == null)
|
||||
return false;
|
||||
|
||||
@@ -319,13 +297,14 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[Command("revive", RBACPermissions.CommandRevive, true)]
|
||||
static bool HandleGroupReviveCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleGroupReviveCommand(CommandHandler handler, PlayerIdentifier playerTarget)
|
||||
{
|
||||
Player playerTarget;
|
||||
if (!handler.ExtractPlayerTarget(args, out playerTarget))
|
||||
if (playerTarget == null)
|
||||
playerTarget = PlayerIdentifier.FromTargetOrSelf(handler);
|
||||
if (playerTarget == null || !playerTarget.IsConnected())
|
||||
return false;
|
||||
|
||||
Group groupTarget = playerTarget.GetGroup();
|
||||
Group groupTarget = playerTarget.GetConnectedPlayer().GetGroup();
|
||||
if (groupTarget == null)
|
||||
return false;
|
||||
|
||||
@@ -344,12 +323,15 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[Command("summon", RBACPermissions.CommandGroupSummon)]
|
||||
static bool HandleGroupSummonCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleGroupSummonCommand(CommandHandler handler, PlayerIdentifier playerTarget)
|
||||
{
|
||||
Player target;
|
||||
if (!handler.ExtractPlayerTarget(args, out target))
|
||||
if (playerTarget == null)
|
||||
playerTarget = PlayerIdentifier.FromTargetOrSelf(handler);
|
||||
if (playerTarget == null || !playerTarget.IsConnected())
|
||||
return false;
|
||||
|
||||
Player target = playerTarget.GetConnectedPlayer();
|
||||
|
||||
// check online security
|
||||
if (handler.HasLowerSecurity(target, ObjectGuid.Empty))
|
||||
return false;
|
||||
@@ -437,36 +419,32 @@ namespace Game.Chat
|
||||
class GroupSetCommands
|
||||
{
|
||||
[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)]
|
||||
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)]
|
||||
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)]
|
||||
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;
|
||||
Group group;
|
||||
ObjectGuid guid;
|
||||
|
||||
if (!handler.GetPlayerGroupAndGUIDByName(args.NextString(), out player, out group, out guid))
|
||||
if (!handler.GetPlayerGroupAndGUIDByName(name, out Player player, out Group group, out ObjectGuid guid))
|
||||
return false;
|
||||
|
||||
if (!group)
|
||||
@@ -490,12 +468,12 @@ namespace Game.Chat
|
||||
if (group.GetMemberFlags(guid).HasAnyFlag(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
|
||||
{
|
||||
group.SetGroupMemberFlag(guid, true, flag);
|
||||
handler.SendSysMessage(CypherStrings.GroupRoleChanged, player.GetName(), "now", what);
|
||||
handler.SendSysMessage(CypherStrings.GroupRoleChanged, player.GetName(), "now", flag);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -70,10 +70,9 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[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 (string.IsNullOrEmpty(guildName))
|
||||
if (guildName.IsEmpty())
|
||||
return false;
|
||||
|
||||
Guild guild = Global.GuildMgr.GetGuildByName(guildName);
|
||||
@@ -85,37 +84,34 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[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;
|
||||
|
||||
Player target;
|
||||
if (!handler.ExtractPlayerTarget(args[0] != '"' ? args : null, out target))
|
||||
return false;
|
||||
|
||||
string guildName = handler.ExtractQuotedArg(args.NextString());
|
||||
if (string.IsNullOrEmpty(guildName))
|
||||
if (guildName.IsEmpty())
|
||||
return false;
|
||||
|
||||
Guild targetGuild = Global.GuildMgr.GetGuildByName(guildName);
|
||||
if (targetGuild == null)
|
||||
return false;
|
||||
|
||||
targetGuild.AddMember(null, target.GetGUID());
|
||||
targetGuild.AddMember(null, targetIdentifier.GetGUID());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
[Command("uninvite", RBACPermissions.CommandGuildUninvite, true)]
|
||||
static bool HandleGuildUninviteCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleGuildUninviteCommand(CommandHandler handler, PlayerIdentifier targetIdentifier, QuotedString guildName)
|
||||
{
|
||||
Player target;
|
||||
ObjectGuid targetGuid;
|
||||
if (!handler.ExtractPlayerTarget(args, out target, out targetGuid))
|
||||
if (targetIdentifier == null)
|
||||
targetIdentifier = PlayerIdentifier.FromTargetOrSelf(handler);
|
||||
if (targetIdentifier == null)
|
||||
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)
|
||||
return false;
|
||||
|
||||
@@ -123,7 +119,7 @@ namespace Game.Chat
|
||||
if (targetGuild == null)
|
||||
return false;
|
||||
|
||||
targetGuild.DeleteMember(null, targetGuid, false, true, true);
|
||||
targetGuild.DeleteMember(null, targetIdentifier.GetGUID(), false, true, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -147,45 +143,40 @@ namespace Game.Chat
|
||||
}
|
||||
|
||||
[Command("rename", RBACPermissions.CommandGuildRename, true)]
|
||||
static bool HandleGuildRenameCommand(CommandHandler handler, StringArguments args)
|
||||
static bool HandleGuildRenameCommand(CommandHandler handler, QuotedString oldGuildName, QuotedString newGuildName)
|
||||
{
|
||||
if (args.Empty())
|
||||
return false;
|
||||
|
||||
string oldGuildStr = handler.ExtractQuotedArg(args.NextString());
|
||||
if (string.IsNullOrEmpty(oldGuildStr))
|
||||
if (oldGuildName.IsEmpty())
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.BadValue);
|
||||
return false;
|
||||
}
|
||||
|
||||
string newGuildStr = handler.ExtractQuotedArg(args.NextString());
|
||||
if (string.IsNullOrEmpty(newGuildStr))
|
||||
if (newGuildName.IsEmpty())
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.InsertGuildName);
|
||||
return false;
|
||||
}
|
||||
|
||||
Guild guild = Global.GuildMgr.GetGuildByName(oldGuildStr);
|
||||
Guild guild = Global.GuildMgr.GetGuildByName(oldGuildName);
|
||||
if (!guild)
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.CommandCouldnotfind, oldGuildStr);
|
||||
handler.SendSysMessage(CypherStrings.CommandCouldnotfind, oldGuildName);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Global.GuildMgr.GetGuildByName(newGuildStr))
|
||||
if (Global.GuildMgr.GetGuildByName(newGuildName))
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.GuildRenameAlreadyExists, newGuildStr);
|
||||
handler.SendSysMessage(CypherStrings.GuildRenameAlreadyExists, newGuildName);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!guild.SetName(newGuildStr))
|
||||
if (!guild.SetName(newGuildName))
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.BadValue);
|
||||
return false;
|
||||
}
|
||||
|
||||
handler.SendSysMessage(CypherStrings.GuildRenameDone, oldGuildStr, newGuildStr);
|
||||
handler.SendSysMessage(CypherStrings.GuildRenameDone, oldGuildName, newGuildName);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -15,11 +15,12 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using Framework.Collections;
|
||||
using Framework.Constants;
|
||||
using Framework.Database;
|
||||
using Framework.IO;
|
||||
using Game.Entities;
|
||||
using Game.Mails;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Game.Chat.Commands
|
||||
@@ -28,29 +29,15 @@ namespace Game.Chat.Commands
|
||||
class SendCommands
|
||||
{
|
||||
[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"
|
||||
Player target;
|
||||
ObjectGuid targetGuid;
|
||||
string targetName;
|
||||
if (!handler.ExtractPlayerTarget(args, out target, out targetGuid, out targetName))
|
||||
if (playerIdentifier == null)
|
||||
playerIdentifier = PlayerIdentifier.FromTarget(handler);
|
||||
if (playerIdentifier == null)
|
||||
return false;
|
||||
|
||||
string tail1 = args.NextString("");
|
||||
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))
|
||||
if (subject.IsEmpty() || text.IsEmpty())
|
||||
return false;
|
||||
|
||||
// from console show not existed sender
|
||||
@@ -59,78 +46,58 @@ namespace Game.Chat.Commands
|
||||
// @todo Fix poor design
|
||||
SQLTransaction trans = new();
|
||||
new MailDraft(subject, text)
|
||||
.SendMailTo(trans, new MailReceiver(target, targetGuid.GetCounter()), sender);
|
||||
.SendMailTo(trans, new MailReceiver(playerIdentifier.GetGUID().GetCounter()), sender);
|
||||
|
||||
DB.Characters.CommitTransaction(trans);
|
||||
|
||||
string nameLink = handler.PlayerLink(targetName);
|
||||
string nameLink = handler.PlayerLink(playerIdentifier.GetName());
|
||||
handler.SendSysMessage(CypherStrings.MailSent, nameLink);
|
||||
return 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]
|
||||
Player receiver;
|
||||
ObjectGuid receiverGuid;
|
||||
string receiverName;
|
||||
if (!handler.ExtractPlayerTarget(args, out receiver, out receiverGuid, out receiverName))
|
||||
if (playerIdentifier == null)
|
||||
playerIdentifier = PlayerIdentifier.FromTarget(handler);
|
||||
if (playerIdentifier == null)
|
||||
return false;
|
||||
|
||||
string tail1 = args.NextString("");
|
||||
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))
|
||||
if (subject.IsEmpty() || text.IsEmpty())
|
||||
return false;
|
||||
|
||||
// extract items
|
||||
List<KeyValuePair<uint, uint>> items = new();
|
||||
|
||||
// get all tail string
|
||||
StringArguments tail = new(args.NextString(""));
|
||||
|
||||
// get from tail next item str
|
||||
StringArguments itemStr;
|
||||
while (!(itemStr = new StringArguments(tail.NextString(" "))).Empty())
|
||||
var tokens = new StringArray(itemsStr, ' ');
|
||||
for (var i = 0; i < tokens.Length; ++i)
|
||||
{
|
||||
// parse item str
|
||||
string itemIdStr = itemStr.NextString(":");
|
||||
string itemCountStr = itemStr.NextString(" ");
|
||||
|
||||
if (!uint.TryParse(itemIdStr, out uint itemId) || itemId == 0)
|
||||
string[] itemIdAndCountStr = tokens[i].Split(':');
|
||||
if (!uint.TryParse(itemIdAndCountStr[0], out uint itemId) || itemId == 0)
|
||||
return false;
|
||||
|
||||
ItemTemplate item_proto = Global.ObjectMgr.GetItemTemplate(itemId);
|
||||
if (item_proto == null)
|
||||
ItemTemplate itemProto = Global.ObjectMgr.GetItemTemplate(itemId);
|
||||
if (itemProto == null)
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.CommandItemidinvalid, itemId);
|
||||
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;
|
||||
|
||||
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);
|
||||
return false;
|
||||
}
|
||||
|
||||
while (itemCount > item_proto.GetMaxStackSize())
|
||||
while (itemCount > itemProto.GetMaxStackSize())
|
||||
{
|
||||
items.Add(new KeyValuePair<uint, uint>(itemId, item_proto.GetMaxStackSize()));
|
||||
itemCount -= item_proto.GetMaxStackSize();
|
||||
items.Add(new KeyValuePair<uint, uint>(itemId, itemProto.GetMaxStackSize()));
|
||||
itemCount -= itemProto.GetMaxStackSize();
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
string nameLink = handler.PlayerLink(receiverName);
|
||||
string nameLink = handler.PlayerLink(playerIdentifier.GetName());
|
||||
handler.SendSysMessage(CypherStrings.MailSent, nameLink);
|
||||
return 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
|
||||
|
||||
Player receiver;
|
||||
ObjectGuid receiverGuid;
|
||||
string receiverName;
|
||||
if (!handler.ExtractPlayerTarget(args, out receiver, out receiverGuid, out receiverName))
|
||||
if (playerIdentifier == null)
|
||||
playerIdentifier = PlayerIdentifier.FromTarget(handler);
|
||||
if (playerIdentifier == null)
|
||||
return false;
|
||||
|
||||
string tail1 = args.NextString("");
|
||||
if (string.IsNullOrEmpty(tail1))
|
||||
if (subject.IsEmpty() || text.IsEmpty())
|
||||
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)
|
||||
return false;
|
||||
|
||||
@@ -208,40 +157,40 @@ namespace Game.Chat.Commands
|
||||
|
||||
new MailDraft(subject, text)
|
||||
.AddMoney((uint)money)
|
||||
.SendMailTo(trans, new MailReceiver(receiver, receiverGuid.GetCounter()), sender);
|
||||
.SendMailTo(trans, new MailReceiver(playerIdentifier.GetGUID().GetCounter()), sender);
|
||||
|
||||
DB.Characters.CommitTransaction(trans);
|
||||
|
||||
string nameLink = handler.PlayerLink(receiverName);
|
||||
string nameLink = handler.PlayerLink(playerIdentifier.GetName());
|
||||
handler.SendSysMessage(CypherStrings.MailSent, nameLink);
|
||||
return 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
|
||||
Player player;
|
||||
if (!handler.ExtractPlayerTarget(args, out player))
|
||||
if (playerIdentifier == null)
|
||||
playerIdentifier = PlayerIdentifier.FromTarget(handler);
|
||||
if (playerIdentifier == null || !playerIdentifier.IsConnected())
|
||||
return false;
|
||||
|
||||
string msgStr = args.NextString("");
|
||||
if (string.IsNullOrEmpty(msgStr))
|
||||
if (!msgStr.IsEmpty())
|
||||
return false;
|
||||
|
||||
// Check that he is not logging out.
|
||||
if (player.GetSession().IsLogingOut())
|
||||
if (playerIdentifier.GetConnectedPlayer().GetSession().IsLogingOut())
|
||||
{
|
||||
handler.SendSysMessage(CypherStrings.PlayerNotFound);
|
||||
return false;
|
||||
}
|
||||
|
||||
// - Send the message
|
||||
player.GetSession().SendNotification("{0}", msgStr);
|
||||
player.GetSession().SendNotification("|cffff0000[Message from administrator]:|r");
|
||||
playerIdentifier.GetConnectedPlayer().GetSession().SendNotification("{0}", msgStr);
|
||||
playerIdentifier.GetConnectedPlayer().GetSession().SendNotification("|cffff0000[Message from administrator]:|r");
|
||||
|
||||
// Confirmation message
|
||||
string nameLink = handler.GetNameLink(player);
|
||||
string nameLink = handler.GetNameLink(playerIdentifier.GetConnectedPlayer());
|
||||
handler.SendSysMessage(CypherStrings.Sendmessage, nameLink, msgStr);
|
||||
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user