From 77181678da687cad470b7d470bae2d9c5649614e Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Sun, 27 Feb 2022 03:18:17 -0800 Subject: [PATCH] fix: Converts BaseArmor and BaseClothing to use string crafter fields (#928) --- .../Items/Armor/BaseArmor.Migrations.cs | 165 +++++++++++++ Projects/UOContent/Items/Armor/BaseArmor.cs | 147 +----------- .../Items/Clothing/BaseClothing.Migrations.cs | 88 +++++++ .../UOContent/Items/Clothing/BaseClothing.cs | 87 +------ Projects/UOContent/Items/Misc/ArcaneGem.cs | 4 +- .../UOContent/Items/Weapons/BaseWeapon.cs | 5 +- .../Migrations/Server.Items.BaseArmor.v9.json | 216 ++++++++++++++++++ .../Server.Items.BaseClothing.v7.json | 99 ++++++++ .../Mobiles/Special/DummySpecific.cs | 58 ++--- 9 files changed, 610 insertions(+), 259 deletions(-) create mode 100644 Projects/UOContent/Items/Armor/BaseArmor.Migrations.cs create mode 100644 Projects/UOContent/Items/Clothing/BaseClothing.Migrations.cs create mode 100644 Projects/UOContent/Migrations/Server.Items.BaseArmor.v9.json create mode 100644 Projects/UOContent/Migrations/Server.Items.BaseClothing.v7.json diff --git a/Projects/UOContent/Items/Armor/BaseArmor.Migrations.cs b/Projects/UOContent/Items/Armor/BaseArmor.Migrations.cs new file mode 100644 index 000000000..2e4906f52 --- /dev/null +++ b/Projects/UOContent/Items/Armor/BaseArmor.Migrations.cs @@ -0,0 +1,165 @@ +using AMA = Server.Items.ArmorMeditationAllowance; + +namespace Server.Items; + +public partial class BaseArmor +{ + private void MigrateFrom(V8Content content) + { + _attributes = content.Attributes ?? AttributesDefaultValue(); + _armorAttributes = content.ArmorAttributes ?? ArmorAttributesDefaultValue(); + _physicalBonus = content.PhysicalBonus ?? 0; + _fireBonus = content.FireBonus ?? 0; + _coldBonus = content.ColdBonus ?? 0; + _poisonBonus = content.PoisonBonus ?? 0; + _energyBonus = content.EnergyBonus ?? 0; + _identified = content.Identified; + _maxHitPoints = content.MaxHitPoints ?? 0; + _hitPoints = content.HitPoints ?? 0; + _crafter = content.Crafter?.RawName; // Convert from Mobile -> String via RawName + _quality = content.Quality ?? ArmorQuality.Regular; + _durability = content.Durability ?? ArmorDurabilityLevel.Regular; + _rawResource = content.RawResource ?? DefaultResource; + _armorBase = content.BaseArmorRating ?? -1; + _strBonus = content.StrBonus ?? -1; + _dexBonus = content.DexBonus ?? -1; + _intBonus = content.IntBonus ?? -1; + _strReq = content.StrRequirement ?? -1; + _dexReq = content.DexRequirement ?? -1; + _intReq = content.IntRequirement ?? -1; + _meditate = content.MeditationAllowance ?? (AMA)(-1); + _skillBonuses = content.SkillBonuses ?? SkillBonusesDefaultValue(); + _playerConstructed = content.PlayerConstructed; + } + + // Version 7 (pre-codegen) + private void Deserialize(IGenericReader reader, int version) + { + var flags = (OldSaveFlag)reader.ReadEncodedInt(); + + Attributes = new AosAttributes(this); + + if (GetSaveFlag(flags, OldSaveFlag.Attributes)) + { + Attributes.Deserialize(reader); + } + + ArmorAttributes = new AosArmorAttributes(this); + + if (GetSaveFlag(flags, OldSaveFlag.ArmorAttributes)) + { + ArmorAttributes.Deserialize(reader); + } + + if (GetSaveFlag(flags, OldSaveFlag.PhysicalBonus)) + { + _physicalBonus = reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.FireBonus)) + { + _fireBonus = reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.ColdBonus)) + { + _coldBonus = reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.PoisonBonus)) + { + _poisonBonus = reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.EnergyBonus)) + { + _energyBonus = reader.ReadEncodedInt(); + } + + _identified = GetSaveFlag(flags, OldSaveFlag.Identified); + + if (GetSaveFlag(flags, OldSaveFlag.MaxHitPoints)) + { + _maxHitPoints = reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.HitPoints)) + { + _hitPoints = reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.Crafter)) + { + _crafter = reader.ReadEntity()?.RawName; + } + + if (GetSaveFlag(flags, OldSaveFlag.Quality)) + { + _quality = (ArmorQuality)reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.Durability)) + { + _durability = (ArmorDurabilityLevel)reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.Protection)) + { + _protection = (ArmorProtectionLevel)reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.Resource)) + { + _rawResource = (CraftResource)reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.BaseArmor)) + { + _armorBase = reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.StrBonus)) + { + _strBonus = reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.DexBonus)) + { + _dexBonus = reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.IntBonus)) + { + _intBonus = reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.StrReq)) + { + _strReq = reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.DexReq)) + { + _dexReq = reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.IntReq)) + { + _intReq = reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.MedAllowance)) + { + _meditate = (AMA)reader.ReadEncodedInt(); + } + + SkillBonuses = new AosSkillBonuses(this); + + if (GetSaveFlag(flags, OldSaveFlag.SkillBonuses)) + { + SkillBonuses.Deserialize(reader); + } + + PlayerConstructed = GetSaveFlag(flags, OldSaveFlag.PlayerConstructed); + } +} diff --git a/Projects/UOContent/Items/Armor/BaseArmor.cs b/Projects/UOContent/Items/Armor/BaseArmor.cs index dd79ac923..faba5062c 100644 --- a/Projects/UOContent/Items/Armor/BaseArmor.cs +++ b/Projects/UOContent/Items/Armor/BaseArmor.cs @@ -10,7 +10,7 @@ using AMT = Server.Items.ArmorMaterialType; namespace Server.Items { - [Serializable(8, false)] + [Serializable(9, false)] public abstract partial class BaseArmor : Item, IScissorable, IFactionItem, ICraftable, IWearableDurability { [SerializableField(0, setter: "private")] @@ -99,7 +99,7 @@ namespace Server.Items [InvalidateProperties] [SerializableField(10)] [SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")] - private Mobile _crafter; + private string _crafter; [SerializableFieldSaveFlag(10)] private bool ShouldSerializeCrafter() => _crafter != null; @@ -572,7 +572,7 @@ namespace Server.Items if (makersMark) { - Crafter = from; + Crafter = from.RawName; } var resourceType = typeRes ?? craftItem.Resources[0].ItemType; @@ -1076,143 +1076,6 @@ namespace Server.Items m?.CheckStatTimers(); } - private void Deserialize(IGenericReader reader, int version) - { - var flags = (OldSaveFlag)reader.ReadEncodedInt(); - - Attributes = new AosAttributes(this); - - if (GetSaveFlag(flags, OldSaveFlag.Attributes)) - { - Attributes.Deserialize(reader); - } - - ArmorAttributes = new AosArmorAttributes(this); - - if (GetSaveFlag(flags, OldSaveFlag.ArmorAttributes)) - { - ArmorAttributes.Deserialize(reader); - } - - if (GetSaveFlag(flags, OldSaveFlag.PhysicalBonus)) - { - _physicalBonus = reader.ReadEncodedInt(); - } - - if (GetSaveFlag(flags, OldSaveFlag.FireBonus)) - { - _fireBonus = reader.ReadEncodedInt(); - } - - if (GetSaveFlag(flags, OldSaveFlag.ColdBonus)) - { - _coldBonus = reader.ReadEncodedInt(); - } - - if (GetSaveFlag(flags, OldSaveFlag.PoisonBonus)) - { - _poisonBonus = reader.ReadEncodedInt(); - } - - if (GetSaveFlag(flags, OldSaveFlag.EnergyBonus)) - { - _energyBonus = reader.ReadEncodedInt(); - } - - _identified = GetSaveFlag(flags, OldSaveFlag.Identified); - - if (GetSaveFlag(flags, OldSaveFlag.MaxHitPoints)) - { - _maxHitPoints = reader.ReadEncodedInt(); - } - - if (GetSaveFlag(flags, OldSaveFlag.HitPoints)) - { - _hitPoints = reader.ReadEncodedInt(); - } - - if (GetSaveFlag(flags, OldSaveFlag.Crafter)) - { - _crafter = reader.ReadEntity(); - } - - if (GetSaveFlag(flags, OldSaveFlag.Quality)) - { - _quality = (ArmorQuality)reader.ReadEncodedInt(); - } - else - { - _quality = ArmorQuality.Regular; - } - - if (GetSaveFlag(flags, OldSaveFlag.Durability)) - { - _durability = (ArmorDurabilityLevel)reader.ReadEncodedInt(); - } - - if (GetSaveFlag(flags, OldSaveFlag.Protection)) - { - _protection = (ArmorProtectionLevel)reader.ReadEncodedInt(); - } - - if (GetSaveFlag(flags, OldSaveFlag.Resource)) - { - _rawResource = (CraftResource)reader.ReadEncodedInt(); - } - - if (GetSaveFlag(flags, OldSaveFlag.BaseArmor)) - { - _armorBase = reader.ReadEncodedInt(); - } - - if (GetSaveFlag(flags, OldSaveFlag.StrBonus)) - { - _strBonus = reader.ReadEncodedInt(); - } - - if (GetSaveFlag(flags, OldSaveFlag.DexBonus)) - { - _dexBonus = reader.ReadEncodedInt(); - } - - if (GetSaveFlag(flags, OldSaveFlag.IntBonus)) - { - _intBonus = reader.ReadEncodedInt(); - } - - if (GetSaveFlag(flags, OldSaveFlag.StrReq)) - { - _strReq = reader.ReadEncodedInt(); - } - - if (GetSaveFlag(flags, OldSaveFlag.DexReq)) - { - _dexReq = reader.ReadEncodedInt(); - } - - if (GetSaveFlag(flags, OldSaveFlag.IntReq)) - { - _intReq = reader.ReadEncodedInt(); - } - - if (GetSaveFlag(flags, OldSaveFlag.MedAllowance)) - { - _meditate = (AMA)reader.ReadEncodedInt(); - } - - SkillBonuses = new AosSkillBonuses(this); - - if (GetSaveFlag(flags, OldSaveFlag.SkillBonuses)) - { - SkillBonuses.Deserialize(reader); - } - - if (GetSaveFlag(flags, OldSaveFlag.PlayerConstructed)) - { - PlayerConstructed = true; - } - } - public override bool AllowSecureTrade(Mobile from, Mobile to, Mobile newOwner, bool accepted) { if (!Ethic.CheckTrade(from, to, newOwner, this)) @@ -1431,7 +1294,7 @@ namespace Server.Items if (_crafter != null) { - list.Add(1050043, _crafter.Name); // crafted by ~1_NAME~ + list.Add(1050043, _crafter); // crafted by ~1_NAME~ } if (m_FactionState != null) @@ -1672,7 +1535,7 @@ namespace Server.Items return; } - from.NetState.SendDisplayEquipmentInfo(Serial, number, _crafter?.RawName, false, attrs); + from.NetState.SendDisplayEquipmentInfo(Serial, number, _crafter, false, attrs); } [Flags] diff --git a/Projects/UOContent/Items/Clothing/BaseClothing.Migrations.cs b/Projects/UOContent/Items/Clothing/BaseClothing.Migrations.cs new file mode 100644 index 000000000..1278b0db2 --- /dev/null +++ b/Projects/UOContent/Items/Clothing/BaseClothing.Migrations.cs @@ -0,0 +1,88 @@ +namespace Server.Items; + +public partial class BaseClothing +{ + private void MigrateFrom(V6Content content) + { + _rawResource = content.RawResource ?? DefaultResource; + _attributes = content.Attributes ?? AttributesDefaultValue(); + _clothingAttributes = content.ClothingAttributes ?? ClothingAttributesDefaultValue(); + _skillBonuses = content.SkillBonuses ?? SkillBonusesDefaultValue(); + _resistances = content.Resistances ?? ResistancesDefaultValue(); + _maxHitPoints = content.MaxHitPoints ?? 0; + _playerConstructed = content.PlayerConstructed; + _crafter = content.Crafter?.RawName; // Convert from Mobile -> String via RawName + _quality = content.Quality ?? ClothingQuality.Regular; + _strReq = content.StrRequirement ?? -1; + } + + // Version 5 (pre-codegen) + private void Deserialize(IGenericReader reader, int version) + { + var flags = (OldSaveFlag)reader.ReadEncodedInt(); + + if (GetSaveFlag(flags, OldSaveFlag.Resource)) + { + _rawResource = (CraftResource)reader.ReadEncodedInt(); + } + else + { + _rawResource = DefaultResource; + } + + Attributes = new AosAttributes(this); + + if (GetSaveFlag(flags, OldSaveFlag.Attributes)) + { + Attributes.Deserialize(reader); + } + + ClothingAttributes = new AosArmorAttributes(this); + + if (GetSaveFlag(flags, OldSaveFlag.ClothingAttributes)) + { + ClothingAttributes.Deserialize(reader); + } + + SkillBonuses = new AosSkillBonuses(this); + + if (GetSaveFlag(flags, OldSaveFlag.SkillBonuses)) + { + SkillBonuses.Deserialize(reader); + } + + Resistances = new AosElementAttributes(this); + + if (GetSaveFlag(flags, OldSaveFlag.Resistances)) + { + Resistances.Deserialize(reader); + } + + if (GetSaveFlag(flags, OldSaveFlag.MaxHitPoints)) + { + _maxHitPoints = reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.HitPoints)) + { + _hitPoints = reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.Crafter)) + { + _crafter = reader.ReadEntity()?.RawName; + } + + if (GetSaveFlag(flags, OldSaveFlag.Quality)) + { + _quality = (ClothingQuality)reader.ReadEncodedInt(); + } + + if (GetSaveFlag(flags, OldSaveFlag.StrReq)) + { + _strReq = reader.ReadEncodedInt(); + } + + PlayerConstructed = GetSaveFlag(flags, OldSaveFlag.PlayerConstructed); + } +} diff --git a/Projects/UOContent/Items/Clothing/BaseClothing.cs b/Projects/UOContent/Items/Clothing/BaseClothing.cs index 251d86ad0..90070675e 100644 --- a/Projects/UOContent/Items/Clothing/BaseClothing.cs +++ b/Projects/UOContent/Items/Clothing/BaseClothing.cs @@ -22,7 +22,7 @@ namespace Server.Items int MaxArcaneCharges { get; set; } } - [Serializable(6, false)] + [Serializable(7, false)] public abstract partial class BaseClothing : Item, IDyable, IScissorable, IFactionItem, ICraftable, IWearableDurability { [SerializableField(0, "private", "private")] @@ -93,7 +93,7 @@ namespace Server.Items [InvalidateProperties] [SerializableField(8)] [SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")] - private Mobile _crafter; + private string _crafter; [SerializableFieldSaveFlag(8)] private bool ShouldSerializeCrafter() => _crafter != null; @@ -193,7 +193,7 @@ namespace Server.Items if (makersMark) { - Crafter = from; + Crafter = from.RawName; } if (DefaultResource != CraftResource.None) @@ -699,7 +699,7 @@ namespace Server.Items if (_crafter != null) { - list.Add(1050043, _crafter.Name); // crafted by ~1_NAME~ + list.Add(1050043, _crafter); // crafted by ~1_NAME~ } if (_factionState != null) @@ -907,7 +907,7 @@ namespace Server.Items return; } - from.NetState.SendDisplayEquipmentInfo(Serial, number, _crafter?.RawName, false, attrs); + from.NetState.SendDisplayEquipmentInfo(Serial, number, _crafter, false, attrs); } public virtual void AddEquipInfoAttributes(Mobile from, List attrs) @@ -964,83 +964,6 @@ namespace Server.Items private static bool GetSaveFlag(OldSaveFlag flags, OldSaveFlag toGet) => (flags & toGet) != 0; - private void Deserialize(IGenericReader reader, int version) - { - var flags = (OldSaveFlag)reader.ReadEncodedInt(); - - if (GetSaveFlag(flags, OldSaveFlag.Resource)) - { - _rawResource = (CraftResource)reader.ReadEncodedInt(); - } - else - { - _rawResource = DefaultResource; - } - - Attributes = new AosAttributes(this); - - if (GetSaveFlag(flags, OldSaveFlag.Attributes)) - { - Attributes.Deserialize(reader); - } - - ClothingAttributes = new AosArmorAttributes(this); - - if (GetSaveFlag(flags, OldSaveFlag.ClothingAttributes)) - { - ClothingAttributes.Deserialize(reader); - } - - SkillBonuses = new AosSkillBonuses(this); - - if (GetSaveFlag(flags, OldSaveFlag.SkillBonuses)) - { - SkillBonuses.Deserialize(reader); - } - - Resistances = new AosElementAttributes(this); - - if (GetSaveFlag(flags, OldSaveFlag.Resistances)) - { - Resistances.Deserialize(reader); - } - - if (GetSaveFlag(flags, OldSaveFlag.MaxHitPoints)) - { - _maxHitPoints = reader.ReadEncodedInt(); - } - - if (GetSaveFlag(flags, OldSaveFlag.HitPoints)) - { - _hitPoints = reader.ReadEncodedInt(); - } - - if (GetSaveFlag(flags, OldSaveFlag.Crafter)) - { - _crafter = reader.ReadEntity(); - } - - if (GetSaveFlag(flags, OldSaveFlag.Quality)) - { - _quality = (ClothingQuality)reader.ReadEncodedInt(); - } - else - { - _quality = ClothingQuality.Regular; - } - - if (GetSaveFlag(flags, OldSaveFlag.StrReq)) - { - _strReq = reader.ReadEncodedInt(); - } - else - { - _strReq = -1; - } - - PlayerConstructed = GetSaveFlag(flags, OldSaveFlag.PlayerConstructed); - } - [AfterDeserialization] private void AfterDeserialization() { diff --git a/Projects/UOContent/Items/Misc/ArcaneGem.cs b/Projects/UOContent/Items/Misc/ArcaneGem.cs index 5da64655f..c287efe35 100644 --- a/Projects/UOContent/Items/Misc/ArcaneGem.cs +++ b/Projects/UOContent/Items/Misc/ArcaneGem.cs @@ -126,12 +126,12 @@ namespace Server.Items if (clothing != null) { clothing.Quality = ClothingQuality.Regular; - clothing.Crafter = from; + clothing.Crafter = from.RawName; } else if (armor != null) { armor.Quality = ArmorQuality.Regular; - armor.Crafter = from; + armor.Crafter = from.RawName; armor.PhysicalBonus = armor.FireBonus = armor.ColdBonus = diff --git a/Projects/UOContent/Items/Weapons/BaseWeapon.cs b/Projects/UOContent/Items/Weapons/BaseWeapon.cs index 2b7b4fd06..43b45990c 100644 --- a/Projects/UOContent/Items/Weapons/BaseWeapon.cs +++ b/Projects/UOContent/Items/Weapons/BaseWeapon.cs @@ -3971,10 +3971,7 @@ namespace Server.Items parentMobile.AddSkillMod(m_MageMod); } - if (GetSaveFlag(flags, SaveFlag.PlayerConstructed)) - { - PlayerConstructed = true; - } + PlayerConstructed = GetSaveFlag(flags, SaveFlag.PlayerConstructed); SkillBonuses = new AosSkillBonuses(this); diff --git a/Projects/UOContent/Migrations/Server.Items.BaseArmor.v9.json b/Projects/UOContent/Migrations/Server.Items.BaseArmor.v9.json new file mode 100644 index 000000000..56579b4a3 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.BaseArmor.v9.json @@ -0,0 +1,216 @@ +{ + "version": 9, + "type": "Server.Items.BaseArmor", + "properties": [ + { + "name": "Attributes", + "type": "Server.AosAttributes", + "usesSaveFlag": true, + "rule": "RawSerializableMigrationRule", + "ruleArguments": [ + "" + ] + }, + { + "name": "ArmorAttributes", + "type": "Server.AosArmorAttributes", + "usesSaveFlag": true, + "rule": "RawSerializableMigrationRule", + "ruleArguments": [ + "" + ] + }, + { + "name": "PhysicalBonus", + "type": "int", + "usesSaveFlag": true, + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "EncodedInt" + ] + }, + { + "name": "FireBonus", + "type": "int", + "usesSaveFlag": true, + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "EncodedInt" + ] + }, + { + "name": "ColdBonus", + "type": "int", + "usesSaveFlag": true, + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "EncodedInt" + ] + }, + { + "name": "PoisonBonus", + "type": "int", + "usesSaveFlag": true, + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "EncodedInt" + ] + }, + { + "name": "EnergyBonus", + "type": "int", + "usesSaveFlag": true, + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "EncodedInt" + ] + }, + { + "name": "Identified", + "type": "bool", + "usesSaveFlag": true, + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "" + ] + }, + { + "name": "MaxHitPoints", + "type": "int", + "usesSaveFlag": true, + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "EncodedInt" + ] + }, + { + "name": "HitPoints", + "type": "int", + "usesSaveFlag": true, + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "EncodedInt" + ] + }, + { + "name": "Crafter", + "type": "string", + "usesSaveFlag": true, + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "" + ] + }, + { + "name": "Quality", + "type": "Server.Items.ArmorQuality", + "usesSaveFlag": true, + "rule": "EnumMigrationRule" + }, + { + "name": "Durability", + "type": "Server.Items.ArmorDurabilityLevel", + "usesSaveFlag": true, + "rule": "EnumMigrationRule" + }, + { + "name": "ProtectionLevel", + "type": "Server.Items.ArmorProtectionLevel", + "usesSaveFlag": true, + "rule": "EnumMigrationRule" + }, + { + "name": "RawResource", + "type": "Server.Items.CraftResource", + "usesSaveFlag": true, + "rule": "EnumMigrationRule" + }, + { + "name": "BaseArmorRating", + "type": "int", + "usesSaveFlag": true, + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "EncodedInt" + ] + }, + { + "name": "StrBonus", + "type": "int", + "usesSaveFlag": true, + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "EncodedInt" + ] + }, + { + "name": "DexBonus", + "type": "int", + "usesSaveFlag": true, + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "EncodedInt" + ] + }, + { + "name": "IntBonus", + "type": "int", + "usesSaveFlag": true, + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "EncodedInt" + ] + }, + { + "name": "StrRequirement", + "type": "int", + "usesSaveFlag": true, + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "EncodedInt" + ] + }, + { + "name": "DexRequirement", + "type": "int", + "usesSaveFlag": true, + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "EncodedInt" + ] + }, + { + "name": "IntRequirement", + "type": "int", + "usesSaveFlag": true, + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "EncodedInt" + ] + }, + { + "name": "MeditationAllowance", + "type": "Server.Items.ArmorMeditationAllowance", + "usesSaveFlag": true, + "rule": "EnumMigrationRule" + }, + { + "name": "SkillBonuses", + "type": "Server.AosSkillBonuses", + "usesSaveFlag": true, + "rule": "RawSerializableMigrationRule", + "ruleArguments": [ + "" + ] + }, + { + "name": "PlayerConstructed", + "type": "bool", + "usesSaveFlag": true, + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "" + ] + } + ] +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.BaseClothing.v7.json b/Projects/UOContent/Migrations/Server.Items.BaseClothing.v7.json new file mode 100644 index 000000000..ade6ff6cb --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.BaseClothing.v7.json @@ -0,0 +1,99 @@ +{ + "version": 7, + "type": "Server.Items.BaseClothing", + "properties": [ + { + "name": "RawResource", + "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": "string", + "usesSaveFlag": true, + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "" + ] + }, + { + "name": "Quality", + "type": "Server.Items.ClothingQuality", + "usesSaveFlag": true, + "rule": "EnumMigrationRule" + }, + { + "name": "StrRequirement", + "type": "int", + "usesSaveFlag": true, + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "" + ] + } + ] +} \ No newline at end of file diff --git a/Projects/UOContent/Mobiles/Special/DummySpecific.cs b/Projects/UOContent/Mobiles/Special/DummySpecific.cs index fc064c378..560de2b43 100644 --- a/Projects/UOContent/Mobiles/Special/DummySpecific.cs +++ b/Projects/UOContent/Mobiles/Special/DummySpecific.cs @@ -42,21 +42,21 @@ namespace Server.Mobiles var cht = new ChainChest(); cht.Movable = false; cht.LootType = LootType.Newbied; - cht.Crafter = this; + cht.Crafter = RawName; cht.Quality = ArmorQuality.Regular; AddItem(cht); var chl = new ChainLegs(); chl.Movable = false; chl.LootType = LootType.Newbied; - chl.Crafter = this; + chl.Crafter = RawName; chl.Quality = ArmorQuality.Regular; AddItem(chl); var pla = new PlateArms(); pla.Movable = false; pla.LootType = LootType.Newbied; - pla.Crafter = this; + pla.Crafter = RawName; pla.Quality = ArmorQuality.Regular; AddItem(pla); @@ -116,21 +116,21 @@ namespace Server.Mobiles var cht = new ChainChest(); cht.Movable = false; cht.LootType = LootType.Newbied; - cht.Crafter = this; + cht.Crafter = RawName; cht.Quality = ArmorQuality.Regular; AddItem(cht); var chl = new ChainLegs(); chl.Movable = false; chl.LootType = LootType.Newbied; - chl.Crafter = this; + chl.Crafter = RawName; chl.Quality = ArmorQuality.Regular; AddItem(chl); var pla = new PlateArms(); pla.Movable = false; pla.LootType = LootType.Newbied; - pla.Crafter = this; + pla.Crafter = RawName; pla.Quality = ArmorQuality.Regular; AddItem(pla); @@ -190,21 +190,21 @@ namespace Server.Mobiles var cht = new ChainChest(); cht.Movable = false; cht.LootType = LootType.Newbied; - cht.Crafter = this; + cht.Crafter = RawName; cht.Quality = ArmorQuality.Regular; AddItem(cht); var chl = new ChainLegs(); chl.Movable = false; chl.LootType = LootType.Newbied; - chl.Crafter = this; + chl.Crafter = RawName; chl.Quality = ArmorQuality.Regular; AddItem(chl); var pla = new PlateArms(); pla.Movable = false; pla.LootType = LootType.Newbied; - pla.Crafter = this; + pla.Crafter = RawName; pla.Quality = ArmorQuality.Regular; AddItem(pla); @@ -328,28 +328,28 @@ namespace Server.Mobiles var lea = new LeatherArms(); lea.Movable = false; lea.LootType = LootType.Newbied; - lea.Crafter = this; + lea.Crafter = RawName; lea.Quality = ArmorQuality.Regular; AddItem(lea); var lec = new LeatherChest(); lec.Movable = false; lec.LootType = LootType.Newbied; - lec.Crafter = this; + lec.Crafter = RawName; lec.Quality = ArmorQuality.Regular; AddItem(lec); var leg = new LeatherGorget(); leg.Movable = false; leg.LootType = LootType.Newbied; - leg.Crafter = this; + leg.Crafter = RawName; leg.Quality = ArmorQuality.Regular; AddItem(leg); var lel = new LeatherLegs(); lel.Movable = false; lel.LootType = LootType.Newbied; - lel.Crafter = this; + lel.Crafter = RawName; lel.Quality = ArmorQuality.Regular; AddItem(lel); @@ -419,28 +419,28 @@ namespace Server.Mobiles var lea = new LeatherArms(); lea.Movable = false; lea.LootType = LootType.Newbied; - lea.Crafter = this; + lea.Crafter = RawName; lea.Quality = ArmorQuality.Regular; AddItem(lea); var lec = new LeatherChest(); lec.Movable = false; lec.LootType = LootType.Newbied; - lec.Crafter = this; + lec.Crafter = RawName; lec.Quality = ArmorQuality.Regular; AddItem(lec); var leg = new LeatherGorget(); leg.Movable = false; leg.LootType = LootType.Newbied; - leg.Crafter = this; + leg.Crafter = RawName; leg.Quality = ArmorQuality.Regular; AddItem(leg); var lel = new LeatherLegs(); lel.Movable = false; lel.LootType = LootType.Newbied; - lel.Crafter = this; + lel.Crafter = RawName; lel.Quality = ArmorQuality.Regular; AddItem(lel); @@ -514,28 +514,28 @@ namespace Server.Mobiles var lea = new LeatherArms(); lea.Movable = false; lea.LootType = LootType.Newbied; - lea.Crafter = this; + lea.Crafter = RawName; lea.Quality = ArmorQuality.Regular; AddItem(lea); var lec = new LeatherChest(); lec.Movable = false; lec.LootType = LootType.Newbied; - lec.Crafter = this; + lec.Crafter = RawName; lec.Quality = ArmorQuality.Regular; AddItem(lec); var leg = new LeatherGorget(); leg.Movable = false; leg.LootType = LootType.Newbied; - leg.Crafter = this; + leg.Crafter = RawName; leg.Quality = ArmorQuality.Regular; AddItem(leg); var lel = new LeatherLegs(); lel.Movable = false; lel.LootType = LootType.Newbied; - lel.Crafter = this; + lel.Crafter = RawName; lel.Quality = ArmorQuality.Regular; AddItem(lel); @@ -611,28 +611,28 @@ namespace Server.Mobiles var lea = new LeatherArms(); lea.Movable = false; lea.LootType = LootType.Newbied; - lea.Crafter = this; + lea.Crafter = RawName; lea.Quality = ArmorQuality.Regular; AddItem(lea); var lec = new LeatherChest(); lec.Movable = false; lec.LootType = LootType.Newbied; - lec.Crafter = this; + lec.Crafter = RawName; lec.Quality = ArmorQuality.Regular; AddItem(lec); var leg = new LeatherGorget(); leg.Movable = false; leg.LootType = LootType.Newbied; - leg.Crafter = this; + leg.Crafter = RawName; leg.Quality = ArmorQuality.Regular; AddItem(leg); var lel = new LeatherLegs(); lel.Movable = false; lel.LootType = LootType.Newbied; - lel.Crafter = this; + lel.Crafter = RawName; lel.Quality = ArmorQuality.Regular; AddItem(lel); @@ -719,28 +719,28 @@ namespace Server.Mobiles var lea = new LeatherArms(); lea.Movable = false; lea.LootType = LootType.Newbied; - lea.Crafter = this; + lea.Crafter = RawName; lea.Quality = ArmorQuality.Regular; AddItem(lea); var lec = new LeatherChest(); lec.Movable = false; lec.LootType = LootType.Newbied; - lec.Crafter = this; + lec.Crafter = RawName; lec.Quality = ArmorQuality.Regular; AddItem(lec); var leg = new LeatherGorget(); leg.Movable = false; leg.LootType = LootType.Newbied; - leg.Crafter = this; + leg.Crafter = RawName; leg.Quality = ArmorQuality.Regular; AddItem(leg); var lel = new LeatherLegs(); lel.Movable = false; lel.LootType = LootType.Newbied; - lel.Crafter = this; + lel.Crafter = RawName; lel.Quality = ArmorQuality.Regular; AddItem(lel);