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):
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);
+1 -1
View File
@@ -143,7 +143,7 @@ namespace Game.Chat
return null;
if (!str.Contains("\""))
return null;
return str;
return str.Replace("\"", String.Empty);
}
+47 -3
View File
@@ -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("");
}
}
}
+67 -117
View File
@@ -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;
}
}
}
}
+41 -132
View File
@@ -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);
}
}
}
+37 -59
View File
@@ -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;
}
+23 -32
View File
@@ -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;
}
+43 -94
View File
@@ -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;