fix: Adds OSI candle/torch functionality, codegens lights (#1075)

This commit is contained in:
Kamron Batman 2022-06-17 23:26:27 -07:00 committed by GitHub
parent 9c8f73aaf8
commit 41efa69b56
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
53 changed files with 865 additions and 1219 deletions

View file

@ -5301,12 +5301,12 @@ namespace Server
}
}
public static Item LiftItemDupe(Item oldItem, int amount)
public static T LiftItemDupe<T>(T oldItem, int amount) where T : Item
{
Item item;
T item;
try
{
item = oldItem.GetType().CreateInstance<Item>();
item = oldItem.GetType().CreateInstance<T>();
}
catch
{
@ -5318,6 +5318,9 @@ namespace Server
return null;
}
var oldAmount = oldItem.Amount;
oldItem.Amount = amount;
item.Visible = oldItem.Visible;
item.Movable = oldItem.Movable;
item.LootType = oldItem.LootType;
@ -5329,10 +5332,9 @@ namespace Server
item.Name = oldItem.Name;
item.Weight = oldItem.Weight;
item.Amount = oldItem.Amount - amount;
item.Amount = oldAmount - amount;
item.Map = oldItem.Map;
oldItem.Amount = amount;
oldItem.OnAfterDuped(item);
if (oldItem.Parent is Mobile parentMobile)

View file

@ -0,0 +1,109 @@
using ModernUO.Serialization;
namespace Server.Items;
[SerializationGenerator(0, false)]
public abstract partial class BaseEquipableLight : BaseLight
{
[Constructible]
public BaseEquipableLight(int itemID) : base(itemID) => Layer = Layer.TwoHanded;
private BaseEquipableLight SplitStack()
{
if (!Stackable || Amount < 2)
{
return null;
}
var stack = Mobile.LiftItemDupe(this, 1);
stack.BurntOut = BurntOut;
stack.Duration = Duration;
stack.Light = Light;
stack.Protected = Protected;
return stack;
}
public override bool OnEquip(Mobile from)
{
if (!base.OnEquip(from))
{
return false;
}
var stack = SplitStack();
if (stack != null && stack.Parent != from.Backpack)
{
if (from.AddToBackpack(stack))
{
if (this is Candle)
{
from.SendLocalizedMessage(502967); // You put the remaining unlit candles into your backpack.
}
else if (this is Torch)
{
from.SendLocalizedMessage(502970); // You put the remaining unlit torches into your backpack.
}
}
else
{
stack.MoveToWorld(from.Location, from.Map);
}
}
return true;
}
public override void Ignite()
{
if (Parent is not Mobile && RootParent is Mobile holder)
{
if (holder.EquipItem(this))
{
if (this is Candle)
{
holder.SendLocalizedMessage(502969); // You put the candle in your left hand.
}
else if (this is Torch)
{
holder.SendLocalizedMessage(502972); // You put the torch in your left hand.
}
// No message for lanterns?
}
else
{
SplitStack();
MoveToWorld(holder.Location, holder.Map);
if (this is Candle)
{
holder.SendLocalizedMessage(502968); // You cannot hold the candle, so it has been placed at your feet.
}
else if (this is Torch)
{
// 502971 has the wrong message
holder.SendMessage("You cannot hold the torch, so it has been placed at your feet.");
}
// No message for lanterns?
}
}
else
{
SplitStack();
}
base.Ignite();
}
public override void OnAdded(IEntity parent)
{
if (Burning && parent is Container)
{
Douse();
}
base.OnAdded(parent);
}
}

View file

@ -1,62 +0,0 @@
namespace Server.Items
{
public abstract class BaseEquipableLight : BaseLight
{
[Constructible]
public BaseEquipableLight(int itemID) : base(itemID) => Layer = Layer.TwoHanded;
public BaseEquipableLight(Serial serial) : base(serial)
{
}
public override void Ignite()
{
if (Parent is not Mobile && RootParent is Mobile holder)
{
if (holder.EquipItem(this))
{
if (this is Candle)
{
holder.SendLocalizedMessage(502969); // You put the candle in your left hand.
}
else if (this is Torch)
{
holder.SendLocalizedMessage(502971); // You put the torch in your left hand.
}
base.Ignite();
}
else
{
holder.SendLocalizedMessage(502449); // You cannot hold this item.
}
}
else
{
base.Ignite();
}
}
public override void OnAdded(IEntity parent)
{
if (Burning && parent is Container)
{
Douse();
}
base.OnAdded(parent);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

View file

@ -1,233 +1,213 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[SerializationGenerator(1, false)]
public abstract partial class BaseLight : Item
{
public abstract class BaseLight : Item
public static readonly bool Burnout = false;
[SerializableField(0)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private bool _burntOut;
// Field 1
private bool _burning;
// Field 2
private TimeSpan _duration = TimeSpan.Zero;
[SerializableField(3)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private bool _protected;
[TimerDrift]
[SerializableField(4, getter: "private", setter: "private")]
private Timer _burnTimer;
[DeserializeTimerField(4)]
private void DeserializeTimer(TimeSpan delay)
{
public static readonly bool Burnout = false;
private bool m_Burning;
private TimeSpan m_Duration = TimeSpan.Zero;
private DateTime m_End;
private Timer m_Timer;
[Constructible]
public BaseLight(int itemID) : base(itemID)
if (_burning && _duration != TimeSpan.Zero)
{
DoTimer(delay);
}
}
public BaseLight(Serial serial) : base(serial)
[Constructible]
public BaseLight(int itemID) : base(itemID)
{
}
public abstract int LitItemID { get; }
public virtual int UnlitItemID => 0;
public virtual int BurntOutItemID => 0;
public virtual int LitSound => 0x47;
public virtual int UnlitSound => 0x3be;
public virtual int BurntOutSound => 0x4b8;
[SerializableField(1)]
[CommandProperty(AccessLevel.GameMaster)]
public bool Burning
{
get => _burning;
set
{
}
public abstract int LitItemID { get; }
public virtual int UnlitItemID => 0;
public virtual int BurntOutItemID => 0;
public virtual int LitSound => 0x47;
public virtual int UnlitSound => 0x3be;
public virtual int BurntOutSound => 0x4b8;
[CommandProperty(AccessLevel.GameMaster)]
public bool Burning
{
get => m_Burning;
set
if (_burning != value)
{
if (m_Burning != value)
{
m_Burning = true;
DoTimer(m_Duration);
}
_burning = true;
DoTimer(_duration);
this.MarkDirty();
}
}
}
[CommandProperty(AccessLevel.GameMaster)]
public bool BurntOut { get; set; }
[CommandProperty(AccessLevel.GameMaster)]
public bool Protected { get; set; }
[CommandProperty(AccessLevel.GameMaster)]
public TimeSpan Duration
[SerializableField(2)]
[CommandProperty(AccessLevel.GameMaster)]
public TimeSpan Duration
{
get => _duration != TimeSpan.Zero && _burning && _burnTimer != null ? _burnTimer.Next - Core.Now : _duration;
set
{
get => m_Duration != TimeSpan.Zero && m_Burning ? m_End - Core.Now : m_Duration;
set => m_Duration = value;
_duration = value;
this.MarkDirty();
}
}
public virtual void PlayLitSound()
{
if (LitSound != 0)
{
var loc = GetWorldLocation();
Effects.PlaySound(loc, Map, LitSound);
}
}
public virtual void PlayUnlitSound()
{
var sound = UnlitSound;
if (BurntOut && BurntOutSound != 0)
{
sound = BurntOutSound;
}
public virtual void PlayLitSound()
if (sound != 0)
{
if (LitSound != 0)
{
var loc = GetWorldLocation();
Effects.PlaySound(loc, Map, LitSound);
}
var loc = GetWorldLocation();
Effects.PlaySound(loc, Map, sound);
}
}
public virtual void Ignite()
{
if (!BurntOut)
{
PlayLitSound();
_burning = true;
ItemID = LitItemID;
DoTimer(_duration);
}
}
public virtual void Douse()
{
_burning = false;
ItemID = BurntOut && BurntOutItemID != 0 ? BurntOutItemID : UnlitItemID;
if (BurntOut)
{
_duration = TimeSpan.Zero;
}
else if (_duration != TimeSpan.Zero)
{
_duration = _burnTimer.Next - Core.Now;
}
public virtual void PlayUnlitSound()
_burnTimer?.Stop();
this.MarkDirty();
PlayUnlitSound();
}
public virtual void Burn()
{
BurntOut = true;
Douse();
}
private void DoTimer(TimeSpan delay)
{
_duration = delay;
_burnTimer?.Stop();
this.MarkDirty();
if (delay == TimeSpan.Zero)
{
var sound = UnlitSound;
if (BurntOut && BurntOutSound != 0)
{
sound = BurntOutSound;
}
if (sound != 0)
{
var loc = GetWorldLocation();
Effects.PlaySound(loc, Map, sound);
}
return;
}
public virtual void Ignite()
{
if (!BurntOut)
{
PlayLitSound();
_burnTimer = new InternalTimer(this, delay);
_burnTimer.Start();
this.MarkDirty();
}
m_Burning = true;
ItemID = LitItemID;
DoTimer(m_Duration);
}
public override void OnDoubleClick(Mobile from)
{
if (_burntOut)
{
return;
}
public virtual void Douse()
if (_protected && from.AccessLevel == AccessLevel.Player)
{
m_Burning = false;
if (BurntOut && BurntOutItemID != 0)
{
ItemID = BurntOutItemID;
}
else
{
ItemID = UnlitItemID;
}
if (BurntOut)
{
m_Duration = TimeSpan.Zero;
}
else if (m_Duration != TimeSpan.Zero)
{
m_Duration = m_End - Core.Now;
}
m_Timer?.Stop();
PlayUnlitSound();
return;
}
public virtual void Burn()
if (!from.InRange(GetWorldLocation(), 2))
{
return;
}
if (!_burning)
{
Ignite();
}
else if (UnlitItemID != 0)
{
BurntOut = true;
Douse();
}
}
private void DoTimer(TimeSpan delay)
private void Deserialize(IGenericReader reader, int version)
{
_burntOut = reader.ReadBool();
_burning = reader.ReadBool();
_duration = reader.ReadTimeSpan();
_protected = reader.ReadBool();
if (_burning && _duration != TimeSpan.Zero)
{
m_Duration = delay;
m_Timer?.Stop();
if (delay == TimeSpan.Zero)
{
return;
}
m_End = Core.Now + delay;
m_Timer = new InternalTimer(this, delay);
m_Timer.Start();
DoTimer(reader.ReadDeltaTime() - Core.Now);
}
}
public override void OnDoubleClick(Mobile from)
private class InternalTimer : Timer
{
private readonly BaseLight m_Light;
public InternalTimer(BaseLight light, TimeSpan delay) : base(delay) => m_Light = light;
protected override void OnTick()
{
if (BurntOut)
if (m_Light?.Deleted == false)
{
return;
}
if (Protected && from.AccessLevel == AccessLevel.Player)
{
return;
}
if (!from.InRange(GetWorldLocation(), 2))
{
return;
}
if (m_Burning)
{
if (UnlitItemID != 0)
{
Douse();
}
}
else
{
Ignite();
}
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
writer.Write(BurntOut);
writer.Write(m_Burning);
writer.Write(m_Duration);
writer.Write(Protected);
if (m_Burning && m_Duration != TimeSpan.Zero)
{
writer.WriteDeltaTime(m_End);
}
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
{
case 0:
{
BurntOut = reader.ReadBool();
m_Burning = reader.ReadBool();
m_Duration = reader.ReadTimeSpan();
Protected = reader.ReadBool();
if (m_Burning && m_Duration != TimeSpan.Zero)
{
DoTimer(reader.ReadDeltaTime() - Core.Now);
}
break;
}
}
}
private class InternalTimer : Timer
{
private readonly BaseLight m_Light;
public InternalTimer(BaseLight light, TimeSpan delay) : base(delay)
{
m_Light = light;
}
protected override void OnTick()
{
if (m_Light?.Deleted == false)
{
m_Light.Burn();
}
m_Light.Burn();
}
}
}

View file

@ -1,35 +1,20 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[SerializationGenerator(0, false)]
public partial class Brazier : BaseLight
{
public class Brazier : BaseLight
[Constructible]
public Brazier() : base(0xE31)
{
[Constructible]
public Brazier() : base(0xE31)
{
Movable = false;
Duration = TimeSpan.Zero; // Never burnt out
Burning = true;
Light = LightType.Circle225;
Weight = 20.0;
}
public Brazier(Serial serial) : base(serial)
{
}
public override int LitItemID => 0xE31;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
Movable = false;
Duration = TimeSpan.Zero; // Never burnt out
Burning = true;
Light = LightType.Circle225;
Weight = 20.0;
}
public override int LitItemID => 0xE31;
}

View file

@ -1,35 +1,20 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[SerializationGenerator(0, false)]
public partial class BrazierTall : BaseLight
{
public class BrazierTall : BaseLight
[Constructible]
public BrazierTall() : base(0x19AA)
{
[Constructible]
public BrazierTall() : base(0x19AA)
{
Movable = false;
Duration = TimeSpan.Zero; // Never burnt out
Burning = true;
Light = LightType.Circle300;
Weight = 25.0;
}
public BrazierTall(Serial serial) : base(serial)
{
}
public override int LitItemID => 0x19AA;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
Movable = false;
Duration = TimeSpan.Zero; // Never burnt out
Burning = true;
Light = LightType.Circle300;
Weight = 25.0;
}
public override int LitItemID => 0x19AA;
}

View file

@ -1,69 +1,44 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[SerializationGenerator(0, false)]
public partial class Candelabra : BaseLight, IShipwreckedItem
{
public class Candelabra : BaseLight, IShipwreckedItem
[SerializableField(0)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private bool _isShipwreckedItem;
[Constructible]
public Candelabra() : base(0xA27)
{
[Constructible]
public Candelabra() : base(0xA27)
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle225;
Weight = 3.0;
}
public override int LitItemID => 0xB1D;
public override int UnlitItemID => 0xA27;
public override void AddNameProperties(IPropertyList list)
{
base.AddNameProperties(list);
if (IsShipwreckedItem)
{
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle225;
Weight = 3.0;
list.Add(1041645); // recovered from a shipwreck
}
}
public Candelabra(Serial serial) : base(serial)
public override void OnSingleClick(Mobile from)
{
base.OnSingleClick(from);
if (IsShipwreckedItem)
{
}
public override int LitItemID => 0xB1D;
public override int UnlitItemID => 0xA27;
[CommandProperty(AccessLevel.GameMaster)]
public bool IsShipwreckedItem { get; set; }
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1);
writer.Write(IsShipwreckedItem);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
{
case 1:
{
IsShipwreckedItem = reader.ReadBool();
break;
}
}
}
public override void AddNameProperties(IPropertyList list)
{
base.AddNameProperties(list);
if (IsShipwreckedItem)
{
list.Add(1041645); // recovered from a shipwreck
}
}
public override void OnSingleClick(Mobile from)
{
base.OnSingleClick(from);
if (IsShipwreckedItem)
{
LabelTo(from, 1041645); // recovered from a shipwreck
}
LabelTo(from, 1041645); // recovered from a shipwreck
}
}
}

View file

@ -1,35 +1,20 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[SerializationGenerator(0, false)]
public partial class CandelabraStand : BaseLight
{
public class CandelabraStand : BaseLight
[Constructible]
public CandelabraStand() : base(0xA29)
{
[Constructible]
public CandelabraStand() : base(0xA29)
{
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle225;
Weight = 20.0;
}
public CandelabraStand(Serial serial) : base(serial)
{
}
public override int LitItemID => 0xB26;
public override int UnlitItemID => 0xA29;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle225;
Weight = 20.0;
}
public override int LitItemID => 0xB26;
public override int UnlitItemID => 0xA29;
}

View file

@ -7,16 +7,10 @@ namespace Server.Items
[Constructible]
public Candle() : base(0xA28)
{
if (Burnout)
{
Duration = TimeSpan.FromMinutes(20);
}
else
{
Duration = TimeSpan.Zero;
}
Duration = Burnout ? TimeSpan.FromMinutes(20) : TimeSpan.Zero;
Burning = false;
Stackable = true;
Light = LightType.Circle150;
Weight = 1.0;
}

View file

@ -1,43 +1,21 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[SerializationGenerator(0, false)]
public partial class CandleLarge : BaseLight
{
public class CandleLarge : BaseLight
[Constructible]
public CandleLarge() : base(0xA26)
{
[Constructible]
public CandleLarge() : base(0xA26)
{
if (Burnout)
{
Duration = TimeSpan.FromMinutes(25);
}
else
{
Duration = TimeSpan.Zero;
}
Duration = Burnout ? TimeSpan.FromMinutes(25) : TimeSpan.Zero;
Burning = false;
Light = LightType.Circle150;
Weight = 2.0;
}
public CandleLarge(Serial serial) : base(serial)
{
}
public override int LitItemID => 0xB1A;
public override int UnlitItemID => 0xA26;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
Burning = false;
Light = LightType.Circle150;
Weight = 2.0;
}
public override int LitItemID => 0xB1A;
public override int UnlitItemID => 0xA26;
}

View file

@ -1,43 +1,21 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[SerializationGenerator(0, false)]
public partial class CandleLong : BaseLight
{
public class CandleLong : BaseLight
[Constructible]
public CandleLong() : base(0x1433)
{
[Constructible]
public CandleLong() : base(0x1433)
{
if (Burnout)
{
Duration = TimeSpan.FromMinutes(30);
}
else
{
Duration = TimeSpan.Zero;
}
Duration = Burnout ? TimeSpan.FromMinutes(30) : TimeSpan.Zero;
Burning = false;
Light = LightType.Circle150;
Weight = 1.0;
}
public CandleLong(Serial serial) : base(serial)
{
}
public override int LitItemID => 0x1430;
public override int UnlitItemID => 0x1433;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
Burning = false;
Light = LightType.Circle150;
Weight = 1.0;
}
public override int LitItemID => 0x1430;
public override int UnlitItemID => 0x1433;
}

View file

@ -1,43 +1,21 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[SerializationGenerator(0, false)]
public partial class CandleShort : BaseLight
{
public class CandleShort : BaseLight
[Constructible]
public CandleShort() : base(0x142F)
{
[Constructible]
public CandleShort() : base(0x142F)
{
if (Burnout)
{
Duration = TimeSpan.FromMinutes(25);
}
else
{
Duration = TimeSpan.Zero;
}
Duration = Burnout ? TimeSpan.FromMinutes(25) : TimeSpan.Zero;
Burning = false;
Light = LightType.Circle150;
Weight = 1.0;
}
public CandleShort(Serial serial) : base(serial)
{
}
public override int LitItemID => 0x142C;
public override int UnlitItemID => 0x142F;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
Burning = false;
Light = LightType.Circle150;
Weight = 1.0;
}
public override int LitItemID => 0x142C;
public override int UnlitItemID => 0x142F;
}

View file

@ -1,66 +1,22 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[SerializationGenerator(0, false)]
public partial class CandleSkull : BaseLight
{
public class CandleSkull : BaseLight
[Constructible]
public CandleSkull() : base(0x1853)
{
[Constructible]
public CandleSkull() : base(0x1853)
{
if (Burnout)
{
Duration = TimeSpan.FromMinutes(25);
}
else
{
Duration = TimeSpan.Zero;
}
Duration = Burnout ? TimeSpan.FromMinutes(25) : TimeSpan.Zero;
Burning = false;
Light = LightType.Circle150;
Weight = 5.0;
}
public CandleSkull(Serial serial) : base(serial)
{
}
public override int LitItemID
{
get
{
if (ItemID is 0x1583 or 0x1854)
{
return 0x1854;
}
return 0x1858;
}
}
public override int UnlitItemID
{
get
{
if (ItemID is 0x1853 or 0x1584)
{
return 0x1853;
}
return 0x1857;
}
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
Burning = false;
Light = LightType.Circle150;
Weight = 5.0;
}
public override int LitItemID => ItemID is 0x1583 or 0x1854 ? 0x1854 : 0x1858;
public override int UnlitItemID => ItemID is 0x1853 or 0x1584 ? 0x1853 : 0x1857;
}

View file

@ -1,28 +1,14 @@
namespace Server.Items
using ModernUO.Serialization;
namespace Server.Items;
[SerializationGenerator(0, false)]
public partial class DarkSource : Item
{
public class DarkSource : Item
[Constructible]
public DarkSource() : base(0x1646)
{
[Constructible]
public DarkSource() : base(0x1646)
{
Layer = Layer.TwoHanded;
Movable = false;
}
public DarkSource(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
Layer = Layer.TwoHanded;
Movable = false;
}
}

View file

@ -1,36 +1,21 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[SerializationGenerator(0, false)]
public partial class HangingLantern : BaseLight
{
public class HangingLantern : BaseLight
[Constructible]
public HangingLantern() : base(0xA1D)
{
[Constructible]
public HangingLantern() : base(0xA1D)
{
Movable = false;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle300;
Weight = 40.0;
}
public HangingLantern(Serial serial) : base(serial)
{
}
public override int LitItemID => 0xA1A;
public override int UnlitItemID => 0xA1D;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
Movable = false;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle300;
Weight = 40.0;
}
public override int LitItemID => 0xA1A;
public override int UnlitItemID => 0xA1D;
}

View file

@ -1,71 +1,49 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[SerializationGenerator(0, false)]
public partial class HeatingStand : BaseLight
{
public class HeatingStand : BaseLight
[Constructible]
public HeatingStand() : base(0x1849)
{
[Constructible]
public HeatingStand() : base(0x1849)
{
if (Burnout)
{
Duration = TimeSpan.FromMinutes(25);
}
else
{
Duration = TimeSpan.Zero;
}
Duration = Burnout ? TimeSpan.FromMinutes(25) : TimeSpan.Zero;
Burning = false;
Burning = false;
Light = LightType.Empty;
Weight = 1.0;
}
public override int LitItemID => 0x184A;
public override int UnlitItemID => 0x1849;
public override void Ignite()
{
base.Ignite();
if (ItemID == LitItemID)
{
Light = LightType.Circle150;
}
else if (ItemID == UnlitItemID)
{
Light = LightType.Empty;
Weight = 1.0;
}
}
public HeatingStand(Serial serial) : base(serial)
public override void Douse()
{
base.Douse();
if (ItemID == LitItemID)
{
Light = LightType.Circle150;
}
public override int LitItemID => 0x184A;
public override int UnlitItemID => 0x1849;
public override void Ignite()
else if (ItemID == UnlitItemID)
{
base.Ignite();
if (ItemID == LitItemID)
{
Light = LightType.Circle150;
}
else if (ItemID == UnlitItemID)
{
Light = LightType.Empty;
}
}
public override void Douse()
{
base.Douse();
if (ItemID == LitItemID)
{
Light = LightType.Circle150;
}
else if (ItemID == UnlitItemID)
{
Light = LightType.Empty;
}
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
Light = LightType.Empty;
}
}
}

View file

@ -1,36 +1,21 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[SerializationGenerator(0, false)]
public partial class LampPost1 : BaseLight
{
public class LampPost1 : BaseLight
[Constructible]
public LampPost1() : base(0xB21)
{
[Constructible]
public LampPost1() : base(0xB21)
{
Movable = false;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle300;
Weight = 40.0;
}
public LampPost1(Serial serial) : base(serial)
{
}
public override int LitItemID => 0xB20;
public override int UnlitItemID => 0xB21;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
Movable = false;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle300;
Weight = 40.0;
}
public override int LitItemID => 0xB20;
public override int UnlitItemID => 0xB21;
}

View file

@ -1,36 +1,21 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[SerializationGenerator(0, false)]
public partial class LampPost2 : BaseLight
{
public class LampPost2 : BaseLight
[Constructible]
public LampPost2() : base(0xB23)
{
[Constructible]
public LampPost2() : base(0xB23)
{
Movable = false;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle300;
Weight = 40.0;
}
public LampPost2(Serial serial) : base(serial)
{
}
public override int LitItemID => 0xB22;
public override int UnlitItemID => 0xB23;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
Movable = false;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle300;
Weight = 40.0;
}
public override int LitItemID => 0xB22;
public override int UnlitItemID => 0xB23;
}

View file

@ -1,36 +1,21 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[SerializationGenerator(0, false)]
public partial class LampPost3 : BaseLight
{
public class LampPost3 : BaseLight
[Constructible]
public LampPost3() : base(0xb25)
{
[Constructible]
public LampPost3() : base(0xb25)
{
Movable = false;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle300;
Weight = 40.0;
}
public LampPost3(Serial serial) : base(serial)
{
}
public override int LitItemID => 0xB24;
public override int UnlitItemID => 0xB25;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
Movable = false;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle300;
Weight = 40.0;
}
public override int LitItemID => 0xB24;
public override int UnlitItemID => 0xB25;
}

View file

@ -7,14 +7,7 @@ namespace Server.Items
[Constructible]
public Lantern() : base(0xA25)
{
if (Burnout)
{
Duration = TimeSpan.FromMinutes(20);
}
else
{
Duration = TimeSpan.Zero;
}
Duration = Burnout ? TimeSpan.FromMinutes(20) : TimeSpan.Zero;
Burning = false;
Light = LightType.Circle300;
@ -25,31 +18,9 @@ namespace Server.Items
{
}
public override int LitItemID
{
get
{
if (ItemID is 0xA15 or 0xA17)
{
return ItemID;
}
public override int LitItemID => ItemID is 0xA15 or 0xA17 ? ItemID : 0xA22;
return 0xA22;
}
}
public override int UnlitItemID
{
get
{
if (ItemID == 0xA18)
{
return ItemID;
}
return 0xA25;
}
}
public override int UnlitItemID => ItemID == 0xA18 ? ItemID : 0xA25;
public override void Serialize(IGenericWriter writer)
{

View file

@ -1,28 +1,14 @@
namespace Server.Items
using ModernUO.Serialization;
namespace Server.Items;
[SerializationGenerator(0, false)]
public partial class LightSource : Item
{
public class LightSource : Item
[Constructible]
public LightSource() : base(0x1647)
{
[Constructible]
public LightSource() : base(0x1647)
{
Layer = Layer.TwoHanded;
Movable = false;
}
public LightSource(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
Layer = Layer.TwoHanded;
Movable = false;
}
}

View file

@ -1,37 +1,22 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[Flippable]
[SerializationGenerator(0, false)]
public partial class PaperLantern : BaseLight
{
[Flippable]
public class PaperLantern : BaseLight
[Constructible]
public PaperLantern() : base(0x24BE)
{
[Constructible]
public PaperLantern() : base(0x24BE)
{
Movable = true;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle150;
Weight = 3.0;
}
public PaperLantern(Serial serial) : base(serial)
{
}
public override int LitItemID => 0x24BD;
public override int UnlitItemID => 0x24BE;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
Movable = true;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle150;
Weight = 3.0;
}
public override int LitItemID => 0x24BD;
public override int UnlitItemID => 0x24BE;
}

View file

@ -1,74 +1,37 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[Flippable]
[SerializationGenerator(0, false)]
public partial class RedHangingLantern : BaseLight
{
[Flippable]
public class RedHangingLantern : BaseLight
[Constructible]
public RedHangingLantern() : base(0x24C2)
{
[Constructible]
public RedHangingLantern() : base(0x24C2)
Movable = true;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle300;
Weight = 3.0;
}
public override int LitItemID => ItemID == 0x24C2 ? 0x24C1 : 0x24C3;
public override int UnlitItemID => ItemID == 0x24C1 ? 0x24C2 : 0x24C4;
public void Flip()
{
Light = LightType.Circle300;
ItemID = ItemID switch
{
Movable = true;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle300;
Weight = 3.0;
}
public RedHangingLantern(Serial serial) : base(serial)
{
}
public override int LitItemID
{
get
{
if (ItemID == 0x24C2)
{
return 0x24C1;
}
return 0x24C3;
}
}
public override int UnlitItemID
{
get
{
if (ItemID == 0x24C1)
{
return 0x24C2;
}
return 0x24C4;
}
}
public void Flip()
{
Light = LightType.Circle300;
ItemID = ItemID switch
{
0x24C2 => 0x24C4,
0x24C1 => 0x24C3,
0x24C4 => 0x24C2,
0x24C3 => 0x24C1,
_ => ItemID
};
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
0x24C2 => 0x24C4,
0x24C1 => 0x24C3,
0x24C4 => 0x24C2,
0x24C3 => 0x24C1,
_ => ItemID
};
}
}

View file

@ -1,37 +1,22 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[Flippable]
[SerializationGenerator(0, false)]
public partial class RoundPaperLantern : BaseLight
{
[Flippable]
public class RoundPaperLantern : BaseLight
[Constructible]
public RoundPaperLantern() : base(0x24CA)
{
[Constructible]
public RoundPaperLantern() : base(0x24CA)
{
Movable = true;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle150;
Weight = 3.0;
}
public RoundPaperLantern(Serial serial) : base(serial)
{
}
public override int LitItemID => 0x24C9;
public override int UnlitItemID => 0x24CA;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
Movable = true;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle150;
Weight = 3.0;
}
public override int LitItemID => 0x24C9;
public override int UnlitItemID => 0x24CA;
}

View file

@ -1,37 +1,22 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[Flippable]
[SerializationGenerator(0, false)]
public partial class ShojiLantern : BaseLight
{
[Flippable]
public class ShojiLantern : BaseLight
[Constructible]
public ShojiLantern() : base(0x24BC)
{
[Constructible]
public ShojiLantern() : base(0x24BC)
{
Movable = true;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle150;
Weight = 3.0;
}
public ShojiLantern(Serial serial) : base(serial)
{
}
public override int LitItemID => 0x24BB;
public override int UnlitItemID => 0x24BC;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
Movable = true;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle150;
Weight = 3.0;
}
public override int LitItemID => 0x24BB;
public override int UnlitItemID => 0x24BC;
}

View file

@ -8,16 +8,10 @@ namespace Server.Items
[Constructible]
public Torch() : base(0xF6B)
{
if (Burnout)
{
Duration = TimeSpan.FromMinutes(30);
}
else
{
Duration = TimeSpan.Zero;
}
Duration = Burnout ? TimeSpan.FromMinutes(30) : TimeSpan.Zero;
Burning = false;
Stackable = true;
Light = LightType.Circle300;
Weight = 1.0;
}

View file

@ -1,81 +1,42 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[Flippable]
[SerializationGenerator(0, false)]
public partial class WallSconce : BaseLight
{
[Flippable]
public class WallSconce : BaseLight
[Constructible]
public WallSconce() : base(0x9FB)
{
[Constructible]
public WallSconce() : base(0x9FB)
Movable = false;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.WestBig;
Weight = 3.0;
}
public override int LitItemID => ItemID == 0x9FB ? 0x9FD : 0xA02;
public override int UnlitItemID => ItemID == 0x9FD ? 0x9FB : 0xA00;
public void Flip()
{
Light = Light switch
{
Movable = false;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.WestBig;
Weight = 3.0;
}
LightType.WestBig => LightType.NorthBig,
LightType.NorthBig => LightType.WestBig,
_ => Light
};
public WallSconce(Serial serial) : base(serial)
ItemID = ItemID switch
{
}
public override int LitItemID
{
get
{
if (ItemID == 0x9FB)
{
return 0x9FD;
}
return 0xA02;
}
}
public override int UnlitItemID
{
get
{
if (ItemID == 0x9FD)
{
return 0x9FB;
}
return 0xA00;
}
}
public void Flip()
{
if (Light == LightType.WestBig)
{
Light = LightType.NorthBig;
}
else if (Light == LightType.NorthBig)
{
Light = LightType.WestBig;
}
ItemID = ItemID switch
{
0x9FB => 0xA00,
0x9FD => 0xA02,
0xA00 => 0x9FB,
0xA02 => 0x9FD,
_ => ItemID
};
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
0x9FB => 0xA00,
0x9FD => 0xA02,
0xA00 => 0x9FB,
0xA02 => 0x9FD,
_ => ItemID
};
}
}

View file

@ -1,81 +1,42 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[Flippable]
[SerializationGenerator(0, false)]
public partial class WallTorch : BaseLight
{
[Flippable]
public class WallTorch : BaseLight
[Constructible]
public WallTorch() : base(0xA05)
{
[Constructible]
public WallTorch() : base(0xA05)
Movable = false;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.WestBig;
Weight = 3.0;
}
public override int LitItemID => ItemID == 0xA05 ? 0xA07 : 0xA0C;
public override int UnlitItemID => ItemID == 0xA07 ? 0xA05 : 0xA0A;
public void Flip()
{
Light = Light switch
{
Movable = false;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.WestBig;
Weight = 3.0;
}
LightType.WestBig => LightType.NorthBig,
LightType.NorthBig => LightType.WestBig,
_ => Light
};
public WallTorch(Serial serial) : base(serial)
ItemID = ItemID switch
{
}
public override int LitItemID
{
get
{
if (ItemID == 0xA05)
{
return 0xA07;
}
return 0xA0C;
}
}
public override int UnlitItemID
{
get
{
if (ItemID == 0xA07)
{
return 0xA05;
}
return 0xA0A;
}
}
public void Flip()
{
if (Light == LightType.WestBig)
{
Light = LightType.NorthBig;
}
else if (Light == LightType.NorthBig)
{
Light = LightType.WestBig;
}
ItemID = ItemID switch
{
0xA05 => 0xA0A,
0xA07 => 0xA0C,
0xA0A => 0xA05,
0xA0C => 0xA07,
_ => ItemID
};
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
0xA05 => 0xA0A,
0xA07 => 0xA0C,
0xA0A => 0xA05,
0xA0C => 0xA07,
_ => ItemID
};
}
}

View file

@ -1,74 +1,37 @@
using System;
using ModernUO.Serialization;
namespace Server.Items
namespace Server.Items;
[Flippable]
[SerializationGenerator(0, false)]
public partial class WhiteHangingLantern : BaseLight
{
[Flippable]
public class WhiteHangingLantern : BaseLight
[Constructible]
public WhiteHangingLantern() : base(0x24C6)
{
[Constructible]
public WhiteHangingLantern() : base(0x24C6)
Movable = true;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle300;
Weight = 3.0;
}
public override int LitItemID => ItemID == 0x24C6 ? 0x24C5 : 0x24C7;
public override int UnlitItemID => ItemID == 0x24C5 ? 0x24C6 : 0x24C8;
public void Flip()
{
Light = LightType.Circle300;
ItemID = ItemID switch
{
Movable = true;
Duration = TimeSpan.Zero; // Never burnt out
Burning = false;
Light = LightType.Circle300;
Weight = 3.0;
}
public WhiteHangingLantern(Serial serial) : base(serial)
{
}
public override int LitItemID
{
get
{
if (ItemID == 0x24C6)
{
return 0x24C5;
}
return 0x24C7;
}
}
public override int UnlitItemID
{
get
{
if (ItemID == 0x24C5)
{
return 0x24C6;
}
return 0x24C8;
}
}
public void Flip()
{
Light = LightType.Circle300;
ItemID = ItemID switch
{
0x24C6 => 0x24C8,
0x24C5 => 0x24C7,
0x24C8 => 0x24C6,
0x24C7 => 0x24C5,
_ => ItemID
};
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
0x24C6 => 0x24C8,
0x24C5 => 0x24C7,
0x24C8 => 0x24C6,
0x24C7 => 0x24C5,
_ => ItemID
};
}
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.BaseEquipableLight"
}

View file

@ -0,0 +1,43 @@
{
"version": 1,
"type": "Server.Items.BaseLight",
"properties": [
{
"name": "BurntOut",
"type": "bool",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
""
]
},
{
"name": "Burning",
"type": "bool",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
""
]
},
{
"name": "Duration",
"type": "System.TimeSpan",
"rule": "PrimitiveTypeMigrationRule"
},
{
"name": "Protected",
"type": "bool",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
""
]
},
{
"name": "BurnTimer",
"type": "Server.Timer",
"rule": "TimerMigrationRule",
"ruleArguments": [
"@TimerDrift"
]
}
]
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.Brazier"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.BrazierTall"
}

View file

@ -0,0 +1,14 @@
{
"version": 0,
"type": "Server.Items.Candelabra",
"properties": [
{
"name": "IsShipwreckedItem",
"type": "bool",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
""
]
}
]
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.CandelabraStand"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.CandleLarge"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.CandleLong"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.CandleShort"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.CandleSkull"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.DarkSource"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.HangingLantern"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.HeatingStand"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.LampPost1"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.LampPost2"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.LampPost3"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.LightSource"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.PaperLantern"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.RedHangingLantern"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.RoundPaperLantern"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.ShojiLantern"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.WallSconce"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.WallTorch"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Items.WhiteHangingLantern"
}