From 410b18ceca3c55eb436a3b79e531875e8de3329f Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Wed, 4 Aug 2021 22:24:38 -0700 Subject: [PATCH] fix(linq): Removes linq and fixes fishing error (#674) --- Projects/Server/Maps/Map.cs | 9 +++- .../UOContent/Engines/ConPVP/Games/CTF.cs | 10 ++-- Projects/UOContent/Engines/Harvest/Fishing.cs | 25 ++++++--- .../UOContent/Engines/Khaldun/KhaldunGen.cs | 26 ++++++--- .../UOContent/Engines/Khaldun/RaiseSwitch.cs | 9 +++- .../Study of the Solen Hive/NestArea.cs | 10 +++- .../Christmas/2010/Addons/FireFliesDeed.cs | 10 +++- .../Items/Containers/MarkContainer.cs | 15 ++++-- Projects/UOContent/Items/Maps/TreasureMap.cs | 15 +++++- Projects/UOContent/Items/Misc/MorphItem.cs | 14 ++++- .../Special/House Raffle/HouseRaffleRegion.cs | 10 +++- .../UOContent/Items/Traps/FlameSpurtTrap.cs | 28 +++++----- .../Humanoid/Melee/KhaldunRevenant.cs | 14 +++-- .../ML/Humanoid/Magic/InterredGrizzle .cs | 5 +- .../Mobiles/Monsters/ML/Special/Ilhenir.cs | 5 +- Projects/UOContent/Multis/Houses/BaseHouse.cs | 53 +++++++++++++++---- .../UOContent/Multis/Houses/ContestHouses.cs | 24 ++++++++- Projects/UOContent/Regions/HouseRegion.cs | 22 ++++++-- Projects/UOContent/Skills/Hiding.cs | 11 +++- 19 files changed, 253 insertions(+), 62 deletions(-) diff --git a/Projects/Server/Maps/Map.cs b/Projects/Server/Maps/Map.cs index 170fe5ec0..eaa1b9d98 100644 --- a/Projects/Server/Maps/Map.cs +++ b/Projects/Server/Maps/Map.cs @@ -1349,7 +1349,14 @@ namespace Server { var eable = GetItemsInRange(point, 0); - contains = !eable.Any(item => item.Visible); + foreach (Item item in eable) + { + if (item.Visible) + { + contains = false; + break; + } + } eable.Free(); diff --git a/Projects/UOContent/Engines/ConPVP/Games/CTF.cs b/Projects/UOContent/Engines/ConPVP/Games/CTF.cs index b2b65e7a9..089e03690 100644 --- a/Projects/UOContent/Engines/ConPVP/Games/CTF.cs +++ b/Projects/UOContent/Engines/ConPVP/Games/CTF.cs @@ -1092,11 +1092,13 @@ namespace Server.Engines.ConPVP if (ourFlagCarrier != null && GetTeamInfo(ourFlagCarrier) == teamInfo) { - if (ourFlagCarrier.Aggressors.Any( - aggr => aggr.Defender == ourFlagCarrier && aggr.Attacker == mob - )) + foreach (var aggr in ourFlagCarrier.Aggressors) { - playerInfo.Score += 2; // helped defend guy capturing enemy flag + if (aggr.Defender == ourFlagCarrier && aggr.Attacker == mob) + { + playerInfo.Score += 2; // helped defend guy capturing enemy flag + break; + } } if (mob.Map == ourFlagCarrier.Map && ourFlagCarrier.InRange(mob, 12)) diff --git a/Projects/UOContent/Engines/Harvest/Fishing.cs b/Projects/UOContent/Engines/Harvest/Fishing.cs index a663100d6..12deb2fcd 100644 --- a/Projects/UOContent/Engines/Harvest/Fishing.cs +++ b/Projects/UOContent/Engines/Harvest/Fishing.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using Server.Engines.Quests; using Server.Engines.Quests.Collector; @@ -170,12 +171,24 @@ namespace Server.Engines.Harvest public override bool CheckResources(Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, bool timed) { - return from?.Backpack?.FindItemsByType() - .Any( - sos => - (from.Map == Map.Felucca || from.Map == Map.Trammel) && from.InRange(sos.TargetLocation, 60) - ) ?? - base.CheckResources(from, tool, def, map, loc, timed); + Container pack = from.Backpack; + + if (pack != null) + { + List messages = pack.FindItemsByType(); + + for (int i = 0; i < messages.Count; ++i) + { + SOS sos = messages[i]; + + if ((from.Map == Map.Felucca || from.Map == Map.Trammel) && from.InRange(sos.TargetLocation, 60)) + { + return true; + } + } + } + + return base.CheckResources(from, tool, def, map, loc, timed); } public override Item Construct(Type type, Mobile from) diff --git a/Projects/UOContent/Engines/Khaldun/KhaldunGen.cs b/Projects/UOContent/Engines/Khaldun/KhaldunGen.cs index 67453b1e1..8efb7b665 100644 --- a/Projects/UOContent/Engines/Khaldun/KhaldunGen.cs +++ b/Projects/UOContent/Engines/Khaldun/KhaldunGen.cs @@ -17,11 +17,16 @@ namespace Server.Commands { var eable = Map.Felucca.GetItemsInRange(new Point3D(x, y, z), 0); - var found = eable.Any( - item => item is MorphItem morphItem && morphItem.Z == z && - morphItem.InactiveItemID == inactiveItemID && - morphItem.ActiveItemID == activeItemID - ); + var found = false; + foreach (var item in eable) + { + if (item is MorphItem morphItem && morphItem.Z == z && morphItem.InactiveItemID == inactiveItemID && morphItem.ActiveItemID == activeItemID) + { + found = true; + break; + } + } + eable.Free(); return found; } @@ -30,7 +35,16 @@ namespace Server.Commands { var eable = Map.Felucca.GetItemsInRange(new Point3D(x, y, z), 0); - var found = eable.Any(item => item is EffectController && item.Z == z); + var found = false; + foreach (var item in eable) + { + if (item is EffectController && item.Z == z) + { + found = true; + break; + } + } + eable.Free(); return found; } diff --git a/Projects/UOContent/Engines/Khaldun/RaiseSwitch.cs b/Projects/UOContent/Engines/Khaldun/RaiseSwitch.cs index a22f6fb76..b539aa53b 100644 --- a/Projects/UOContent/Engines/Khaldun/RaiseSwitch.cs +++ b/Projects/UOContent/Engines/Khaldun/RaiseSwitch.cs @@ -196,7 +196,14 @@ namespace Server.Items public void Refresh() { - Visible = GetMobilesInRange(CurrentRange).Any(mob => !mob.Hidden || mob.AccessLevel <= AccessLevel.Player); + foreach (var mob in GetMobilesInRange(CurrentRange)) + { + if (!mob.Hidden || mob.AccessLevel <= AccessLevel.Player) + { + Visible = true; + break; + } + } } public override void Serialize(IGenericWriter writer) diff --git a/Projects/UOContent/Engines/Quests/Study of the Solen Hive/NestArea.cs b/Projects/UOContent/Engines/Quests/Study of the Solen Hive/NestArea.cs index 0064e38ee..7cc0dbf65 100644 --- a/Projects/UOContent/Engines/Quests/Study of the Solen Hive/NestArea.cs +++ b/Projects/UOContent/Engines/Quests/Study of the Solen Hive/NestArea.cs @@ -75,7 +75,15 @@ namespace Server.Engines.Quests.Naturalist public bool Contains(IPoint2D p) { - return m_Rects.Any(rect => rect.Contains(p)); + foreach (var rect in m_Rects) + { + if (rect.Contains(p)) + { + return true; + } + } + + return false; } } } diff --git a/Projects/UOContent/Holiday Stuff/Christmas/2010/Addons/FireFliesDeed.cs b/Projects/UOContent/Holiday Stuff/Christmas/2010/Addons/FireFliesDeed.cs index a3729eac2..60cab3664 100644 --- a/Projects/UOContent/Holiday Stuff/Christmas/2010/Addons/FireFliesDeed.cs +++ b/Projects/UOContent/Holiday Stuff/Christmas/2010/Addons/FireFliesDeed.cs @@ -197,7 +197,15 @@ namespace Server.Items var north = BaseAddon.IsWall(p3d.X, p3d.Y - 1, p3d.Z, map); var west = BaseAddon.IsWall(p3d.X - 1, p3d.Y, p3d.Z, map); - var isclear = !Map.Malas.GetItemsInRange(p3d, 0).OfType().Any(); + bool isclear = true; + + foreach (Item item in Map.Malas.GetItemsInRange(p3d, 0)) + { + if (item is Fireflies) + { + isclear = false; + } + } if ((m_ItemID == 0x2336 && north || m_ItemID == 0x2332 && west) && isclear) { diff --git a/Projects/UOContent/Items/Containers/MarkContainer.cs b/Projects/UOContent/Items/Containers/MarkContainer.cs index 153c388f6..45b18709d 100644 --- a/Projects/UOContent/Items/Containers/MarkContainer.cs +++ b/Projects/UOContent/Items/Containers/MarkContainer.cs @@ -116,10 +116,19 @@ namespace Server.Items private static bool FindMarkContainer(Point3D p, Map map) { var eable = map.GetItemsInRange(p, 0); - var found = eable.Any(item => item.Z == p.Z); - eable.Free(); - return found; + foreach (var item in eable) + { + if (item.Z == p.Z) + { + eable.Free(); + return true; + break; + } + } + + eable.Free(); + return false; } private static void CreateMalasPassage( diff --git a/Projects/UOContent/Items/Maps/TreasureMap.cs b/Projects/UOContent/Items/Maps/TreasureMap.cs index 229d40d7a..d5fea55a7 100644 --- a/Projects/UOContent/Items/Maps/TreasureMap.cs +++ b/Projects/UOContent/Items/Maps/TreasureMap.cs @@ -321,7 +321,20 @@ namespace Server.Items public static bool HasDiggingTool(Mobile m) { - return m.Backpack?.FindItemsByType().Any(tool => tool.HarvestSystem == Mining.System) == true; + if (m.Backpack == null) + { + return false; + } + + foreach (var tool in m.Backpack.FindItemsByType()) + { + if (tool.HarvestSystem == Mining.System) + { + return true; + } + } + + return false; } public void OnBeginDig(Mobile from) diff --git a/Projects/UOContent/Items/Misc/MorphItem.cs b/Projects/UOContent/Items/Misc/MorphItem.cs index 1b401e1c0..6d04586f3 100644 --- a/Projects/UOContent/Items/Misc/MorphItem.cs +++ b/Projects/UOContent/Items/Misc/MorphItem.cs @@ -80,7 +80,19 @@ namespace Server.Items public void Refresh() { - var found = GetMobilesInRange(CurrentRange).Any(mob => !mob.Hidden || mob.AccessLevel <= AccessLevel.Player); + var found = false; + var eable = GetMobilesInRange(CurrentRange); + foreach (var mob in eable) + { + if (!mob.Hidden || mob.AccessLevel <= AccessLevel.Player) + { + found = true; + break; + } + } + + eable.Free(); + ItemID = found ? ActiveItemID : InactiveItemID; Visible = ItemID != 0x1; diff --git a/Projects/UOContent/Items/Special/House Raffle/HouseRaffleRegion.cs b/Projects/UOContent/Items/Special/House Raffle/HouseRaffleRegion.cs index bd92cc616..1110c2347 100644 --- a/Projects/UOContent/Items/Special/House Raffle/HouseRaffleRegion.cs +++ b/Projects/UOContent/Items/Special/House Raffle/HouseRaffleRegion.cs @@ -44,7 +44,15 @@ namespace Server.Regions private bool ContainsDeed(Container cont) { - return cont.FindItemsByType().Any(deed => deed == m_Stone.Deed); + foreach (var deed in cont.FindItemsByType()) + { + if (deed == m_Stone.Deed) + { + return true; + } + } + + return false; } public override bool OnTarget(Mobile m, Target t, object o) diff --git a/Projects/UOContent/Items/Traps/FlameSpurtTrap.cs b/Projects/UOContent/Items/Traps/FlameSpurtTrap.cs index fdc61ea71..f42533659 100644 --- a/Projects/UOContent/Items/Traps/FlameSpurtTrap.cs +++ b/Projects/UOContent/Items/Traps/FlameSpurtTrap.cs @@ -84,22 +84,24 @@ namespace Server.Items return; } - var foundPlayer = GetMobilesInRange(3) - .Where(mob => mob.Player && mob.Alive && mob.AccessLevel <= AccessLevel.Player) - .Any(mob => Z + 8 >= mob.Z && mob.Z + 16 > Z); - - if (!foundPlayer) + foreach (var mob in GetMobilesInRange(3)) { - m_Spurt?.Delete(); - m_Spurt = null; - } - else if (m_Spurt?.Deleted != false) - { - m_Spurt = new Static(0x3709); - m_Spurt.MoveToWorld(Location, Map); + if (mob.Player && mob.Alive && mob.AccessLevel <= AccessLevel.Player && Z + 8 >= mob.Z && mob.Z + 16 > Z) + { + if (m_Spurt?.Deleted != false) + { + m_Spurt = new Static(0x3709); + m_Spurt.MoveToWorld(Location, Map); - Effects.PlaySound(GetWorldLocation(), Map, 0x309); + Effects.PlaySound(GetWorldLocation(), Map, 0x309); + } + + return; + } } + + m_Spurt?.Delete(); + m_Spurt = null; } public override bool OnMoveOver(Mobile m) diff --git a/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/KhaldunRevenant.cs b/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/KhaldunRevenant.cs index adf0ccf89..95c51ab24 100644 --- a/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/KhaldunRevenant.cs +++ b/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/KhaldunRevenant.cs @@ -81,10 +81,18 @@ namespace Server.Mobiles lastKiller = creature.GetMaster(); } - if (IsInsideKhaldun(m) && IsInsideKhaldun(lastKiller) && lastKiller.Player && !m_Set.Contains(lastKiller) && - m.Aggressors.Any(ai => ai.Attacker == lastKiller && ai.CanReportMurder)) + if (!IsInsideKhaldun(m) || !IsInsideKhaldun(lastKiller) || !lastKiller.Player || m_Set.Contains(lastKiller)) { - SummonRevenant(m, lastKiller); + return; + } + + foreach (var ai in m.Aggressors) + { + if (ai.Attacker == lastKiller && ai.CanReportMurder) + { + SummonRevenant(m, lastKiller); + return; + } } } diff --git a/Projects/UOContent/Mobiles/Monsters/ML/Humanoid/Magic/InterredGrizzle .cs b/Projects/UOContent/Mobiles/Monsters/ML/Humanoid/Magic/InterredGrizzle .cs index 25d4ee271..585983995 100644 --- a/Projects/UOContent/Mobiles/Monsters/ML/Humanoid/Magic/InterredGrizzle .cs +++ b/Projects/UOContent/Mobiles/Monsters/ML/Humanoid/Magic/InterredGrizzle .cs @@ -120,7 +120,10 @@ namespace Server.Mobiles { p = GetSpawnPosition(2); - if (!Map.GetItemsInRange(p, 0).OfType().Any()) + var eable = Map.GetItemsInRange(p, 0); + bool atLocation = eable.GetEnumerator().MoveNext(); + eable.Free(); + if (!atLocation) { break; } diff --git a/Projects/UOContent/Mobiles/Monsters/ML/Special/Ilhenir.cs b/Projects/UOContent/Mobiles/Monsters/ML/Special/Ilhenir.cs index cf6024a60..1b807a9be 100644 --- a/Projects/UOContent/Mobiles/Monsters/ML/Special/Ilhenir.cs +++ b/Projects/UOContent/Mobiles/Monsters/ML/Special/Ilhenir.cs @@ -252,7 +252,10 @@ namespace Server.Mobiles { p = GetSpawnPosition(2); - if (!Map.GetItemsInRange(p, 0).OfType().Any()) + var eable = Map.GetItemsInRange(p, 0); + bool atLocation = eable.GetEnumerator().MoveNext(); + eable.Free(); + if (!atLocation) { break; } diff --git a/Projects/UOContent/Multis/Houses/BaseHouse.cs b/Projects/UOContent/Multis/Houses/BaseHouse.cs index da4ebce2d..c235327f5 100644 --- a/Projects/UOContent/Multis/Houses/BaseHouse.cs +++ b/Projects/UOContent/Multis/Houses/BaseHouse.cs @@ -709,11 +709,21 @@ namespace Server.Multis public override bool InRange(IPoint2D from, int range) { - return Region?.Area.Any( - rect => - from.X >= rect.Start.X - range && from.Y >= rect.Start.Y - range && from.X < rect.End.X + range && - from.Y < rect.End.Y + range - ) == true; + if (Region == null) + { + return false; + } + + + foreach (var rect in Region.Area) + { + if (from.X >= rect.Start.X - range && from.Y >= rect.Start.Y - range && from.X < rect.End.X + range && from.Y < rect.End.Y + range) + { + return true; + } + } + + return false; } public virtual int GetNewVendorSystemMaxVendors() @@ -766,8 +776,18 @@ namespace Server.Multis public List AvailableVendorsFor(Mobile m) => PlayerVendors.Where(vendor => vendor.CanInteractWith(m, false)).ToList(); - public bool AreThereAvailableVendorsFor(Mobile m) => - PlayerVendors.Any(vendor => vendor.CanInteractWith(m, false)); + public bool AreThereAvailableVendorsFor(Mobile m) + { + foreach (var vendor in PlayerVendors) + { + if (vendor.CanInteractWith(m, false)) + { + return true; + } + } + + return false; + } public void MoveAllToCrate() { @@ -3446,8 +3466,23 @@ namespace Server.Multis AllHouses.Remove(this); } - public static bool HasHouse(Mobile m) => - m != null && m_Table.TryGetValue(m, out var list) && list.Any(h => !h.Deleted); + public static bool HasHouse(Mobile m) + { + if (m == null || !m_Table.TryGetValue(m, out var list)) + { + return false; + } + + foreach (var h in list) + { + if (!h.Deleted) + { + return true; + } + } + + return false; + } public static bool HasAccountHouse(Mobile m) { diff --git a/Projects/UOContent/Multis/Houses/ContestHouses.cs b/Projects/UOContent/Multis/Houses/ContestHouses.cs index 2d3433b09..a624c663b 100644 --- a/Projects/UOContent/Multis/Houses/ContestHouses.cs +++ b/Projects/UOContent/Multis/Houses/ContestHouses.cs @@ -137,8 +137,28 @@ namespace Server.Multis Fixtures.Add(item); } - public override bool IsInside(Point3D p, int height) => - base.IsInside(p, height) || Fixtures?.OfType().Any(fix => fix.Location == p) == true; + public override bool IsInside(Point3D p, int height) + { + if (base.IsInside(p, height)) + { + return true; + } + + if (Fixtures == null) + { + return false; + } + + foreach (Item fixture in Fixtures) + { + if (fixture is HouseTeleporter fix && fix.Location == p) + { + return true; + } + } + + return false; + } public virtual void AutoAddFixtures() { diff --git a/Projects/UOContent/Regions/HouseRegion.cs b/Projects/UOContent/Regions/HouseRegion.cs index 419ba11a8..b99838d35 100644 --- a/Projects/UOContent/Regions/HouseRegion.cs +++ b/Projects/UOContent/Regions/HouseRegion.cs @@ -209,11 +209,23 @@ namespace Server.Regions public override bool OnDecay(Item item) => (!House.HasLockedDownItem(item) && !House.HasSecureItem(item) || !House.IsInside(item)) && base.OnDecay(item); - public override TimeSpan GetLogoutDelay(Mobile m) => - House.IsFriend(m) && House.IsInside(m) - ? m.Aggressed.Any(info => info.Defender.Player && Core.Now - info.LastCombatTime < CombatHeatDelay) ? - base.GetLogoutDelay(m) : TimeSpan.Zero - : base.GetLogoutDelay(m); + public override TimeSpan GetLogoutDelay(Mobile m) + { + if (!House.IsFriend(m) || !House.IsInside(m)) + { + return base.GetLogoutDelay(m); + } + + foreach (var info in m.Aggressed) + { + if (info.Defender.Player && Core.Now - info.LastCombatTime < CombatHeatDelay) + { + return base.GetLogoutDelay(m); + } + } + + return TimeSpan.Zero; + } public override void OnSpeech(SpeechEventArgs e) { diff --git a/Projects/UOContent/Skills/Hiding.cs b/Projects/UOContent/Skills/Hiding.cs index 778e18ffd..283a80ea6 100644 --- a/Projects/UOContent/Skills/Hiding.cs +++ b/Projects/UOContent/Skills/Hiding.cs @@ -63,10 +63,17 @@ namespace Server.SkillHandlers { if (!CombatOverride) { - if (m.GetMobilesInRange(range).Any(check => check.InLOS(m) && check.Combatant == m)) + var eable = m.GetMobilesInRange(range); + foreach (var check in eable) { - badCombat = true; + if (check.InLOS(m) && check.Combatant == m) + { + badCombat = true; + break; + } } + + eable.Free(); } ok = !badCombat && m.CheckSkill(SkillName.Hiding, 0.0 - bonus, 100.0 - bonus);