fix(core): Removes some uses of Linq (#421)
- [X] Removes some uses of linq - [X] Creates struct based enumerator for Skills - [X] Creates a struct based enumerator for TypeCache - [X] Changes HarvestDefinition to an init array instead of List - [X] Changes HeritageTokenGump Response from List to Array
This commit is contained in:
parent
52356866ed
commit
b921c38879
50 changed files with 1006 additions and 507 deletions
|
|
@ -1,7 +1,6 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Server.Engines.PartySystem;
|
||||
using Server.Factions;
|
||||
using Server.Gumps;
|
||||
|
|
@ -1295,9 +1294,26 @@ namespace Server.Engines.ConPVP
|
|||
}
|
||||
}
|
||||
|
||||
public static bool CheckCombat(Mobile m) =>
|
||||
m.Aggressed.Any(info => info.Defender.Player && DateTime.UtcNow - info.LastCombatTime < CombatDelay) ||
|
||||
m.Aggressors.Any(info => info.Attacker.Player && DateTime.UtcNow - info.LastCombatTime < CombatDelay);
|
||||
public static bool CheckCombat(Mobile m)
|
||||
{
|
||||
foreach (var info in m.Aggressed)
|
||||
{
|
||||
if (info.Defender.Player && DateTime.UtcNow - info.LastCombatTime < CombatDelay)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var info in m.Aggressors)
|
||||
{
|
||||
if (info.Attacker.Player && DateTime.UtcNow - info.LastCombatTime < CombatDelay)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static void EventSink_Login(Mobile m)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Server.Commands;
|
||||
using Server.Factions;
|
||||
using Server.Items;
|
||||
|
|
@ -404,12 +403,13 @@ namespace Server.Engines.Craft
|
|||
}
|
||||
|
||||
var eable = map.GetItemsInRange(from.Location, 2);
|
||||
var found = eable.Any(item => item.Z + 16 > item.Z && item.Z + 16 > item.Z && Find(item.ItemID, itemIDs));
|
||||
eable.Free();
|
||||
|
||||
if (found)
|
||||
foreach (var item in eable)
|
||||
{
|
||||
return true;
|
||||
if (item.Z + 16 > item.Z && item.Z + 16 > item.Z && Find(item.ItemID, itemIDs))
|
||||
{
|
||||
eable.Free();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
for (var x = -2; x <= 2; ++x)
|
||||
|
|
@ -449,8 +449,23 @@ namespace Server.Engines.Craft
|
|||
return contains;
|
||||
}
|
||||
|
||||
public bool IsQuantityType(Type[][] types) =>
|
||||
types.Any(check => check.Any(t => typeof(IHasQuantity).IsAssignableFrom(t)));
|
||||
public bool IsQuantityType(Type[][] types)
|
||||
{
|
||||
for (int i = 0; i < types.Length; ++i)
|
||||
{
|
||||
Type[] check = types[i];
|
||||
|
||||
for (int j = 0; j < check.Length; ++j)
|
||||
{
|
||||
if (typeof(IHasQuantity).IsAssignableFrom(check[j]))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public int ConsumeQuantity(Container cont, Type[][] types, int[] amounts)
|
||||
{
|
||||
|
|
@ -861,8 +876,7 @@ namespace Server.Engines.Craft
|
|||
}
|
||||
|
||||
public bool CheckSkills(
|
||||
Mobile from, Type typeRes, CraftSystem craftSystem, ref int quality,
|
||||
ref bool allRequiredSkills
|
||||
Mobile from, Type typeRes, CraftSystem craftSystem, ref int quality, ref bool allRequiredSkills
|
||||
) =>
|
||||
CheckSkills(from, typeRes, craftSystem, ref quality, out allRequiredSkills, true);
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ namespace Server.Engines.Craft
|
|||
|
||||
public override int GumpTitleNumber => 1044001;
|
||||
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ?? (m_CraftSystem = new DefAlchemy());
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefAlchemy();
|
||||
|
||||
public override double GetChanceAtMin(CraftItem item) => 0.0;
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ namespace Server.Engines.Craft
|
|||
|
||||
public override int GumpTitleNumber => 1044002;
|
||||
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ?? (m_CraftSystem = new DefBlacksmithy());
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefBlacksmithy();
|
||||
|
||||
public override CraftECA ECA => CraftECA.ChanceMinusSixtyToFourtyFive;
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ namespace Server.Engines.Craft
|
|||
|
||||
public override int GumpTitleNumber => 1044006;
|
||||
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ?? (m_CraftSystem = new DefBowFletching());
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefBowFletching();
|
||||
|
||||
public override CraftECA ECA => CraftECA.FiftyPercentChanceMinusTenPercent;
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ namespace Server.Engines.Craft
|
|||
|
||||
public override int GumpTitleNumber => 1044004;
|
||||
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ?? (m_CraftSystem = new DefCarpentry());
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefCarpentry();
|
||||
|
||||
public override double GetChanceAtMin(CraftItem item) => 0.5;
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ namespace Server.Engines.Craft
|
|||
|
||||
public override int GumpTitleNumber => 1044008;
|
||||
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ?? (m_CraftSystem = new DefCartography());
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefCartography();
|
||||
|
||||
public override double GetChanceAtMin(CraftItem item) => 0.0;
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ namespace Server.Engines.Craft
|
|||
|
||||
public override int GumpTitleNumber => 1044003;
|
||||
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ?? (m_CraftSystem = new DefCooking());
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefCooking();
|
||||
|
||||
public override CraftECA ECA => CraftECA.ChanceMinusSixtyToFourtyFive;
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ namespace Server.Engines.Craft
|
|||
|
||||
public override int GumpTitleNumber => 1044622;
|
||||
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ?? (m_CraftSystem = new DefGlassblowing());
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefGlassblowing();
|
||||
|
||||
public override double GetChanceAtMin(CraftItem item) => item.ItemType == typeof(HollowPrism) ? 0.5 : 0.0;
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ namespace Server.Engines.Craft
|
|||
|
||||
public override int GumpTitleNumber => 1044500;
|
||||
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ?? (m_CraftSystem = new DefMasonry());
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefMasonry();
|
||||
|
||||
public override double GetChanceAtMin(CraftItem item) => 0.0;
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ namespace Server.Engines.Craft
|
|||
|
||||
public override int GumpTitleNumber => 1044005;
|
||||
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ?? (m_CraftSystem = new DefTailoring());
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefTailoring();
|
||||
|
||||
public override CraftECA ECA => CraftECA.ChanceMinusSixtyToFourtyFive;
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ namespace Server.Engines.Craft
|
|||
|
||||
public override int GumpTitleNumber => 1044007;
|
||||
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ?? (m_CraftSystem = new DefTinkering());
|
||||
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefTinkering();
|
||||
|
||||
public override double GetChanceAtMin(CraftItem item)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Server.Mobiles;
|
||||
using Server.Network;
|
||||
using Server.Spells;
|
||||
|
|
@ -192,12 +191,20 @@ namespace Server.Engines.Doom
|
|||
[Usage("GenLeverPuzzle"), Description("Generates lamp room and lever puzzle in doom.")]
|
||||
public static void GenLampPuzzle_OnCommand(CommandEventArgs e)
|
||||
{
|
||||
if (Map.Malas.GetItemsInRange(lp_Center, 0).OfType<LeverPuzzleController>().Any())
|
||||
var eable = Map.Malas.GetItemsInRange(lp_Center, 0);
|
||||
|
||||
foreach (var item in eable)
|
||||
{
|
||||
e.Mobile.SendMessage("Lamp room puzzle already exists: please delete the existing controller first ...");
|
||||
return;
|
||||
if (item is LeverPuzzleController)
|
||||
{
|
||||
eable.Free();
|
||||
e.Mobile.SendMessage("Lamp room puzzle already exists: please delete the existing controller first ...");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
eable.Free();
|
||||
|
||||
e.Mobile.SendMessage("Generating Lamp Room puzzle...");
|
||||
new LeverPuzzleController().MoveToWorld(lp_Center, Map.Malas);
|
||||
|
||||
|
|
@ -634,7 +641,10 @@ namespace Server.Engines.Doom
|
|||
{
|
||||
IEntity m_IEntity = new Entity(Serial.Zero, RandomPointIn(m_Player.Location, 10), m_Player.Map);
|
||||
|
||||
var mobiles = m_IEntity.Map.GetMobilesInRange(m_IEntity.Location, 2).ToList();
|
||||
var eable = m_IEntity.Map.GetMobilesInRange(m_IEntity.Location, 2);
|
||||
var mobiles = new List<Mobile>();
|
||||
mobiles.AddRange(eable);
|
||||
eable.Free();
|
||||
|
||||
for (var k = 0; k < mobiles.Count; k++)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
using System.Linq;
|
||||
using Server.Ethics.Evil;
|
||||
using Server.Ethics.Hero;
|
||||
using Server.Items;
|
||||
|
|
@ -156,7 +155,21 @@ namespace Server.Ethics
|
|||
continue;
|
||||
}
|
||||
|
||||
if (!e.Mobile.GetItemsInRange(2).Any(item => item is AnkhNorth || item is AnkhWest))
|
||||
var eable = e.Mobile.GetItemsInRange(2);
|
||||
var found = false;
|
||||
|
||||
foreach (var item in eable)
|
||||
{
|
||||
if (item is AnkhNorth || item is AnkhWest)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
eable.Free();
|
||||
|
||||
if (!found)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Server.Accounting;
|
||||
using Server.Commands.Generic;
|
||||
using Server.Engines.ConPVP;
|
||||
|
|
@ -275,18 +274,37 @@ namespace Server.Factions
|
|||
}
|
||||
|
||||
var eable = mob.Map.GetObjectsInRange(mob.Location, range, items, mobs);
|
||||
var isInstance = eable.Any(type.IsInstanceOfType);
|
||||
foreach (var obj in eable)
|
||||
{
|
||||
if (type.IsInstanceOfType(obj))
|
||||
{
|
||||
eable.Free();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
eable.Free();
|
||||
|
||||
return isInstance;
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool IsNearType(Mobile mob, Type[] types, int range)
|
||||
{
|
||||
var eable = mob.GetObjectsInRange(range);
|
||||
var found = eable.Any(obj => types.Any(t => t.IsInstanceOfType(obj)));
|
||||
foreach (var obj in eable)
|
||||
{
|
||||
for (int i = 0; i < types.Length; i++)
|
||||
{
|
||||
if (types[i].IsInstanceOfType(obj))
|
||||
{
|
||||
eable.Free();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
eable.Free();
|
||||
return found;
|
||||
return false;
|
||||
}
|
||||
|
||||
public void RemovePlayerState(PlayerState pl)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace Server.Factions
|
||||
{
|
||||
|
|
@ -77,7 +76,20 @@ namespace Server.Factions
|
|||
}
|
||||
}
|
||||
|
||||
private static bool CheckExistence(Point3D loc, Map facet, Type type) =>
|
||||
facet.GetItemsInRange(loc, 0).Any(type.IsInstanceOfType);
|
||||
private static bool CheckExistence(Point3D loc, Map facet, Type type)
|
||||
{
|
||||
var eable = facet.GetItemsInRange(loc, 0);
|
||||
foreach (var item in eable)
|
||||
{
|
||||
if (type.IsInstanceOfType(item))
|
||||
{
|
||||
eable.Free();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
eable.Free();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Server.Utilities;
|
||||
|
||||
namespace Server.Factions
|
||||
|
|
@ -60,7 +59,7 @@ namespace Server.Factions
|
|||
{
|
||||
var asm = asms[i];
|
||||
var tc = AssemblyHandler.GetTypeCache(asm);
|
||||
var types = tc.Types.ToArray();
|
||||
var types = tc.Types;
|
||||
|
||||
for (var j = 0; j < types.Length; ++j)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using Server.Factions;
|
||||
using Server.Spells;
|
||||
using Server.Targeting;
|
||||
|
|
@ -90,13 +90,19 @@ namespace Server
|
|||
|
||||
private static void OnHit(Mobile from, Point3D origin, Map facet)
|
||||
{
|
||||
var targets = facet.GetMobilesInRange(origin, 12)
|
||||
.Where(
|
||||
mob =>
|
||||
from.CanBeHarmful(mob, false) && mob.InLOS(new Point3D(origin, origin.Z + 1)) &&
|
||||
Faction.Find(mob) != null
|
||||
)
|
||||
.ToList();
|
||||
var eable = facet.GetMobilesInRange(origin, 12);
|
||||
var targets = new List<Mobile>();
|
||||
foreach (var m in eable)
|
||||
{
|
||||
if (from.CanBeHarmful(m, false) &&
|
||||
m.InLOS(new Point3D(origin, origin.Z + 1)) &&
|
||||
Faction.Find(m) != null)
|
||||
{
|
||||
targets.Add(from);
|
||||
}
|
||||
}
|
||||
|
||||
eable.Free();
|
||||
|
||||
foreach (var mob in targets)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Server.Random;
|
||||
|
||||
namespace Server.Engines.Harvest
|
||||
|
|
@ -66,7 +65,13 @@ namespace Server.Engines.Harvest
|
|||
set
|
||||
{
|
||||
m_Veins = value;
|
||||
VeinWeights = m_Veins.Aggregate<HarvestVein, uint>(0, (current, t) => current + t.VeinChance);
|
||||
var totalWeight = 0u;
|
||||
for (var i = 0; i < m_Veins.Length; i++)
|
||||
{
|
||||
totalWeight += m_Veins[i].VeinChance;
|
||||
}
|
||||
|
||||
VeinWeights = totalWeight;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Server.Items;
|
||||
using Server.Targeting;
|
||||
using Server.Utilities;
|
||||
|
|
@ -9,9 +7,7 @@ namespace Server.Engines.Harvest
|
|||
{
|
||||
public abstract class HarvestSystem
|
||||
{
|
||||
public HarvestSystem() => Definitions = new List<HarvestDefinition>();
|
||||
|
||||
public List<HarvestDefinition> Definitions { get; }
|
||||
public HarvestDefinition[] Definitions { get; init; }
|
||||
|
||||
public virtual bool CheckTool(Mobile from, Item tool)
|
||||
{
|
||||
|
|
@ -311,11 +307,18 @@ namespace Server.Engines.Harvest
|
|||
return false;
|
||||
}
|
||||
|
||||
if (m.GetItemsInRange(0).Any(t => t.StackWith(m, item, false)))
|
||||
var eable = m.GetItemsInRange(0);
|
||||
foreach (var i in eable)
|
||||
{
|
||||
return true;
|
||||
if (i.StackWith(m, i, false))
|
||||
{
|
||||
eable.Free();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
eable.Free();
|
||||
|
||||
item.MoveToWorld(m.Location, map);
|
||||
return true;
|
||||
}
|
||||
|
|
@ -418,10 +421,22 @@ namespace Server.Engines.Harvest
|
|||
}
|
||||
}
|
||||
|
||||
public virtual HarvestDefinition GetDefinition() => Definitions.First();
|
||||
public virtual HarvestDefinition GetDefinition() => Definitions[0];
|
||||
|
||||
public virtual HarvestDefinition GetDefinition(int tileID) =>
|
||||
Definitions.FirstOrDefault(check => check.Validate(tileID));
|
||||
public virtual HarvestDefinition GetDefinition(int tileID)
|
||||
{
|
||||
for (var i = 0; i < Definitions.Length; i++)
|
||||
{
|
||||
var check = Definitions[i];
|
||||
|
||||
if (check.Validate(tileID))
|
||||
{
|
||||
return check;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public virtual void StartHarvesting(Mobile from, Item tool, object toHarvest)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ namespace Server.Engines.Harvest
|
|||
};
|
||||
}
|
||||
|
||||
Definitions.Add(fish);
|
||||
Definitions = new[] { fish };
|
||||
}
|
||||
|
||||
public static Fishing System => m_System ?? (m_System = new Fishing());
|
||||
|
|
|
|||
|
|
@ -117,10 +117,10 @@ namespace Server.Engines.Harvest
|
|||
lumber.RaceBonus = Core.ML;
|
||||
lumber.RandomizeVeins = Core.ML;
|
||||
|
||||
Definitions.Add(lumber);
|
||||
Definitions = new[] { lumber };
|
||||
}
|
||||
|
||||
public static Lumberjacking System => m_System ?? (m_System = new Lumberjacking());
|
||||
public static Lumberjacking System => m_System ??= new Lumberjacking();
|
||||
|
||||
public override bool CheckHarvest(Mobile from, Item tool)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -225,8 +225,6 @@ namespace Server.Engines.Harvest
|
|||
OreAndStone.RaceBonus = Core.ML;
|
||||
OreAndStone.RandomizeVeins = Core.ML;
|
||||
|
||||
Definitions.Add(OreAndStone);
|
||||
|
||||
Sand = new HarvestDefinition
|
||||
{
|
||||
BankWidth = 8,
|
||||
|
|
@ -267,7 +265,7 @@ namespace Server.Engines.Harvest
|
|||
Sand.Resources = res;
|
||||
Sand.Veins = veins;
|
||||
|
||||
Definitions.Add(Sand);
|
||||
Definitions = new[] { OreAndStone, Sand };
|
||||
}
|
||||
|
||||
public static Mining System => m_System ?? (m_System = new Mining());
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using Server.Engines.ConPVP;
|
||||
using Server.Factions;
|
||||
using Server.Gumps;
|
||||
|
|
@ -294,9 +293,12 @@ namespace Server.Engines.Help
|
|||
|
||||
private static void EventSink_HelpRequest(Mobile m)
|
||||
{
|
||||
if (m.NetState.Gumps.OfType<HelpGump>().Any())
|
||||
foreach (var gump in m.NetState.Gumps)
|
||||
{
|
||||
return;
|
||||
if (gump is HelpGump)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!PageQueue.CheckAllowedToPage(m))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue