fix(core): Optimizes strings / .NET 5 compatibility changes (#354)

- [X] Removes some string allocations (e.g. split)
- [X] Optimizes some collections
- [X] Converts insensitive to extension methods of built-ins.
- [X] Adds ordinal (case sensitive) string helpers
- [X] Fixes conditionals for in-game commands so they use Ordinal comparisons.
- [X] Replaces ToLower.Contains with InsensitiveContains
- [X] Adds ValueStringBuilder
- [X] Implements ValueStringBuilder in a few places where it makes sense
- [X] Removes the redundant Wrap function and replaces it with an optimized version
- [X] Fixes list conversions in Utility

Closes #351

Bumps release version
This commit is contained in:
Kamron Batman 2020-12-20 23:21:55 -08:00 • committed by GitHub
parent 92aae8d482
commit 77ce2e1980
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
117 changed files with 2000 additions and 1226 deletions

View file

@ -1,5 +1,6 @@
using System;
using System.Text;
using Microsoft.Toolkit.HighPerformance.Extensions;
using Server.Commands;
using Server.Gumps;
using Server.Network;
@ -31,43 +32,50 @@ namespace Server.Misc
return;
}
if (Insensitive.StartsWith(args.Speech, "set"))
if (args.Speech.InsensitiveStartsWith("set"))
{
var from = args.Mobile;
var split = args.Speech.Split(' ');
if (split.Length == 3)
var tokenizer = args.Speech.Tokenize(' ');
if (!tokenizer.MoveNext())
{
try
{
var name = split[1];
var value = Convert.ToDouble(split[2]);
return;
}
if (Insensitive.Equals(name, "str"))
{
ChangeStrength(from, (int)value);
}
else if (Insensitive.Equals(name, "dex"))
{
ChangeDexterity(from, (int)value);
}
else if (Insensitive.Equals(name, "int"))
{
ChangeIntelligence(from, (int)value);
}
else
{
ChangeSkill(from, name, value);
}
}
catch
var name = tokenizer.MoveNext() ? tokenizer.Current : null;
var valueStr = tokenizer.MoveNext() ? tokenizer.Current : null;
if (valueStr == null)
{
return;
}
var value = double.Parse(valueStr);
try
{
if (name.InsensitiveEquals("str"))
{
// ignored
ChangeStrength(from, (int)value);
}
else if (name.InsensitiveEquals("dex"))
{
ChangeDexterity(from, (int)value);
}
else if (name.InsensitiveEquals("int"))
{
ChangeIntelligence(from, (int)value);
}
else
{
ChangeSkill(from, name.ToString(), value);
}
}
catch
{
// ignored
}
}
else if (Insensitive.Equals(args.Speech, "help"))
else if (args.Speech.InsensitiveEquals("help"))
{
args.Mobile.SendGump(new TCHelpGump());
args.Handled = true;