fix: Changes Map.Sector.Mobiles to link list & Fixes various related crash bugs (#1553)
### Summary
Eliminates `IPooledEnumerable<T>` and `eable.Free()` from `Map` for mobiles. This drastically simplifies code that iterates in range, for example:
```cs
foreach (var m in m.GetMobilesInRange(5))
{
}
```
The code above no longer requires an eable and calling `Free()`.
- [X] Fixed several locations where an NPC that was damaged would cause a server crash.
- [X] Removed an unnecessary allocation in guard fake calls (NPCs calling guards on you)
- [X] Fixes damage precision loss in Poison Strike Spell
- [X] BogThing no longer attempts to "search" for boglings to eat when it is at full health
This commit is contained in:
parent
27f0cec1fa
commit
28c06c1cc0
71 changed files with 796 additions and 591 deletions
|
|
@ -32,9 +32,7 @@ namespace Server.Spells.Sixth
|
|||
|
||||
if (map != null)
|
||||
{
|
||||
var eable = map.GetMobilesInRange(new Point3D(p), 2);
|
||||
|
||||
foreach (var m in eable)
|
||||
foreach (var m in map.GetMobilesInRange(new Point3D(p), 2))
|
||||
{
|
||||
if (Core.AOS && (m == Caster || !SpellHelper.ValidIndirectTarget(Caster, m) || !Caster.CanSee(m) ||
|
||||
!Caster.CanBeHarmful(m, false)))
|
||||
|
|
|
|||
|
|
@ -29,12 +29,8 @@ namespace Server.Spells.Sixth
|
|||
|
||||
if (map != null)
|
||||
{
|
||||
var eable = map.GetMobilesInRange(
|
||||
new Point3D(p),
|
||||
1 + (int)(Caster.Skills.Magery.Value / 20.0)
|
||||
);
|
||||
|
||||
foreach (var m in eable)
|
||||
var range = 1 + (int)(Caster.Skills.Magery.Value / 20.0);
|
||||
foreach (var m in map.GetMobilesInRange(new Point3D(p), range))
|
||||
{
|
||||
if (m is ShadowKnight && (m.X != p.X || m.Y != p.Y))
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue