diff --git a/Projects/SerializationGenerator/SerializableEntityGeneration/SerializableEntityGeneration.Class.cs b/Projects/SerializationGenerator/SerializableEntityGeneration/SerializableEntityGeneration.Class.cs index f167d86b8..f312d9330 100644 --- a/Projects/SerializationGenerator/SerializableEntityGeneration/SerializableEntityGeneration.Class.cs +++ b/Projects/SerializationGenerator/SerializableEntityGeneration/SerializableEntityGeneration.Class.cs @@ -203,7 +203,8 @@ namespace SerializationGenerator fieldOrPropertySymbol, order, allAttributes, - serializableTypes + serializableTypes, + classSymbol ); serializablePropertySet.Add(serializableProperty); diff --git a/Projects/SerializationGenerator/SerializableMigration/ISerializableMigrationRule.cs b/Projects/SerializationGenerator/SerializableMigration/ISerializableMigrationRule.cs index e7491a594..5add6cf98 100644 --- a/Projects/SerializationGenerator/SerializableMigration/ISerializableMigrationRule.cs +++ b/Projects/SerializationGenerator/SerializableMigration/ISerializableMigrationRule.cs @@ -28,6 +28,7 @@ namespace SerializableMigration ISymbol symbol, ImmutableArray attributes, ImmutableArray serializableTypes, + ISymbol? parentSymbol, out string[] ruleArguments ); diff --git a/Projects/SerializationGenerator/SerializableMigration/Rules/ArrayMigrationRule.cs b/Projects/SerializationGenerator/SerializableMigration/Rules/ArrayMigrationRule.cs index 32383c1b8..4705cb1f6 100644 --- a/Projects/SerializationGenerator/SerializableMigration/Rules/ArrayMigrationRule.cs +++ b/Projects/SerializationGenerator/SerializableMigration/Rules/ArrayMigrationRule.cs @@ -29,6 +29,7 @@ namespace SerializableMigration ISymbol symbol, ImmutableArray attributes, ImmutableArray serializableTypes, + ISymbol? parentSymbol, out string[] ruleArguments ) { @@ -44,7 +45,8 @@ namespace SerializableMigration arrayTypeSymbol.ElementType, 0, attributes, - serializableTypes + serializableTypes, + parentSymbol ); var length = serializableArrayType.RuleArguments.Length; diff --git a/Projects/SerializationGenerator/SerializableMigration/Rules/EnumMigrationRule.cs b/Projects/SerializationGenerator/SerializableMigration/Rules/EnumMigrationRule.cs index 95a3d0d09..0e9bc62ac 100644 --- a/Projects/SerializationGenerator/SerializableMigration/Rules/EnumMigrationRule.cs +++ b/Projects/SerializationGenerator/SerializableMigration/Rules/EnumMigrationRule.cs @@ -30,6 +30,7 @@ namespace SerializableMigration ISymbol symbol, ImmutableArray attributes, ImmutableArray serializableTypes, + ISymbol? parentSymbol, out string[] ruleArguments ) { diff --git a/Projects/SerializationGenerator/SerializableMigration/Rules/HashSetMigrationRule.cs b/Projects/SerializationGenerator/SerializableMigration/Rules/HashSetMigrationRule.cs index ee3964a9e..81d13468e 100644 --- a/Projects/SerializationGenerator/SerializableMigration/Rules/HashSetMigrationRule.cs +++ b/Projects/SerializationGenerator/SerializableMigration/Rules/HashSetMigrationRule.cs @@ -30,6 +30,7 @@ namespace SerializableMigration ISymbol symbol, ImmutableArray attributes, ImmutableArray serializableTypes, + ISymbol? parentSymbol, out string[] ruleArguments ) { @@ -47,7 +48,8 @@ namespace SerializableMigration setTypeSymbol, 0, attributes, - serializableTypes + serializableTypes, + parentSymbol ); var length = serializableSetType.RuleArguments.Length; diff --git a/Projects/SerializationGenerator/SerializableMigration/Rules/KeyValuePairMigrationRule.cs b/Projects/SerializationGenerator/SerializableMigration/Rules/KeyValuePairMigrationRule.cs index dfe224ae6..6b2ee9cfc 100644 --- a/Projects/SerializationGenerator/SerializableMigration/Rules/KeyValuePairMigrationRule.cs +++ b/Projects/SerializationGenerator/SerializableMigration/Rules/KeyValuePairMigrationRule.cs @@ -30,6 +30,7 @@ namespace SerializableMigration ISymbol symbol, ImmutableArray attributes, ImmutableArray serializableTypes, + ISymbol? parentSymbol, out string[] ruleArguments ) { @@ -47,7 +48,8 @@ namespace SerializableMigration typeArguments[0], 0, attributes, - serializableTypes + serializableTypes, + parentSymbol ); var valueSerializedProperty = SerializableMigrationRulesEngine.GenerateSerializableProperty( @@ -56,7 +58,8 @@ namespace SerializableMigration typeArguments[1], 1, attributes, - serializableTypes + serializableTypes, + parentSymbol ); // Key diff --git a/Projects/SerializationGenerator/SerializableMigration/Rules/ListMigrationRule.cs b/Projects/SerializationGenerator/SerializableMigration/Rules/ListMigrationRule.cs index e22808f54..5dde802f5 100644 --- a/Projects/SerializationGenerator/SerializableMigration/Rules/ListMigrationRule.cs +++ b/Projects/SerializationGenerator/SerializableMigration/Rules/ListMigrationRule.cs @@ -30,6 +30,7 @@ namespace SerializableMigration ISymbol symbol, ImmutableArray attributes, ImmutableArray serializableTypes, + ISymbol? parentSymbol, out string[] ruleArguments ) { @@ -47,7 +48,8 @@ namespace SerializableMigration listTypeSymbol, 0, attributes, - serializableTypes + serializableTypes, + parentSymbol ); var length = serializableListType.RuleArguments.Length; diff --git a/Projects/SerializationGenerator/SerializableMigration/Rules/PrimitiveTypeMigrationRule.cs b/Projects/SerializationGenerator/SerializableMigration/Rules/PrimitiveTypeMigrationRule.cs index 391e46130..ac46c2d62 100644 --- a/Projects/SerializationGenerator/SerializableMigration/Rules/PrimitiveTypeMigrationRule.cs +++ b/Projects/SerializationGenerator/SerializableMigration/Rules/PrimitiveTypeMigrationRule.cs @@ -31,6 +31,7 @@ namespace SerializableMigration ISymbol symbol, ImmutableArray attributes, ImmutableArray serializableTypes, + ISymbol? parentSymbol, out string[] ruleArguments ) { diff --git a/Projects/SerializationGenerator/SerializableMigration/Rules/PrimitiveUOTypeMigrationRule.cs b/Projects/SerializationGenerator/SerializableMigration/Rules/PrimitiveUOTypeMigrationRule.cs index 76dc68b05..c2ba01ee3 100644 --- a/Projects/SerializationGenerator/SerializableMigration/Rules/PrimitiveUOTypeMigrationRule.cs +++ b/Projects/SerializationGenerator/SerializableMigration/Rules/PrimitiveUOTypeMigrationRule.cs @@ -30,6 +30,7 @@ namespace SerializableMigration ISymbol symbol, ImmutableArray attributes, ImmutableArray serializableTypes, + ISymbol? parentSymbol, out string[] ruleArguments ) { diff --git a/Projects/SerializationGenerator/SerializableMigration/Rules/SerializableInterfaceMigrationRule.cs b/Projects/SerializationGenerator/SerializableMigration/Rules/SerializableInterfaceMigrationRule.cs index 2ef769fd5..6bbf134dd 100644 --- a/Projects/SerializationGenerator/SerializableMigration/Rules/SerializableInterfaceMigrationRule.cs +++ b/Projects/SerializationGenerator/SerializableMigration/Rules/SerializableInterfaceMigrationRule.cs @@ -30,6 +30,7 @@ namespace SerializableMigration ISymbol symbol, ImmutableArray attributes, ImmutableArray serializableTypes, + ISymbol? parentSymbol, out string[] ruleArguments ) { diff --git a/Projects/SerializationGenerator/SerializableMigration/Rules/SerializationMethodSignatureMigrationRule.cs b/Projects/SerializationGenerator/SerializableMigration/Rules/SerializationMethodSignatureMigrationRule.cs index 5d74955a1..36ee040cf 100644 --- a/Projects/SerializationGenerator/SerializableMigration/Rules/SerializationMethodSignatureMigrationRule.cs +++ b/Projects/SerializationGenerator/SerializableMigration/Rules/SerializationMethodSignatureMigrationRule.cs @@ -31,6 +31,7 @@ namespace SerializableMigration ISymbol symbol, ImmutableArray attributes, ImmutableArray serializableTypes, + ISymbol? parentSymbol, out string[] ruleArguments ) { @@ -41,7 +42,7 @@ namespace SerializableMigration } if (symbol is not INamedTypeSymbol namedTypeSymbol || - !namedTypeSymbol.HasGenericReaderCtor(compilation, out var requiresParent)) + !namedTypeSymbol.HasGenericReaderCtor(compilation, parentSymbol, out var requiresParent)) { ruleArguments = null; return false; diff --git a/Projects/SerializationGenerator/SerializableMigration/SerializableMigrationRulesEngine.cs b/Projects/SerializationGenerator/SerializableMigration/SerializableMigrationRulesEngine.cs index 2d85c8241..b9e9c73c7 100644 --- a/Projects/SerializationGenerator/SerializableMigration/SerializableMigrationRulesEngine.cs +++ b/Projects/SerializationGenerator/SerializableMigration/SerializableMigrationRulesEngine.cs @@ -51,7 +51,8 @@ namespace SerializableMigration ISymbol fieldOrPropertySymbol, int order, ImmutableArray attributes, - ImmutableArray serializableTypes + ImmutableArray serializableTypes, + ISymbol? parentSymbol = default ) { string propertyName; @@ -78,7 +79,8 @@ namespace SerializableMigration propertyType, order, attributes, - serializableTypes + serializableTypes, + parentSymbol ); } @@ -88,7 +90,8 @@ namespace SerializableMigration ISymbol propertyType, int order, ImmutableArray attributes, - ImmutableArray serializableTypes + ImmutableArray serializableTypes, + ISymbol? parentSymbol = default ) { foreach (var rule in Rules.Values) @@ -98,6 +101,7 @@ namespace SerializableMigration propertyType, attributes, serializableTypes, + parentSymbol, out var ruleArguments )) { diff --git a/Projects/SerializationGenerator/SourceGeneration/SymbolMetadata/SymbolMetadata.UO.cs b/Projects/SerializationGenerator/SourceGeneration/SymbolMetadata/SymbolMetadata.UO.cs index 72a091dfb..91654cf94 100644 --- a/Projects/SerializationGenerator/SourceGeneration/SymbolMetadata/SymbolMetadata.UO.cs +++ b/Projects/SerializationGenerator/SourceGeneration/SymbolMetadata/SymbolMetadata.UO.cs @@ -13,6 +13,7 @@ * along with this program. If not, see . * *************************************************************************/ +using System; using System.Collections.Immutable; using System.Linq; using Microsoft.CodeAnalysis; @@ -66,7 +67,12 @@ namespace SerializationGenerator symbol is INamedTypeSymbol namedSymbol && symbols.Contains(namedSymbol, SymbolEqualityComparer.Default); - public static bool HasGenericReaderCtor(this INamedTypeSymbol symbol, Compilation compilation, out bool requiresParent) + public static bool HasGenericReaderCtor( + this INamedTypeSymbol symbol, + Compilation compilation, + ISymbol? parentSymbol, + out bool requiresParent + ) { var genericReaderInterface = compilation.GetTypeByMetadataName(GENERIC_READER_INTERFACE); var genericCtor = symbol.Constructors.FirstOrDefault( @@ -76,7 +82,7 @@ namespace SerializationGenerator SymbolEqualityComparer.Default.Equals(m.Parameters[0].Type, genericReaderInterface) ); - requiresParent = genericCtor?.Parameters.Length == 2 && SymbolEqualityComparer.Default.Equals(genericCtor.Parameters[1].Type, symbol); + requiresParent = genericCtor?.Parameters.Length == 2 && SymbolEqualityComparer.Default.Equals(genericCtor.Parameters[1].Type, parentSymbol); return genericCtor != null; } diff --git a/Projects/SerializationSchemaGenerator/Application.cs b/Projects/SerializationSchemaGenerator/Application.cs index 4bbdcb884..02d35aa62 100644 --- a/Projects/SerializationSchemaGenerator/Application.cs +++ b/Projects/SerializationSchemaGenerator/Application.cs @@ -66,8 +66,6 @@ namespace SerializationSchemaGenerator ReadCommentHandling = JsonCommentHandling.Skip }; - // var generatedSourcePath = Path.Join(projectPath, "Generated"); - var serializableTypes = syntaxReceiver.SerializableList; foreach (var (classSymbol, (attributeData, fieldsList)) in syntaxReceiver.ClassAndFields) @@ -80,18 +78,9 @@ namespace SerializationSchemaGenerator fieldsList.ToImmutableArray(), serializableTypes ); - - // WriteSource(generatedSourcePath, classSymbol.ToDisplayString(), source); } } ); } - - public static void WriteSource(string sourcePath, string className, string source) - { - Directory.CreateDirectory(sourcePath); - var filePath = Path.Combine(sourcePath, $"{className}.Serialization.cs"); - File.WriteAllText(filePath, source, Encoding.UTF8); - } } } diff --git a/Projects/SerializationSchemaGenerator/SchemaGenerator.cs b/Projects/SerializationSchemaGenerator/SchemaGenerator.cs deleted file mode 100644 index 5e6be8688..000000000 --- a/Projects/SerializationSchemaGenerator/SchemaGenerator.cs +++ /dev/null @@ -1,98 +0,0 @@ -/************************************************************************* - * ModernUO * - * Copyright 2019-2021 - ModernUO Development Team * - * Email: hi@modernuo.com * - * File: SchemaGenerator.cs * - * * - * This program is free software: you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation, either version 3 of the License, or * - * (at your option) any later version. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see . * - *************************************************************************/ - -using System.Collections.Generic; -using System.Collections.Immutable; -using System.IO; -using System.Linq; -using System.Text.Json; -using Microsoft.CodeAnalysis; -using SerializableMigration; -using SerializationGenerator; - -namespace SerializationSchemaGenerator -{ - public static class SchemaGenerator - { - public static void GenerateSchema( - this Compilation compilation, - INamedTypeSymbol classSymbol, - AttributeData serializableAttr, - ImmutableArray fieldsAndProperties, - string migrationPath, - JsonSerializerOptions jsonSerializerOptions, - ImmutableArray serializableTypes - ) - { - var serializableFieldAttribute = - compilation.GetTypeByMetadataName(SymbolMetadata.SERIALIZABLE_FIELD_ATTRIBUTE); - - var version = (int)serializableAttr.ConstructorArguments[0].Value!; - - var serializablePropertySet = new SortedSet(new SerializablePropertyComparer()); - - foreach (var fieldOrPropertySymbol in fieldsAndProperties) - { - var allAttributes = fieldOrPropertySymbol.GetAttributes(); - - var serializableFieldAttr = allAttributes - .FirstOrDefault( - attr => - SymbolEqualityComparer.Default.Equals(attr.AttributeClass, serializableFieldAttribute) - ); - - if (serializableFieldAttr == null) - { - continue; - } - - var order = (int)serializableFieldAttr.ConstructorArguments[0].Value!; - - var serializableProperty = SerializableMigrationRulesEngine.GenerateSerializableProperty( - compilation, - fieldOrPropertySymbol, - order, - allAttributes, - serializableTypes - ); - - if (serializableProperty == null) - { - continue; - } - - serializablePropertySet.Add(serializableProperty); - } - - var serializableProperties = serializablePropertySet.ToImmutableArray(); - - // Write the migration file - var newMigration = new SerializableMetadata - { - Version = version, - Type = classSymbol.ToDisplayString(), - Properties = serializableProperties - }; - WriteMigration(migrationPath, newMigration, jsonSerializerOptions); - } - - public static void WriteMigration(string migrationPath, SerializableMetadata metadata, JsonSerializerOptions options) - { - Directory.CreateDirectory(migrationPath); - var filePath = Path.Combine(migrationPath, $"{metadata.Type}.v{metadata.Version}.json"); - File.WriteAllText(filePath, JsonSerializer.Serialize(metadata, options)); - } - } -} diff --git a/Projects/UOContent/Accounting/Account.cs b/Projects/UOContent/Accounting/Account.cs index 578b9b1f5..38ea02578 100644 --- a/Projects/UOContent/Accounting/Account.cs +++ b/Projects/UOContent/Accounting/Account.cs @@ -384,6 +384,8 @@ namespace Server.Accounting } _totalGameTime = reader.ReadTimeSpan(); + + Timer.DelayCall(AfterDeserialization); } /// diff --git a/Projects/UOContent/Engines/Bulk Orders/BaseBOD.cs b/Projects/UOContent/Engines/Bulk Orders/BaseBOD.cs index 68d50ba42..45ac2414c 100644 --- a/Projects/UOContent/Engines/Bulk Orders/BaseBOD.cs +++ b/Projects/UOContent/Engines/Bulk Orders/BaseBOD.cs @@ -2,18 +2,15 @@ using System.Collections.Generic; namespace Server.Engines.BulkOrders { - public abstract class BaseBOD : Item + [Serializable(1)] + public abstract partial class BaseBOD : Item { - private int m_AmountMax; - private BulkMaterialType m_Material; - private bool m_RequireExceptional; - public BaseBOD(int hue, int amountMax, bool requireExeptional, BulkMaterialType material) : this() { Hue = hue; - AmountMax = amountMax; - RequireExceptional = requireExeptional; - Material = material; + _amountMax = amountMax; + _requireExceptional = requireExeptional; + _material = material; } public BaseBOD() : base(Core.AOS ? 0x2258 : 0x14EF) @@ -22,47 +19,22 @@ namespace Server.Engines.BulkOrders LootType = LootType.Blessed; } - public BaseBOD(Serial serial) : base(serial) - { - } - public abstract bool Complete { get; } - [CommandProperty(AccessLevel.GameMaster)] - public sealed override int Hue { get; set; } + [SerializableField(0)] + [InvalidateProperties] + [SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")] + private int _amountMax; - [CommandProperty(AccessLevel.GameMaster)] - public int AmountMax - { - get => m_AmountMax; - set - { - m_AmountMax = value; - InvalidateProperties(); - } - } + [SerializableField(1)] + [InvalidateProperties] + [SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")] + private bool _requireExceptional; - [CommandProperty(AccessLevel.GameMaster)] - public bool RequireExceptional - { - get => m_RequireExceptional; - set - { - m_RequireExceptional = value; - InvalidateProperties(); - } - } - - [CommandProperty(AccessLevel.GameMaster)] - public BulkMaterialType Material - { - get => m_Material; - set - { - m_Material = value; - InvalidateProperties(); - } - } + [SerializableField(1)] + [InvalidateProperties] + [SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")] + private BulkMaterialType _material; public static BulkMaterialType GetRandomMaterial(BulkMaterialType start, double[] chances) { @@ -141,38 +113,22 @@ namespace Server.Engines.BulkOrders } } - public override void Serialize(IGenericWriter writer) + [AfterDeserialization] + private void AfterDeserialization() { - base.Serialize(writer); - - writer.WriteEncodedInt(0); // version - - writer.Write(m_AmountMax); - writer.Write(m_RequireExceptional); - writer.Write((int)m_Material); - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - - var version = reader.ReadEncodedInt(); - - switch (version) - { - case 0: - { - m_AmountMax = reader.ReadInt(); - m_RequireExceptional = reader.ReadBool(); - m_Material = (BulkMaterialType)reader.ReadInt(); - break; - } - } - if (Parent == null && Map == Map.Internal && Location == Point3D.Zero) { Delete(); } } + + private void Deserialize(IGenericReader reader, int version) + { + AmountMax = reader.ReadInt(); + RequireExceptional = reader.ReadBool(); + Material = (BulkMaterialType)reader.ReadInt(); + + Timer.DelayCall(AfterDeserialization); + } } } diff --git a/Projects/UOContent/Engines/Bulk Orders/Books/BOBLargeEntry.cs b/Projects/UOContent/Engines/Bulk Orders/Books/BOBLargeEntry.cs index a04333fc1..c30a7cd6c 100644 --- a/Projects/UOContent/Engines/Bulk Orders/Books/BOBLargeEntry.cs +++ b/Projects/UOContent/Engines/Bulk Orders/Books/BOBLargeEntry.cs @@ -6,14 +6,12 @@ namespace Server.Engines.BulkOrders { RequireExceptional = bod.RequireExceptional; - if (bod is LargeTailorBOD) + DeedType = bod switch { - DeedType = BODType.Tailor; - } - else if (bod is LargeSmithBOD) - { - DeedType = BODType.Smith; - } + LargeTailorBOD => BODType.Tailor, + LargeSmithBOD => BODType.Smith, + _ => DeedType + }; Material = bod.Material; AmountMax = bod.AmountMax; @@ -68,16 +66,12 @@ namespace Server.Engines.BulkOrders public Item Reconstruct() { - LargeBOD bod = null; - - if (DeedType == BODType.Smith) + LargeBOD bod = DeedType switch { - bod = new LargeSmithBOD(AmountMax, RequireExceptional, Material, ReconstructEntries()); - } - else if (DeedType == BODType.Tailor) - { - bod = new LargeTailorBOD(AmountMax, RequireExceptional, Material, ReconstructEntries()); - } + BODType.Smith => new LargeSmithBOD(AmountMax, RequireExceptional, Material, ReconstructEntries()), + BODType.Tailor => new LargeTailorBOD(AmountMax, RequireExceptional, Material, ReconstructEntries()), + _ => null + }; for (var i = 0; bod?.Entries.Length >= i; ++i) { diff --git a/Projects/UOContent/Engines/Bulk Orders/LargeBOD.cs b/Projects/UOContent/Engines/Bulk Orders/LargeBOD.cs index 6cca5456f..25d76644e 100644 --- a/Projects/UOContent/Engines/Bulk Orders/LargeBOD.cs +++ b/Projects/UOContent/Engines/Bulk Orders/LargeBOD.cs @@ -2,41 +2,30 @@ using Server.Mobiles; namespace Server.Engines.BulkOrders { - public abstract class LargeBOD : BaseBOD + [Serializable(0)] + public abstract partial class LargeBOD : BaseBOD { - private LargeBulkEntry[] m_Entries; + [InvalidateProperties] + [SerializableField(0)] + private LargeBulkEntry[] _entries; public LargeBOD( int hue, int amountMax, bool requireExeptional, BulkMaterialType material, LargeBulkEntry[] entries ) : base(hue, amountMax, requireExeptional, material) => - m_Entries = entries; + _entries = entries; public LargeBOD() { } - public LargeBOD(Serial serial) : base(serial) - { - } - - public LargeBulkEntry[] Entries - { - get => m_Entries; - set - { - m_Entries = value; - InvalidateProperties(); - } - } - [CommandProperty(AccessLevel.GameMaster)] public override bool Complete { get { - for (var i = 0; i < m_Entries.Length; ++i) + for (var i = 0; i < _entries.Length; ++i) { - if (m_Entries[i].Amount < AmountMax) + if (_entries[i].Amount < AmountMax) { return false; } @@ -66,9 +55,9 @@ namespace Server.Engines.BulkOrders list.Add(1060656, AmountMax.ToString()); // amount to make: ~1_val~ - for (var i = 0; i < m_Entries.Length; ++i) + for (var i = 0; i < _entries.Length; ++i) { - list.Add(1060658 + i, "#{0}\t{1}", m_Entries[i].Details.Number, m_Entries[i].Amount); // ~1_val~: ~2_val~ + list.Add(1060658 + i, "#{0}\t{1}", _entries[i].Details.Number, _entries[i].Amount); // ~1_val~: ~2_val~ } } @@ -96,7 +85,7 @@ namespace Server.Engines.BulkOrders public override void EndCombine(Mobile from, Item item) { - if (!(item is SmallBOD small)) + if (item is not SmallBOD small) { from.SendLocalizedMessage(1045159); // That is not a bulk order. return; @@ -104,11 +93,11 @@ namespace Server.Engines.BulkOrders LargeBulkEntry entry = null; - for (var i = 0; i < m_Entries.Length; ++i) + for (var i = 0; i < _entries.Length; ++i) { - if (m_Entries[i].Details.Type == small.Type) + if (_entries[i].Details.Type == small.Type) { - entry = m_Entries[i]; + entry = _entries[i]; break; } } @@ -159,41 +148,5 @@ namespace Server.Engines.BulkOrders } } } - - public override void Serialize(IGenericWriter writer) - { - base.Serialize(writer); - - writer.WriteEncodedInt(0); // version - - writer.Write(m_Entries.Length); - - for (var i = 0; i < m_Entries.Length; ++i) - { - m_Entries[i].Serialize(writer); - } - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - - var version = reader.ReadEncodedInt(); - - switch (version) - { - case 0: - { - m_Entries = new LargeBulkEntry[reader.ReadInt()]; - - for (var i = 0; i < m_Entries.Length; ++i) - { - m_Entries[i] = new LargeBulkEntry(this, reader); - } - - break; - } - } - } } } diff --git a/Projects/UOContent/Engines/Bulk Orders/LargeBulkEntry.cs b/Projects/UOContent/Engines/Bulk Orders/LargeBulkEntry.cs index a639c1427..765231f5f 100644 --- a/Projects/UOContent/Engines/Bulk Orders/LargeBulkEntry.cs +++ b/Projects/UOContent/Engines/Bulk Orders/LargeBulkEntry.cs @@ -14,7 +14,7 @@ namespace Server.Engines.BulkOrders Details = details; } - public LargeBulkEntry(LargeBOD owner, IGenericReader reader) + public LargeBulkEntry(IGenericReader reader, LargeBOD owner) { Owner = owner; m_Amount = reader.ReadInt(); diff --git a/Projects/UOContent/Engines/Bulk Orders/LargeSmithBOD.cs b/Projects/UOContent/Engines/Bulk Orders/LargeSmithBOD.cs index 5d0716b29..e2aace6c6 100644 --- a/Projects/UOContent/Engines/Bulk Orders/LargeSmithBOD.cs +++ b/Projects/UOContent/Engines/Bulk Orders/LargeSmithBOD.cs @@ -1,6 +1,7 @@ namespace Server.Engines.BulkOrders { - public class LargeSmithBOD : LargeBOD + [Serializable(0, false)] + public partial class LargeSmithBOD : LargeBOD { public static double[] m_BlacksmithMaterialChances = { @@ -61,29 +62,11 @@ namespace Server.Engines.BulkOrders { } - public LargeSmithBOD(Serial serial) : base(serial) - { - } - public override int ComputeFame() => SmithRewardCalculator.Instance.ComputeFame(this); public override int ComputeGold() => SmithRewardCalculator.Instance.ComputeGold(this); public override RewardGroup GetRewardGroup() => SmithRewardCalculator.Instance.LookupRewards(SmithRewardCalculator.Instance.ComputePoints(this)); - - 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(); - } } } diff --git a/Projects/UOContent/Engines/Bulk Orders/LargeTailorBOD.cs b/Projects/UOContent/Engines/Bulk Orders/LargeTailorBOD.cs index 3a256a0ad..39d79e8e3 100644 --- a/Projects/UOContent/Engines/Bulk Orders/LargeTailorBOD.cs +++ b/Projects/UOContent/Engines/Bulk Orders/LargeTailorBOD.cs @@ -1,6 +1,7 @@ namespace Server.Engines.BulkOrders { - public class LargeTailorBOD : LargeBOD + [Serializable(0, false)] + public partial class LargeTailorBOD : LargeBOD { public static double[] m_TailoringMaterialChances = { @@ -87,29 +88,11 @@ namespace Server.Engines.BulkOrders { } - public LargeTailorBOD(Serial serial) : base(serial) - { - } - public override int ComputeFame() => TailorRewardCalculator.Instance.ComputeFame(this); public override int ComputeGold() => TailorRewardCalculator.Instance.ComputeGold(this); public override RewardGroup GetRewardGroup() => TailorRewardCalculator.Instance.LookupRewards(TailorRewardCalculator.Instance.ComputePoints(this)); - - 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(); - } } } diff --git a/Projects/UOContent/Engines/Bulk Orders/SmallSmithBOD.cs b/Projects/UOContent/Engines/Bulk Orders/SmallSmithBOD.cs index 3af93d217..dc5b06095 100644 --- a/Projects/UOContent/Engines/Bulk Orders/SmallSmithBOD.cs +++ b/Projects/UOContent/Engines/Bulk Orders/SmallSmithBOD.cs @@ -4,7 +4,8 @@ using Server.Engines.Craft; namespace Server.Engines.BulkOrders { - public class SmallSmithBOD : SmallBOD + [Serializable(0, false)] + public partial class SmallSmithBOD : SmallBOD { public static double[] m_BlacksmithMaterialChances = { @@ -63,10 +64,6 @@ namespace Server.Engines.BulkOrders { } - public SmallSmithBOD(Serial serial) : base(serial) - { - } - public override int ComputeFame() => SmithRewardCalculator.Instance.ComputeFame(this); public override int ComputeGold() => SmithRewardCalculator.Instance.ComputeGold(this); @@ -165,19 +162,5 @@ namespace Server.Engines.BulkOrders var entry = validEntries.RandomElement(); return new SmallSmithBOD(entry, material, amountMax, reqExceptional); } - - 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(); - } } } diff --git a/Projects/UOContent/Engines/Bulk Orders/SmallTailorBOD.cs b/Projects/UOContent/Engines/Bulk Orders/SmallTailorBOD.cs index a96611b2f..598779cbd 100644 --- a/Projects/UOContent/Engines/Bulk Orders/SmallTailorBOD.cs +++ b/Projects/UOContent/Engines/Bulk Orders/SmallTailorBOD.cs @@ -4,7 +4,8 @@ using Server.Engines.Craft; namespace Server.Engines.BulkOrders { - public class SmallTailorBOD : SmallBOD + [Serializable(0, false)] + public partial class SmallTailorBOD : SmallBOD { public static double[] m_TailoringMaterialChances = { @@ -30,7 +31,6 @@ namespace Server.Engines.BulkOrders return; } - var hue = 0x483; var amountMax = Utility.RandomList(10, 15, 20); var material = useMaterials @@ -40,7 +40,7 @@ namespace Server.Engines.BulkOrders var reqExceptional = Utility.RandomBool() || material == BulkMaterialType.None; var entry = entries.RandomElement(); - Hue = hue; + Hue = 0x483; AmountMax = amountMax; Type = entry.Type; Number = entry.Number; @@ -56,10 +56,6 @@ namespace Server.Engines.BulkOrders { } - public SmallTailorBOD(Serial serial) : base(serial) - { - } - public override int ComputeFame() => TailorRewardCalculator.Instance.ComputeFame(this); public override int ComputeGold() => TailorRewardCalculator.Instance.ComputeGold(this); @@ -168,19 +164,5 @@ namespace Server.Engines.BulkOrders return null; } - - 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(); - } } } diff --git a/Projects/UOContent/Items/Addons/BaseAddon.cs b/Projects/UOContent/Items/Addons/BaseAddon.cs index d0e232028..2f70e0712 100644 --- a/Projects/UOContent/Items/Addons/BaseAddon.cs +++ b/Projects/UOContent/Items/Addons/BaseAddon.cs @@ -20,7 +20,8 @@ namespace Server.Items bool CouldFit(IPoint3D p, Map map); } - public abstract class BaseAddon : Item, IChoppable, IAddon + [Serializable(2, false)] + public abstract partial class BaseAddon : Item, IChoppable, IAddon { private CraftResource m_Resource; @@ -32,15 +33,12 @@ namespace Server.Items Components = new List(); } - public BaseAddon(Serial serial) : base(serial) - { - } - public virtual bool RetainDeedHue => false; public virtual BaseAddonDeed Deed => null; - public List Components { get; private set; } + [SerializableField(0, setter: "private")] + private List _components; public virtual bool ShareHue => true; @@ -66,6 +64,7 @@ namespace Server.Items } [CommandProperty(AccessLevel.GameMaster)] + [SerializableField(1)] public CraftResource Resource { get => m_Resource; @@ -77,6 +76,7 @@ namespace Server.Items Hue = CraftResources.GetHue(m_Resource); InvalidateProperties(); + ((ISerializable)this).MarkDirty(); } } } @@ -277,30 +277,9 @@ namespace Server.Items } } - public override void Serialize(IGenericWriter writer) + private void Deserialize(IGenericReader reader, int version) { - base.Serialize(writer); - - writer.Write(1); // version - - writer.Write(Components); - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - - var version = reader.ReadInt(); - - switch (version) - { - case 1: - case 0: - { - Components = reader.ReadEntityList(); - break; - } - } + Components = reader.ReadEntityList(); if (version < 1 && Weight == 0) { diff --git a/Projects/UOContent/Migrations/Server.Engines.BulkOrders.BaseBOD.v1.json b/Projects/UOContent/Migrations/Server.Engines.BulkOrders.BaseBOD.v1.json new file mode 100644 index 000000000..422b759d4 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Engines.BulkOrders.BaseBOD.v1.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "type": "Server.Engines.BulkOrders.BaseBOD", + "properties": [ + { + "name": "AmountMax", + "type": "int", + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [] + }, + { + "name": "RequireExceptional", + "type": "bool", + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [] + } + ] +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Engines.BulkOrders.LargeBOD.v0.json b/Projects/UOContent/Migrations/Server.Engines.BulkOrders.LargeBOD.v0.json new file mode 100644 index 000000000..677d13f20 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Engines.BulkOrders.LargeBOD.v0.json @@ -0,0 +1,16 @@ +{ + "version": 0, + "type": "Server.Engines.BulkOrders.LargeBOD", + "properties": [ + { + "name": "Entries", + "type": "Server.Engines.BulkOrders.LargeBulkEntry[]", + "rule": "ArrayMigrationRule", + "ruleArguments": [ + "Server.Engines.BulkOrders.LargeBulkEntry", + "SerializationMethodSignatureMigrationRule", + "DeserializationRequiresParent" + ] + } + ] +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Engines.BulkOrders.LargeSmithBOD.v0.json b/Projects/UOContent/Migrations/Server.Engines.BulkOrders.LargeSmithBOD.v0.json new file mode 100644 index 000000000..2a51a1091 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Engines.BulkOrders.LargeSmithBOD.v0.json @@ -0,0 +1,5 @@ +{ + "version": 0, + "type": "Server.Engines.BulkOrders.LargeSmithBOD", + "properties": [] +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Engines.BulkOrders.LargeTailorBOD.v0.json b/Projects/UOContent/Migrations/Server.Engines.BulkOrders.LargeTailorBOD.v0.json new file mode 100644 index 000000000..a89e5cdab --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Engines.BulkOrders.LargeTailorBOD.v0.json @@ -0,0 +1,5 @@ +{ + "version": 0, + "type": "Server.Engines.BulkOrders.LargeTailorBOD", + "properties": [] +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Engines.BulkOrders.SmallSmithBOD.v0.json b/Projects/UOContent/Migrations/Server.Engines.BulkOrders.SmallSmithBOD.v0.json new file mode 100644 index 000000000..3043b2886 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Engines.BulkOrders.SmallSmithBOD.v0.json @@ -0,0 +1,5 @@ +{ + "version": 0, + "type": "Server.Engines.BulkOrders.SmallSmithBOD", + "properties": [] +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Engines.BulkOrders.SmallTailorBOD.v0.json b/Projects/UOContent/Migrations/Server.Engines.BulkOrders.SmallTailorBOD.v0.json new file mode 100644 index 000000000..99af071d4 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Engines.BulkOrders.SmallTailorBOD.v0.json @@ -0,0 +1,5 @@ +{ + "version": 0, + "type": "Server.Engines.BulkOrders.SmallTailorBOD", + "properties": [] +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.BaseAddon.v2.json b/Projects/UOContent/Migrations/Server.Items.BaseAddon.v2.json new file mode 100644 index 000000000..ddc5bd0b7 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.BaseAddon.v2.json @@ -0,0 +1,21 @@ +{ + "version": 2, + "type": "Server.Items.BaseAddon", + "properties": [ + { + "name": "Components", + "type": "System.Collections.Generic.List\u003CServer.Items.AddonComponent\u003E", + "rule": "ListMigrationRule", + "ruleArguments": [ + "Server.Items.AddonComponent", + "SerializableInterfaceMigrationRule" + ] + }, + { + "name": "Resource", + "type": "Server.Items.CraftResource", + "rule": "EnumMigrationRule", + "ruleArguments": [] + } + ] +} \ No newline at end of file