fix: Codegens more misc items (#1214)

This commit is contained in:
Kamron Batman 2022-10-29 00:43:30 -07:00 • committed by GitHub
parent 505865e3ed
commit 212ce8bc24
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
81 changed files with 2641 additions and 3498 deletions

View file

@ -1,91 +1,67 @@
using System;
using System.Collections.Generic;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[SerializationGenerator(0, false)]
public partial class EffectItem : Item
{
public class EffectItem : Item
private static Queue<EffectItem> _free = new(); // List of available EffectItems
public static readonly TimeSpan DefaultDuration = TimeSpan.FromSeconds(5.0);
private EffectItem() : base(1) => Movable = false;
public override bool Decays => true;
public static EffectItem Create(Point3D p, Map map, TimeSpan duration)
{
private static readonly List<EffectItem> m_Free = new(); // List of available EffectItems
EffectItem item = null;
public static readonly TimeSpan DefaultDuration = TimeSpan.FromSeconds(5.0);
private EffectItem() : base(1) // nodraw
=>
Movable = false;
public EffectItem(Serial serial) : base(serial)
while (_free.Count > 0)
{
var free = _free.Dequeue();
if (!free.Deleted && free.Map == Map.Internal)
{
item = free;
break;
}
}
public override bool Decays => true;
public static EffectItem Create(Point3D p, Map map, TimeSpan duration)
if (item == null)
{
EffectItem item = null;
for (var i = m_Free.Count - 1; item == null && i >= 0; --i) // We reuse new entries first so decay works better
{
var free = m_Free[i];
m_Free.RemoveAt(i);
if (!free.Deleted && free.Map == Map.Internal)
{
item = free;
}
}
if (item == null)
{
item = new EffectItem();
}
else
{
item.ItemID = 1;
}
item.MoveToWorld(p, map);
item.BeginFree(duration);
return item;
item = new EffectItem();
}
else
{
item.ItemID = 1;
}
public void BeginFree(TimeSpan duration)
item.MoveToWorld(p, map);
item.BeginFree(duration);
return item;
}
public void BeginFree(TimeSpan duration) => new FreeTimer(this, duration).Start();
[AfterDeserialization(false)]
private void AfterDeserialization()
{
Delete();
}
private class FreeTimer : Timer
{
private EffectItem _item;
public FreeTimer(EffectItem item, TimeSpan delay) : base(delay) => _item = item;
protected override void OnTick()
{
new FreeTimer(this, duration).Start();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
Delete();
}
private class FreeTimer : Timer
{
private readonly EffectItem m_Item;
public FreeTimer(EffectItem item, TimeSpan delay) : base(delay)
{
m_Item = item;
}
protected override void OnTick()
{
m_Item.Internalize();
m_Free.Add(m_Item);
}
_item.Internalize();
_free.Enqueue(_item);
}
}
}