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-
/// [SerializableFieldAttr(typeof(CommandPropertyAttribute), AccessLevel.GameMaster)]
/// </summary>
[AttributeUsage(AttributeTargets.Field)]
[AttributeUsage(AttributeTargets.Field, AllowMultiple = true)]
public sealed class SerializableFieldAttrAttribute : Attribute
{
public string AttributeString { get; }

View file

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

View file

@ -1,6 +1,7 @@
namespace Server.Items
{
public class CrimsonCincture : HalfApron
[Serializable(0, false)]
public partial class CrimsonCincture : HalfApron
{
[Constructible]
public CrimsonCincture()
@ -11,25 +12,5 @@ namespace Server.Items
Attributes.BonusHits = 10;
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
{
public class DivineCountenance : HornedTribalMask
[Serializable(0, false)]
public partial class DivineCountenance : HornedTribalMask
{
[Constructible]
public DivineCountenance()
@ -13,10 +14,6 @@ namespace Server.Items
Attributes.LowerManaCost = 8;
}
public DivineCountenance(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1061289; // Divine Countenance
public override int ArtifactRarity => 11;
@ -28,31 +25,5 @@ namespace Server.Items
public override int InitMinHits => 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
{
public class HatOfTheMagi : WizardsHat
[Serializable(0, false)]
public partial class HatOfTheMagi : WizardsHat
{
[Constructible]
public HatOfTheMagi()
@ -12,10 +13,6 @@ namespace Server.Items
Attributes.SpellDamage = 10;
}
public HatOfTheMagi(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1061597; // Hat of the Magi
public override int ArtifactRarity => 11;
@ -25,29 +22,5 @@ namespace Server.Items
public override int InitMinHits => 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
{
public class HuntersHeaddress : DeerMask
[Serializable(0, false)]
public partial class HuntersHeaddress : DeerMask
{
[Constructible]
public HuntersHeaddress()
@ -14,10 +15,6 @@ namespace Server.Items
Attributes.AttackChance = 15;
}
public HuntersHeaddress(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1061595; // Hunter's Headdress
public override int ArtifactRarity => 11;
@ -26,27 +23,5 @@ namespace Server.Items
public override int InitMinHits => 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
{
public class SpiritOfTheTotem : BearMask
[Serializable(0, false)]
public partial class SpiritOfTheTotem : BearMask
{
[Constructible]
public SpiritOfTheTotem()
@ -12,10 +13,6 @@ namespace Server.Items
Attributes.AttackChance = 15;
}
public SpiritOfTheTotem(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1061599; // Spirit of the Totem
public override int ArtifactRarity => 11;
@ -24,28 +21,5 @@ namespace Server.Items
public override int InitMinHits => 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; }
}
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;
private int m_HitPoints;
[SerializableField(1, setter: "private")]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster, canModify: true)]")]
private AosAttributes _attributes;
private int m_MaxHitPoints;
private ClothingQuality m_Quality;
protected CraftResource m_Resource;
private int m_StrReq = -1;
[SerializableFieldSaveFlag(1)]
private bool ShouldSerializeAttributes() => !_attributes.IsEmpty;
[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)
{
Layer = layer;
Hue = hue;
m_Resource = DefaultResource;
m_Quality = ClothingQuality.Regular;
_resource = DefaultResource;
m_HitPoints = m_MaxHitPoints = Utility.RandomMinMax(InitMinHits, InitMaxHits);
_hitPoints = _maxHitPoints = Utility.RandomMinMax(InitMinHits, InitMaxHits);
Attributes = new AosAttributes(this);
ClothingAttributes = new AosArmorAttributes(this);
@ -50,71 +111,40 @@ namespace Server.Items
Resistances = new AosElementAttributes(this);
}
public BaseClothing(Serial serial) : base(serial)
{
}
[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;
[SerializableField(0)]
[CommandProperty(AccessLevel.GameMaster)]
public CraftResource Resource
{
get => m_Resource;
get => _resource;
set
{
m_Resource = value;
Hue = CraftResources.GetHue(m_Resource);
_resource = value;
Hue = CraftResources.GetHue(_resource);
InvalidateProperties();
this.MarkDirty();
}
}
[CommandProperty(AccessLevel.GameMaster, canModify: true)]
public AosAttributes Attributes { get; private set; }
[SerializableFieldSaveFlag(0)]
private bool ShouldSerializeResource() => _resource != DefaultResource;
[CommandProperty(AccessLevel.GameMaster, canModify: true)]
public AosArmorAttributes ClothingAttributes { get; private set; }
[SerializableField(10)]
[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)]
public AosSkillBonuses SkillBonuses { get; private set; }
[SerializableFieldSaveFlag(10)]
private bool ShouldSerializeStrReq() => _strReq != -1;
[CommandProperty(AccessLevel.GameMaster, canModify: true)]
public AosElementAttributes Resistances { get; private set; }
public virtual CraftResource DefaultResource => CraftResource.None;
public virtual int BasePhysicalResistance => 0;
public virtual int BaseFireResistance => 0;
@ -197,17 +227,17 @@ namespace Server.Items
public FactionItem FactionItemState
{
get => m_FactionState;
get => _factionState;
set
{
m_FactionState = value;
_factionState = value;
if (m_FactionState == null)
if (_factionState == null)
{
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
{
var info = CraftResources.GetInfo(m_Resource);
var info = CraftResources.GetInfo(_resource);
var resourceType = info.ResourceTypes?[0] ?? item.Resources[0].ItemType;
@ -257,41 +287,36 @@ namespace Server.Items
public virtual bool CanFortify => true;
[CommandProperty(AccessLevel.GameMaster)]
public int MaxHitPoints
{
get => m_MaxHitPoints;
set
{
m_MaxHitPoints = value;
InvalidateProperties();
}
}
[EncodedInt]
[SerializableField(6)]
[CommandProperty(AccessLevel.GameMaster)]
public int HitPoints
{
get => m_HitPoints;
get => _hitPoints;
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();
}
else if (m_HitPoints > MaxHitPoints)
else if (_hitPoints > MaxHitPoints)
{
m_HitPoints = MaxHitPoints;
_hitPoints = MaxHitPoints;
}
InvalidateProperties();
this.MarkDirty();
}
}
}
[SerializableFieldSaveFlag(6)]
private bool ShouldSerializeHitPoints() => _hitPoints != 0;
public virtual int InitMinHits => 0;
public virtual int InitMaxHits => 0;
@ -321,9 +346,9 @@ namespace Server.Items
wear = Utility.Random(2);
}
if (wear > 0 && m_MaxHitPoints > 0)
if (wear > 0 && _maxHitPoints > 0)
{
if (m_HitPoints >= wear)
if (_hitPoints >= wear)
{
HitPoints -= wear;
wear = 0;
@ -336,7 +361,7 @@ namespace Server.Items
if (wear > 0)
{
if (m_MaxHitPoints > wear)
if (_maxHitPoints > wear)
{
MaxHitPoints -= wear;
@ -362,20 +387,22 @@ namespace Server.Items
{
var scale = 100 + ClothingAttributes.DurabilityBonus;
m_HitPoints = (m_HitPoints * 100 + (scale - 1)) / scale;
m_MaxHitPoints = (m_MaxHitPoints * 100 + (scale - 1)) / scale;
_hitPoints = (_hitPoints * 100 + (scale - 1)) / scale;
_maxHitPoints = (_maxHitPoints * 100 + (scale - 1)) / scale;
InvalidateProperties();
this.MarkDirty();
}
public void ScaleDurability()
{
var scale = 100 + ClothingAttributes.DurabilityBonus;
m_HitPoints = (m_HitPoints * scale + 99) / 100;
m_MaxHitPoints = (m_MaxHitPoints * scale + 99) / 100;
_hitPoints = (_hitPoints * scale + 99) / 100;
_maxHitPoints = (_maxHitPoints * scale + 99) / 100;
InvalidateProperties();
this.MarkDirty();
}
public override bool AllowSecureTrade(Mobile from, Mobile to, Mobile newOwner, bool accepted) =>
@ -445,15 +472,7 @@ namespace Server.Items
return base.CanEquip(from);
}
public int ComputeStatReq(StatType type)
{
int v;
// if (type == StatType.Str)
v = StrRequirement;
return AOS.Scale(v, 100 - GetLowerStatReq());
}
public int ComputeStatReq(StatType type) => AOS.Scale(StrRequirement, 100 - GetLowerStatReq());
public int ComputeStatBonus(StatType type) =>
type switch
@ -553,15 +572,7 @@ namespace Server.Items
}
}
public int GetLowerStatReq()
{
if (!Core.AOS)
{
return 0;
}
return ClothingAttributes.LowerStatReq;
}
public int GetLowerStatReq() => !Core.AOS ? 0 : ClothingAttributes.LowerStatReq;
public override void OnAdded(IEntity parent)
{
@ -635,7 +646,7 @@ namespace Server.Items
public override void AddNameProperty(ObjectPropertyList list)
{
var oreType = m_Resource switch
var oreType = _resource switch
{
CraftResource.DullCopper => 1053108,
CraftResource.ShadowIron => 1053107,
@ -675,17 +686,17 @@ namespace Server.Items
{
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
}
if (m_Quality == ClothingQuality.Exceptional)
if (_quality == ClothingQuality.Exceptional)
{
list.Add(1060636); // exceptional
}
@ -851,9 +862,9 @@ namespace Server.Items
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;
}
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)
@ -897,14 +908,14 @@ namespace Server.Items
}
}
if (m_FactionState != null)
if (_factionState != null)
{
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();
}
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;
}
}
private static bool GetSaveFlag(SaveFlag flags, SaveFlag toGet) => (flags & toGet) != 0;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
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);
}
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();
_resource = (CraftResource)reader.ReadEncodedInt();
}
else
{
m_Resource = DefaultResource;
_resource = DefaultResource;
}
Attributes = new AosAttributes(this);
if (GetSaveFlag(flags, SaveFlag.Attributes))
if (GetSaveFlag(flags, OldSaveFlag.Attributes))
{
Attributes.Deserialize(reader);
}
ClothingAttributes = new AosArmorAttributes(this);
if (GetSaveFlag(flags, SaveFlag.ClothingAttributes))
if (GetSaveFlag(flags, OldSaveFlag.ClothingAttributes))
{
ClothingAttributes.Deserialize(reader);
}
SkillBonuses = new AosSkillBonuses(this);
if (GetSaveFlag(flags, SaveFlag.SkillBonuses))
if (GetSaveFlag(flags, OldSaveFlag.SkillBonuses))
{
SkillBonuses.Deserialize(reader);
}
Resistances = new AosElementAttributes(this);
if (GetSaveFlag(flags, SaveFlag.Resistances))
if (GetSaveFlag(flags, OldSaveFlag.Resistances))
{
Resistances.Deserialize(reader);
}
if (GetSaveFlag(flags, SaveFlag.MaxHitPoints))
if (GetSaveFlag(flags, OldSaveFlag.MaxHitPoints))
{
m_MaxHitPoints = reader.ReadEncodedInt();
_maxHitPoints = reader.ReadEncodedInt();
}
if (GetSaveFlag(flags, SaveFlag.HitPoints))
if (GetSaveFlag(flags, OldSaveFlag.HitPoints))
{
m_HitPoints = reader.ReadEncodedInt();
_hitPoints = reader.ReadEncodedInt();
}
if (GetSaveFlag(flags, SaveFlag.Crafter))
if (GetSaveFlag(flags, OldSaveFlag.Crafter))
{
m_Crafter = reader.ReadEntity<Mobile>();
_crafter = reader.ReadEntity<Mobile>();
}
if (GetSaveFlag(flags, SaveFlag.Quality))
if (GetSaveFlag(flags, OldSaveFlag.Quality))
{
m_Quality = (ClothingQuality)reader.ReadEncodedInt();
_quality = (ClothingQuality)reader.ReadEncodedInt();
}
else
{
m_Quality = ClothingQuality.Regular;
_quality = ClothingQuality.Regular;
}
if (GetSaveFlag(flags, SaveFlag.StrReq))
if (GetSaveFlag(flags, OldSaveFlag.StrReq))
{
m_StrReq = reader.ReadEncodedInt();
_strReq = reader.ReadEncodedInt();
}
else
{
m_StrReq = -1;
_strReq = -1;
}
if (GetSaveFlag(flags, SaveFlag.PlayerConstructed))
PlayerConstructed = GetSaveFlag(flags, OldSaveFlag.PlayerConstructed);
}
[AfterDeserialization]
private void AfterDeserialization()
{
PlayerConstructed = true;
}
break;
}
case 4:
if (_maxHitPoints == 0 && _hitPoints == 0)
{
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);
_hitPoints = _maxHitPoints = Utility.RandomMinMax(InitMinHits, InitMaxHits);
}
if (Parent is Mobile parent)
@ -1184,7 +1046,7 @@ namespace Server.Items
}
[Flags]
private enum SaveFlag
private enum OldSaveFlag
{
None = 0x00000000,
Resource = 0x00000001,

View file

@ -2,116 +2,63 @@ using Server.Engines.VeteranRewards;
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(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]
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]
public Cloak(int hue = 0) : base(0x1515, hue) => Weight = 5.0;
public Cloak(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public int MaxArcaneCharges
{
get => m_MaxArcaneCharges;
set
{
m_MaxArcaneCharges = value;
InvalidateProperties();
Update();
}
}
[EncodedInt]
[SerializableField(0)]
[CommandProperty(AccessLevel.GameMaster)]
public int CurArcaneCharges
{
get => m_CurArcaneCharges;
get => _curArcaneCharges;
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();
Update();
}
}
[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)
{
base.Serialize(writer);
writer.Write(1); // version
if (IsArcane)
{
writer.Write(true);
writer.Write(m_CurArcaneCharges);
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:
private void Deserialize(IGenericReader reader, int version)
{
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;
_curArcaneCharges = reader.ReadInt();
_maxArcaneCharges = reader.ReadInt();
}
}
@ -126,7 +73,7 @@ namespace Server.Items
ItemID = 0x1515;
}
if (IsArcane && CurArcaneCharges == 0)
if (IsArcane && _curArcaneCharges == 0)
{
Hue = 0;
}
@ -138,7 +85,7 @@ namespace Server.Items
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)
{
LabelTo(from, 1061837, $"{m_CurArcaneCharges}\t{m_MaxArcaneCharges}");
LabelTo(from, 1061837, $"{_curArcaneCharges}\t{_maxArcaneCharges}");
}
}
public void Flip()
{
if (ItemID == 0x1515)
ItemID = ItemID switch
{
ItemID = 0x1530;
}
else if (ItemID == 0x1530)
{
ItemID = 0x1515;
}
0x1515 => 0x1530,
0x1530 => 0x1515,
_ => ItemID
};
}
}
[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]
public RewardCloak(int hue = 0, int labelNumber = 0) : base(0x1515, hue)
@ -176,42 +129,13 @@ namespace Server.Items
Weight = 5.0;
LootType = LootType.Blessed;
m_LabelNumber = labelNumber;
_number = labelNumber;
}
public RewardCloak(Serial serial) : base(serial)
{
}
[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 LabelNumber => _number > 0 ? _number : base.LabelNumber;
public override int BasePhysicalResistance => 3;
[CommandProperty(AccessLevel.GameMaster)]
public bool IsRewardItem { get; set; }
public override void OnAdded(IEntity parent)
{
base.OnAdded(parent);
@ -244,51 +168,18 @@ namespace Server.Items
if (Core.ML && IsRewardItem)
{
list.Add(
RewardSystem.GetRewardYearLabel(
this,
new object[] { Hue, m_LabelNumber }
)
); // X Year Veteran Reward
// X Year Veteran Reward
list.Add(RewardSystem.GetRewardYearLabel(this, new object[] { Hue, _number }));
}
}
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)
{
mobile.VirtualArmorMod += 2;
@ -297,27 +188,10 @@ namespace Server.Items
}
[Flippable(0x230A, 0x2309)]
public class FurCape : BaseCloak
[Serializable(0, false)]
public partial class FurCape : BaseCloak
{
[Constructible]
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
{
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(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)
{
base.AddEquipInfoAttributes(from, attrs);
@ -84,15 +57,12 @@ namespace Server.Items
}
[Flippable(0x2798, 0x27E3)]
public class Kasa : BaseHat
[Serializable(0, false)]
public partial class Kasa : BaseHat
{
[Constructible]
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 BaseFireResistance => 5;
public override int BaseColdResistance => 9;
@ -101,32 +71,15 @@ namespace Server.Items
public override int InitMinHits => 20;
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)]
public class ClothNinjaHood : BaseHat
[Serializable(0, false)]
public partial class ClothNinjaHood : BaseHat
{
[Constructible]
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 BaseFireResistance => 3;
public override int BaseColdResistance => 6;
@ -135,32 +88,15 @@ namespace Server.Items
public override int InitMinHits => 20;
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)]
public class FlowerGarland : BaseHat
[Serializable(0, false)]
public partial class FlowerGarland : BaseHat
{
[Constructible]
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 BaseFireResistance => 3;
public override int BaseColdResistance => 6;
@ -169,31 +105,14 @@ namespace Server.Items
public override int InitMinHits => 20;
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]
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 BaseFireResistance => 5;
public override int BaseColdResistance => 9;
@ -202,31 +121,14 @@ namespace Server.Items
public override int InitMinHits => 20;
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]
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 BaseFireResistance => 5;
public override int BaseColdResistance => 9;
@ -235,31 +137,14 @@ namespace Server.Items
public override int InitMinHits => 20;
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]
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 BaseFireResistance => 5;
public override int BaseColdResistance => 9;
@ -268,31 +153,14 @@ namespace Server.Items
public override int InitMinHits => 20;
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]
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 BaseFireResistance => 3;
public override int BaseColdResistance => 5;
@ -301,31 +169,14 @@ namespace Server.Items
public override int InitMinHits => Core.ML ? 14 : 7;
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]
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 BaseFireResistance => 3;
public override int BaseColdResistance => 5;
@ -334,31 +185,14 @@ namespace Server.Items
public override int InitMinHits => 20;
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]
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 BaseFireResistance => 3;
public override int BaseColdResistance => 8;
@ -373,31 +207,14 @@ namespace Server.Items
from.SendLocalizedMessage(sender.FailMessage);
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]
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 BaseFireResistance => 6;
public override int BaseColdResistance => 8;
@ -412,31 +229,14 @@ namespace Server.Items
from.SendLocalizedMessage(sender.FailMessage);
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]
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 BaseFireResistance => 9;
public override int BaseColdResistance => 0;
@ -451,31 +251,14 @@ namespace Server.Items
from.SendLocalizedMessage(sender.FailMessage);
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]
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 BaseFireResistance => 0;
public override int BaseColdResistance => 6;
@ -490,31 +273,14 @@ namespace Server.Items
from.SendLocalizedMessage(sender.FailMessage);
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]
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 BaseFireResistance => 5;
public override int BaseColdResistance => 9;
@ -523,31 +289,14 @@ namespace Server.Items
public override int InitMinHits => 20;
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]
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 BaseFireResistance => 5;
public override int BaseColdResistance => 9;
@ -556,31 +305,14 @@ namespace Server.Items
public override int InitMinHits => 20;
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]
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 BaseFireResistance => 1;
public override int BaseColdResistance => 7;
@ -623,26 +355,10 @@ namespace Server.Items
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]
public SavageMask() : this(GetRandomHue())
@ -652,10 +368,6 @@ namespace Server.Items
[Constructible]
public SavageMask(int hue) : base(0x154B, hue) => Weight = 2.0;
public SavageMask(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 3;
public override int BaseFireResistance => 0;
public override int BaseColdResistance => 6;
@ -682,34 +394,14 @@ namespace Server.Items
from.SendLocalizedMessage(sender.FailMessage);
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]
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 BaseFireResistance => 5;
public override int BaseColdResistance => 9;
@ -718,31 +410,14 @@ namespace Server.Items
public override int InitMinHits => 20;
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]
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 BaseFireResistance => 5;
public override int BaseColdResistance => 9;
@ -757,31 +432,14 @@ namespace Server.Items
public override int BaseStrBonus => -5;
public override int BaseDexBonus => -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]
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 BaseFireResistance => 5;
public override int BaseColdResistance => 9;
@ -790,31 +448,14 @@ namespace Server.Items
public override int InitMinHits => 20;
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]
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 BaseFireResistance => 5;
public override int BaseColdResistance => 9;
@ -823,31 +464,14 @@ namespace Server.Items
public override int InitMinHits => 20;
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]
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 BaseFireResistance => 5;
public override int BaseColdResistance => 9;
@ -856,31 +480,14 @@ namespace Server.Items
public override int InitMinHits => 20;
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]
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 BaseFireResistance => 5;
public override int BaseColdResistance => 9;
@ -889,19 +496,5 @@ namespace Server.Items
public override int InitMinHits => 20;
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
{
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(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)]
public class BodySash : BaseMiddleTorso
public partial class BodySash : BaseMiddleTorso
{
[Constructible]
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)]
public class FullApron : BaseMiddleTorso
public partial class FullApron : BaseMiddleTorso
{
[Constructible]
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)]
public class Doublet : BaseMiddleTorso
public partial class Doublet : BaseMiddleTorso
{
[Constructible]
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)]
public class Surcoat : BaseMiddleTorso
public partial class Surcoat : BaseMiddleTorso
{
[Constructible]
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)]
public class Tunic : BaseMiddleTorso
public partial class Tunic : BaseMiddleTorso
{
[Constructible]
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)]
public class FormalShirt : BaseMiddleTorso
public partial class FormalShirt : BaseMiddleTorso
{
[Constructible]
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)]
public class JesterSuit : BaseMiddleTorso
public partial class JesterSuit : BaseMiddleTorso
{
[Constructible]
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)]
public class JinBaori : BaseMiddleTorso
public partial class JinBaori : BaseMiddleTorso
{
[Constructible]
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
{
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(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)]
public class FurSarong : BaseOuterLegs
public partial class FurSarong : BaseOuterLegs
{
[Constructible]
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)]
public class Skirt : BaseOuterLegs
public partial class Skirt : BaseOuterLegs
{
[Constructible]
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)]
public class Kilt : BaseOuterLegs
public partial class Kilt : BaseOuterLegs
{
[Constructible]
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)]
public class Hakama : BaseOuterLegs
public partial class Hakama : BaseOuterLegs
{
[Constructible]
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.Runtime.CompilerServices;
using Server.Engines.VeteranRewards;
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(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)]
public class GildedDress : BaseOuterTorso
public partial class GildedDress : BaseOuterTorso
{
[Constructible]
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)]
public class FancyDress : BaseOuterTorso
public partial class FancyDress : BaseOuterTorso
{
[Constructible]
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 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]
public DeathRobe()
@ -92,10 +54,6 @@ namespace Server.Items
BeginDecay(m_DefaultDecayTime);
}
public DeathRobe(Serial serial) : base(serial)
{
}
public override bool DisplayLootType => false;
public new bool Scissor(Mobile from, Scissors scissors)
@ -109,14 +67,18 @@ namespace Server.Items
BeginDecay(m_DefaultDecayTime);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private void StopTimer()
{
_decayTimer?.Stop();
_decayTimer = null;
}
private void BeginDecay(TimeSpan delay)
{
m_DecayTimer?.Stop();
m_DecayTime = Core.Now + delay;
m_DecayTimer = new InternalTimer(this, delay);
m_DecayTimer.Start();
StopTimer();
_decayTimer = new InternalTimer(this, delay);
_decayTimer.Start();
}
public override bool OnDroppedToWorld(Mobile from, Point3D p)
@ -126,101 +88,70 @@ namespace Server.Items
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();
m_DecayTimer = null;
StopTimer();
return true;
}
return false;
}
public override bool OnDroppedToMobile(Mobile from, Mobile target)
{
StopTimer();
return true;
}
public override void OnAfterDelete()
{
m_DecayTimer?.Stop();
m_DecayTimer = null;
StopTimer();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(2); // version
writer.Write(m_DecayTimer != null);
if (m_DecayTimer != null)
{
writer.WriteDeltaTime(m_DecayTime);
}
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
switch (version)
{
case 2:
private void Deserialize(IGenericReader reader, int version)
{
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;
var delay = reader.ReadDeltaTime();
BeginDecay(delay - Core.Now);
}
}
private class InternalTimer : Timer
{
private readonly DeathRobe m_Robe;
private readonly DeathRobe _robe;
public InternalTimer(DeathRobe c, TimeSpan delay) : base(delay)
{
m_Robe = c;
}
public InternalTimer(DeathRobe c, TimeSpan delay) : base(delay) => _robe = c;
protected override void OnTick()
{
if (m_Robe.Parent != null || m_Robe.IsLockedDown)
if (_robe.Parent != null || _robe.IsLockedDown)
{
Stop();
_robe._decayTimer = null;
}
else
{
m_Robe.Delete();
_robe.Delete();
}
}
}
}
[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]
public RewardRobe(int hue = 0, int labelNumber = 0) : base(0x1F03, hue)
@ -228,42 +159,13 @@ namespace Server.Items
Weight = 3.0;
LootType = LootType.Blessed;
m_LabelNumber = labelNumber;
_number = labelNumber;
}
public RewardRobe(Serial serial) : base(serial)
{
}
[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 LabelNumber => _number > 0 ? _number : base.LabelNumber;
public override int BasePhysicalResistance => 3;
[CommandProperty(AccessLevel.GameMaster)]
public bool IsRewardItem { get; set; }
public override void OnAdded(IEntity parent)
{
base.OnAdded(parent);
@ -296,51 +198,23 @@ namespace Server.Items
if (Core.ML && IsRewardItem)
{
// X Year Veteran Reward
list.Add(
RewardSystem.GetRewardYearLabel(
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)
{
mobile.VirtualArmorMod += 2;
@ -349,9 +223,17 @@ namespace Server.Items
}
[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]
public RewardDress(int hue = 0, int labelNumber = 0) : base(0x1F01, hue)
@ -359,42 +241,13 @@ namespace Server.Items
Weight = 2.0;
LootType = LootType.Blessed;
m_LabelNumber = labelNumber;
_number = labelNumber;
}
public RewardDress(Serial serial) : base(serial)
{
}
[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 LabelNumber => _number > 0 ? _number : base.LabelNumber;
public override int BasePhysicalResistance => 3;
[CommandProperty(AccessLevel.GameMaster)]
public bool IsRewardItem { get; set; }
public override void OnAdded(IEntity parent)
{
base.OnAdded(parent);
@ -425,53 +278,25 @@ namespace Server.Items
{
base.GetProperties(list);
if (IsRewardItem)
if (_isRewardItem)
{
// X Year Veteran Reward
list.Add(
RewardSystem.GetRewardYearLabel(
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)
{
mobile.VirtualArmorMod += 2;
@ -480,85 +305,54 @@ namespace Server.Items
}
[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]
public Robe(int hue = 0) : base(0x1F03, hue) => Weight = 3.0;
public Robe(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public int MaxArcaneCharges
{
get => m_MaxArcaneCharges;
set
{
m_MaxArcaneCharges = value;
InvalidateProperties();
Update();
}
}
[EncodedInt]
[SerializableField(0)]
[CommandProperty(AccessLevel.GameMaster)]
public int CurArcaneCharges
{
get => m_CurArcaneCharges;
get => _curArcaneCharges;
set
{
m_CurArcaneCharges = value;
_curArcaneCharges = value;
InvalidateProperties();
Update();
this.MarkDirty();
}
}
[EncodedInt]
[SerializableField(1)]
[CommandProperty(AccessLevel.GameMaster)]
public int MaxArcaneCharges
{
get => _maxArcaneCharges;
set
{
_maxArcaneCharges = value;
InvalidateProperties();
Update();
this.MarkDirty();
}
}
[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)
{
base.Serialize(writer);
writer.Write(1); // version
if (IsArcane)
{
writer.Write(true);
writer.Write(m_CurArcaneCharges);
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:
private void Deserialize(IGenericReader reader, int version)
{
if (reader.ReadBool())
{
m_CurArcaneCharges = reader.ReadInt();
m_MaxArcaneCharges = reader.ReadInt();
if (Hue == 2118)
{
Hue = ArcaneGem.DefaultArcaneHue;
}
}
break;
}
_curArcaneCharges = reader.ReadInt();
_maxArcaneCharges = reader.ReadInt();
}
}
@ -585,7 +379,7 @@ namespace Server.Items
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)
{
LabelTo(from, 1061837, $"{m_CurArcaneCharges}\t{m_MaxArcaneCharges}");
LabelTo(from, 1061837, $"{_curArcaneCharges}\t{_maxArcaneCharges}");
}
}
public void Flip()
{
if (ItemID == 0x1F03)
ItemID = ItemID switch
{
ItemID = 0x1F04;
}
else if (ItemID == 0x1F04)
{
ItemID = 0x1F03;
}
0x1F03 => 0x1F04,
0x1F04 => 0x1F03,
_ => ItemID
};
}
}
public class MonkRobe : BaseOuterTorso
[Serializable(0, false)]
public partial class MonkRobe : BaseOuterTorso
{
[Constructible]
public MonkRobe(int hue = 0x21E) : base(0x2687, hue)
@ -621,10 +414,6 @@ namespace Server.Items
StrRequirement = 0;
}
public MonkRobe(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1076584; // A monk's robe
public override bool CanBeBlessed => false;
@ -633,209 +422,65 @@ namespace Server.Items
from.SendLocalizedMessage(sender.FailMessage);
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)]
public class PlainDress : BaseOuterTorso
[Serializable(0, false)]
public partial class PlainDress : BaseOuterTorso
{
[Constructible]
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)]
public class Kamishimo : BaseOuterTorso
[Serializable(0, false)]
public partial class Kamishimo : BaseOuterTorso
{
[Constructible]
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)]
public class HakamaShita : BaseOuterTorso
[Serializable(0, false)]
public partial class HakamaShita : BaseOuterTorso
{
[Constructible]
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)]
public class MaleKimono : BaseOuterTorso
[Serializable(0, false)]
public partial class MaleKimono : BaseOuterTorso
{
[Constructible]
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)]
public class FemaleKimono : BaseOuterTorso
[Serializable(0, false)]
public partial class FemaleKimono : BaseOuterTorso
{
[Constructible]
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)]
public class MaleElvenRobe : BaseOuterTorso
[Serializable(0)]
public partial class MaleElvenRobe : BaseOuterTorso
{
[Constructible]
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)]
public class FemaleElvenRobe : BaseOuterTorso
[Serializable(0)]
public partial class FemaleElvenRobe : BaseOuterTorso
{
[Constructible]
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 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
{
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(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)]
public class ShortPants : BasePants
[Serializable(0, false)]
public partial class ShortPants : BasePants
{
[Constructible]
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)]
public class LongPants : BasePants
[Serializable(0, false)]
public partial class LongPants : BasePants
{
[Constructible]
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)]
public class TattsukeHakama : BasePants
[Serializable(0, false)]
public partial class TattsukeHakama : BasePants
{
[Constructible]
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)]
public class ElvenPants : BasePants
[Serializable(0)]
public partial class ElvenPants : BasePants
{
[Constructible]
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 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
{
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(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)]
public class FancyShirt : BaseShirt
[Serializable(0, false)]
public partial class FancyShirt : BaseShirt
{
[Constructible]
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)]
public class Shirt : BaseShirt
[Serializable(0, false)]
public partial class Shirt : BaseShirt
{
[Constructible]
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)]
public class ClothNinjaJacket : BaseShirt
[Serializable(0, false)]
public partial class ClothNinjaJacket : BaseShirt
{
[Constructible]
public ClothNinjaJacket(int hue = 0) : base(0x2794, hue)
@ -89,76 +34,21 @@ namespace Server.Items
Weight = 5.0;
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]
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 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]
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
{
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(Serial serial) : base(serial)
{
}
public override bool Scissor(Mobile from, Scissors scissors)
{
if (DefaultResource == CraftResource.None)
@ -20,171 +17,77 @@ namespace Server.Items
from.SendLocalizedMessage(502440); // Scissors can not be used on that to produce anything.
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)]
public class FurBoots : BaseShoes
[Serializable(0, false)]
public partial class FurBoots : BaseShoes
{
[Constructible]
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)]
public class Boots : BaseShoes
[Serializable(0, false)]
public partial class Boots : BaseShoes
{
[Constructible]
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 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]
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]
public ThighBoots(int hue = 0) : base(0x1711, hue) => Weight = 4.0;
public ThighBoots(Serial serial) : base(serial)
{
}
public override CraftResource DefaultResource => CraftResource.RegularLeather;
[CommandProperty(AccessLevel.GameMaster)]
public int MaxArcaneCharges
{
get => m_MaxArcaneCharges;
set
{
m_MaxArcaneCharges = value;
InvalidateProperties();
Update();
}
}
[EncodedInt]
[SerializableField(0)]
[CommandProperty(AccessLevel.GameMaster)]
public int CurArcaneCharges
{
get => m_CurArcaneCharges;
get => _curArcaneCharges;
set
{
m_CurArcaneCharges = value;
_curArcaneCharges = value;
InvalidateProperties();
Update();
this.MarkDirty();
}
}
[EncodedInt]
[SerializableField(1)]
[CommandProperty(AccessLevel.GameMaster)]
public int MaxArcaneCharges
{
get => _maxArcaneCharges;
set
{
_maxArcaneCharges = value;
InvalidateProperties();
Update();
this.MarkDirty();
}
}
[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)
{
base.Serialize(writer);
writer.Write(1); // version
if (IsArcane)
{
writer.Write(true);
writer.Write(m_CurArcaneCharges);
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:
private void Deserialize(IGenericReader reader, int version)
{
if (reader.ReadBool())
{
m_CurArcaneCharges = reader.ReadInt();
m_MaxArcaneCharges = reader.ReadInt();
if (Hue == 2118)
{
Hue = ArcaneGem.DefaultArcaneHue;
}
}
break;
}
_curArcaneCharges = reader.ReadInt();
_maxArcaneCharges = reader.ReadInt();
}
}
@ -194,7 +97,7 @@ namespace Server.Items
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)
{
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()
{
if (ItemID == 0x1711)
ItemID = ItemID switch
{
ItemID = 0x1712;
}
else if (ItemID == 0x1712)
{
ItemID = 0x1711;
}
0x1711 => 0x1712,
0x1712 => 0x1711,
_ => ItemID
};
}
}
[Flippable(0x170f, 0x1710)]
public class Shoes : BaseShoes
[Serializable(0, false)]
public partial class Shoes : BaseShoes
{
[Constructible]
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 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)]
public class Sandals : BaseShoes
[Serializable(0, false)]
public partial class Sandals : BaseShoes
{
[Constructible]
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 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)]
public class NinjaTabi : BaseShoes
[Serializable(0, false)]
public partial class NinjaTabi : BaseShoes
{
[Constructible]
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)]
public class SamuraiTabi : BaseShoes
[Serializable(0, false)]
public partial class SamuraiTabi : BaseShoes
{
[Constructible]
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)]
public class Waraji : BaseShoes
[Serializable(0, false)]
public partial class Waraji : BaseShoes
{
[Constructible]
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)]
public class ElvenBoots : BaseShoes
[Serializable(0)]
public partial class ElvenBoots : BaseShoes
{
[Constructible]
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 Race RequiredRace => Race.Elf;
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
{
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(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)]
public class HalfApron : BaseWaist
[Serializable(0, false)]
public partial class HalfApron : BaseWaist
{
[Constructible]
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)]
public class Obi : BaseWaist
[Serializable(0, false)]
public partial class Obi : BaseWaist
{
[Constructible]
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)]
public class WoodlandBelt : BaseWaist
[Serializable(0)]
public partial class WoodlandBelt : BaseWaist
{
[Constructible]
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 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.
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)
{
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