Make commands more accurate

This commit is contained in:
Li 2022-05-07 12:58:22 +12:00
parent 997be8573d
commit 55c0f29914
14 changed files with 415 additions and 342 deletions

View file

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using HISP.Player;
@ -79,157 +80,31 @@ namespace HISP.Game.Chat
return reasons.ToArray();
}
}
public static bool ProcessCommand(User user, string message)
{
if (message.Length < 1)
return false;
string[] args = message.Split(' ').Skip(1).ToArray();
if (user.Administrator || user.Moderator)
{
if (message[0] == '%')
{
if (message.ToUpper().StartsWith("%GIVE"))
return Command.Give(message, args, user);
if (message.ToUpper().StartsWith("%SWF"))
return Command.Swf(message, args, user);
if (message.ToUpper().StartsWith("%GOTO"))
return Command.Goto(message, args, user);
if (message.ToUpper().StartsWith("%JUMP"))
return Command.Jump(message, args, user);
if (message.ToUpper().StartsWith("%KICK"))
return Command.Kick(message, args, user);
if (message.ToUpper().StartsWith("%RULES"))
return Command.Rules(message, args, user);
if (message.ToUpper().StartsWith("%PRISON"))
return Command.Prison(message, args, user);
if (message.ToUpper().StartsWith("%NOCLIP"))
return Command.NoClip(message, args, user);
if (message.ToUpper().StartsWith("%STEALTH"))
return Command.Stealth(message, args, user);
if (message.ToUpper().StartsWith("%BAN"))
return Command.Ban(message, args, user);
if (message.ToUpper().StartsWith("%UNBAN"))
return Command.UnBan(message, args, user);
if (message.ToUpper().StartsWith("%ESCAPE"))
return Command.Escape(message, args, user);
if (message.ToUpper().StartsWith("%MODHORSE"))
return Command.ModHorse(message, args, user);
if (message.ToUpper().StartsWith("%DELITEM"))
return Command.DelItem(message, args, user);
if (message.ToUpper().StartsWith("%SHUTDOWN"))
return Command.Shutdown(message, args, user);
if (message.ToUpper().StartsWith("%CALL HORSE"))
return Command.CallHorse(message, args, user);
return false;
}
}
if (message[0] == '!')
{
// Alias for !MUTE
if (message.ToUpper().StartsWith("!MUTEALL"))
return Command.Mute(message, new string[] { "ALL" }, user);
else if (message.ToUpper().StartsWith("!MUTEADS"))
return Command.Mute(message, new string[] { "ADS" }, user);
else if (message.ToUpper().StartsWith("!MUTEGLOBAL"))
return Command.Mute(message, new string[] { "GLOBAL" }, user);
else if (message.ToUpper().StartsWith("!MUTEISLAND"))
return Command.Mute(message, new string[] { "ISLAND" }, user);
else if (message.ToUpper().StartsWith("!MUTENEAR"))
return Command.Mute(message, new string[] { "NEAR" }, user);
else if (message.ToUpper().StartsWith("!MUTEHERE"))
return Command.Mute(message, new string[] { "HERE" }, user);
else if (message.ToUpper().StartsWith("!MUTEBUDDY"))
return Command.Mute(message, new string[] { "BUDDY" }, user);
else if (message.ToUpper().StartsWith("!MUTEPM"))
return Command.Mute(message, new string[] { "PM" }, user);
else if (message.ToUpper().StartsWith("!MUTEBR"))
return Command.Mute(message, new string[] { "BR" }, user);
else if (message.ToUpper().StartsWith("!MUTESOCIALS"))
return Command.Mute(message, new string[] { "SOCIALS" }, user);
else if (message.ToUpper().StartsWith("!MUTELOGINS"))
return Command.Mute(message, new string[] { "LOGINS" }, user);
else if (message.ToUpper().StartsWith("!MUTE"))
return Command.Mute(message, args, user);
// Alias for !UNMUTE
else if (message.ToUpper().StartsWith("!UNMUTEALL"))
return Command.UnMute(message, new string[] { "ALL" }, user);
else if (message.ToUpper().StartsWith("!UNMUTEADS"))
return Command.UnMute(message, new string[] { "ADS" }, user);
else if (message.ToUpper().StartsWith("!UNMUTEGLOBAL"))
return Command.UnMute(message, new string[] { "GLOBAL" }, user);
else if (message.ToUpper().StartsWith("!UNMUTEISLAND"))
return Command.UnMute(message, new string[] { "ISLAND" }, user);
else if (message.ToUpper().StartsWith("!UNMUTENEAR"))
return Command.UnMute(message, new string[] { "NEAR" }, user);
else if (message.ToUpper().StartsWith("!UNMUTEHERE"))
return Command.UnMute(message, new string[] { "HERE" }, user);
else if (message.ToUpper().StartsWith("!UNMUTEBUDDY"))
return Command.UnMute(message, new string[] { "BUDDY" }, user);
else if (message.ToUpper().StartsWith("!UNMUTEPM"))
return Command.UnMute(message, new string[] { "PM" }, user);
else if (message.ToUpper().StartsWith("!UNMUTEBR"))
return Command.UnMute(message, new string[] { "BR" }, user);
else if (message.ToUpper().StartsWith("!UNMUTESOCIALS"))
return Command.UnMute(message, new string[] { "SOCIALS" }, user);
else if (message.ToUpper().StartsWith("!UNMUTELOGINS"))
return Command.UnMute(message, new string[] { "LOGINS" }, user);
else if (message.ToUpper().StartsWith("!UNMUTE"))
return Command.UnMute(message, args, user);
// Alias for !HEAR
else if (message.ToUpper().StartsWith("!HEARALL"))
return Command.UnMute(message, new string[] { "ALL" }, user);
else if (message.ToUpper().StartsWith("!HEARADS"))
return Command.UnMute(message, new string[] { "ADS" }, user);
else if (message.ToUpper().StartsWith("!HEARGLOBAL"))
return Command.UnMute(message, new string[] { "GLOBAL" }, user);
else if (message.ToUpper().StartsWith("!HEARISLAND"))
return Command.UnMute(message, new string[] { "ISLAND" }, user);
else if (message.ToUpper().StartsWith("!HEARNEAR"))
return Command.UnMute(message, new string[] { "NEAR" }, user);
else if (message.ToUpper().StartsWith("!HEARHERE"))
return Command.UnMute(message, new string[] { "HERE" }, user);
else if (message.ToUpper().StartsWith("!HEARBUDDY"))
return Command.UnMute(message, new string[] { "BUDDY" }, user);
else if (message.ToUpper().StartsWith("!HEARPM"))
return Command.UnMute(message, new string[] { "PM" }, user);
else if (message.ToUpper().StartsWith("!HEARBR"))
return Command.UnMute(message, new string[] { "BR" }, user);
else if (message.ToUpper().StartsWith("!HEARSOCIALS"))
return Command.UnMute(message, new string[] { "SOCIALS" }, user);
else if (message.ToUpper().StartsWith("!HEARLOGINS"))
return Command.UnMute(message, new string[] { "LOGINS" }, user);
else if (message.ToUpper().StartsWith("!HEAR"))
return Command.UnMute(message, args, user);
else if (message.ToUpper().StartsWith("!AUTOREPLY"))
return Command.AutoReply(message, args, user);
else if (message.ToUpper().StartsWith("!QUIZ"))
return Command.Quiz(message, args, user);
else if (message.ToUpper().StartsWith("!WARP")) // some stupid handling on this one.
{
string placeName = message.Substring("!WARP".Length);
placeName = placeName.Trim();
return Command.Warp(message, placeName.Split(' '), user);
}
else if (message.ToUpper().StartsWith("!DANCE"))
return Command.Dance(message, args, user);
else if (message.ToUpper().StartsWith("!VERSION"))
return Command.Version(message, args, user);
return false;
string parsedMessage = message;
parsedMessage = parsedMessage.Trim();
char cLetter = parsedMessage[0];
parsedMessage = parsedMessage.Substring(1).Trim();
string messageToGive = parsedMessage;
foreach (CommandRegister cmd in CommandRegister.RegisteredCommands)
{
if(cmd.CmdLetter == cLetter)
{
if (parsedMessage.ToUpper(CultureInfo.InvariantCulture).StartsWith(cmd.CmdName))
{
string[] args = parsedMessage.Substring(cmd.CmdName.Length).Trim().Split(' ');
return cmd.CmdCallback(messageToGive, args, user);
}
}
}
return false;
}

View file

@ -1,19 +1,19 @@
using HISP.Player;
using HISP.Server;
using HISP.Game.Items;
using System;
using System.Collections.Generic;
using HISP.Game.Events;
using HISP.Game.Horse;
using System.Linq;
using HISP.Game.Inventory;
using System.Threading;
using HISP.Modding;
using System.Linq;
using System;
using System.Collections.Generic;
namespace HISP.Game.Chat
{
public class Command
{
private static User findNamePartial(string name)
{
foreach (GameClient client in GameClient.ConnectedClients)
@ -29,14 +29,59 @@ namespace HISP.Game.Chat
}
}
throw new KeyNotFoundException("name not found");
}
public static void RegisterCommands()
{
// Admin Commands
new CommandRegister('%', "GIVE", Command.Give);
new CommandRegister('%', "SWF", Command.Swf);
new CommandRegister('%', "GOTO", Command.Goto);
new CommandRegister('%', "JUMP", Command.Jump);
new CommandRegister('%', "KICK", Command.Kick);
new CommandRegister('%', "NOCLIP", Command.NoClip);
new CommandRegister('%', "MODHORSE", Command.ModHorse);
new CommandRegister('%', "DELITEM", Command.DelItem);
new CommandRegister('%', "SHUTDOWN", Command.Shutdown);
new CommandRegister('%', "RELOAD", Command.Reload);
new CommandRegister('%', "CALL", Command.CallHorse);
// Moderator commands
new CommandRegister('%', "RULES", Command.Rules);
new CommandRegister('%', "PRISON", Command.Prison);
new CommandRegister('%', "STEALTH", Command.Stealth);
new CommandRegister('%', "BAN", Command.Ban);
new CommandRegister('%', "UNBAN", Command.UnBan);
new CommandRegister('%', "ESCAPE", Command.Escape);
// User commands
new CommandRegister('!', "MUTE", Command.Mute);
new CommandRegister('!', "UNMUTE", Command.UnMute);
new CommandRegister('!', "HEAR", Command.UnMute);
new CommandRegister('!', "AUTOREPLY", Command.AutoReply);
new CommandRegister('!', "QUIZ", Command.Quiz);
new CommandRegister('!', "WARP", Command.Warp);
new CommandRegister('!', "DANCE", Command.Dance);
new CommandRegister('!', "VERSION", Command.Version);
}
public static bool Reload(string message, string[] args, User user)
{
if (!user.Administrator)
return false;
ModLoader.ReloadModsFromFilesystem();
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT);
user.LoggedinClient.SendPacket(chatPacket);
return true;
}
public static bool Shutdown(string message, string[] args, User user)
{
if (!user.Administrator)
return false;
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT);
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT);
user.LoggedinClient.SendPacket(chatPacket);
GameServer.ShutdownServer();
@ -190,7 +235,7 @@ namespace HISP.Game.Chat
return false;
}
msg:;
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT);
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT);
user.LoggedinClient.SendPacket(chatPacket);
return true;
}
@ -227,7 +272,7 @@ namespace HISP.Game.Chat
return false;
}
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT);
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT);
user.LoggedinClient.SendPacket(chatPacket);
return true;
@ -251,7 +296,7 @@ namespace HISP.Game.Chat
return false;
}
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT);
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT);
user.LoggedinClient.SendPacket(chatPacket);
return true;
@ -264,7 +309,7 @@ namespace HISP.Game.Chat
user.LoggedinClient.SendPacket(versionPacket);
// Send Command complete message to client.
byte[] versionCommandCompletePacket = PacketBuilder.CreateChat(Messages.FormatPlayerCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT);
byte[] versionCommandCompletePacket = PacketBuilder.CreateChat(Messages.FormatPlayerCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT);
user.LoggedinClient.SendPacket(versionCommandCompletePacket);
return true;
}
@ -297,7 +342,7 @@ namespace HISP.Game.Chat
}
catch(KeyNotFoundException){};
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT);
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT);
user.LoggedinClient.SendPacket(chatPacket);
return true;
@ -309,7 +354,7 @@ namespace HISP.Game.Chat
user.Teleport(Map.ModIsleX, Map.ModIsleY);
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)) + Messages.ModIsleMessage, PacketBuilder.CHAT_BOTTOM_LEFT);
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message) + Messages.ModIsleMessage, PacketBuilder.CHAT_BOTTOM_LEFT);
user.LoggedinClient.SendPacket(chatPacket);
return true;
}
@ -320,7 +365,7 @@ namespace HISP.Game.Chat
return false;
user.Stealth = !user.Stealth;
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT);
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT);
user.LoggedinClient.SendPacket(chatPacket);
return true;
}
@ -330,7 +375,7 @@ namespace HISP.Game.Chat
return false;
user.NoClip = !user.NoClip;
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT);
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT);
user.LoggedinClient.SendPacket(chatPacket);
return true;
}
@ -356,7 +401,7 @@ namespace HISP.Game.Chat
return false;
}
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1))+Messages.FormatRulesCommandMessage(args[0]), PacketBuilder.CHAT_BOTTOM_LEFT);
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message)+Messages.FormatRulesCommandMessage(args[0]), PacketBuilder.CHAT_BOTTOM_LEFT);
user.LoggedinClient.SendPacket(chatPacket);
return true;
}
@ -382,7 +427,7 @@ namespace HISP.Game.Chat
return false;
}
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)) + Messages.FormatPrisonCommandMessage(args[0]), PacketBuilder.CHAT_BOTTOM_LEFT);
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message) + Messages.FormatPrisonCommandMessage(args[0]), PacketBuilder.CHAT_BOTTOM_LEFT);
user.LoggedinClient.SendPacket(chatPacket);
return true;
@ -414,7 +459,7 @@ namespace HISP.Game.Chat
return false;
}
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT);
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT);
user.LoggedinClient.SendPacket(chatPacket);
return true;
}
@ -442,7 +487,7 @@ namespace HISP.Game.Chat
return false;
}
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT);
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT);
user.LoggedinClient.SendPacket(chatPacket);
return true;
}
@ -477,7 +522,7 @@ namespace HISP.Game.Chat
return false;
}
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT);
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT);
user.LoggedinClient.SendPacket(chatPacket);
return true;
@ -575,7 +620,7 @@ namespace HISP.Game.Chat
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT);
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT);
user.LoggedinClient.SendPacket(chatPacket);
return true;
@ -655,7 +700,7 @@ namespace HISP.Game.Chat
}
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT);
byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT);
user.LoggedinClient.SendPacket(chatPacket);
return true;
}
@ -663,7 +708,7 @@ namespace HISP.Game.Chat
public static bool Warp(string message, string[] args, User user)
{
string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message.Substring(1));
string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message);
if (user.CurrentlyRidingHorse == null)
goto onlyRiddenUnicorn;
@ -730,7 +775,11 @@ namespace HISP.Game.Chat
if (!user.Administrator)
return false;
string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message.Substring(1));
if (args.Length >= 1)
if (args[1].ToUpper() != "HORSE")
return false;
string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message);
WildHorse horse = WildHorse.WildHorses[GameServer.RandomNumberGenerator.Next(0, WildHorse.WildHorses.Length)];
horse.X = user.X;
@ -747,7 +796,7 @@ namespace HISP.Game.Chat
public static bool AutoReply(string message, string[] args, User user)
{
string replyMessage = string.Join(" ", args);
string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message.Substring(1));
string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message);
replyMessage = replyMessage.Trim();
if (replyMessage.Length > 1024)
@ -776,7 +825,7 @@ namespace HISP.Game.Chat
public static bool Dance(string message, string[] args, User user)
{
string moves = string.Join(" ", args).ToLower();
string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message.Substring(1));
string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message);
if (user.ActiveDance != null)
user.ActiveDance.Dispose();
@ -800,7 +849,7 @@ namespace HISP.Game.Chat
}
if (quizActive)
{
string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message.Substring(1));
string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message);
RealTimeQuiz.Participent participent = GameServer.QuizEvent.JoinEvent(user);
@ -832,7 +881,7 @@ namespace HISP.Game.Chat
public static bool Mute(string message, string[] args, User user)
{
string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message.Substring(1));
string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message);
if (args.Length <= 0)
{
@ -906,7 +955,7 @@ namespace HISP.Game.Chat
public static bool UnMute(string message, string[] args, User user)
{
string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message.Substring(1));
string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message);
if (args.Length <= 0)
{

View file

@ -0,0 +1,31 @@
using HISP.Player;
using System;
using System.Collections.Generic;
using System.Globalization;
namespace HISP.Game.Chat
{
public class CommandRegister
{
private static List<CommandRegister> registeredComamnds = new List<CommandRegister>();
public static CommandRegister[] RegisteredCommands
{
get
{
return registeredComamnds.ToArray();
}
}
public char CmdLetter;
public string CmdName;
public Func<string,string[],User, bool> CmdCallback;
public CommandRegister(char cmdLetter, string cmdName, Func<string, string[], User, bool> cmdCallback)
{
CmdLetter = cmdLetter;
CmdName = cmdName.ToUpper(CultureInfo.InvariantCulture);
CmdCallback = cmdCallback;
registeredComamnds.Add(this);
}
}
}