fix: Cleans up core code (#1187)
**Only one functional change** * Fixes a bug in LogFactory where `Warning` is being logged as `Information` Non-functional changes: * Updates/Fixes copyright headers * Removes namespace scopes for core files. View with [whitespace off](https://github.com/modernuo/ModernUO/pull/1187/files?w=1).
This commit is contained in:
parent
0138d40bda
commit
f268d5d4e2
262 changed files with 28527 additions and 28646 deletions
|
|
@ -2,240 +2,230 @@ using System;
|
|||
using System.Collections.Generic;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server
|
||||
namespace Server;
|
||||
|
||||
public delegate void CommandEventHandler(CommandEventArgs e);
|
||||
|
||||
public class CommandEventArgs
|
||||
{
|
||||
public delegate void CommandEventHandler(CommandEventArgs e);
|
||||
|
||||
public class CommandEventArgs
|
||||
public CommandEventArgs(Mobile mobile, string command, string argString, string[] arguments)
|
||||
{
|
||||
public CommandEventArgs(Mobile mobile, string command, string argString, string[] arguments)
|
||||
{
|
||||
Mobile = mobile;
|
||||
Command = command;
|
||||
ArgString = argString;
|
||||
Arguments = arguments;
|
||||
}
|
||||
|
||||
public Mobile Mobile { get; }
|
||||
|
||||
public string Command { get; }
|
||||
|
||||
public string ArgString { get; }
|
||||
|
||||
public string[] Arguments { get; }
|
||||
|
||||
public int Length => Arguments.Length;
|
||||
|
||||
public string GetString(int index) => index < 0 || index >= Arguments.Length ? "" : Arguments[index];
|
||||
|
||||
public int GetInt32(int index) => index < 0 || index >= Arguments.Length ? 0 : Utility.ToInt32(Arguments[index]);
|
||||
|
||||
public uint GetUInt32(int index) =>
|
||||
index < 0 || index >= Arguments.Length ? 0 : Utility.ToUInt32(Arguments[index]);
|
||||
|
||||
public bool GetBoolean(int index) => index >= 0 && index < Arguments.Length && Utility.ToBoolean(Arguments[index]);
|
||||
|
||||
public double GetDouble(int index) =>
|
||||
index < 0 || index >= Arguments.Length ? 0.0 : Utility.ToDouble(Arguments[index]);
|
||||
|
||||
public TimeSpan GetTimeSpan(int index) =>
|
||||
index < 0 || index >= Arguments.Length ? TimeSpan.Zero : Utility.ToTimeSpan(Arguments[index]);
|
||||
Mobile = mobile;
|
||||
Command = command;
|
||||
ArgString = argString;
|
||||
Arguments = arguments;
|
||||
}
|
||||
|
||||
public static partial class EventSink
|
||||
public Mobile Mobile { get; }
|
||||
|
||||
public string Command { get; }
|
||||
|
||||
public string ArgString { get; }
|
||||
|
||||
public string[] Arguments { get; }
|
||||
|
||||
public int Length => Arguments.Length;
|
||||
|
||||
public string GetString(int index) => index < 0 || index >= Arguments.Length ? "" : Arguments[index];
|
||||
|
||||
public int GetInt32(int index) => index < 0 || index >= Arguments.Length ? 0 : Utility.ToInt32(Arguments[index]);
|
||||
|
||||
public uint GetUInt32(int index) =>
|
||||
index < 0 || index >= Arguments.Length ? 0 : Utility.ToUInt32(Arguments[index]);
|
||||
|
||||
public bool GetBoolean(int index) => index >= 0 && index < Arguments.Length && Utility.ToBoolean(Arguments[index]);
|
||||
|
||||
public double GetDouble(int index) =>
|
||||
index < 0 || index >= Arguments.Length ? 0.0 : Utility.ToDouble(Arguments[index]);
|
||||
|
||||
public TimeSpan GetTimeSpan(int index) =>
|
||||
index < 0 || index >= Arguments.Length ? TimeSpan.Zero : Utility.ToTimeSpan(Arguments[index]);
|
||||
}
|
||||
|
||||
public static partial class EventSink
|
||||
{
|
||||
public static event Action<CommandEventArgs> Command;
|
||||
public static void InvokeCommand(CommandEventArgs e) => Command?.Invoke(e);
|
||||
}
|
||||
|
||||
public class CommandEntry : IComparable<CommandEntry>
|
||||
{
|
||||
public CommandEntry(string command, CommandEventHandler handler, AccessLevel accessLevel)
|
||||
{
|
||||
public static event Action<CommandEventArgs> Command;
|
||||
public static void InvokeCommand(CommandEventArgs e) => Command?.Invoke(e);
|
||||
Command = command;
|
||||
Handler = handler;
|
||||
AccessLevel = accessLevel;
|
||||
}
|
||||
|
||||
public class CommandEntry : IComparable<CommandEntry>
|
||||
public string Command { get; }
|
||||
|
||||
public CommandEventHandler Handler { get; }
|
||||
|
||||
public AccessLevel AccessLevel { get; }
|
||||
|
||||
public int CompareTo(CommandEntry e) => string.CompareOrdinal(Command, e?.Command);
|
||||
|
||||
public static List<CommandEntry> GetList()
|
||||
{
|
||||
public CommandEntry(string command, CommandEventHandler handler, AccessLevel accessLevel)
|
||||
var commands = new List<CommandEntry>(CommandSystem.Entries.Values);
|
||||
|
||||
commands.Sort();
|
||||
commands.Reverse();
|
||||
|
||||
for (var i = 0; i < commands.Count; ++i)
|
||||
{
|
||||
Command = command;
|
||||
Handler = handler;
|
||||
AccessLevel = accessLevel;
|
||||
}
|
||||
var e = commands[i];
|
||||
|
||||
public string Command { get; }
|
||||
|
||||
public CommandEventHandler Handler { get; }
|
||||
|
||||
public AccessLevel AccessLevel { get; }
|
||||
|
||||
public int CompareTo(CommandEntry e) => string.CompareOrdinal(Command, e?.Command);
|
||||
|
||||
public static List<CommandEntry> GetList()
|
||||
{
|
||||
var commands = new List<CommandEntry>(CommandSystem.Entries.Values);
|
||||
|
||||
commands.Sort();
|
||||
commands.Reverse();
|
||||
|
||||
for (var i = 0; i < commands.Count; ++i)
|
||||
for (var j = i + 1; j < commands.Count; ++j)
|
||||
{
|
||||
var e = commands[i];
|
||||
var c = commands[j];
|
||||
|
||||
for (var j = i + 1; j < commands.Count; ++j)
|
||||
if (e.Handler.Method == c.Handler.Method)
|
||||
{
|
||||
var c = commands[j];
|
||||
commands.RemoveAt(j);
|
||||
--j;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (e.Handler.Method == c.Handler.Method)
|
||||
return commands;
|
||||
}
|
||||
}
|
||||
|
||||
public record CommandInfo(AccessLevel AccessLevel, string Name, string[] Aliases, string Usage, string Description);
|
||||
|
||||
public class CommandInfoSorter : IComparer<CommandInfo>
|
||||
{
|
||||
public int Compare(CommandInfo a, CommandInfo b)
|
||||
{
|
||||
if (a == null && b == null)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
var v = b?.AccessLevel.CompareTo(a?.AccessLevel) ?? 1;
|
||||
|
||||
return v != 0 ? v : string.CompareOrdinal(a?.Name, b?.Name);
|
||||
}
|
||||
}
|
||||
|
||||
public static class CommandSystem
|
||||
{
|
||||
public static string Prefix { get; set; } = "[";
|
||||
|
||||
public static Dictionary<string, CommandEntry> Entries { get; } = new(StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
public static AccessLevel BadCommandIgnoreLevel { get; set; } = AccessLevel.Player;
|
||||
|
||||
public static string[] Split(string value)
|
||||
{
|
||||
var array = value.ToCharArray();
|
||||
var list = new List<string>();
|
||||
|
||||
var start = 0;
|
||||
|
||||
while (start < array.Length)
|
||||
{
|
||||
var c = array[start];
|
||||
|
||||
if (c == '"')
|
||||
{
|
||||
++start;
|
||||
var end = start;
|
||||
|
||||
while (end < array.Length)
|
||||
{
|
||||
if (array[end] != '"' || array[end - 1] == '\\')
|
||||
{
|
||||
commands.RemoveAt(j);
|
||||
--j;
|
||||
++end;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
list.Add(value.Substring(start, end - start));
|
||||
|
||||
start = end + 2;
|
||||
}
|
||||
|
||||
return commands;
|
||||
}
|
||||
}
|
||||
|
||||
public record CommandInfo(AccessLevel AccessLevel, string Name, string[] Aliases, string Usage, string Description);
|
||||
|
||||
public class CommandInfoSorter : IComparer<CommandInfo>
|
||||
{
|
||||
public int Compare(CommandInfo a, CommandInfo b)
|
||||
{
|
||||
if (a == null && b == null)
|
||||
else if (c != ' ')
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
var end = start;
|
||||
|
||||
var v = b?.AccessLevel.CompareTo(a?.AccessLevel) ?? 1;
|
||||
|
||||
return v != 0 ? v : string.CompareOrdinal(a?.Name, b?.Name);
|
||||
}
|
||||
}
|
||||
|
||||
public static class CommandSystem
|
||||
{
|
||||
public static string Prefix { get; set; } = "[";
|
||||
|
||||
public static Dictionary<string, CommandEntry> Entries { get; } = new(StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
public static AccessLevel BadCommandIgnoreLevel { get; set; } = AccessLevel.Player;
|
||||
|
||||
public static string[] Split(string value)
|
||||
{
|
||||
var array = value.ToCharArray();
|
||||
var list = new List<string>();
|
||||
|
||||
var start = 0;
|
||||
|
||||
while (start < array.Length)
|
||||
{
|
||||
var c = array[start];
|
||||
|
||||
if (c == '"')
|
||||
while (end < array.Length)
|
||||
{
|
||||
++start;
|
||||
var end = start;
|
||||
|
||||
while (end < array.Length)
|
||||
if (array[end] != ' ')
|
||||
{
|
||||
if (array[end] != '"' || array[end - 1] == '\\')
|
||||
{
|
||||
++end;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
++end;
|
||||
}
|
||||
|
||||
list.Add(value.Substring(start, end - start));
|
||||
|
||||
start = end + 2;
|
||||
}
|
||||
else if (c != ' ')
|
||||
{
|
||||
var end = start;
|
||||
|
||||
while (end < array.Length)
|
||||
else
|
||||
{
|
||||
if (array[end] != ' ')
|
||||
{
|
||||
++end;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
list.Add(value.Substring(start, end - start));
|
||||
|
||||
start = end + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
++start;
|
||||
}
|
||||
}
|
||||
|
||||
return list.ToArray();
|
||||
}
|
||||
list.Add(value.Substring(start, end - start));
|
||||
|
||||
public static void Register(string command, AccessLevel access, CommandEventHandler handler)
|
||||
{
|
||||
Entries[command] = new CommandEntry(command, handler, access);
|
||||
}
|
||||
|
||||
public static bool Handle(Mobile from, string text, MessageType type = MessageType.Regular)
|
||||
{
|
||||
if (!text.StartsWithOrdinal(Prefix) && type != MessageType.Command)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (type != MessageType.Command)
|
||||
{
|
||||
text = text[Prefix.Length..];
|
||||
}
|
||||
|
||||
var indexOf = text.IndexOfOrdinal(' ');
|
||||
|
||||
string command;
|
||||
string[] args;
|
||||
string argString;
|
||||
|
||||
if (indexOf >= 0)
|
||||
{
|
||||
argString = text[(indexOf + 1)..];
|
||||
|
||||
command = text[..indexOf];
|
||||
args = Split(argString);
|
||||
start = end + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
argString = "";
|
||||
command = text.ToLower();
|
||||
args = Array.Empty<string>();
|
||||
++start;
|
||||
}
|
||||
}
|
||||
|
||||
Entries.TryGetValue(command, out var entry);
|
||||
return list.ToArray();
|
||||
}
|
||||
|
||||
if (entry != null)
|
||||
public static void Register(string command, AccessLevel access, CommandEventHandler handler)
|
||||
{
|
||||
Entries[command] = new CommandEntry(command, handler, access);
|
||||
}
|
||||
|
||||
public static bool Handle(Mobile from, string text, MessageType type = MessageType.Regular)
|
||||
{
|
||||
if (!text.StartsWithOrdinal(Prefix) && type != MessageType.Command)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (type != MessageType.Command)
|
||||
{
|
||||
text = text[Prefix.Length..];
|
||||
}
|
||||
|
||||
var indexOf = text.IndexOfOrdinal(' ');
|
||||
|
||||
string command;
|
||||
string[] args;
|
||||
string argString;
|
||||
|
||||
if (indexOf >= 0)
|
||||
{
|
||||
argString = text[(indexOf + 1)..];
|
||||
|
||||
command = text[..indexOf];
|
||||
args = Split(argString);
|
||||
}
|
||||
else
|
||||
{
|
||||
argString = "";
|
||||
command = text.ToLower();
|
||||
args = Array.Empty<string>();
|
||||
}
|
||||
|
||||
Entries.TryGetValue(command, out var entry);
|
||||
|
||||
if (entry != null)
|
||||
{
|
||||
if (from.AccessLevel >= entry.AccessLevel)
|
||||
{
|
||||
if (from.AccessLevel >= entry.AccessLevel)
|
||||
if (entry.Handler != null)
|
||||
{
|
||||
if (entry.Handler != null)
|
||||
{
|
||||
var e = new CommandEventArgs(from, command, argString, args);
|
||||
entry.Handler(e);
|
||||
EventSink.InvokeCommand(e);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (from.AccessLevel <= BadCommandIgnoreLevel)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
from.SendMessage("You do not have access to that command.");
|
||||
var e = new CommandEventArgs(from, command, argString, args);
|
||||
entry.Handler(e);
|
||||
EventSink.InvokeCommand(e);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -245,10 +235,19 @@ namespace Server
|
|||
return false;
|
||||
}
|
||||
|
||||
from.SendMessage("That is not a valid command.");
|
||||
from.SendMessage("You do not have access to that command.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (from.AccessLevel <= BadCommandIgnoreLevel)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
from.SendMessage("That is not a valid command.");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue