fix(codegen): Codegens clothing (#714)

This commit is contained in:
Kamron Batman 2021-08-24 23:11:59 -07:00 committed by GitHub
parent 13931ddf1d
commit ca3faec01d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
105 changed files with 1175 additions and 2477 deletions

View file

@ -23,7 +23,7 @@ namespace Server
/// -or- /// -or-
/// [SerializableFieldAttr(typeof(CommandPropertyAttribute), AccessLevel.GameMaster)] /// [SerializableFieldAttr(typeof(CommandPropertyAttribute), AccessLevel.GameMaster)]
/// </summary> /// </summary>
[AttributeUsage(AttributeTargets.Field)] [AttributeUsage(AttributeTargets.Field, AllowMultiple = true)]
public sealed class SerializableFieldAttrAttribute : Attribute public sealed class SerializableFieldAttrAttribute : Attribute
{ {
public string AttributeString { get; } public string AttributeString { get; }

View file

@ -30,20 +30,6 @@ namespace Server.Items
public override ArmorMeditationAllowance DefMedAllowance => ArmorMeditationAllowance.All; public override ArmorMeditationAllowance DefMedAllowance => ArmorMeditationAllowance.All;
[EncodedInt]
[SerializableField(1)]
[CommandProperty(AccessLevel.GameMaster)]
public int MaxArcaneCharges
{
get => _maxArcaneCharges;
set
{
_maxArcaneCharges = value;
InvalidateProperties();
Update();
}
}
[EncodedInt] [EncodedInt]
[SerializableField(0)] [SerializableField(0)]
[CommandProperty(AccessLevel.GameMaster)] [CommandProperty(AccessLevel.GameMaster)]
@ -58,6 +44,20 @@ namespace Server.Items
} }
} }
[EncodedInt]
[SerializableField(1)]
[CommandProperty(AccessLevel.GameMaster)]
public int MaxArcaneCharges
{
get => _maxArcaneCharges;
set
{
_maxArcaneCharges = value;
InvalidateProperties();
Update();
}
}
[CommandProperty(AccessLevel.GameMaster)] [CommandProperty(AccessLevel.GameMaster)]
public bool IsArcane => _maxArcaneCharges > 0 && _curArcaneCharges >= 0; public bool IsArcane => _maxArcaneCharges > 0 && _curArcaneCharges >= 0;

View file

@ -1,6 +1,7 @@
namespace Server.Items namespace Server.Items
{ {
public class CrimsonCincture : HalfApron [Serializable(0, false)]
public partial class CrimsonCincture : HalfApron
{ {
[Constructible] [Constructible]
public CrimsonCincture() public CrimsonCincture()
@ -11,25 +12,5 @@ namespace Server.Items
Attributes.BonusHits = 10; Attributes.BonusHits = 10;
Attributes.RegenHits = 2; Attributes.RegenHits = 2;
} }
public CrimsonCincture(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1075043; // Crimson Cincture
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();
}
} }
} }

View file

@ -1,6 +1,7 @@
namespace Server.Items namespace Server.Items
{ {
public class DivineCountenance : HornedTribalMask [Serializable(0, false)]
public partial class DivineCountenance : HornedTribalMask
{ {
[Constructible] [Constructible]
public DivineCountenance() public DivineCountenance()
@ -13,10 +14,6 @@ namespace Server.Items
Attributes.LowerManaCost = 8; Attributes.LowerManaCost = 8;
} }
public DivineCountenance(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1061289; // Divine Countenance public override int LabelNumber => 1061289; // Divine Countenance
public override int ArtifactRarity => 11; public override int ArtifactRarity => 11;
@ -28,31 +25,5 @@ namespace Server.Items
public override int InitMinHits => 255; public override int InitMinHits => 255;
public override int InitMaxHits => 255; public override int InitMaxHits => 255;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
{
case 0:
{
Resistances.Physical = 0;
Resistances.Fire = 0;
Resistances.Cold = 0;
Resistances.Energy = 0;
break;
}
}
}
} }
} }

View file

@ -1,6 +1,7 @@
namespace Server.Items namespace Server.Items
{ {
public class HatOfTheMagi : WizardsHat [Serializable(0, false)]
public partial class HatOfTheMagi : WizardsHat
{ {
[Constructible] [Constructible]
public HatOfTheMagi() public HatOfTheMagi()
@ -12,10 +13,6 @@ namespace Server.Items
Attributes.SpellDamage = 10; Attributes.SpellDamage = 10;
} }
public HatOfTheMagi(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1061597; // Hat of the Magi public override int LabelNumber => 1061597; // Hat of the Magi
public override int ArtifactRarity => 11; public override int ArtifactRarity => 11;
@ -25,29 +22,5 @@ namespace Server.Items
public override int InitMinHits => 255; public override int InitMinHits => 255;
public override int InitMaxHits => 255; public override int InitMaxHits => 255;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
{
case 0:
{
Resistances.Poison = 0;
Resistances.Energy = 0;
break;
}
}
}
} }
} }

View file

@ -1,6 +1,7 @@
namespace Server.Items namespace Server.Items
{ {
public class HuntersHeaddress : DeerMask [Serializable(0, false)]
public partial class HuntersHeaddress : DeerMask
{ {
[Constructible] [Constructible]
public HuntersHeaddress() public HuntersHeaddress()
@ -14,10 +15,6 @@ namespace Server.Items
Attributes.AttackChance = 15; Attributes.AttackChance = 15;
} }
public HuntersHeaddress(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1061595; // Hunter's Headdress public override int LabelNumber => 1061595; // Hunter's Headdress
public override int ArtifactRarity => 11; public override int ArtifactRarity => 11;
@ -26,27 +23,5 @@ namespace Server.Items
public override int InitMinHits => 255; public override int InitMinHits => 255;
public override int InitMaxHits => 255; public override int InitMaxHits => 255;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
{
case 0:
{
Resistances.Cold = 0;
break;
}
}
}
} }
} }

View file

@ -1,6 +1,7 @@
namespace Server.Items namespace Server.Items
{ {
public class SpiritOfTheTotem : BearMask [Serializable(0, false)]
public partial class SpiritOfTheTotem : BearMask
{ {
[Constructible] [Constructible]
public SpiritOfTheTotem() public SpiritOfTheTotem()
@ -12,10 +13,6 @@ namespace Server.Items
Attributes.AttackChance = 15; Attributes.AttackChance = 15;
} }
public SpiritOfTheTotem(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1061599; // Spirit of the Totem public override int LabelNumber => 1061599; // Spirit of the Totem
public override int ArtifactRarity => 11; public override int ArtifactRarity => 11;
@ -24,28 +21,5 @@ namespace Server.Items
public override int InitMinHits => 255; public override int InitMinHits => 255;
public override int InitMaxHits => 255; public override int InitMaxHits => 255;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
{
case 0:
{
Resistances.Physical = 0;
break;
}
}
}
} }
} }

View file

@ -22,27 +22,88 @@ namespace Server.Items
int MaxArcaneCharges { get; set; } int MaxArcaneCharges { get; set; }
} }
public abstract class BaseClothing : Item, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability [Serializable(6, false)]
public abstract partial class BaseClothing : Item, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability
{ {
private Mobile m_Crafter; // Field 0
private CraftResource _resource;
private FactionItem m_FactionState; [SerializableField(1, setter: "private")]
private int m_HitPoints; [SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster, canModify: true)]")]
private AosAttributes _attributes;
private int m_MaxHitPoints; [SerializableFieldSaveFlag(1)]
private ClothingQuality m_Quality; private bool ShouldSerializeAttributes() => !_attributes.IsEmpty;
protected CraftResource m_Resource;
private int m_StrReq = -1; [SerializableField(2, setter: "private")]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster, canModify: true)]")]
private AosArmorAttributes _clothingAttributes;
[SerializableFieldSaveFlag(2)]
private bool ShouldSerializeClothingAttributes() => !_clothingAttributes.IsEmpty;
[SerializableField(3, setter: "private")]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster, canModify: true)]")]
private AosSkillBonuses _skillBonuses;
[SerializableFieldSaveFlag(3)]
private bool ShouldSerializeSkillBonuses() => !_skillBonuses.IsEmpty;
[SerializableField(4, setter: "private")]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster, canModify: true)]")]
private AosElementAttributes _resistances;
[SerializableFieldSaveFlag(4)]
private bool ShouldSerializeResistances() => !_resistances.IsEmpty;
[EncodedInt]
[InvalidateProperties]
[SerializableField(5)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private int _maxHitPoints;
[SerializableFieldSaveFlag(5)]
private bool ShouldSerializeMaxHitPoints() => _maxHitPoints != 0;
// Field 6
private int _hitPoints;
[SerializableField(7)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private bool _playerConstructed;
[SerializableFieldSaveFlag(7)]
private bool ShouldSerializePlayerConstructed() => _playerConstructed;
[InvalidateProperties]
[SerializableField(8)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private Mobile _crafter;
[SerializableFieldSaveFlag(8)]
private bool ShouldSerializeCrafter() => _crafter != null;
[InvalidateProperties]
[SerializableField(9)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private ClothingQuality _quality = ClothingQuality.Regular;
[SerializableFieldSaveFlag(9)]
private bool ShouldSerializeQuality() => _quality != ClothingQuality.Regular;
// Field 10
private int _strReq = -1;
private FactionItem _factionState;
public BaseClothing(int itemID, Layer layer, int hue = 0) : base(itemID) public BaseClothing(int itemID, Layer layer, int hue = 0) : base(itemID)
{ {
Layer = layer; Layer = layer;
Hue = hue; Hue = hue;
m_Resource = DefaultResource; _resource = DefaultResource;
m_Quality = ClothingQuality.Regular;
m_HitPoints = m_MaxHitPoints = Utility.RandomMinMax(InitMinHits, InitMaxHits); _hitPoints = _maxHitPoints = Utility.RandomMinMax(InitMinHits, InitMaxHits);
Attributes = new AosAttributes(this); Attributes = new AosAttributes(this);
ClothingAttributes = new AosArmorAttributes(this); ClothingAttributes = new AosArmorAttributes(this);
@ -50,71 +111,40 @@ namespace Server.Items
Resistances = new AosElementAttributes(this); Resistances = new AosElementAttributes(this);
} }
public BaseClothing(Serial serial) : base(serial) [SerializableField(0)]
{
}
[CommandProperty(AccessLevel.GameMaster)]
public Mobile Crafter
{
get => m_Crafter;
set
{
m_Crafter = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public int StrRequirement
{
get => m_StrReq == -1 ? Core.AOS ? AosStrReq : OldStrReq : m_StrReq;
set
{
m_StrReq = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public ClothingQuality Quality
{
get => m_Quality;
set
{
m_Quality = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public bool PlayerConstructed { get; set; }
public virtual CraftResource DefaultResource => CraftResource.None;
[CommandProperty(AccessLevel.GameMaster)] [CommandProperty(AccessLevel.GameMaster)]
public CraftResource Resource public CraftResource Resource
{ {
get => m_Resource; get => _resource;
set set
{ {
m_Resource = value; _resource = value;
Hue = CraftResources.GetHue(m_Resource); Hue = CraftResources.GetHue(_resource);
InvalidateProperties(); InvalidateProperties();
this.MarkDirty();
} }
} }
[CommandProperty(AccessLevel.GameMaster, canModify: true)] [SerializableFieldSaveFlag(0)]
public AosAttributes Attributes { get; private set; } private bool ShouldSerializeResource() => _resource != DefaultResource;
[CommandProperty(AccessLevel.GameMaster, canModify: true)] [SerializableField(10)]
public AosArmorAttributes ClothingAttributes { get; private set; } [CommandProperty(AccessLevel.GameMaster)]
public int StrRequirement
{
get => _strReq == -1 ? Core.AOS ? AosStrReq : OldStrReq : _strReq;
set
{
_strReq = value;
InvalidateProperties();
this.MarkDirty();
}
}
[CommandProperty(AccessLevel.GameMaster, canModify: true)] [SerializableFieldSaveFlag(10)]
public AosSkillBonuses SkillBonuses { get; private set; } private bool ShouldSerializeStrReq() => _strReq != -1;
[CommandProperty(AccessLevel.GameMaster, canModify: true)] public virtual CraftResource DefaultResource => CraftResource.None;
public AosElementAttributes Resistances { get; private set; }
public virtual int BasePhysicalResistance => 0; public virtual int BasePhysicalResistance => 0;
public virtual int BaseFireResistance => 0; public virtual int BaseFireResistance => 0;
@ -197,17 +227,17 @@ namespace Server.Items
public FactionItem FactionItemState public FactionItem FactionItemState
{ {
get => m_FactionState; get => _factionState;
set set
{ {
m_FactionState = value; _factionState = value;
if (m_FactionState == null) if (_factionState == null)
{ {
Hue = 0; Hue = 0;
} }
LootType = m_FactionState == null ? LootType.Regular : LootType.Blessed; LootType = _factionState == null ? LootType.Regular : LootType.Blessed;
} }
} }
@ -233,7 +263,7 @@ namespace Server.Items
{ {
try try
{ {
var info = CraftResources.GetInfo(m_Resource); var info = CraftResources.GetInfo(_resource);
var resourceType = info.ResourceTypes?[0] ?? item.Resources[0].ItemType; var resourceType = info.ResourceTypes?[0] ?? item.Resources[0].ItemType;
@ -257,41 +287,36 @@ namespace Server.Items
public virtual bool CanFortify => true; public virtual bool CanFortify => true;
[CommandProperty(AccessLevel.GameMaster)] [EncodedInt]
public int MaxHitPoints [SerializableField(6)]
{
get => m_MaxHitPoints;
set
{
m_MaxHitPoints = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)] [CommandProperty(AccessLevel.GameMaster)]
public int HitPoints public int HitPoints
{ {
get => m_HitPoints; get => _hitPoints;
set set
{ {
if (value != m_HitPoints && MaxHitPoints > 0) if (value != _hitPoints && MaxHitPoints > 0)
{ {
m_HitPoints = value; _hitPoints = value;
if (m_HitPoints < 0) if (_hitPoints < 0)
{ {
Delete(); Delete();
} }
else if (m_HitPoints > MaxHitPoints) else if (_hitPoints > MaxHitPoints)
{ {
m_HitPoints = MaxHitPoints; _hitPoints = MaxHitPoints;
} }
InvalidateProperties(); InvalidateProperties();
this.MarkDirty();
} }
} }
} }
[SerializableFieldSaveFlag(6)]
private bool ShouldSerializeHitPoints() => _hitPoints != 0;
public virtual int InitMinHits => 0; public virtual int InitMinHits => 0;
public virtual int InitMaxHits => 0; public virtual int InitMaxHits => 0;
@ -321,9 +346,9 @@ namespace Server.Items
wear = Utility.Random(2); wear = Utility.Random(2);
} }
if (wear > 0 && m_MaxHitPoints > 0) if (wear > 0 && _maxHitPoints > 0)
{ {
if (m_HitPoints >= wear) if (_hitPoints >= wear)
{ {
HitPoints -= wear; HitPoints -= wear;
wear = 0; wear = 0;
@ -336,7 +361,7 @@ namespace Server.Items
if (wear > 0) if (wear > 0)
{ {
if (m_MaxHitPoints > wear) if (_maxHitPoints > wear)
{ {
MaxHitPoints -= wear; MaxHitPoints -= wear;
@ -362,20 +387,22 @@ namespace Server.Items
{ {
var scale = 100 + ClothingAttributes.DurabilityBonus; var scale = 100 + ClothingAttributes.DurabilityBonus;
m_HitPoints = (m_HitPoints * 100 + (scale - 1)) / scale; _hitPoints = (_hitPoints * 100 + (scale - 1)) / scale;
m_MaxHitPoints = (m_MaxHitPoints * 100 + (scale - 1)) / scale; _maxHitPoints = (_maxHitPoints * 100 + (scale - 1)) / scale;
InvalidateProperties(); InvalidateProperties();
this.MarkDirty();
} }
public void ScaleDurability() public void ScaleDurability()
{ {
var scale = 100 + ClothingAttributes.DurabilityBonus; var scale = 100 + ClothingAttributes.DurabilityBonus;
m_HitPoints = (m_HitPoints * scale + 99) / 100; _hitPoints = (_hitPoints * scale + 99) / 100;
m_MaxHitPoints = (m_MaxHitPoints * scale + 99) / 100; _maxHitPoints = (_maxHitPoints * scale + 99) / 100;
InvalidateProperties(); InvalidateProperties();
this.MarkDirty();
} }
public override bool AllowSecureTrade(Mobile from, Mobile to, Mobile newOwner, bool accepted) => public override bool AllowSecureTrade(Mobile from, Mobile to, Mobile newOwner, bool accepted) =>
@ -445,15 +472,7 @@ namespace Server.Items
return base.CanEquip(from); return base.CanEquip(from);
} }
public int ComputeStatReq(StatType type) public int ComputeStatReq(StatType type) => AOS.Scale(StrRequirement, 100 - GetLowerStatReq());
{
int v;
// if (type == StatType.Str)
v = StrRequirement;
return AOS.Scale(v, 100 - GetLowerStatReq());
}
public int ComputeStatBonus(StatType type) => public int ComputeStatBonus(StatType type) =>
type switch type switch
@ -553,15 +572,7 @@ namespace Server.Items
} }
} }
public int GetLowerStatReq() public int GetLowerStatReq() => !Core.AOS ? 0 : ClothingAttributes.LowerStatReq;
{
if (!Core.AOS)
{
return 0;
}
return ClothingAttributes.LowerStatReq;
}
public override void OnAdded(IEntity parent) public override void OnAdded(IEntity parent)
{ {
@ -635,7 +646,7 @@ namespace Server.Items
public override void AddNameProperty(ObjectPropertyList list) public override void AddNameProperty(ObjectPropertyList list)
{ {
var oreType = m_Resource switch var oreType = _resource switch
{ {
CraftResource.DullCopper => 1053108, CraftResource.DullCopper => 1053108,
CraftResource.ShadowIron => 1053107, CraftResource.ShadowIron => 1053107,
@ -675,17 +686,17 @@ namespace Server.Items
{ {
base.GetProperties(list); base.GetProperties(list);
if (m_Crafter != null) if (_crafter != null)
{ {
list.Add(1050043, m_Crafter.Name); // crafted by ~1_NAME~ list.Add(1050043, _crafter.Name); // crafted by ~1_NAME~
} }
if (m_FactionState != null) if (_factionState != null)
{ {
list.Add(1041350); // faction item list.Add(1041350); // faction item
} }
if (m_Quality == ClothingQuality.Exceptional) if (_quality == ClothingQuality.Exceptional)
{ {
list.Add(1060636); // exceptional list.Add(1060636); // exceptional
} }
@ -851,9 +862,9 @@ namespace Server.Items
list.Add(1061170, prop.ToString()); // strength requirement ~1_val~ list.Add(1061170, prop.ToString()); // strength requirement ~1_val~
} }
if (m_HitPoints >= 0 && m_MaxHitPoints > 0) if (_hitPoints >= 0 && _maxHitPoints > 0)
{ {
list.Add(1060639, "{0}\t{1}", m_HitPoints, m_MaxHitPoints); // durability ~1_val~ / ~2_val~ list.Add(1060639, "{0}\t{1}", _hitPoints, _maxHitPoints); // durability ~1_val~ / ~2_val~
} }
} }
@ -880,7 +891,7 @@ namespace Server.Items
return; return;
} }
from.NetState.SendDisplayEquipmentInfo(Serial, number, m_Crafter?.RawName, false, attrs); from.NetState.SendDisplayEquipmentInfo(Serial, number, _crafter?.RawName, false, attrs);
} }
public virtual void AddEquipInfoAttributes(Mobile from, List<EquipInfoAttribute> attrs) public virtual void AddEquipInfoAttributes(Mobile from, List<EquipInfoAttribute> attrs)
@ -897,14 +908,14 @@ namespace Server.Items
} }
} }
if (m_FactionState != null) if (_factionState != null)
{ {
attrs.Add(new EquipInfoAttribute(1041350)); // faction item attrs.Add(new EquipInfoAttribute(1041350)); // faction item
} }
if (m_Quality == ClothingQuality.Exceptional) if (_quality == ClothingQuality.Exceptional)
{ {
attrs.Add(new EquipInfoAttribute(1018305 - (int)m_Quality)); attrs.Add(new EquipInfoAttribute(1018305 - (int)_quality));
} }
} }
@ -935,240 +946,91 @@ namespace Server.Items
InvalidateProperties(); InvalidateProperties();
} }
private static void SetSaveFlag(ref SaveFlag flags, SaveFlag toSet, bool setIf) private static bool GetSaveFlag(OldSaveFlag flags, OldSaveFlag toGet) => (flags & toGet) != 0;
private void Deserialize(IGenericReader reader, int version)
{ {
if (setIf) var flags = (OldSaveFlag)reader.ReadEncodedInt();
if (GetSaveFlag(flags, OldSaveFlag.Resource))
{ {
flags |= toSet; _resource = (CraftResource)reader.ReadEncodedInt();
} }
else
{
_resource = DefaultResource;
}
Attributes = new AosAttributes(this);
if (GetSaveFlag(flags, OldSaveFlag.Attributes))
{
Attributes.Deserialize(reader);
}
ClothingAttributes = new AosArmorAttributes(this);
if (GetSaveFlag(flags, OldSaveFlag.ClothingAttributes))
{
ClothingAttributes.Deserialize(reader);
}
SkillBonuses = new AosSkillBonuses(this);
if (GetSaveFlag(flags, OldSaveFlag.SkillBonuses))
{
SkillBonuses.Deserialize(reader);
}
Resistances = new AosElementAttributes(this);
if (GetSaveFlag(flags, OldSaveFlag.Resistances))
{
Resistances.Deserialize(reader);
}
if (GetSaveFlag(flags, OldSaveFlag.MaxHitPoints))
{
_maxHitPoints = reader.ReadEncodedInt();
}
if (GetSaveFlag(flags, OldSaveFlag.HitPoints))
{
_hitPoints = reader.ReadEncodedInt();
}
if (GetSaveFlag(flags, OldSaveFlag.Crafter))
{
_crafter = reader.ReadEntity<Mobile>();
}
if (GetSaveFlag(flags, OldSaveFlag.Quality))
{
_quality = (ClothingQuality)reader.ReadEncodedInt();
}
else
{
_quality = ClothingQuality.Regular;
}
if (GetSaveFlag(flags, OldSaveFlag.StrReq))
{
_strReq = reader.ReadEncodedInt();
}
else
{
_strReq = -1;
}
PlayerConstructed = GetSaveFlag(flags, OldSaveFlag.PlayerConstructed);
} }
private static bool GetSaveFlag(SaveFlag flags, SaveFlag toGet) => (flags & toGet) != 0; [AfterDeserialization]
private void AfterDeserialization()
public override void Serialize(IGenericWriter writer)
{ {
base.Serialize(writer); if (_maxHitPoints == 0 && _hitPoints == 0)
writer.Write(5); // version
var flags = SaveFlag.None;
SetSaveFlag(ref flags, SaveFlag.Resource, m_Resource != DefaultResource);
SetSaveFlag(ref flags, SaveFlag.Attributes, !Attributes.IsEmpty);
SetSaveFlag(ref flags, SaveFlag.ClothingAttributes, !ClothingAttributes.IsEmpty);
SetSaveFlag(ref flags, SaveFlag.SkillBonuses, !SkillBonuses.IsEmpty);
SetSaveFlag(ref flags, SaveFlag.Resistances, !Resistances.IsEmpty);
SetSaveFlag(ref flags, SaveFlag.MaxHitPoints, m_MaxHitPoints != 0);
SetSaveFlag(ref flags, SaveFlag.HitPoints, m_HitPoints != 0);
SetSaveFlag(ref flags, SaveFlag.PlayerConstructed, PlayerConstructed);
SetSaveFlag(ref flags, SaveFlag.Crafter, m_Crafter != null);
SetSaveFlag(ref flags, SaveFlag.Quality, m_Quality != ClothingQuality.Regular);
SetSaveFlag(ref flags, SaveFlag.StrReq, m_StrReq != -1);
writer.WriteEncodedInt((int)flags);
if (GetSaveFlag(flags, SaveFlag.Resource))
{ {
writer.WriteEncodedInt((int)m_Resource); _hitPoints = _maxHitPoints = Utility.RandomMinMax(InitMinHits, InitMaxHits);
}
if (GetSaveFlag(flags, SaveFlag.Attributes))
{
Attributes.Serialize(writer);
}
if (GetSaveFlag(flags, SaveFlag.ClothingAttributes))
{
ClothingAttributes.Serialize(writer);
}
if (GetSaveFlag(flags, SaveFlag.SkillBonuses))
{
SkillBonuses.Serialize(writer);
}
if (GetSaveFlag(flags, SaveFlag.Resistances))
{
Resistances.Serialize(writer);
}
if (GetSaveFlag(flags, SaveFlag.MaxHitPoints))
{
writer.WriteEncodedInt(m_MaxHitPoints);
}
if (GetSaveFlag(flags, SaveFlag.HitPoints))
{
writer.WriteEncodedInt(m_HitPoints);
}
if (GetSaveFlag(flags, SaveFlag.Crafter))
{
writer.Write(m_Crafter);
}
if (GetSaveFlag(flags, SaveFlag.Quality))
{
writer.WriteEncodedInt((int)m_Quality);
}
if (GetSaveFlag(flags, SaveFlag.StrReq))
{
writer.WriteEncodedInt(m_StrReq);
}
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
{
case 5:
{
var flags = (SaveFlag)reader.ReadEncodedInt();
if (GetSaveFlag(flags, SaveFlag.Resource))
{
m_Resource = (CraftResource)reader.ReadEncodedInt();
}
else
{
m_Resource = DefaultResource;
}
Attributes = new AosAttributes(this);
if (GetSaveFlag(flags, SaveFlag.Attributes))
{
Attributes.Deserialize(reader);
}
ClothingAttributes = new AosArmorAttributes(this);
if (GetSaveFlag(flags, SaveFlag.ClothingAttributes))
{
ClothingAttributes.Deserialize(reader);
}
SkillBonuses = new AosSkillBonuses(this);
if (GetSaveFlag(flags, SaveFlag.SkillBonuses))
{
SkillBonuses.Deserialize(reader);
}
Resistances = new AosElementAttributes(this);
if (GetSaveFlag(flags, SaveFlag.Resistances))
{
Resistances.Deserialize(reader);
}
if (GetSaveFlag(flags, SaveFlag.MaxHitPoints))
{
m_MaxHitPoints = reader.ReadEncodedInt();
}
if (GetSaveFlag(flags, SaveFlag.HitPoints))
{
m_HitPoints = reader.ReadEncodedInt();
}
if (GetSaveFlag(flags, SaveFlag.Crafter))
{
m_Crafter = reader.ReadEntity<Mobile>();
}
if (GetSaveFlag(flags, SaveFlag.Quality))
{
m_Quality = (ClothingQuality)reader.ReadEncodedInt();
}
else
{
m_Quality = ClothingQuality.Regular;
}
if (GetSaveFlag(flags, SaveFlag.StrReq))
{
m_StrReq = reader.ReadEncodedInt();
}
else
{
m_StrReq = -1;
}
if (GetSaveFlag(flags, SaveFlag.PlayerConstructed))
{
PlayerConstructed = true;
}
break;
}
case 4:
{
m_Resource = (CraftResource)reader.ReadInt();
goto case 3;
}
case 3:
{
Attributes = new AosAttributes(this);
Attributes.Deserialize(reader);
ClothingAttributes = new AosArmorAttributes(this);
ClothingAttributes.Deserialize(reader);
SkillBonuses = new AosSkillBonuses(this);
SkillBonuses.Deserialize(reader);
Resistances = new AosElementAttributes(this);
Resistances.Deserialize(reader);
goto case 2;
}
case 2:
{
PlayerConstructed = reader.ReadBool();
goto case 1;
}
case 1:
{
m_Crafter = reader.ReadEntity<Mobile>();
m_Quality = (ClothingQuality)reader.ReadInt();
break;
}
case 0:
{
m_Crafter = null;
m_Quality = ClothingQuality.Regular;
break;
}
}
if (version < 2)
{
PlayerConstructed = true; // we don't know, so, assume it's crafted
}
if (version < 3)
{
Attributes = new AosAttributes(this);
ClothingAttributes = new AosArmorAttributes(this);
SkillBonuses = new AosSkillBonuses(this);
Resistances = new AosElementAttributes(this);
}
if (version < 4)
{
m_Resource = DefaultResource;
}
if (m_MaxHitPoints == 0 && m_HitPoints == 0)
{
m_HitPoints = m_MaxHitPoints = Utility.RandomMinMax(InitMinHits, InitMaxHits);
} }
if (Parent is Mobile parent) if (Parent is Mobile parent)
@ -1184,7 +1046,7 @@ namespace Server.Items
} }
[Flags] [Flags]
private enum SaveFlag private enum OldSaveFlag
{ {
None = 0x00000000, None = 0x00000000,
Resource = 0x00000001, Resource = 0x00000001,

View file

@ -2,116 +2,63 @@ using Server.Engines.VeteranRewards;
namespace Server.Items namespace Server.Items
{ {
public abstract class BaseCloak : BaseClothing [Serializable(0, false)]
public abstract partial class BaseCloak : BaseClothing
{ {
public BaseCloak(int itemID, int hue = 0) : base(itemID, Layer.Cloak, hue) public BaseCloak(int itemID, int hue = 0) : base(itemID, Layer.Cloak, hue)
{ {
} }
public BaseCloak(Serial serial) : base(serial)
{
}
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();
}
} }
[Flippable] [Flippable]
public class Cloak : BaseCloak, IArcaneEquip [Serializable(2, false)]
public partial class Cloak : BaseCloak, IArcaneEquip
{ {
private int m_MaxArcaneCharges, m_CurArcaneCharges; private int _maxArcaneCharges;
private int _curArcaneCharges;
[Constructible] [Constructible]
public Cloak(int hue = 0) : base(0x1515, hue) => Weight = 5.0; public Cloak(int hue = 0) : base(0x1515, hue) => Weight = 5.0;
public Cloak(Serial serial) : base(serial) [EncodedInt]
{ [SerializableField(0)]
}
[CommandProperty(AccessLevel.GameMaster)]
public int MaxArcaneCharges
{
get => m_MaxArcaneCharges;
set
{
m_MaxArcaneCharges = value;
InvalidateProperties();
Update();
}
}
[CommandProperty(AccessLevel.GameMaster)] [CommandProperty(AccessLevel.GameMaster)]
public int CurArcaneCharges public int CurArcaneCharges
{ {
get => m_CurArcaneCharges; get => _curArcaneCharges;
set set
{ {
m_CurArcaneCharges = value; _curArcaneCharges = value;
this.MarkDirty();
InvalidateProperties();
Update();
}
}
[EncodedInt]
[SerializableField(1)]
[CommandProperty(AccessLevel.GameMaster)]
public int MaxArcaneCharges
{
get => _maxArcaneCharges;
set
{
_maxArcaneCharges = value;
this.MarkDirty();
InvalidateProperties(); InvalidateProperties();
Update(); Update();
} }
} }
[CommandProperty(AccessLevel.GameMaster)] [CommandProperty(AccessLevel.GameMaster)]
public bool IsArcane => m_MaxArcaneCharges > 0 && m_CurArcaneCharges >= 0; public bool IsArcane => _maxArcaneCharges > 0 && _curArcaneCharges >= 0;
public override void Serialize(IGenericWriter writer) private void Deserialize(IGenericReader reader, int version)
{ {
base.Serialize(writer); if (reader.ReadBool())
writer.Write(1); // version
if (IsArcane)
{ {
writer.Write(true); _curArcaneCharges = reader.ReadInt();
writer.Write(m_CurArcaneCharges); _maxArcaneCharges = reader.ReadInt();
writer.Write(m_MaxArcaneCharges);
}
else
{
writer.Write(false);
}
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
{
case 1:
{
if (reader.ReadBool())
{
m_CurArcaneCharges = reader.ReadInt();
m_MaxArcaneCharges = reader.ReadInt();
if (Hue == 2118)
{
Hue = ArcaneGem.DefaultArcaneHue;
}
}
break;
}
}
if (Weight == 4.0)
{
Weight = 5.0;
} }
} }
@ -126,7 +73,7 @@ namespace Server.Items
ItemID = 0x1515; ItemID = 0x1515;
} }
if (IsArcane && CurArcaneCharges == 0) if (IsArcane && _curArcaneCharges == 0)
{ {
Hue = 0; Hue = 0;
} }
@ -138,7 +85,7 @@ namespace Server.Items
if (IsArcane) if (IsArcane)
{ {
list.Add(1061837, "{0}\t{1}", m_CurArcaneCharges, m_MaxArcaneCharges); // arcane charges: ~1_val~ / ~2_val~ list.Add(1061837, "{0}\t{1}", _curArcaneCharges, _maxArcaneCharges); // arcane charges: ~1_val~ / ~2_val~
} }
} }
@ -148,27 +95,33 @@ namespace Server.Items
if (IsArcane) if (IsArcane)
{ {
LabelTo(from, 1061837, $"{m_CurArcaneCharges}\t{m_MaxArcaneCharges}"); LabelTo(from, 1061837, $"{_curArcaneCharges}\t{_maxArcaneCharges}");
} }
} }
public void Flip() public void Flip()
{ {
if (ItemID == 0x1515) ItemID = ItemID switch
{ {
ItemID = 0x1530; 0x1515 => 0x1530,
} 0x1530 => 0x1515,
else if (ItemID == 0x1530) _ => ItemID
{ };
ItemID = 0x1515;
}
} }
} }
[Flippable] [Flippable]
public class RewardCloak : BaseCloak, IRewardItem [Serializable(0, false)]
public partial class RewardCloak : BaseCloak, IRewardItem
{ {
private int m_LabelNumber; [InvalidateProperties]
[SerializableField(0)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private int _number;
[SerializableField(1)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private bool _isRewardItem;
[Constructible] [Constructible]
public RewardCloak(int hue = 0, int labelNumber = 0) : base(0x1515, hue) public RewardCloak(int hue = 0, int labelNumber = 0) : base(0x1515, hue)
@ -176,42 +129,13 @@ namespace Server.Items
Weight = 5.0; Weight = 5.0;
LootType = LootType.Blessed; LootType = LootType.Blessed;
m_LabelNumber = labelNumber; _number = labelNumber;
} }
public RewardCloak(Serial serial) : base(serial) public override int LabelNumber => _number > 0 ? _number : base.LabelNumber;
{
}
[CommandProperty(AccessLevel.GameMaster)]
public int Number
{
get => m_LabelNumber;
set
{
m_LabelNumber = value;
InvalidateProperties();
}
}
public override int LabelNumber
{
get
{
if (m_LabelNumber > 0)
{
return m_LabelNumber;
}
return base.LabelNumber;
}
}
public override int BasePhysicalResistance => 3; public override int BasePhysicalResistance => 3;
[CommandProperty(AccessLevel.GameMaster)]
public bool IsRewardItem { get; set; }
public override void OnAdded(IEntity parent) public override void OnAdded(IEntity parent)
{ {
base.OnAdded(parent); base.OnAdded(parent);
@ -244,51 +168,18 @@ namespace Server.Items
if (Core.ML && IsRewardItem) if (Core.ML && IsRewardItem)
{ {
list.Add( // X Year Veteran Reward
RewardSystem.GetRewardYearLabel( list.Add(RewardSystem.GetRewardYearLabel(this, new object[] { Hue, _number }));
this,
new object[] { Hue, m_LabelNumber }
)
); // X Year Veteran Reward
} }
} }
public override bool CanEquip(Mobile m) public override bool CanEquip(Mobile m) =>
base.CanEquip(m) &&
(!IsRewardItem || RewardSystem.CheckIsUsableBy(m, this, new object[] { Hue, _number }));
[AfterDeserialization]
private void AfterDeserialization()
{ {
if (!base.CanEquip(m))
{
return false;
}
return !IsRewardItem || RewardSystem.CheckIsUsableBy(m, this, new object[] { Hue, m_LabelNumber });
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_LabelNumber);
writer.Write(IsRewardItem);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
{
case 0:
{
m_LabelNumber = reader.ReadInt();
IsRewardItem = reader.ReadBool();
break;
}
}
if (Parent is Mobile mobile) if (Parent is Mobile mobile)
{ {
mobile.VirtualArmorMod += 2; mobile.VirtualArmorMod += 2;
@ -297,27 +188,10 @@ namespace Server.Items
} }
[Flippable(0x230A, 0x2309)] [Flippable(0x230A, 0x2309)]
public class FurCape : BaseCloak [Serializable(0, false)]
public partial class FurCape : BaseCloak
{ {
[Constructible] [Constructible]
public FurCape(int hue = 0) : base(0x230A, hue) => Weight = 4.0; public FurCape(int hue = 0) : base(0x230A, hue) => Weight = 4.0;
public FurCape(Serial serial) : base(serial)
{
}
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();
}
} }
} }

View file

@ -6,44 +6,17 @@ using Server.Network;
namespace Server.Items namespace Server.Items
{ {
public abstract class BaseHat : BaseClothing, IShipwreckedItem [Serializable(0, false)]
public abstract partial class BaseHat : BaseClothing, IShipwreckedItem
{ {
[SerializableField(0)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private bool _isShipwreckedItem;
public BaseHat(int itemID, int hue = 0) : base(itemID, Layer.Helm, hue) public BaseHat(int itemID, int hue = 0) : base(itemID, Layer.Helm, hue)
{ {
} }
public BaseHat(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public bool IsShipwreckedItem { get; set; }
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
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 AddEquipInfoAttributes(Mobile from, List<EquipInfoAttribute> attrs) public override void AddEquipInfoAttributes(Mobile from, List<EquipInfoAttribute> attrs)
{ {
base.AddEquipInfoAttributes(from, attrs); base.AddEquipInfoAttributes(from, attrs);
@ -84,15 +57,12 @@ namespace Server.Items
} }
[Flippable(0x2798, 0x27E3)] [Flippable(0x2798, 0x27E3)]
public class Kasa : BaseHat [Serializable(0, false)]
public partial class Kasa : BaseHat
{ {
[Constructible] [Constructible]
public Kasa(int hue = 0) : base(0x2798, hue) => Weight = 3.0; public Kasa(int hue = 0) : base(0x2798, hue) => Weight = 3.0;
public Kasa(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0; public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 5; public override int BaseFireResistance => 5;
public override int BaseColdResistance => 9; public override int BaseColdResistance => 9;
@ -101,32 +71,15 @@ namespace Server.Items
public override int InitMinHits => 20; public override int InitMinHits => 20;
public override int InitMaxHits => 30; public override int InitMaxHits => 30;
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();
}
} }
[Flippable(0x278F, 0x27DA)] [Flippable(0x278F, 0x27DA)]
public class ClothNinjaHood : BaseHat [Serializable(0, false)]
public partial class ClothNinjaHood : BaseHat
{ {
[Constructible] [Constructible]
public ClothNinjaHood(int hue = 0) : base(0x278F, hue) => Weight = 2.0; public ClothNinjaHood(int hue = 0) : base(0x278F, hue) => Weight = 2.0;
public ClothNinjaHood(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 3; public override int BasePhysicalResistance => 3;
public override int BaseFireResistance => 3; public override int BaseFireResistance => 3;
public override int BaseColdResistance => 6; public override int BaseColdResistance => 6;
@ -135,32 +88,15 @@ namespace Server.Items
public override int InitMinHits => 20; public override int InitMinHits => 20;
public override int InitMaxHits => 30; public override int InitMaxHits => 30;
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();
}
} }
[Flippable(0x2306, 0x2305)] [Flippable(0x2306, 0x2305)]
public class FlowerGarland : BaseHat [Serializable(0, false)]
public partial class FlowerGarland : BaseHat
{ {
[Constructible] [Constructible]
public FlowerGarland(int hue = 0) : base(0x2306, hue) => Weight = 1.0; public FlowerGarland(int hue = 0) : base(0x2306, hue) => Weight = 1.0;
public FlowerGarland(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 3; public override int BasePhysicalResistance => 3;
public override int BaseFireResistance => 3; public override int BaseFireResistance => 3;
public override int BaseColdResistance => 6; public override int BaseColdResistance => 6;
@ -169,31 +105,14 @@ namespace Server.Items
public override int InitMinHits => 20; public override int InitMinHits => 20;
public override int InitMaxHits => 30; public override int InitMaxHits => 30;
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();
}
} }
public class FloppyHat : BaseHat [Serializable(0, false)]
public partial class FloppyHat : BaseHat
{ {
[Constructible] [Constructible]
public FloppyHat(int hue = 0) : base(0x1713, hue) => Weight = 1.0; public FloppyHat(int hue = 0) : base(0x1713, hue) => Weight = 1.0;
public FloppyHat(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0; public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 5; public override int BaseFireResistance => 5;
public override int BaseColdResistance => 9; public override int BaseColdResistance => 9;
@ -202,31 +121,14 @@ namespace Server.Items
public override int InitMinHits => 20; public override int InitMinHits => 20;
public override int InitMaxHits => 30; public override int InitMaxHits => 30;
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();
}
} }
public class WideBrimHat : BaseHat [Serializable(0, false)]
public partial class WideBrimHat : BaseHat
{ {
[Constructible] [Constructible]
public WideBrimHat(int hue = 0) : base(0x1714, hue) => Weight = 1.0; public WideBrimHat(int hue = 0) : base(0x1714, hue) => Weight = 1.0;
public WideBrimHat(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0; public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 5; public override int BaseFireResistance => 5;
public override int BaseColdResistance => 9; public override int BaseColdResistance => 9;
@ -235,31 +137,14 @@ namespace Server.Items
public override int InitMinHits => 20; public override int InitMinHits => 20;
public override int InitMaxHits => 30; public override int InitMaxHits => 30;
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();
}
} }
public class Cap : BaseHat [Serializable(0, false)]
public partial class Cap : BaseHat
{ {
[Constructible] [Constructible]
public Cap(int hue = 0) : base(0x1715, hue) => Weight = 1.0; public Cap(int hue = 0) : base(0x1715, hue) => Weight = 1.0;
public Cap(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0; public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 5; public override int BaseFireResistance => 5;
public override int BaseColdResistance => 9; public override int BaseColdResistance => 9;
@ -268,31 +153,14 @@ namespace Server.Items
public override int InitMinHits => 20; public override int InitMinHits => 20;
public override int InitMaxHits => 30; public override int InitMaxHits => 30;
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();
}
} }
public class SkullCap : BaseHat [Serializable(0, false)]
public partial class SkullCap : BaseHat
{ {
[Constructible] [Constructible]
public SkullCap(int hue = 0) : base(0x1544, hue) => Weight = 1.0; public SkullCap(int hue = 0) : base(0x1544, hue) => Weight = 1.0;
public SkullCap(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0; public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 3; public override int BaseFireResistance => 3;
public override int BaseColdResistance => 5; public override int BaseColdResistance => 5;
@ -301,31 +169,14 @@ namespace Server.Items
public override int InitMinHits => Core.ML ? 14 : 7; public override int InitMinHits => Core.ML ? 14 : 7;
public override int InitMaxHits => Core.ML ? 28 : 12; public override int InitMaxHits => Core.ML ? 28 : 12;
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();
}
} }
public class Bandana : BaseHat [Serializable(0, false)]
public partial class Bandana : BaseHat
{ {
[Constructible] [Constructible]
public Bandana(int hue = 0) : base(0x1540, hue) => Weight = 1.0; public Bandana(int hue = 0) : base(0x1540, hue) => Weight = 1.0;
public Bandana(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0; public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 3; public override int BaseFireResistance => 3;
public override int BaseColdResistance => 5; public override int BaseColdResistance => 5;
@ -334,31 +185,14 @@ namespace Server.Items
public override int InitMinHits => 20; public override int InitMinHits => 20;
public override int InitMaxHits => 30; public override int InitMaxHits => 30;
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();
}
} }
public class BearMask : BaseHat [Serializable(0, false)]
public partial class BearMask : BaseHat
{ {
[Constructible] [Constructible]
public BearMask(int hue = 0) : base(0x1545, hue) => Weight = 5.0; public BearMask(int hue = 0) : base(0x1545, hue) => Weight = 5.0;
public BearMask(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 5; public override int BasePhysicalResistance => 5;
public override int BaseFireResistance => 3; public override int BaseFireResistance => 3;
public override int BaseColdResistance => 8; public override int BaseColdResistance => 8;
@ -373,31 +207,14 @@ namespace Server.Items
from.SendLocalizedMessage(sender.FailMessage); from.SendLocalizedMessage(sender.FailMessage);
return false; return false;
} }
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();
}
} }
public class DeerMask : BaseHat [Serializable(0, false)]
public partial class DeerMask : BaseHat
{ {
[Constructible] [Constructible]
public DeerMask(int hue = 0) : base(0x1547, hue) => Weight = 4.0; public DeerMask(int hue = 0) : base(0x1547, hue) => Weight = 4.0;
public DeerMask(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 2; public override int BasePhysicalResistance => 2;
public override int BaseFireResistance => 6; public override int BaseFireResistance => 6;
public override int BaseColdResistance => 8; public override int BaseColdResistance => 8;
@ -412,31 +229,14 @@ namespace Server.Items
from.SendLocalizedMessage(sender.FailMessage); from.SendLocalizedMessage(sender.FailMessage);
return false; return false;
} }
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();
}
} }
public class HornedTribalMask : BaseHat [Serializable(0, false)]
public partial class HornedTribalMask : BaseHat
{ {
[Constructible] [Constructible]
public HornedTribalMask(int hue = 0) : base(0x1549, hue) => Weight = 2.0; public HornedTribalMask(int hue = 0) : base(0x1549, hue) => Weight = 2.0;
public HornedTribalMask(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 6; public override int BasePhysicalResistance => 6;
public override int BaseFireResistance => 9; public override int BaseFireResistance => 9;
public override int BaseColdResistance => 0; public override int BaseColdResistance => 0;
@ -451,31 +251,14 @@ namespace Server.Items
from.SendLocalizedMessage(sender.FailMessage); from.SendLocalizedMessage(sender.FailMessage);
return false; return false;
} }
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();
}
} }
public class TribalMask : BaseHat [Serializable(0, false)]
public partial class TribalMask : BaseHat
{ {
[Constructible] [Constructible]
public TribalMask(int hue = 0) : base(0x154B, hue) => Weight = 2.0; public TribalMask(int hue = 0) : base(0x154B, hue) => Weight = 2.0;
public TribalMask(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 3; public override int BasePhysicalResistance => 3;
public override int BaseFireResistance => 0; public override int BaseFireResistance => 0;
public override int BaseColdResistance => 6; public override int BaseColdResistance => 6;
@ -490,31 +273,14 @@ namespace Server.Items
from.SendLocalizedMessage(sender.FailMessage); from.SendLocalizedMessage(sender.FailMessage);
return false; return false;
} }
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();
}
} }
public class TallStrawHat : BaseHat [Serializable(0, false)]
public partial class TallStrawHat : BaseHat
{ {
[Constructible] [Constructible]
public TallStrawHat(int hue = 0) : base(0x1716, hue) => Weight = 1.0; public TallStrawHat(int hue = 0) : base(0x1716, hue) => Weight = 1.0;
public TallStrawHat(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0; public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 5; public override int BaseFireResistance => 5;
public override int BaseColdResistance => 9; public override int BaseColdResistance => 9;
@ -523,31 +289,14 @@ namespace Server.Items
public override int InitMinHits => 20; public override int InitMinHits => 20;
public override int InitMaxHits => 30; public override int InitMaxHits => 30;
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();
}
} }
public class StrawHat : BaseHat [Serializable(0, false)]
public partial class StrawHat : BaseHat
{ {
[Constructible] [Constructible]
public StrawHat(int hue = 0) : base(0x1717, hue) => Weight = 1.0; public StrawHat(int hue = 0) : base(0x1717, hue) => Weight = 1.0;
public StrawHat(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0; public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 5; public override int BaseFireResistance => 5;
public override int BaseColdResistance => 9; public override int BaseColdResistance => 9;
@ -556,31 +305,14 @@ namespace Server.Items
public override int InitMinHits => 20; public override int InitMinHits => 20;
public override int InitMaxHits => 30; public override int InitMaxHits => 30;
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();
}
} }
public class OrcishKinMask : BaseHat [Serializable(0, false)]
public partial class OrcishKinMask : BaseHat
{ {
[Constructible] [Constructible]
public OrcishKinMask(int hue = 0x8A4) : base(0x141B, hue) => Weight = 2.0; public OrcishKinMask(int hue = 0x8A4) : base(0x141B, hue) => Weight = 2.0;
public OrcishKinMask(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 1; public override int BasePhysicalResistance => 1;
public override int BaseFireResistance => 1; public override int BaseFireResistance => 1;
public override int BaseColdResistance => 7; public override int BaseColdResistance => 7;
@ -623,26 +355,10 @@ namespace Server.Items
Titles.AwardKarma(mobile, -20, true); Titles.AwardKarma(mobile, -20, true);
} }
} }
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();
/*if (Hue != 0x8A4)
Hue = 0x8A4;*/
}
} }
public class SavageMask : BaseHat [Serializable(0, false)]
public partial class SavageMask : BaseHat
{ {
[Constructible] [Constructible]
public SavageMask() : this(GetRandomHue()) public SavageMask() : this(GetRandomHue())
@ -652,10 +368,6 @@ namespace Server.Items
[Constructible] [Constructible]
public SavageMask(int hue) : base(0x154B, hue) => Weight = 2.0; public SavageMask(int hue) : base(0x154B, hue) => Weight = 2.0;
public SavageMask(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 3; public override int BasePhysicalResistance => 3;
public override int BaseFireResistance => 0; public override int BaseFireResistance => 0;
public override int BaseColdResistance => 6; public override int BaseColdResistance => 6;
@ -682,34 +394,14 @@ namespace Server.Items
from.SendLocalizedMessage(sender.FailMessage); from.SendLocalizedMessage(sender.FailMessage);
return false; return false;
} }
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();
/*if (Hue != 0 && (Hue < 2101 || Hue > 2130))
Hue = GetRandomHue();*/
}
} }
public class WizardsHat : BaseHat [Serializable(0, false)]
public partial class WizardsHat : BaseHat
{ {
[Constructible] [Constructible]
public WizardsHat(int hue = 0) : base(0x1718, hue) => Weight = 1.0; public WizardsHat(int hue = 0) : base(0x1718, hue) => Weight = 1.0;
public WizardsHat(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0; public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 5; public override int BaseFireResistance => 5;
public override int BaseColdResistance => 9; public override int BaseColdResistance => 9;
@ -718,31 +410,14 @@ namespace Server.Items
public override int InitMinHits => 20; public override int InitMinHits => 20;
public override int InitMaxHits => 30; public override int InitMaxHits => 30;
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();
}
} }
public class MagicWizardsHat : BaseHat [Serializable(0, false)]
public partial class MagicWizardsHat : BaseHat
{ {
[Constructible] [Constructible]
public MagicWizardsHat(int hue = 0) : base(0x1718, hue) => Weight = 1.0; public MagicWizardsHat(int hue = 0) : base(0x1718, hue) => Weight = 1.0;
public MagicWizardsHat(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0; public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 5; public override int BaseFireResistance => 5;
public override int BaseColdResistance => 9; public override int BaseColdResistance => 9;
@ -757,31 +432,14 @@ namespace Server.Items
public override int BaseStrBonus => -5; public override int BaseStrBonus => -5;
public override int BaseDexBonus => -5; public override int BaseDexBonus => -5;
public override int BaseIntBonus => +5; public override int BaseIntBonus => +5;
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();
}
} }
public class Bonnet : BaseHat [Serializable(0, false)]
public partial class Bonnet : BaseHat
{ {
[Constructible] [Constructible]
public Bonnet(int hue = 0) : base(0x1719, hue) => Weight = 1.0; public Bonnet(int hue = 0) : base(0x1719, hue) => Weight = 1.0;
public Bonnet(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0; public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 5; public override int BaseFireResistance => 5;
public override int BaseColdResistance => 9; public override int BaseColdResistance => 9;
@ -790,31 +448,14 @@ namespace Server.Items
public override int InitMinHits => 20; public override int InitMinHits => 20;
public override int InitMaxHits => 30; public override int InitMaxHits => 30;
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();
}
} }
public class FeatheredHat : BaseHat [Serializable(0, false)]
public partial class FeatheredHat : BaseHat
{ {
[Constructible] [Constructible]
public FeatheredHat(int hue = 0) : base(0x171A, hue) => Weight = 1.0; public FeatheredHat(int hue = 0) : base(0x171A, hue) => Weight = 1.0;
public FeatheredHat(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0; public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 5; public override int BaseFireResistance => 5;
public override int BaseColdResistance => 9; public override int BaseColdResistance => 9;
@ -823,31 +464,14 @@ namespace Server.Items
public override int InitMinHits => 20; public override int InitMinHits => 20;
public override int InitMaxHits => 30; public override int InitMaxHits => 30;
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();
}
} }
public class TricorneHat : BaseHat [Serializable(0, false)]
public partial class TricorneHat : BaseHat
{ {
[Constructible] [Constructible]
public TricorneHat(int hue = 0) : base(0x171B, hue) => Weight = 1.0; public TricorneHat(int hue = 0) : base(0x171B, hue) => Weight = 1.0;
public TricorneHat(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0; public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 5; public override int BaseFireResistance => 5;
public override int BaseColdResistance => 9; public override int BaseColdResistance => 9;
@ -856,31 +480,14 @@ namespace Server.Items
public override int InitMinHits => 20; public override int InitMinHits => 20;
public override int InitMaxHits => 30; public override int InitMaxHits => 30;
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();
}
} }
public class JesterHat : BaseHat [Serializable(0, false)]
public partial class JesterHat : BaseHat
{ {
[Constructible] [Constructible]
public JesterHat(int hue = 0) : base(0x171C, hue) => Weight = 1.0; public JesterHat(int hue = 0) : base(0x171C, hue) => Weight = 1.0;
public JesterHat(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0; public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 5; public override int BaseFireResistance => 5;
public override int BaseColdResistance => 9; public override int BaseColdResistance => 9;
@ -889,19 +496,5 @@ namespace Server.Items
public override int InitMinHits => 20; public override int InitMinHits => 20;
public override int InitMaxHits => 30; public override int InitMaxHits => 30;
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();
}
} }
} }

View file

@ -1,237 +1,74 @@
namespace Server.Items namespace Server.Items
{ {
public abstract class BaseMiddleTorso : BaseClothing [Serializable(0, false)]
public abstract partial class BaseMiddleTorso : BaseClothing
{ {
public BaseMiddleTorso(int itemID, int hue = 0) : base(itemID, Layer.MiddleTorso, hue) public BaseMiddleTorso(int itemID, int hue = 0) : base(itemID, Layer.MiddleTorso, hue)
{ {
} }
public BaseMiddleTorso(Serial serial) : base(serial)
{
}
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();
}
} }
[Serializable(0, false)]
[Flippable(0x1541, 0x1542)] [Flippable(0x1541, 0x1542)]
public class BodySash : BaseMiddleTorso public partial class BodySash : BaseMiddleTorso
{ {
[Constructible] [Constructible]
public BodySash(int hue = 0) : base(0x1541, hue) => Weight = 1.0; public BodySash(int hue = 0) : base(0x1541, hue) => Weight = 1.0;
public BodySash(Serial serial) : base(serial)
{
}
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();
}
} }
[Serializable(0, false)]
[Flippable(0x153d, 0x153e)] [Flippable(0x153d, 0x153e)]
public class FullApron : BaseMiddleTorso public partial class FullApron : BaseMiddleTorso
{ {
[Constructible] [Constructible]
public FullApron(int hue = 0) : base(0x153d, hue) => Weight = 4.0; public FullApron(int hue = 0) : base(0x153d, hue) => Weight = 4.0;
public FullApron(Serial serial) : base(serial)
{
}
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();
}
} }
[Serializable(0, false)]
[Flippable(0x1f7b, 0x1f7c)] [Flippable(0x1f7b, 0x1f7c)]
public class Doublet : BaseMiddleTorso public partial class Doublet : BaseMiddleTorso
{ {
[Constructible] [Constructible]
public Doublet(int hue = 0) : base(0x1F7B, hue) => Weight = 2.0; public Doublet(int hue = 0) : base(0x1F7B, hue) => Weight = 2.0;
public Doublet(Serial serial) : base(serial)
{
}
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();
}
} }
[Serializable(0, false)]
[Flippable(0x1ffd, 0x1ffe)] [Flippable(0x1ffd, 0x1ffe)]
public class Surcoat : BaseMiddleTorso public partial class Surcoat : BaseMiddleTorso
{ {
[Constructible] [Constructible]
public Surcoat(int hue = 0) : base(0x1FFD, hue) => Weight = 6.0; public Surcoat(int hue = 0) : base(0x1FFD, hue) => Weight = 6.0;
public Surcoat(Serial serial) : base(serial)
{
}
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();
if (Weight == 3.0)
{
Weight = 6.0;
}
}
} }
[Serializable(0, false)]
[Flippable(0x1fa1, 0x1fa2)] [Flippable(0x1fa1, 0x1fa2)]
public class Tunic : BaseMiddleTorso public partial class Tunic : BaseMiddleTorso
{ {
[Constructible] [Constructible]
public Tunic(int hue = 0) : base(0x1FA1, hue) => Weight = 5.0; public Tunic(int hue = 0) : base(0x1FA1, hue) => Weight = 5.0;
public Tunic(Serial serial) : base(serial)
{
}
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();
}
} }
[Serializable(0, false)]
[Flippable(0x2310, 0x230F)] [Flippable(0x2310, 0x230F)]
public class FormalShirt : BaseMiddleTorso public partial class FormalShirt : BaseMiddleTorso
{ {
[Constructible] [Constructible]
public FormalShirt(int hue = 0) : base(0x2310, hue) => Weight = 1.0; public FormalShirt(int hue = 0) : base(0x2310, hue) => Weight = 1.0;
public FormalShirt(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
if (Weight == 2.0)
{
Weight = 1.0;
}
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
[Serializable(0, false)]
[Flippable(0x1f9f, 0x1fa0)] [Flippable(0x1f9f, 0x1fa0)]
public class JesterSuit : BaseMiddleTorso public partial class JesterSuit : BaseMiddleTorso
{ {
[Constructible] [Constructible]
public JesterSuit(int hue = 0) : base(0x1F9F, hue) => Weight = 4.0; public JesterSuit(int hue = 0) : base(0x1F9F, hue) => Weight = 4.0;
public JesterSuit(Serial serial) : base(serial)
{
}
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();
}
} }
[Serializable(0, false)]
[Flippable(0x27A1, 0x27EC)] [Flippable(0x27A1, 0x27EC)]
public class JinBaori : BaseMiddleTorso public partial class JinBaori : BaseMiddleTorso
{ {
[Constructible] [Constructible]
public JinBaori(int hue = 0) : base(0x27A1, hue) => Weight = 3.0; public JinBaori(int hue = 0) : base(0x27A1, hue) => Weight = 3.0;
public JinBaori(Serial serial) : base(serial)
{
}
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();
}
} }
} }

View file

@ -1,132 +1,42 @@
namespace Server.Items namespace Server.Items
{ {
public abstract class BaseOuterLegs : BaseClothing [Serializable(0, false)]
public abstract partial class BaseOuterLegs : BaseClothing
{ {
public BaseOuterLegs(int itemID, int hue = 0) : base(itemID, Layer.OuterLegs, hue) public BaseOuterLegs(int itemID, int hue = 0) : base(itemID, Layer.OuterLegs, hue)
{ {
} }
public BaseOuterLegs(Serial serial) : base(serial)
{
}
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();
}
} }
[Serializable(0, false)]
[Flippable(0x230C, 0x230B)] [Flippable(0x230C, 0x230B)]
public class FurSarong : BaseOuterLegs public partial class FurSarong : BaseOuterLegs
{ {
[Constructible] [Constructible]
public FurSarong(int hue = 0) : base(0x230C, hue) => Weight = 3.0; public FurSarong(int hue = 0) : base(0x230C, hue) => Weight = 3.0;
public FurSarong(Serial serial) : base(serial)
{
}
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();
if (Weight == 4.0)
{
Weight = 3.0;
}
}
} }
[Serializable(0, false)]
[Flippable(0x1516, 0x1531)] [Flippable(0x1516, 0x1531)]
public class Skirt : BaseOuterLegs public partial class Skirt : BaseOuterLegs
{ {
[Constructible] [Constructible]
public Skirt(int hue = 0) : base(0x1516, hue) => Weight = 4.0; public Skirt(int hue = 0) : base(0x1516, hue) => Weight = 4.0;
public Skirt(Serial serial) : base(serial)
{
}
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();
}
} }
[Serializable(0, false)]
[Flippable(0x1537, 0x1538)] [Flippable(0x1537, 0x1538)]
public class Kilt : BaseOuterLegs public partial class Kilt : BaseOuterLegs
{ {
[Constructible] [Constructible]
public Kilt(int hue = 0) : base(0x1537, hue) => Weight = 2.0; public Kilt(int hue = 0) : base(0x1537, hue) => Weight = 2.0;
public Kilt(Serial serial) : base(serial)
{
}
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();
}
} }
[Serializable(0, false)]
[Flippable(0x279A, 0x27E5)] [Flippable(0x279A, 0x27E5)]
public class Hakama : BaseOuterLegs public partial class Hakama : BaseOuterLegs
{ {
[Constructible] [Constructible]
public Hakama(int hue = 0) : base(0x279A, hue) => Weight = 2.0; public Hakama(int hue = 0) : base(0x279A, hue) => Weight = 2.0;
public Hakama(Serial serial) : base(serial)
{
}
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();
}
} }
} }

View file

@ -1,88 +1,50 @@
using System; using System;
using System.Runtime.CompilerServices;
using Server.Engines.VeteranRewards; using Server.Engines.VeteranRewards;
namespace Server.Items namespace Server.Items
{ {
public abstract class BaseOuterTorso : BaseClothing [Serializable(0, false)]
public abstract partial class BaseOuterTorso : BaseClothing
{ {
public BaseOuterTorso(int itemID, int hue = 0) : base(itemID, Layer.OuterTorso, hue) public BaseOuterTorso(int itemID, int hue = 0) : base(itemID, Layer.OuterTorso, hue)
{ {
} }
public BaseOuterTorso(Serial serial) : base(serial)
{
}
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();
}
} }
[Serializable(0, false)]
[Flippable(0x230E, 0x230D)] [Flippable(0x230E, 0x230D)]
public class GildedDress : BaseOuterTorso public partial class GildedDress : BaseOuterTorso
{ {
[Constructible] [Constructible]
public GildedDress(int hue = 0) : base(0x230E, hue) => Weight = 3.0; public GildedDress(int hue = 0) : base(0x230E, hue) => Weight = 3.0;
public GildedDress(Serial serial) : base(serial)
{
}
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();
}
} }
[Serializable(0, false)]
[Flippable(0x1F00, 0x1EFF)] [Flippable(0x1F00, 0x1EFF)]
public class FancyDress : BaseOuterTorso public partial class FancyDress : BaseOuterTorso
{ {
[Constructible] [Constructible]
public FancyDress(int hue = 0) : base(0x1F00, hue) => Weight = 3.0; public FancyDress(int hue = 0) : base(0x1F00, hue) => Weight = 3.0;
public FancyDress(Serial serial) : base(serial)
{
}
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();
}
} }
public class DeathRobe : Robe [Serializable(3, false)]
public partial class DeathRobe : Robe
{ {
private static readonly TimeSpan m_DefaultDecayTime = TimeSpan.FromMinutes(1.0); private static readonly TimeSpan m_DefaultDecayTime = TimeSpan.FromMinutes(1.0);
private DateTime m_DecayTime;
private Timer m_DecayTimer; [TimerDrift]
[SerializableField(0)]
private Timer _decayTimer;
[DeserializeTimerField(0)]
private void DeserializeDecayTimer(TimeSpan delay)
{
if (delay != TimeSpan.MinValue)
{
BeginDecay(delay);
}
}
[Constructible] [Constructible]
public DeathRobe() public DeathRobe()
@ -92,10 +54,6 @@ namespace Server.Items
BeginDecay(m_DefaultDecayTime); BeginDecay(m_DefaultDecayTime);
} }
public DeathRobe(Serial serial) : base(serial)
{
}
public override bool DisplayLootType => false; public override bool DisplayLootType => false;
public new bool Scissor(Mobile from, Scissors scissors) public new bool Scissor(Mobile from, Scissors scissors)
@ -109,14 +67,18 @@ namespace Server.Items
BeginDecay(m_DefaultDecayTime); BeginDecay(m_DefaultDecayTime);
} }
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private void StopTimer()
{
_decayTimer?.Stop();
_decayTimer = null;
}
private void BeginDecay(TimeSpan delay) private void BeginDecay(TimeSpan delay)
{ {
m_DecayTimer?.Stop(); StopTimer();
_decayTimer = new InternalTimer(this, delay);
m_DecayTime = Core.Now + delay; _decayTimer.Start();
m_DecayTimer = new InternalTimer(this, delay);
m_DecayTimer.Start();
} }
public override bool OnDroppedToWorld(Mobile from, Point3D p) public override bool OnDroppedToWorld(Mobile from, Point3D p)
@ -126,101 +88,70 @@ namespace Server.Items
return true; return true;
} }
public override bool OnDroppedToMobile(Mobile from, Mobile target) public override bool OnDroppedInto(Mobile from, Container target, Point3D p)
{ {
if (m_DecayTimer != null) if (base.OnDroppedInto(from, target, p))
{ {
m_DecayTimer.Stop(); StopTimer();
m_DecayTimer = null; return true;
} }
return false;
}
public override bool OnDroppedToMobile(Mobile from, Mobile target)
{
StopTimer();
return true; return true;
} }
public override void OnAfterDelete() public override void OnAfterDelete()
{ {
m_DecayTimer?.Stop(); StopTimer();
m_DecayTimer = null;
} }
public override void Serialize(IGenericWriter writer) private void Deserialize(IGenericReader reader, int version)
{ {
base.Serialize(writer); if (reader.ReadBool())
writer.Write(2); // version
writer.Write(m_DecayTimer != null);
if (m_DecayTimer != null)
{ {
writer.WriteDeltaTime(m_DecayTime); var delay = reader.ReadDeltaTime();
} BeginDecay(delay - Core.Now);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
{
case 2:
{
if (reader.ReadBool())
{
m_DecayTime = reader.ReadDeltaTime();
BeginDecay(m_DecayTime - Core.Now);
}
break;
}
case 1:
case 0:
{
if (Parent == null)
{
BeginDecay(m_DefaultDecayTime);
}
break;
}
}
if (version < 1 && Hue == 0)
{
Hue = 2301;
} }
} }
private class InternalTimer : Timer private class InternalTimer : Timer
{ {
private readonly DeathRobe m_Robe; private readonly DeathRobe _robe;
public InternalTimer(DeathRobe c, TimeSpan delay) : base(delay) public InternalTimer(DeathRobe c, TimeSpan delay) : base(delay) => _robe = c;
{
m_Robe = c;
}
protected override void OnTick() protected override void OnTick()
{ {
if (m_Robe.Parent != null || m_Robe.IsLockedDown) if (_robe.Parent != null || _robe.IsLockedDown)
{ {
Stop(); Stop();
_robe._decayTimer = null;
} }
else else
{ {
m_Robe.Delete(); _robe.Delete();
} }
} }
} }
} }
[Flippable] [Flippable]
public class RewardRobe : BaseOuterTorso, IRewardItem [Serializable(0, false)]
public partial class RewardRobe : BaseOuterTorso, IRewardItem
{ {
private int m_LabelNumber; [InvalidateProperties]
[SerializableField(0)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private int _number;
[SerializableField(1)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private bool _isRewardItem;
[Constructible] [Constructible]
public RewardRobe(int hue = 0, int labelNumber = 0) : base(0x1F03, hue) public RewardRobe(int hue = 0, int labelNumber = 0) : base(0x1F03, hue)
@ -228,42 +159,13 @@ namespace Server.Items
Weight = 3.0; Weight = 3.0;
LootType = LootType.Blessed; LootType = LootType.Blessed;
m_LabelNumber = labelNumber; _number = labelNumber;
} }
public RewardRobe(Serial serial) : base(serial) public override int LabelNumber => _number > 0 ? _number : base.LabelNumber;
{
}
[CommandProperty(AccessLevel.GameMaster)]
public int Number
{
get => m_LabelNumber;
set
{
m_LabelNumber = value;
InvalidateProperties();
}
}
public override int LabelNumber
{
get
{
if (m_LabelNumber > 0)
{
return m_LabelNumber;
}
return base.LabelNumber;
}
}
public override int BasePhysicalResistance => 3; public override int BasePhysicalResistance => 3;
[CommandProperty(AccessLevel.GameMaster)]
public bool IsRewardItem { get; set; }
public override void OnAdded(IEntity parent) public override void OnAdded(IEntity parent)
{ {
base.OnAdded(parent); base.OnAdded(parent);
@ -296,51 +198,23 @@ namespace Server.Items
if (Core.ML && IsRewardItem) if (Core.ML && IsRewardItem)
{ {
// X Year Veteran Reward
list.Add( list.Add(
RewardSystem.GetRewardYearLabel( RewardSystem.GetRewardYearLabel(
this, this,
new object[] { Hue, m_LabelNumber } new object[] { Hue, _number }
) )
); // X Year Veteran Reward );
} }
} }
public override bool CanEquip(Mobile m) public override bool CanEquip(Mobile m) =>
base.CanEquip(m) &&
(!IsRewardItem || RewardSystem.CheckIsUsableBy(m, this, new object[] { Hue, _number }));
[AfterDeserialization]
private void AfterDeserialization()
{ {
if (!base.CanEquip(m))
{
return false;
}
return !IsRewardItem || RewardSystem.CheckIsUsableBy(m, this, new object[] { Hue, m_LabelNumber });
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_LabelNumber);
writer.Write(IsRewardItem);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
{
case 0:
{
m_LabelNumber = reader.ReadInt();
IsRewardItem = reader.ReadBool();
break;
}
}
if (Parent is Mobile mobile) if (Parent is Mobile mobile)
{ {
mobile.VirtualArmorMod += 2; mobile.VirtualArmorMod += 2;
@ -349,9 +223,17 @@ namespace Server.Items
} }
[Flippable] [Flippable]
public class RewardDress : BaseOuterTorso, IRewardItem [Serializable(0, false)]
public partial class RewardDress : BaseOuterTorso, IRewardItem
{ {
private int m_LabelNumber; [InvalidateProperties]
[SerializableField(0)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private int _number;
[SerializableField(1)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private bool _isRewardItem;
[Constructible] [Constructible]
public RewardDress(int hue = 0, int labelNumber = 0) : base(0x1F01, hue) public RewardDress(int hue = 0, int labelNumber = 0) : base(0x1F01, hue)
@ -359,42 +241,13 @@ namespace Server.Items
Weight = 2.0; Weight = 2.0;
LootType = LootType.Blessed; LootType = LootType.Blessed;
m_LabelNumber = labelNumber; _number = labelNumber;
} }
public RewardDress(Serial serial) : base(serial) public override int LabelNumber => _number > 0 ? _number : base.LabelNumber;
{
}
[CommandProperty(AccessLevel.GameMaster)]
public int Number
{
get => m_LabelNumber;
set
{
m_LabelNumber = value;
InvalidateProperties();
}
}
public override int LabelNumber
{
get
{
if (m_LabelNumber > 0)
{
return m_LabelNumber;
}
return base.LabelNumber;
}
}
public override int BasePhysicalResistance => 3; public override int BasePhysicalResistance => 3;
[CommandProperty(AccessLevel.GameMaster)]
public bool IsRewardItem { get; set; }
public override void OnAdded(IEntity parent) public override void OnAdded(IEntity parent)
{ {
base.OnAdded(parent); base.OnAdded(parent);
@ -425,53 +278,25 @@ namespace Server.Items
{ {
base.GetProperties(list); base.GetProperties(list);
if (IsRewardItem) if (_isRewardItem)
{ {
// X Year Veteran Reward
list.Add( list.Add(
RewardSystem.GetRewardYearLabel( RewardSystem.GetRewardYearLabel(
this, this,
new object[] { Hue, m_LabelNumber } new object[] { Hue, _number }
) )
); // X Year Veteran Reward );
} }
} }
public override bool CanEquip(Mobile m) public override bool CanEquip(Mobile m) =>
base.CanEquip(m) &&
(!_isRewardItem || RewardSystem.CheckIsUsableBy(m, this, new object[] { Hue, _number }));
[AfterDeserialization]
private void AfterDeserialization()
{ {
if (!base.CanEquip(m))
{
return false;
}
return !IsRewardItem || RewardSystem.CheckIsUsableBy(m, this, new object[] { Hue, m_LabelNumber });
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_LabelNumber);
writer.Write(IsRewardItem);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
{
case 0:
{
m_LabelNumber = reader.ReadInt();
IsRewardItem = reader.ReadBool();
break;
}
}
if (Parent is Mobile mobile) if (Parent is Mobile mobile)
{ {
mobile.VirtualArmorMod += 2; mobile.VirtualArmorMod += 2;
@ -480,85 +305,54 @@ namespace Server.Items
} }
[Flippable] [Flippable]
public class Robe : BaseOuterTorso, IArcaneEquip [Serializable(2, false)]
public partial class Robe : BaseOuterTorso, IArcaneEquip
{ {
private int m_MaxArcaneCharges, m_CurArcaneCharges; private int _curArcaneCharges;
private int _maxArcaneCharges;
[Constructible] [Constructible]
public Robe(int hue = 0) : base(0x1F03, hue) => Weight = 3.0; public Robe(int hue = 0) : base(0x1F03, hue) => Weight = 3.0;
public Robe(Serial serial) : base(serial) [EncodedInt]
{ [SerializableField(0)]
}
[CommandProperty(AccessLevel.GameMaster)]
public int MaxArcaneCharges
{
get => m_MaxArcaneCharges;
set
{
m_MaxArcaneCharges = value;
InvalidateProperties();
Update();
}
}
[CommandProperty(AccessLevel.GameMaster)] [CommandProperty(AccessLevel.GameMaster)]
public int CurArcaneCharges public int CurArcaneCharges
{ {
get => m_CurArcaneCharges; get => _curArcaneCharges;
set set
{ {
m_CurArcaneCharges = value; _curArcaneCharges = value;
InvalidateProperties(); InvalidateProperties();
Update(); Update();
this.MarkDirty();
}
}
[EncodedInt]
[SerializableField(1)]
[CommandProperty(AccessLevel.GameMaster)]
public int MaxArcaneCharges
{
get => _maxArcaneCharges;
set
{
_maxArcaneCharges = value;
InvalidateProperties();
Update();
this.MarkDirty();
} }
} }
[CommandProperty(AccessLevel.GameMaster)] [CommandProperty(AccessLevel.GameMaster)]
public bool IsArcane => m_MaxArcaneCharges > 0 && m_CurArcaneCharges >= 0; public bool IsArcane => _maxArcaneCharges > 0 && _curArcaneCharges >= 0;
public override void Serialize(IGenericWriter writer) private void Deserialize(IGenericReader reader, int version)
{ {
base.Serialize(writer); if (reader.ReadBool())
writer.Write(1); // version
if (IsArcane)
{ {
writer.Write(true); _curArcaneCharges = reader.ReadInt();
writer.Write(m_CurArcaneCharges); _maxArcaneCharges = reader.ReadInt();
writer.Write(m_MaxArcaneCharges);
}
else
{
writer.Write(false);
}
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
{
case 1:
{
if (reader.ReadBool())
{
m_CurArcaneCharges = reader.ReadInt();
m_MaxArcaneCharges = reader.ReadInt();
if (Hue == 2118)
{
Hue = ArcaneGem.DefaultArcaneHue;
}
}
break;
}
} }
} }
@ -585,7 +379,7 @@ namespace Server.Items
if (IsArcane) if (IsArcane)
{ {
list.Add(1061837, "{0}\t{1}", m_CurArcaneCharges, m_MaxArcaneCharges); // arcane charges: ~1_val~ / ~2_val~ list.Add(1061837, "{0}\t{1}", _curArcaneCharges, _maxArcaneCharges); // arcane charges: ~1_val~ / ~2_val~
} }
} }
@ -595,24 +389,23 @@ namespace Server.Items
if (IsArcane) if (IsArcane)
{ {
LabelTo(from, 1061837, $"{m_CurArcaneCharges}\t{m_MaxArcaneCharges}"); LabelTo(from, 1061837, $"{_curArcaneCharges}\t{_maxArcaneCharges}");
} }
} }
public void Flip() public void Flip()
{ {
if (ItemID == 0x1F03) ItemID = ItemID switch
{ {
ItemID = 0x1F04; 0x1F03 => 0x1F04,
} 0x1F04 => 0x1F03,
else if (ItemID == 0x1F04) _ => ItemID
{ };
ItemID = 0x1F03;
}
} }
} }
public class MonkRobe : BaseOuterTorso [Serializable(0, false)]
public partial class MonkRobe : BaseOuterTorso
{ {
[Constructible] [Constructible]
public MonkRobe(int hue = 0x21E) : base(0x2687, hue) public MonkRobe(int hue = 0x21E) : base(0x2687, hue)
@ -621,10 +414,6 @@ namespace Server.Items
StrRequirement = 0; StrRequirement = 0;
} }
public MonkRobe(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1076584; // A monk's robe public override int LabelNumber => 1076584; // A monk's robe
public override bool CanBeBlessed => false; public override bool CanBeBlessed => false;
@ -633,209 +422,65 @@ namespace Server.Items
from.SendLocalizedMessage(sender.FailMessage); from.SendLocalizedMessage(sender.FailMessage);
return false; return false;
} }
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();
}
} }
[Flippable(0x1f01, 0x1f02)] [Flippable(0x1f01, 0x1f02)]
public class PlainDress : BaseOuterTorso [Serializable(0, false)]
public partial class PlainDress : BaseOuterTorso
{ {
[Constructible] [Constructible]
public PlainDress(int hue = 0) : base(0x1F01, hue) => Weight = 2.0; public PlainDress(int hue = 0) : base(0x1F01, hue) => Weight = 2.0;
public PlainDress(Serial serial) : base(serial)
{
}
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();
if (Weight == 3.0)
{
Weight = 2.0;
}
}
} }
[Flippable(0x2799, 0x27E4)] [Flippable(0x2799, 0x27E4)]
public class Kamishimo : BaseOuterTorso [Serializable(0, false)]
public partial class Kamishimo : BaseOuterTorso
{ {
[Constructible] [Constructible]
public Kamishimo(int hue = 0) : base(0x2799, hue) => Weight = 3.0; public Kamishimo(int hue = 0) : base(0x2799, hue) => Weight = 3.0;
public Kamishimo(Serial serial) : base(serial)
{
}
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();
}
} }
[Flippable(0x279C, 0x27E7)] [Flippable(0x279C, 0x27E7)]
public class HakamaShita : BaseOuterTorso [Serializable(0, false)]
public partial class HakamaShita : BaseOuterTorso
{ {
[Constructible] [Constructible]
public HakamaShita(int hue = 0) : base(0x279C, hue) => Weight = 3.0; public HakamaShita(int hue = 0) : base(0x279C, hue) => Weight = 3.0;
public HakamaShita(Serial serial) : base(serial)
{
}
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();
}
} }
[Flippable(0x2782, 0x27CD)] [Flippable(0x2782, 0x27CD)]
public class MaleKimono : BaseOuterTorso [Serializable(0, false)]
public partial class MaleKimono : BaseOuterTorso
{ {
[Constructible] [Constructible]
public MaleKimono(int hue = 0) : base(0x2782, hue) => Weight = 3.0; public MaleKimono(int hue = 0) : base(0x2782, hue) => Weight = 3.0;
public MaleKimono(Serial serial) : base(serial)
{
}
public override bool AllowFemaleWearer => false;
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();
}
} }
[Flippable(0x2783, 0x27CE)] [Flippable(0x2783, 0x27CE)]
public class FemaleKimono : BaseOuterTorso [Serializable(0, false)]
public partial class FemaleKimono : BaseOuterTorso
{ {
[Constructible] [Constructible]
public FemaleKimono(int hue = 0) : base(0x2783, hue) => Weight = 3.0; public FemaleKimono(int hue = 0) : base(0x2783, hue) => Weight = 3.0;
public FemaleKimono(Serial serial) : base(serial)
{
}
public override bool AllowMaleWearer => false;
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();
}
} }
[Flippable(0x2FB9, 0x3173)] [Flippable(0x2FB9, 0x3173)]
public class MaleElvenRobe : BaseOuterTorso [Serializable(0)]
public partial class MaleElvenRobe : BaseOuterTorso
{ {
[Constructible] [Constructible]
public MaleElvenRobe(int hue = 0) : base(0x2FB9, hue) => Weight = 2.0; public MaleElvenRobe(int hue = 0) : base(0x2FB9, hue) => Weight = 2.0;
public MaleElvenRobe(Serial serial) : base(serial)
{
}
public override Race RequiredRace => Race.Elf;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadEncodedInt();
}
} }
[Flippable(0x2FBA, 0x3174)] [Flippable(0x2FBA, 0x3174)]
public class FemaleElvenRobe : BaseOuterTorso [Serializable(0)]
public partial class FemaleElvenRobe : BaseOuterTorso
{ {
[Constructible] [Constructible]
public FemaleElvenRobe(int hue = 0) : base(0x2FBA, hue) => Weight = 2.0; public FemaleElvenRobe(int hue = 0) : base(0x2FBA, hue) => Weight = 2.0;
public FemaleElvenRobe(Serial serial) : base(serial)
{
}
public override Race RequiredRace => Race.Elf; public override Race RequiredRace => Race.Elf;
public override bool AllowMaleWearer => false; public override bool AllowMaleWearer => false;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadEncodedInt();
}
} }
} }

View file

@ -1,129 +1,44 @@
namespace Server.Items namespace Server.Items
{ {
public abstract class BasePants : BaseClothing [Serializable(0, false)]
public abstract partial class BasePants : BaseClothing
{ {
public BasePants(int itemID, int hue = 0) : base(itemID, Layer.Pants, hue) public BasePants(int itemID, int hue = 0) : base(itemID, Layer.Pants, hue)
{ {
} }
public BasePants(Serial serial) : base(serial)
{
}
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();
}
} }
[Flippable(0x152e, 0x152f)] [Flippable(0x152e, 0x152f)]
public class ShortPants : BasePants [Serializable(0, false)]
public partial class ShortPants : BasePants
{ {
[Constructible] [Constructible]
public ShortPants(int hue = 0) : base(0x152E, hue) => Weight = 2.0; public ShortPants(int hue = 0) : base(0x152E, hue) => Weight = 2.0;
public ShortPants(Serial serial) : base(serial)
{
}
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();
}
} }
[Flippable(0x1539, 0x153a)] [Flippable(0x1539, 0x153a)]
public class LongPants : BasePants [Serializable(0, false)]
public partial class LongPants : BasePants
{ {
[Constructible] [Constructible]
public LongPants(int hue = 0) : base(0x1539, hue) => Weight = 2.0; public LongPants(int hue = 0) : base(0x1539, hue) => Weight = 2.0;
public LongPants(Serial serial) : base(serial)
{
}
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();
}
} }
[Flippable(0x279B, 0x27E6)] [Flippable(0x279B, 0x27E6)]
public class TattsukeHakama : BasePants [Serializable(0, false)]
public partial class TattsukeHakama : BasePants
{ {
[Constructible] [Constructible]
public TattsukeHakama(int hue = 0) : base(0x279B, hue) => Weight = 2.0; public TattsukeHakama(int hue = 0) : base(0x279B, hue) => Weight = 2.0;
public TattsukeHakama(Serial serial) : base(serial)
{
}
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();
}
} }
[Flippable(0x2FC3, 0x3179)] [Flippable(0x2FC3, 0x3179)]
public class ElvenPants : BasePants [Serializable(0)]
public partial class ElvenPants : BasePants
{ {
[Constructible] [Constructible]
public ElvenPants(int hue = 0) : base(0x2FC3, hue) => Weight = 2.0; public ElvenPants(int hue = 0) : base(0x2FC3, hue) => Weight = 2.0;
public ElvenPants(Serial serial) : base(serial)
{
}
public override Race RequiredRace => Race.Elf; public override Race RequiredRace => Race.Elf;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadEncodedInt();
}
} }
} }

View file

@ -1,87 +1,32 @@
namespace Server.Items namespace Server.Items
{ {
public abstract class BaseShirt : BaseClothing [Serializable(0, false)]
public abstract partial class BaseShirt : BaseClothing
{ {
public BaseShirt(int itemID, int hue = 0) : base(itemID, Layer.Shirt, hue) public BaseShirt(int itemID, int hue = 0) : base(itemID, Layer.Shirt, hue)
{ {
} }
public BaseShirt(Serial serial) : base(serial)
{
}
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();
}
} }
[Flippable(0x1efd, 0x1efe)] [Flippable(0x1efd, 0x1efe)]
public class FancyShirt : BaseShirt [Serializable(0, false)]
public partial class FancyShirt : BaseShirt
{ {
[Constructible] [Constructible]
public FancyShirt(int hue = 0) : base(0x1EFD, hue) => Weight = 2.0; public FancyShirt(int hue = 0) : base(0x1EFD, hue) => Weight = 2.0;
public FancyShirt(Serial serial) : base(serial)
{
}
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();
}
} }
[Flippable(0x1517, 0x1518)] [Flippable(0x1517, 0x1518)]
public class Shirt : BaseShirt [Serializable(0, false)]
public partial class Shirt : BaseShirt
{ {
[Constructible] [Constructible]
public Shirt(int hue = 0) : base(0x1517, hue) => Weight = 1.0; public Shirt(int hue = 0) : base(0x1517, hue) => Weight = 1.0;
public Shirt(Serial serial) : base(serial)
{
}
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();
if (Weight == 2.0)
{
Weight = 1.0;
}
}
} }
[Flippable(0x2794, 0x27DF)] [Flippable(0x2794, 0x27DF)]
public class ClothNinjaJacket : BaseShirt [Serializable(0, false)]
public partial class ClothNinjaJacket : BaseShirt
{ {
[Constructible] [Constructible]
public ClothNinjaJacket(int hue = 0) : base(0x2794, hue) public ClothNinjaJacket(int hue = 0) : base(0x2794, hue)
@ -89,76 +34,21 @@ namespace Server.Items
Weight = 5.0; Weight = 5.0;
Layer = Layer.InnerTorso; Layer = Layer.InnerTorso;
} }
public ClothNinjaJacket(Serial serial) : base(serial)
{
}
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();
}
} }
public class ElvenShirt : BaseShirt [Serializable(0)]
public partial class ElvenShirt : BaseShirt
{ {
[Constructible] [Constructible]
public ElvenShirt(int hue = 0) : base(0x3175, hue) => Weight = 2.0; public ElvenShirt(int hue = 0) : base(0x3175, hue) => Weight = 2.0;
public ElvenShirt(Serial serial)
: base(serial)
{
}
public override Race RequiredRace => Race.Elf; public override Race RequiredRace => Race.Elf;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadEncodedInt();
}
} }
public class ElvenDarkShirt : BaseShirt [Serializable(0)]
public partial class ElvenDarkShirt : BaseShirt
{ {
[Constructible] [Constructible]
public ElvenDarkShirt(int hue = 0) : base(0x3176, hue) => Weight = 2.0; public ElvenDarkShirt(int hue = 0) : base(0x3176, hue) => Weight = 2.0;
public ElvenDarkShirt(Serial serial) : base(serial)
{
}
public override Race RequiredRace => Race.Elf;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadEncodedInt();
}
} }
} }

View file

@ -1,15 +1,12 @@
namespace Server.Items namespace Server.Items
{ {
public abstract class BaseShoes : BaseClothing [Serializable(0, false)]
public abstract partial class BaseShoes : BaseClothing
{ {
public BaseShoes(int itemID, int hue = 0) : base(itemID, Layer.Shoes, hue) public BaseShoes(int itemID, int hue = 0) : base(itemID, Layer.Shoes, hue)
{ {
} }
public BaseShoes(Serial serial) : base(serial)
{
}
public override bool Scissor(Mobile from, Scissors scissors) public override bool Scissor(Mobile from, Scissors scissors)
{ {
if (DefaultResource == CraftResource.None) if (DefaultResource == CraftResource.None)
@ -20,171 +17,77 @@ namespace Server.Items
from.SendLocalizedMessage(502440); // Scissors can not be used on that to produce anything. from.SendLocalizedMessage(502440); // Scissors can not be used on that to produce anything.
return false; return false;
} }
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(2); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
{
case 2: break; // empty, resource removed
case 1:
{
m_Resource = (CraftResource)reader.ReadInt();
break;
}
case 0:
{
m_Resource = DefaultResource;
break;
}
}
}
} }
[Flippable(0x2307, 0x2308)] [Flippable(0x2307, 0x2308)]
public class FurBoots : BaseShoes [Serializable(0, false)]
public partial class FurBoots : BaseShoes
{ {
[Constructible] [Constructible]
public FurBoots(int hue = 0) : base(0x2307, hue) => Weight = 3.0; public FurBoots(int hue = 0) : base(0x2307, hue) => Weight = 3.0;
public FurBoots(Serial serial) : base(serial)
{
}
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();
}
} }
[Flippable(0x170b, 0x170c)] [Flippable(0x170b, 0x170c)]
public class Boots : BaseShoes [Serializable(0, false)]
public partial class Boots : BaseShoes
{ {
[Constructible] [Constructible]
public Boots(int hue = 0) : base(0x170B, hue) => Weight = 3.0; public Boots(int hue = 0) : base(0x170B, hue) => Weight = 3.0;
public Boots(Serial serial) : base(serial)
{
}
public override CraftResource DefaultResource => CraftResource.RegularLeather; public override CraftResource DefaultResource => CraftResource.RegularLeather;
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();
}
} }
[Flippable] [Flippable]
public class ThighBoots : BaseShoes, IArcaneEquip [Serializable(2, false)]
public partial class ThighBoots : BaseShoes, IArcaneEquip
{ {
private int m_MaxArcaneCharges, m_CurArcaneCharges; private int _maxArcaneCharges;
private int _curArcaneCharges;
[Constructible] [Constructible]
public ThighBoots(int hue = 0) : base(0x1711, hue) => Weight = 4.0; public ThighBoots(int hue = 0) : base(0x1711, hue) => Weight = 4.0;
public ThighBoots(Serial serial) : base(serial)
{
}
public override CraftResource DefaultResource => CraftResource.RegularLeather; public override CraftResource DefaultResource => CraftResource.RegularLeather;
[CommandProperty(AccessLevel.GameMaster)] [EncodedInt]
public int MaxArcaneCharges [SerializableField(0)]
{
get => m_MaxArcaneCharges;
set
{
m_MaxArcaneCharges = value;
InvalidateProperties();
Update();
}
}
[CommandProperty(AccessLevel.GameMaster)] [CommandProperty(AccessLevel.GameMaster)]
public int CurArcaneCharges public int CurArcaneCharges
{ {
get => m_CurArcaneCharges; get => _curArcaneCharges;
set set
{ {
m_CurArcaneCharges = value; _curArcaneCharges = value;
InvalidateProperties(); InvalidateProperties();
Update(); Update();
this.MarkDirty();
}
}
[EncodedInt]
[SerializableField(1)]
[CommandProperty(AccessLevel.GameMaster)]
public int MaxArcaneCharges
{
get => _maxArcaneCharges;
set
{
_maxArcaneCharges = value;
InvalidateProperties();
Update();
this.MarkDirty();
} }
} }
[CommandProperty(AccessLevel.GameMaster)] [CommandProperty(AccessLevel.GameMaster)]
public bool IsArcane => m_MaxArcaneCharges > 0 && m_CurArcaneCharges >= 0; public bool IsArcane => _maxArcaneCharges > 0 && _curArcaneCharges >= 0;
public override void Serialize(IGenericWriter writer) private void Deserialize(IGenericReader reader, int version)
{ {
base.Serialize(writer); if (reader.ReadBool())
writer.Write(1); // version
if (IsArcane)
{ {
writer.Write(true); _curArcaneCharges = reader.ReadInt();
writer.Write(m_CurArcaneCharges); _maxArcaneCharges = reader.ReadInt();
writer.Write(m_MaxArcaneCharges);
}
else
{
writer.Write(false);
}
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
{
case 1:
{
if (reader.ReadBool())
{
m_CurArcaneCharges = reader.ReadInt();
m_MaxArcaneCharges = reader.ReadInt();
if (Hue == 2118)
{
Hue = ArcaneGem.DefaultArcaneHue;
}
}
break;
}
} }
} }
@ -194,7 +97,7 @@ namespace Server.Items
if (IsArcane) if (IsArcane)
{ {
LabelTo(from, 1061837, $"{m_CurArcaneCharges}\t{m_MaxArcaneCharges}"); LabelTo(from, 1061837, $"{_curArcaneCharges}\t{_maxArcaneCharges}");
} }
} }
@ -221,182 +124,78 @@ namespace Server.Items
if (IsArcane) if (IsArcane)
{ {
list.Add(1061837, "{0}\t{1}", m_CurArcaneCharges, m_MaxArcaneCharges); // arcane charges: ~1_val~ / ~2_val~ list.Add(1061837, "{0}\t{1}", _curArcaneCharges, _maxArcaneCharges); // arcane charges: ~1_val~ / ~2_val~
} }
} }
public void Flip() public void Flip()
{ {
if (ItemID == 0x1711) ItemID = ItemID switch
{ {
ItemID = 0x1712; 0x1711 => 0x1712,
} 0x1712 => 0x1711,
else if (ItemID == 0x1712) _ => ItemID
{ };
ItemID = 0x1711;
}
} }
} }
[Flippable(0x170f, 0x1710)] [Flippable(0x170f, 0x1710)]
public class Shoes : BaseShoes [Serializable(0, false)]
public partial class Shoes : BaseShoes
{ {
[Constructible] [Constructible]
public Shoes(int hue = 0) : base(0x170F, hue) => Weight = 2.0; public Shoes(int hue = 0) : base(0x170F, hue) => Weight = 2.0;
public Shoes(Serial serial) : base(serial)
{
}
public override CraftResource DefaultResource => CraftResource.RegularLeather; public override CraftResource DefaultResource => CraftResource.RegularLeather;
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();
}
} }
[Flippable(0x170d, 0x170e)] [Flippable(0x170d, 0x170e)]
public class Sandals : BaseShoes [Serializable(0, false)]
public partial class Sandals : BaseShoes
{ {
[Constructible] [Constructible]
public Sandals(int hue = 0) : base(0x170D, hue) => Weight = 1.0; public Sandals(int hue = 0) : base(0x170D, hue) => Weight = 1.0;
public Sandals(Serial serial) : base(serial)
{
}
public override CraftResource DefaultResource => CraftResource.RegularLeather; public override CraftResource DefaultResource => CraftResource.RegularLeather;
public override bool Dye(Mobile from, DyeTub sender) => false; public override bool Dye(Mobile from, DyeTub sender) => false;
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();
}
} }
[Flippable(0x2797, 0x27E2)] [Flippable(0x2797, 0x27E2)]
public class NinjaTabi : BaseShoes [Serializable(0, false)]
public partial class NinjaTabi : BaseShoes
{ {
[Constructible] [Constructible]
public NinjaTabi(int hue = 0) : base(0x2797, hue) => Weight = 2.0; public NinjaTabi(int hue = 0) : base(0x2797, hue) => Weight = 2.0;
public NinjaTabi(Serial serial) : base(serial)
{
}
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();
}
} }
[Flippable(0x2796, 0x27E1)] [Flippable(0x2796, 0x27E1)]
public class SamuraiTabi : BaseShoes [Serializable(0, false)]
public partial class SamuraiTabi : BaseShoes
{ {
[Constructible] [Constructible]
public SamuraiTabi(int hue = 0) : base(0x2796, hue) => Weight = 2.0; public SamuraiTabi(int hue = 0) : base(0x2796, hue) => Weight = 2.0;
public SamuraiTabi(Serial serial) : base(serial)
{
}
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();
}
} }
[Flippable(0x2796, 0x27E1)] [Flippable(0x2796, 0x27E1)]
public class Waraji : BaseShoes [Serializable(0, false)]
public partial class Waraji : BaseShoes
{ {
[Constructible] [Constructible]
public Waraji(int hue = 0) : base(0x2796, hue) => Weight = 2.0; public Waraji(int hue = 0) : base(0x2796, hue) => Weight = 2.0;
public Waraji(Serial serial) : base(serial)
{
}
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();
}
} }
[Flippable(0x2FC4, 0x317A)] [Flippable(0x2FC4, 0x317A)]
public class ElvenBoots : BaseShoes [Serializable(0)]
public partial class ElvenBoots : BaseShoes
{ {
[Constructible] [Constructible]
public ElvenBoots(int hue = 0) : base(0x2FC4, hue) => Weight = 2.0; public ElvenBoots(int hue = 0) : base(0x2FC4, hue) => Weight = 2.0;
public ElvenBoots(Serial serial) : base(serial)
{
}
public override CraftResource DefaultResource => CraftResource.RegularLeather; public override CraftResource DefaultResource => CraftResource.RegularLeather;
public override Race RequiredRace => Race.Elf; public override Race RequiredRace => Race.Elf;
public override bool Dye(Mobile from, DyeTub sender) => false; public override bool Dye(Mobile from, DyeTub sender) => false;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadEncodedInt();
}
} }
} }

View file

@ -1,90 +1,36 @@
namespace Server.Items namespace Server.Items
{ {
public abstract class BaseWaist : BaseClothing [Serializable(0, false)]
public abstract partial class BaseWaist : BaseClothing
{ {
public BaseWaist(int itemID, int hue = 0) : base(itemID, Layer.Waist, hue) public BaseWaist(int itemID, int hue = 0) : base(itemID, Layer.Waist, hue)
{ {
} }
public BaseWaist(Serial serial) : base(serial)
{
}
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();
}
} }
[Flippable(0x153b, 0x153c)] [Flippable(0x153b, 0x153c)]
public class HalfApron : BaseWaist [Serializable(0, false)]
public partial class HalfApron : BaseWaist
{ {
[Constructible] [Constructible]
public HalfApron(int hue = 0) : base(0x153b, hue) => Weight = 2.0; public HalfApron(int hue = 0) : base(0x153b, hue) => Weight = 2.0;
public HalfApron(Serial serial) : base(serial)
{
}
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();
}
} }
[Flippable(0x27A0, 0x27EB)] [Flippable(0x27A0, 0x27EB)]
public class Obi : BaseWaist [Serializable(0, false)]
public partial class Obi : BaseWaist
{ {
[Constructible] [Constructible]
public Obi(int hue = 0) : base(0x27A0, hue) => Weight = 1.0; public Obi(int hue = 0) : base(0x27A0, hue) => Weight = 1.0;
public Obi(Serial serial) : base(serial)
{
}
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();
}
} }
[Flippable(0x2B68, 0x315F)] [Flippable(0x2B68, 0x315F)]
public class WoodlandBelt : BaseWaist [Serializable(0)]
public partial class WoodlandBelt : BaseWaist
{ {
[Constructible] [Constructible]
public WoodlandBelt(int hue = 0) : base(0x2B68, hue) => Weight = 4.0; public WoodlandBelt(int hue = 0) : base(0x2B68, hue) => Weight = 4.0;
public WoodlandBelt(Serial serial) : base(serial)
{
}
public override Race RequiredRace => Race.Elf; public override Race RequiredRace => Race.Elf;
public override bool Dye(Mobile from, DyeTub sender) public override bool Dye(Mobile from, DyeTub sender)
@ -98,19 +44,5 @@ namespace Server.Items
from.SendLocalizedMessage(502440); // Scissors can not be used on that to produce anything. from.SendLocalizedMessage(502440); // Scissors can not be used on that to produce anything.
return false; return false;
} }
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadEncodedInt();
}
} }
} }

View file

@ -974,7 +974,6 @@ namespace Server.Items
if (map != null && map != Map.Internal) if (map != null && map != Map.Internal)
{ {
robe.MoveToWorld(from.Location, map); robe.MoveToWorld(from.Location, map);
robe.BeginDecay();
} }
} }

View file

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

View file

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

View file

@ -0,0 +1,96 @@
{
"version": 6,
"type": "Server.Items.BaseClothing",
"properties": [
{
"name": "Resource",
"type": "Server.Items.CraftResource",
"usesSaveFlag": true,
"rule": "EnumMigrationRule"
},
{
"name": "Attributes",
"type": "Server.AosAttributes",
"usesSaveFlag": true,
"rule": "RawSerializableMigrationRule",
"ruleArguments": [
""
]
},
{
"name": "ClothingAttributes",
"type": "Server.AosArmorAttributes",
"usesSaveFlag": true,
"rule": "RawSerializableMigrationRule",
"ruleArguments": [
""
]
},
{
"name": "SkillBonuses",
"type": "Server.AosSkillBonuses",
"usesSaveFlag": true,
"rule": "RawSerializableMigrationRule",
"ruleArguments": [
""
]
},
{
"name": "Resistances",
"type": "Server.AosElementAttributes",
"usesSaveFlag": true,
"rule": "RawSerializableMigrationRule",
"ruleArguments": [
""
]
},
{
"name": "MaxHitPoints",
"type": "int",
"usesSaveFlag": true,
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
"EncodedInt"
]
},
{
"name": "HitPoints",
"type": "int",
"usesSaveFlag": true,
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
"EncodedInt"
]
},
{
"name": "PlayerConstructed",
"type": "bool",
"usesSaveFlag": true,
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
""
]
},
{
"name": "Crafter",
"type": "Server.Mobile",
"usesSaveFlag": true,
"rule": "SerializableInterfaceMigrationRule"
},
{
"name": "Quality",
"type": "Server.Items.ClothingQuality",
"usesSaveFlag": true,
"rule": "EnumMigrationRule"
},
{
"name": "StrRequirement",
"type": "int",
"usesSaveFlag": true,
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
""
]
}
]
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,22 @@
{
"version": 2,
"type": "Server.Items.Cloak",
"properties": [
{
"name": "CurArcaneCharges",
"type": "int",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
"EncodedInt"
]
},
{
"name": "MaxArcaneCharges",
"type": "int",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
"EncodedInt"
]
}
]
}

View file

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

View file

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

View file

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

View file

@ -0,0 +1,14 @@
{
"version": 3,
"type": "Server.Items.DeathRobe",
"properties": [
{
"name": "DecayTimer",
"type": "Server.Timer",
"rule": "TimerMigrationRule",
"ruleArguments": [
"@TimerDrift"
]
}
]
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,22 @@
{
"version": 0,
"type": "Server.Items.RewardCloak",
"properties": [
{
"name": "Number",
"type": "int",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
""
]
},
{
"name": "IsRewardItem",
"type": "bool",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
""
]
}
]
}

View file

@ -0,0 +1,22 @@
{
"version": 0,
"type": "Server.Items.RewardDress",
"properties": [
{
"name": "Number",
"type": "int",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
""
]
},
{
"name": "IsRewardItem",
"type": "bool",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
""
]
}
]
}

View file

@ -0,0 +1,22 @@
{
"version": 0,
"type": "Server.Items.RewardRobe",
"properties": [
{
"name": "Number",
"type": "int",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
""
]
},
{
"name": "IsRewardItem",
"type": "bool",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
""
]
}
]
}

View file

@ -0,0 +1,22 @@
{
"version": 2,
"type": "Server.Items.Robe",
"properties": [
{
"name": "CurArcaneCharges",
"type": "int",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
"EncodedInt"
]
},
{
"name": "MaxArcaneCharges",
"type": "int",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
"EncodedInt"
]
}
]
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,22 @@
{
"version": 2,
"type": "Server.Items.ThighBoots",
"properties": [
{
"name": "CurArcaneCharges",
"type": "int",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
"EncodedInt"
]
},
{
"name": "MaxArcaneCharges",
"type": "int",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
"EncodedInt"
]
}
]
}

View file

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

View file

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

Some files were not shown because too many files have changed in this diff Show more