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:
parent
92aae8d482
commit
77ce2e1980
117 changed files with 2000 additions and 1226 deletions
|
|
@ -65,7 +65,7 @@ namespace Server.Engines.BulkOrders
|
|||
|
||||
while ((line = ip.ReadLine()) != null)
|
||||
{
|
||||
if (line.Length == 0 || line.StartsWith("#", StringComparison.Ordinal))
|
||||
if (line.Length == 0 || line.StartsWithOrdinal("#"))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ namespace Server.Engines.Chat
|
|||
|
||||
public bool IsVoiced(ChatUser user) => m_Voices.Contains(user);
|
||||
|
||||
public bool ValidatePassword(string password) => m_Password == null || Insensitive.Equals(m_Password, password);
|
||||
public bool ValidatePassword(string password) => m_Password == null || m_Password.InsensitiveEquals(password);
|
||||
|
||||
public bool ValidateModerator(ChatUser user)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ namespace Server.Engines.Chat
|
|||
|
||||
public static void PrivateMessage(ChatUser from, Channel channel, string param)
|
||||
{
|
||||
var indexOf = param.IndexOf(' ', StringComparison.Ordinal);
|
||||
var indexOf = param.IndexOfOrdinal(' ');
|
||||
|
||||
var name = param.Substring(0, indexOf);
|
||||
var text = param.Substring(indexOf + 1);
|
||||
|
|
@ -173,7 +173,7 @@ namespace Server.Engines.Chat
|
|||
string name;
|
||||
string password = null;
|
||||
|
||||
var start = param.IndexOf('\"', StringComparison.Ordinal);
|
||||
var start = param.IndexOfOrdinal('\"');
|
||||
|
||||
if (start >= 0)
|
||||
{
|
||||
|
|
@ -191,7 +191,7 @@ namespace Server.Engines.Chat
|
|||
}
|
||||
else
|
||||
{
|
||||
var indexOf = param.IndexOf(' ', StringComparison.Ordinal);
|
||||
var indexOf = param.IndexOfOrdinal(' ');
|
||||
|
||||
if (indexOf >= 0)
|
||||
{
|
||||
|
|
@ -228,7 +228,7 @@ namespace Server.Engines.Chat
|
|||
string name;
|
||||
string password = null;
|
||||
|
||||
var start = param.IndexOf('{', StringComparison.Ordinal);
|
||||
var start = param.IndexOfOrdinal('{');
|
||||
|
||||
if (start >= 0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1396,7 +1396,7 @@ namespace Server.Engines.ConPVP
|
|||
return;
|
||||
}
|
||||
|
||||
if (Insensitive.Contains(e.Speech, "i wish to duel"))
|
||||
if (e.Speech.InsensitiveContains("i wish to duel"))
|
||||
{
|
||||
if (!pm.CheckAlive())
|
||||
{
|
||||
|
|
@ -1432,7 +1432,7 @@ namespace Server.Engines.ConPVP
|
|||
e.Handled = true;
|
||||
}
|
||||
}
|
||||
else if (Insensitive.Equals(e.Speech, "change arena preferences"))
|
||||
else if (e.Speech.InsensitiveEquals("change arena preferences"))
|
||||
{
|
||||
if (!pm.CheckAlive())
|
||||
{
|
||||
|
|
@ -1448,7 +1448,7 @@ namespace Server.Engines.ConPVP
|
|||
}
|
||||
}
|
||||
}
|
||||
else if (Insensitive.Equals(e.Speech, "showladder"))
|
||||
else if (e.Speech.InsensitiveEquals("showladder"))
|
||||
{
|
||||
e.Blocked = true;
|
||||
if (!pm.CheckAlive())
|
||||
|
|
@ -1487,7 +1487,7 @@ namespace Server.Engines.ConPVP
|
|||
}
|
||||
}
|
||||
}
|
||||
else if (Insensitive.Equals(e.Speech, "viewladder"))
|
||||
else if (e.Speech.InsensitiveEquals("viewladder"))
|
||||
{
|
||||
e.Blocked = true;
|
||||
|
||||
|
|
@ -1509,7 +1509,7 @@ namespace Server.Engines.ConPVP
|
|||
}
|
||||
}
|
||||
}
|
||||
else if (Insensitive.Contains(e.Speech, "i yield"))
|
||||
else if (e.Speech.InsensitiveContains("i yield"))
|
||||
{
|
||||
if (!pm.CheckAlive())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -122,7 +122,10 @@ namespace Server.Engines.ConPVP
|
|||
{
|
||||
for (var i = 0; i < entries.Count; ++i)
|
||||
{
|
||||
var teamInfo = entries[i] as DDTeamInfo;
|
||||
if (entries[i] is not DDTeamInfo teamInfo)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
AddImage(30, 70 + i * 75, 10152);
|
||||
AddImage(30, 85 + i * 75, 10151);
|
||||
|
|
@ -884,7 +887,7 @@ namespace Server.Engines.ConPVP
|
|||
}
|
||||
}
|
||||
|
||||
if (i == winner.TeamID)
|
||||
if (i == winner?.TeamID)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
|
@ -898,7 +901,10 @@ namespace Server.Engines.ConPVP
|
|||
}
|
||||
}
|
||||
|
||||
m_Context.Finish(m_Context.Participants[winner.TeamID]);
|
||||
if (winner != null)
|
||||
{
|
||||
m_Context.Finish(m_Context.Participants[winner.TeamID]);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnStop()
|
||||
|
|
|
|||
|
|
@ -279,7 +279,7 @@ namespace Server.Engines.ConPVP
|
|||
AddPage(0);
|
||||
AddBackground(0, 0, 300, 300, 9380);
|
||||
|
||||
var pList = m_List?.CastListCovariant<object, TourneyParticipant>()
|
||||
var pList = m_List?.SafeConvertList<object, TourneyParticipant>()
|
||||
?? new List<TourneyParticipant>(tourney.Participants);
|
||||
|
||||
AddLeftArrow(25, 11, ToButtonID(0, 0));
|
||||
|
|
@ -412,10 +412,6 @@ namespace Server.Engines.ConPVP
|
|||
AddLeftArrow(25, 11, ToButtonID(0, 0));
|
||||
AddHtml(25, 35, 250, 20, Center("Rounds"));
|
||||
|
||||
// List<PyramidLevel> levelsList = m_List != null
|
||||
// ? Utility.CastListCovariant<object, PyramidLevel>(m_List)
|
||||
// : new List<PyramidLevel>(tourney.Pyramid.Levels);
|
||||
|
||||
StartPage(out var index, out var count, out var y, 12);
|
||||
|
||||
for (var i = 0; i < count; ++i, y += 18)
|
||||
|
|
@ -439,7 +435,7 @@ namespace Server.Engines.ConPVP
|
|||
}
|
||||
|
||||
var matchesList = m_List != null
|
||||
? m_List.CastListCovariant<object, TourneyMatch>()
|
||||
? m_List.SafeConvertList<object, TourneyMatch>()
|
||||
: new List<TourneyMatch>(level.Matches);
|
||||
|
||||
AddRightArrow(
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ namespace Server.Ethics
|
|||
continue;
|
||||
}
|
||||
|
||||
if (!Insensitive.Equals(ethic.Definition.JoinPhrase.String, e.Speech))
|
||||
if (!ethic.Definition.JoinPhrase.String.InsensitiveEquals(e.Speech))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
|
@ -185,7 +185,7 @@ namespace Server.Ethics
|
|||
{
|
||||
var power = ethic.Definition.Powers[i];
|
||||
|
||||
if (!Insensitive.Equals(power.Definition.Phrase.String, e.Speech))
|
||||
if (!power.Definition.Phrase.String.InsensitiveEquals(e.Speech))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1277,7 +1277,7 @@ namespace Server.Factions
|
|||
{
|
||||
var faction = factions[i];
|
||||
|
||||
if (Insensitive.Equals(faction.Definition.FriendlyName, name))
|
||||
if (faction.Definition.FriendlyName.InsensitiveEquals(name))
|
||||
{
|
||||
return faction;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -536,7 +536,7 @@ namespace Server.Factions
|
|||
{
|
||||
var town = towns[i];
|
||||
|
||||
if (Insensitive.Equals(town.Definition.FriendlyName, name))
|
||||
if (town.Definition.FriendlyName.InsensitiveEquals(name))
|
||||
{
|
||||
return town;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -205,7 +205,7 @@ namespace Server.Factions
|
|||
{
|
||||
var name = Name;
|
||||
|
||||
return name != null && Insensitive.StartsWith(speech, name);
|
||||
return name != null && speech.InsensitiveStartsWith(name);
|
||||
}
|
||||
|
||||
public override void OnSpeech(SpeechEventArgs e)
|
||||
|
|
@ -216,7 +216,7 @@ namespace Server.Factions
|
|||
|
||||
if (!e.Handled && InRange(from, ListenRange) && from.Alive)
|
||||
{
|
||||
if (e.HasKeyword(0xE6) && (Insensitive.Equals(e.Speech, "orders") || WasNamed(e.Speech))) // *orders*
|
||||
if (e.HasKeyword(0xE6) && (e.Speech.InsensitiveEquals("orders") || WasNamed(e.Speech))) // *orders*
|
||||
{
|
||||
if (m_Town?.IsSheriff(from) != true)
|
||||
{
|
||||
|
|
@ -240,15 +240,15 @@ namespace Server.Factions
|
|||
var understood = true;
|
||||
ReactionType newType = 0;
|
||||
|
||||
if (Insensitive.Contains(e.Speech, "attack"))
|
||||
if (e.Speech.InsensitiveContains("attack"))
|
||||
{
|
||||
newType = ReactionType.Attack;
|
||||
}
|
||||
else if (Insensitive.Contains(e.Speech, "warn"))
|
||||
else if (e.Speech.InsensitiveContains("warn"))
|
||||
{
|
||||
newType = ReactionType.Warn;
|
||||
}
|
||||
else if (Insensitive.Contains(e.Speech, "ignore"))
|
||||
else if (e.Speech.InsensitiveContains("ignore"))
|
||||
{
|
||||
newType = ReactionType.Ignore;
|
||||
}
|
||||
|
|
@ -261,7 +261,7 @@ namespace Server.Factions
|
|||
{
|
||||
understood = false;
|
||||
|
||||
if (Insensitive.Contains(e.Speech, "civil"))
|
||||
if (e.Speech.InsensitiveContains("civil"))
|
||||
{
|
||||
ChangeReaction(null, newType);
|
||||
understood = true;
|
||||
|
|
@ -273,14 +273,14 @@ namespace Server.Factions
|
|||
{
|
||||
var faction = factions[i];
|
||||
|
||||
if (faction != m_Faction && Insensitive.Contains(e.Speech, faction.Definition.Keyword))
|
||||
if (faction != m_Faction && e.Speech.InsensitiveContains(faction.Definition.Keyword))
|
||||
{
|
||||
ChangeReaction(faction, newType);
|
||||
understood = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (Insensitive.Contains(e.Speech, "patrol"))
|
||||
else if (e.Speech.InsensitiveContains("patrol"))
|
||||
{
|
||||
Home = Location;
|
||||
RangeHome = 6;
|
||||
|
|
@ -289,7 +289,7 @@ namespace Server.Factions
|
|||
Say(1005146); // This spot looks like it needs protection! I shall guard it with my life.
|
||||
understood = true;
|
||||
}
|
||||
else if (Insensitive.Contains(e.Speech, "follow"))
|
||||
else if (e.Speech.InsensitiveContains("follow"))
|
||||
{
|
||||
Home = Location;
|
||||
RangeHome = 6;
|
||||
|
|
|
|||
|
|
@ -188,7 +188,7 @@ namespace Server.Engines.Help
|
|||
|
||||
while ((line = ip.ReadLine()?.Trim()) != null)
|
||||
{
|
||||
if (line.Length == 0 || line.StartsWith("#", StringComparison.Ordinal))
|
||||
if (line.Length == 0 || line.StartsWithOrdinal("#"))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ namespace Server.Engines.MLQuests
|
|||
{
|
||||
line = line.Trim();
|
||||
|
||||
if (line.Length == 0 || line.StartsWith("#", StringComparison.Ordinal))
|
||||
if (line.Length == 0 || line.StartsWithOrdinal("#"))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -245,7 +245,7 @@ namespace Server.Movement
|
|||
{
|
||||
itemData = TileData.ItemTable[tile.ID & TileData.MaxItemValue];
|
||||
|
||||
if (m.Flying && Insensitive.Equals(itemData.Name, "hover over"))
|
||||
if (m.Flying && itemData.Name.InsensitiveEquals("hover over"))
|
||||
{
|
||||
newZ = tile.Z;
|
||||
return true;
|
||||
|
|
@ -350,7 +350,7 @@ namespace Server.Movement
|
|||
itemData = item.ItemData;
|
||||
flags = itemData.Flags;
|
||||
|
||||
if (m.Flying && Insensitive.Equals(itemData.Name, "hover over"))
|
||||
if (m.Flying && itemData.Name.InsensitiveEquals("hover over"))
|
||||
{
|
||||
newZ = item.Z;
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -519,7 +519,7 @@ namespace Server.Engines.Spawners
|
|||
|
||||
for (var j = 0; thisProp == null && j < allProps.Length; ++j)
|
||||
{
|
||||
if (Insensitive.Equals(propName, allProps[j].Name))
|
||||
if (propName.InsensitiveEquals(allProps[j].Name))
|
||||
{
|
||||
thisProp = allProps[j];
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue