fix: Prepares for IPooledEnumerable removal (#1548)

### Summary

- Removes `IPooledEnumerable` (non-generic)
- Changes `IPooledEnumerable<T>` so that  `Free()` is replaced with the `IDisposable` pattern
This commit is contained in:
Kamron Batman 2023-10-15 11:20:49 -07:00 • committed by GitHub
parent c2d6578955
commit d57f1fecc1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
92 changed files with 644 additions and 907 deletions

View file

@ -59,8 +59,6 @@ namespace Server.Commands.Generic
objs.Add(obj);
}
}
eable.Free();
ext.Filter(objs);
RunCommand(from, objs, command, args);

View file

@ -1141,14 +1141,11 @@ namespace Server.Commands
{
if (item.Z == z && item.ItemID == itemID)
{
eable.Free();
return true;
}
}
}
eable.Free();
while (m_DeleteQueue.Count > 0)
{
m_DeleteQueue.Dequeue().Delete();
@ -1211,8 +1208,6 @@ namespace Server.Commands
break;
}
}
eable.Free();
}
else if (item is MarkContainer markCont)
{

View file

@ -1137,14 +1137,11 @@ namespace Server.Commands
{
if (item.Z == z && item.ItemID == itemID)
{
eable.Free();
return true;
}
}
}
eable.Free();
while (m_DeleteQueue.Count > 0)
{
m_DeleteQueue.Dequeue()?.Delete();
@ -1197,8 +1194,6 @@ namespace Server.Commands
break;
}
}
eable.Free();
}
else if (item is MarkContainer markCont)
{

View file

@ -132,8 +132,6 @@ namespace Server.Commands
item.Delete();
}
}
eable.Free();
return count;
}

View file

@ -101,8 +101,6 @@ namespace Server.Commands
}
}
eable.Free();
while (m_ToDelete.Count > 0)
{
m_ToDelete.Dequeue().Delete();

View file

@ -97,8 +97,6 @@ namespace Server.Commands
}
}
eable.Free();
for (var i = 0; i < toDelete.Count; ++i)
{
toDelete[i].Delete();

View file

@ -479,8 +479,6 @@ namespace Server.Engines.ConPVP
}
}
eable.Free();
if (empty)
{
HitObject(point, landTop, 0);
@ -569,8 +567,6 @@ namespace Server.Engines.ConPVP
{
continue;
}
area.Free();
if (i is BRGoal goal)
{
var oldLoc = new Point3D(GetWorldLocation());
@ -591,8 +587,6 @@ namespace Server.Engines.ConPVP
return;
}
area.Free();
var clients = Map.GetClientsInBounds(rect);
foreach (var ns in clients)
{
@ -622,16 +616,12 @@ namespace Server.Engines.ConPVP
continue;
}
clients.Free();
// TODO: probably need to change this a lot...
DoCatch(m);
return;
}
clients.Free();
m_PathIdx = pathCheckEnd;
if (m_PathIdx > 0 && m_PathIdx - 1 < m_Path.Count)
@ -685,8 +675,6 @@ namespace Server.Engines.ConPVP
}
}
eable.Free();
Z = myZ;
m_Flying = false;
Visible = true;

View file

@ -393,7 +393,6 @@ namespace Server.Engines.Craft
{
if (item.Z + 16 > item.Z && item.Z + 16 > item.Z && Find(item.ItemID, itemIDs))
{
eable.Free();
return true;
}
}

View file

@ -65,8 +65,6 @@ public class DefBlacksmithy : CraftSystem
}
}
eable.Free();
for (var x = -range; (!anvil || !forge) && x <= range; ++x)
{
for (var y = -range; (!anvil || !forge) && y <= range; ++y)

View file

@ -203,14 +203,11 @@ public partial class LeverPuzzleController : Item
{
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...");
NetState.FlushAll();
@ -533,8 +530,6 @@ public partial class LeverPuzzleController : Item
state.Send(buffer);
}
eable.Free();
}
private void Deserialize(IGenericReader reader, int version)
@ -620,7 +615,6 @@ public partial class LeverPuzzleController : Item
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++)
{

View file

@ -167,8 +167,6 @@ namespace Server.Ethics
}
}
eable.Free();
if (!found)
{
continue;

View file

@ -273,13 +273,10 @@ namespace Server.Factions
if (type.IsInstanceOfType(obj))
{
eable.Free();
return true;
}
}
eable.Free();
return false;
}
@ -292,13 +289,10 @@ namespace Server.Factions
{
if (types[i].IsInstanceOfType(obj))
{
eable.Free();
return true;
}
}
}
eable.Free();
return false;
}

View file

@ -83,12 +83,9 @@ namespace Server.Factions
{
if (type.IsInstanceOfType(item))
{
eable.Free();
return true;
}
}
eable.Free();
return false;
}
}

View file

@ -102,8 +102,6 @@ namespace Server
}
}
eable.Free();
foreach (var mob in targets)
{
var damage = mob.Hits * 6 / 10;

View file

@ -312,13 +312,10 @@ namespace Server.Engines.Harvest
{
if (i.StackWith(m, i, false))
{
eable.Free();
return true;
}
}
eable.Free();
item.MoveToWorld(m.Location, map);
return true;
}

View file

@ -26,8 +26,6 @@ namespace Server.Commands
break;
}
}
eable.Free();
return found;
}
@ -44,8 +42,6 @@ namespace Server.Commands
break;
}
}
eable.Free();
return found;
}
@ -53,7 +49,6 @@ namespace Server.Commands
{
var eable = Map.Felucca.GetItemsInBounds<T>(new Rectangle2D(x, y, 1, 1));
var t = eable.FirstOrDefault(item => item.GetType() == srcItem.GetType());
eable.Free();
if (t != null)
{
srcItem.Delete();

View file

@ -22,7 +22,7 @@ namespace Server.Movement
private readonly List<Item>[] _pools = { new(), new(), new(), new() };
private readonly HashSet<Sector> _sectors = new();
private readonly HashSet<Map.Sector> _sectors = new();
private MovementImpl()
{

View file

@ -162,8 +162,6 @@ namespace Server.Engines.Spawners
queue.Dequeue().Delete();
}
eable.Free();
try
{
var spawner = type.CreateInstance<ISpawner>(json, options);

View file

@ -380,8 +380,6 @@ public partial class CharacterStatue : Mobile, IRewardItem
CharacterStatuePackets.CreateStatueAnimation(animPacket, Serial, 1, m_Animation, m_Frames);
state.Send(animPacket);
}
eable.Free();
}
private class DemolishEntry : ContextMenuEntry

View file

@ -60,8 +60,6 @@ namespace Server.Engines.Events
}
}
eable.Free();
if (spawncount > pumpkins)
{
new HalloweenPumpkin().MoveToWorld(Utility.RandomPointIn(rect, map), map);

View file

@ -270,7 +270,6 @@ namespace Server.Items
{
var eable = map.GetItemsInRange<SHTeleporter>(p, 0);
var teleporter = eable.FirstOrDefault(item => item.Z == p.Z);
eable.Free();
return teleporter;
}

View file

@ -136,12 +136,9 @@ public partial class MarkContainer : LockableContainer
{
if (item.Z == p.Z)
{
eable.Free();
return true;
}
}
eable.Free();
return false;
}

View file

@ -132,7 +132,6 @@ public partial class Firebomb : Item
targets.Enqueue(m);
}
}
eable.Free();
while (targets.Count > 0)
{

View file

@ -88,8 +88,6 @@ public partial class MorphItem : Item
}
}
eable.Free();
ItemID = found ? _activeItemId : _inactiveItemId;
Visible = ItemID != 0x1;

View file

@ -60,8 +60,6 @@ public partial class OilFlask : Item
}
}
eable.Free();
if (!didStack)
{
emptyFlask.MoveToWorld(Location, Map);

View file

@ -143,8 +143,6 @@ public partial class Campfire : Item
pm.SendLocalizedMessage(500620); // You feel it would take a few moments to secure your camp.
}
}
eable.Free();
}
private void ClearEntries()

View file

@ -167,8 +167,6 @@ public abstract partial class BaseExplosionPotion : BasePotion
}
}
eable.Free();
var min = Scale(from, MinDamage);
var max = Scale(from, MaxDamage);

View file

@ -115,8 +115,6 @@ public partial class FireHorn : Item
}
}
eable.Free();
if (targets.Count > 0)
{
var prov = from.Skills.Provocation.Fixed;

View file

@ -63,8 +63,6 @@ namespace Server.Items
}
}
eable.Free();
if (didEffect)
{
attacker.FixedEffect(0x3728, 10, 15);

View file

@ -1,6 +1,6 @@
using Server.Spells;
using System;
using System.Collections.Generic;
using Server.Collections;
namespace Server.Items
{
@ -27,29 +27,25 @@ namespace Server.Items
return;
}
List<Mobile> targets = new List<Mobile>();
IPooledEnumerable eable = defender.GetMobilesInRange(5);
foreach (Mobile m in eable)
using var list = PooledRefList<Mobile>.Create();
foreach (Mobile m in defender.GetMobilesInRange(5))
{
if (m != defender && m != attacker && SpellHelper.ValidIndirectTarget(attacker, m) && m?.Deleted == false &&
m.Map == attacker.Map && m.Alive && attacker.CanSee(m) && attacker.CanBeHarmful(m) &&
attacker.InRange(m, weapon.MaxRange) && attacker.InLOS(m))
{
targets.Add(m);
list.Add(m);
}
}
eable.Free();
defender.BoltEffect(0);
var mobilesLeft = Math.Min(targets.Count, 2);
while (mobilesLeft-- > 0)
{
var index = Utility.Random(targets.Count);
var m = targets[index];
targets.RemoveAt(index);
var count = Math.Min(list.Count, 2);
list.Shuffle();
for (var i = 0; i < count; i++)
{
var m = list[i];
m.BoltEffect(0);
AOS.Damage(m, attacker, Utility.RandomMinMax(29, 40), 0, 0, 0, 0, 100);
}

View file

@ -28,9 +28,7 @@ public class MysticArc : WeaponAbility
}
using var queue = PooledRefQueue<Mobile>.Create();
IPooledEnumerable eable = attacker.GetMobilesInRange(weapon.MaxRange);
foreach (Mobile m in eable)
foreach (Mobile m in attacker.GetMobilesInRange(weapon.MaxRange))
{
if (m == defender)
{
@ -45,8 +43,6 @@ public class MysticArc : WeaponAbility
queue.Enqueue(m);
}
eable.Free();
if (queue.Count > 0)
{
_target = queue.PeekRandom();

View file

@ -51,8 +51,6 @@ namespace Server.Items
}
}
eable.Free();
if (queue.Count <= 0)
{
return;

View file

@ -1729,8 +1729,6 @@ public abstract partial class BaseWeapon : Item, IWeapon, IFactionItem, ICraftab
}
}
eable.Free();
return inPack switch
{
>= 5 => 100,
@ -1765,8 +1763,6 @@ public abstract partial class BaseWeapon : Item, IWeapon, IFactionItem, ICraftab
break;
}
}
eable.Free();
}
PlaySwingAnimation(attacker);
@ -3587,8 +3583,6 @@ public abstract partial class BaseWeapon : Item, IWeapon, IFactionItem, ICraftab
}
}
eable.Free();
if (queue.Count == 0)
{
return;

View file

@ -2193,8 +2193,6 @@ public abstract class BaseAI
}
}
eable.Free();
if (destroyables > 0)
{
Effects.PlaySound(new Point3D(x, y, m_Mobile.Z), m_Mobile.Map, 0x3B3);
@ -2764,8 +2762,6 @@ public abstract class BaseAI
}
}
eable.Free();
m_Mobile.FocusMob = newFocusMob ?? enemySummonMob;
return m_Mobile.FocusMob != null;
}
@ -2845,8 +2841,6 @@ public abstract class BaseAI
}
}
}
eable.Free();
}
public virtual void Deactivate()

View file

@ -17,7 +17,6 @@ public abstract class AreaEffectMonsterAbility : MonsterAbility
queue.Enqueue(m);
}
}
eable.Free();
while (queue.Count > 0)
{

View file

@ -3649,8 +3649,6 @@ namespace Server.Mobiles
}
}
eable.Free();
if (toRummage == null)
{
return false;
@ -3813,7 +3811,6 @@ namespace Server.Mobiles
queue.Enqueue(pet);
}
}
eable.Free();
while (queue.Count > 0)
{
@ -5360,7 +5357,6 @@ namespace Server.Mobiles
queue.Enqueue(m);
}
}
eable.Free();
while (queue.Count > 0)
{

View file

@ -84,8 +84,6 @@ public partial class HordeMinionFamiliar : BaseFamiliar
}
}
eable.Free();
var pickedUp = 3;
while (pickedUp > 0 && queue.Count > 0)

View file

@ -77,7 +77,6 @@ public partial class ShadowWispFamiliar : BaseFamiliar
queue.Enqueue(m);
}
}
eable.Free();
while (queue.Count > 0)
{

View file

@ -305,8 +305,6 @@ namespace Server.Mobiles
break;
}
}
eable.Free();
}
}
}

View file

@ -124,8 +124,6 @@ namespace Server.Mobiles
orc.MoveToWorld(map.GetRandomNearbyLocation(target.Location), map);
orc.Combatant = target;
}
eable.Free();
}
}
}

View file

@ -139,8 +139,6 @@ namespace Server.Mobiles
m.FixedParticles(0x376A, 9, 32, 5030, EffectLayer.Waist);
m.PlaySound(0x202);
}
eable.Free();
}
base.OnThink();

View file

@ -90,7 +90,6 @@ namespace Server.Mobiles
queue.Enqueue(m);
}
}
eable.Free();
if (queue.Count == 0)
{

View file

@ -120,7 +120,6 @@ namespace Server.Mobiles
var eable = Map.GetItemsInRange<StainedOoze>(p, 0);
using var enumerator = eable.GetEnumerator();
bool atLocation = enumerator.MoveNext();
eable.Free();
if (!atLocation)
{
break;

View file

@ -237,7 +237,6 @@ namespace Server.Mobiles
var eable = Map.GetItemsInRange<StainedOoze>(p, 0);
using var enumerator = eable.GetEnumerator();
bool atLocation = enumerator.MoveNext();
eable.Free();
if (!atLocation)
{
break;

View file

@ -246,8 +246,6 @@ public partial class Meraktus : BaseChampion
m.Animate(20, 7, 1, true, false, 0); // take hit
}
}
eable.Free();
}
private void MigrateFrom(V0Content content)

View file

@ -78,7 +78,6 @@ namespace Server.Mobiles
queue.Enqueue(m);
}
}
eable.Free();
var amount = queue.Count - 6;
if (amount > 0)

View file

@ -84,7 +84,6 @@ namespace Server.Mobiles
queue.Enqueue(m);
}
}
eable.Free();
var amount = queue.Count - 6;
if (amount > 0)

View file

@ -179,8 +179,6 @@ namespace Server.Mobiles
); // * The plague beast attempts to absorb the remains, but cannot! *
}
}
eable.Free();
}
private void IncreaseHits(int hp)

View file

@ -100,8 +100,6 @@ namespace Server.Mobiles
Hits += bogling.Hits / 2;
bogling.Delete();
}
eable.Free();
}
public override void OnGotMeleeAttack(Mobile attacker, int damage)

View file

@ -141,8 +141,6 @@ namespace Server.Mobiles
m.FixedParticles(0x36BD, 1, 10, 0x1F78, 0xA6, 0, (EffectLayer)255);
m.ApplyPoison(this, Poison.Lethal);
}
eable.Free();
}
}

View file

@ -862,12 +862,9 @@ namespace Server.Mobiles
{
if (m.Z >= location.Z && m.Z < location.Z + 16 && (!m.Hidden || m.AccessLevel == AccessLevel.Player))
{
mobiles.Free();
return false;
}
}
mobiles.Free();
}
var bi = item.GetBounce();

View file

@ -148,14 +148,11 @@ public partial class Barracoon : BaseChampion
rats++;
if (rats >= 16)
{
eable.Free();
return;
}
}
}
eable.Free();
PlaySound(0x3D);
rats = Utility.RandomMinMax(3, 6);

View file

@ -539,7 +539,6 @@ public partial class Harrower : BaseCreature
break;
}
}
eable.Free();
if (toTeleport == null)
{

View file

@ -154,8 +154,6 @@ public partial class HarrowerTentacles : BaseCreature
m.Damage(drain, m_Owner);
}
eable.Free();
}
}
}

View file

@ -132,8 +132,6 @@ public partial class Rikktor : BaseChampion
m.Animate(20, 7, 1, true, false, 0); // take hit
}
}
eable.Free();
}
public override int GetAngerSound() => Utility.Random(0x2CE, 2);

View file

@ -1277,8 +1277,6 @@ namespace Server.Mobiles
m.OpenBackpack(from);
}
}
mobiles.Free();
}
e.Handled = true;

View file

@ -1526,8 +1526,6 @@ namespace Server.Multis
newComponents.Tiles[x][y].Length == 0 || Contains(item);
}
);
eable.Free();
return canFit;
}
@ -1905,7 +1903,7 @@ namespace Server.Multis
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Dispose()
{
_entities?.Free();
_entities?.Dispose();
_enumerator?.Dispose();
}

View file

@ -237,13 +237,10 @@ namespace Server.Items
{
if (obj == this)
{
eable.Free();
return true;
}
}
eable.Free();
return false;
}

View file

@ -770,8 +770,6 @@ namespace Server.Multis
}
}
}
eable.Free();
}
public List<Mobile> AvailableVendorsFor(Mobile m) =>
@ -1157,8 +1155,6 @@ namespace Server.Multis
var eable = Map.GetItemsInBounds(rect);
var list = eable.Where(item => item.Movable && IsInside(item)).ToList();
eable.Free();
return list;
}
@ -3661,7 +3657,6 @@ namespace Server.Multis
map.GetItemsInBounds<Guildstone>(new Rectangle2D(X + mcl.Min.X, Y + mcl.Min.Y, mcl.Width, mcl.Height));
var item = eable.FirstOrDefault(Contains);
eable.Free();
return item;
}

View file

@ -386,7 +386,7 @@ namespace Server.Multis
}
}
var _sectors = new List<Sector>();
var _sectors = new List<Map.Sector>();
var _houses = new List<BaseHouse>();
for (var i = 0; i < yard.Count; i++)

View file

@ -156,8 +156,6 @@ public class GuardedRegion : BaseRegion
var eable = focus.GetMobilesInRange<BaseGuard>(8);
var useGuard = eable.FirstOrDefault(m => m.Focus == null);
eable.Free();
if (useGuard == null)
{
m_GuardParams[0] = focus;
@ -338,8 +336,6 @@ public class GuardedRegion : BaseRegion
break;
}
}
eable.Free();
}
public bool IsGuardCandidate(Mobile m) =>

View file

@ -81,8 +81,6 @@ namespace Server.SkillHandlers
}
}
inRange.Free();
if (Faction.Find(src) != null)
{
var itemsInRange = src.Map.GetItemsInRange<BaseFactionTrap>(p, range);
@ -103,8 +101,6 @@ namespace Server.SkillHandlers
foundAnyone = true;
}
}
itemsInRange.Free();
}
}

View file

@ -69,8 +69,6 @@ namespace Server.SkillHandlers
break;
}
}
eable.Free();
}
ok = !badCombat && m.CheckSkill(SkillName.Hiding, 0.0 - bonus, 100.0 - bonus);

View file

@ -77,8 +77,6 @@ public static class Snooping
ns.Mobile.SendMessage(message);
}
}
eable.Free();
}
}

View file

@ -134,7 +134,6 @@ namespace Server.SkillHandlers
break;
}
}
eable.Free();
var min = 1 + (int)(Caster.Skills.SpiritSpeak.Value * 0.25);
var max = min + 4;

View file

@ -225,7 +225,6 @@ namespace Server.SkillHandlers
list.Add(m);
}
}
eable.Free();
if (list.Count > 0)
{

View file

@ -55,7 +55,6 @@ namespace Server.Spells.Chivalry
queue.Enqueue(m);
}
}
eable.Free();
while (queue.Count > 0)
{

View file

@ -46,8 +46,6 @@ namespace Server.Spells.Chivalry
}
}
eable.Free();
Caster.PlaySound(0x244);
Caster.FixedParticles(0x3709, 1, 30, 9965, 5, 7, EffectLayer.Waist);
Caster.FixedParticles(0x376A, 1, 30, 9502, 5, 3, EffectLayer.Waist);

View file

@ -262,8 +262,6 @@ namespace Server.Spells.Fifth
}
}
eable.Free();
while (queue.Count > 0)
{
var m = queue.Dequeue();

View file

@ -57,8 +57,6 @@ namespace Server.Spells.Fourth
}
}
eable.Free();
Effects.PlaySound(loc, Caster.Map, 0x299);
var cured = 0;

View file

@ -59,8 +59,6 @@ namespace Server.Spells.Fourth
}
}
eable.Free();
if (Core.AOS)
{
var party = Party.Get(Caster);

View file

@ -47,9 +47,7 @@ namespace Server.Spells.Mysticism
var casterParty = Party.Get(Caster);
if (casterParty != null)
{
IPooledEnumerable eable = Caster.Map.GetMobilesInRange(m.Location, 2);
foreach (Mobile mob in eable)
foreach (Mobile mob in Caster.Map.GetMobilesInRange(m.Location, 2))
{
if (mob == m)
{
@ -65,8 +63,6 @@ namespace Server.Spells.Mysticism
}
}
}
eable.Free();
}
var primarySkill = GetBaseSkill(Caster);

View file

@ -111,8 +111,6 @@ namespace Server.Spells.Necromancy
pool.Enqueue(targ);
}
eable.Free();
while (pool.Count > 0)
{
var targ = pool.Dequeue();

View file

@ -84,8 +84,6 @@ namespace Server.Spells.Necromancy
pool.Enqueue(targ);
}
eable.Free();
Effects.PlaySound(Caster.Location, map, 0x1FB);
Effects.PlaySound(Caster.Location, map, 0x10B);
Effects.SendLocationParticles(

View file

@ -56,8 +56,6 @@ namespace Server.Spells.Seventh
pool.Enqueue(m);
}
eable.Free();
if (pool.Count > 0)
{
double damage = Core.AOS

View file

@ -69,8 +69,6 @@ namespace Server.Spells.Seventh
}
}
eable.Free();
while (queue.Count > 0)
{
queue.Dequeue().Delete();

View file

@ -60,8 +60,6 @@ namespace Server.Spells.Seventh
queue.Enqueue(m);
}
eable.Free();
double damage = Core.AOS
? GetNewAosDamage(51, 1, 5, playerVsPlayer)
: Utility.Random(27, 22);

View file

@ -54,8 +54,6 @@ namespace Server.Spells.Sixth
HarmfulSpell(m);
}
eable.Free();
}
}

View file

@ -53,8 +53,6 @@ namespace Server.Spells.Sixth
m.FixedParticles(0x375A, 9, 20, 5049, EffectLayer.Head);
m.PlaySound(0x1FD);
}
eable.Free();
}
}

View file

@ -103,13 +103,10 @@ namespace Server.Spells.Spellweaving
{
if (item.Z + item.ItemData.CalcHeight == location.Z && IsValidTile(item.ItemID))
{
eable.Free();
return true;
}
}
eable.Free();
return false;
}
@ -125,12 +122,9 @@ namespace Server.Spells.Spellweaving
if (m != Caster && m is PlayerMobile && Caster.CanBeBeneficial(m, false) &&
Math.Abs(spellWeaving - m.Skills.Spellweaving.Value) <= 20)
{
eable.Free();
return true;
}
}
eable.Free();
return false;
}
@ -150,8 +144,6 @@ namespace Server.Spells.Spellweaving
pool.Enqueue(m);
}
}
eable.Free();
return pool;
}

View file

@ -63,8 +63,6 @@ namespace Server.Spells.Spellweaving
new BuffInfo(BuffIcon.EssenceOfWind, 1075802, duration, m, $"{fcMalus}\t{ssiMalus}")
);
}
eable.Free();
}
FinishSequence();

View file

@ -72,8 +72,6 @@ namespace Server.Spells.Spellweaving
new BuffInfo(BuffIcon.Thunderstorm, 1075800, duration, m, GetCastRecoveryMalus(m))
);
}
eable.Free();
}
FinishSequence();

View file

@ -106,8 +106,6 @@ namespace Server.Spells.Third
item.OnMoveOver(m);
}
}
eable.Free();
}
FinishSequence();