fix: Fixes RunebookEntry serialization and removes unused migrations (#1449)

### Summary

- [X] Removes migration files were committed that aren't actually (and have never) been used.
- [X] Moves runebook entry from being manually serialized to using the serialization generator.
This commit is contained in:
Kamron Batman 2023-08-10 19:27:01 -07:00 committed by GitHub
parent 23c729f31b
commit 09fc30546b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 59 additions and 74 deletions

View file

@ -38,7 +38,7 @@
<PackageReference Include="Zlib.Bindings" Version="1.11.0" /> <PackageReference Include="Zlib.Bindings" Version="1.11.0" />
<PackageReference Include="ModernUO.Serialization.Annotations" Version="2.6.0" /> <PackageReference Include="ModernUO.Serialization.Annotations" Version="2.6.0" />
<PackageReference Include="ModernUO.Serialization.Generator" Version="2.6.1" /> <PackageReference Include="ModernUO.Serialization.Generator" Version="2.6.2" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<AdditionalFiles Include="Migrations/*.v*.json" /> <AdditionalFiles Include="Migrations/*.v*.json" />

View file

@ -624,7 +624,7 @@ namespace Server.Factions
{ {
spell = new RecallSpell( spell = new RecallSpell(
m_Guard, m_Guard,
new RunebookEntry(m_Guard.Home, m_Guard.Map, "Guard's Home") new RunebookEntry(null, m_Guard.Home, m_Guard.Map, "Guard's Home")
); );
} }
else if (IsAllowed(GuardAI.Bless)) else if (IsAllowed(GuardAI.Bless))

View file

@ -129,7 +129,9 @@ public partial class Runebook : Item, ISecurable, ICraftable
for (var i = 0; i < count; ++i) for (var i = 0; i < count; ++i)
{ {
Entries.Add(new RunebookEntry(reader)); var entry = new RunebookEntry(this);
entry.Deserialize(reader);
Entries.Add(entry);
} }
_description = reader.ReadString(); _description = reader.ReadString();
@ -285,7 +287,7 @@ public partial class Runebook : Item, ISecurable, ICraftable
{ {
var entry = Entries[i]; var entry = Entries[i];
book.Entries.Add(new RunebookEntry(entry.Location, entry.Map, entry.Description, entry.House)); book.Entries.Add(new RunebookEntry(this, entry.Location, entry.Map, entry.Description, entry.House));
} }
} }
@ -326,7 +328,7 @@ public partial class Runebook : Item, ISecurable, ICraftable
if (rune.Marked && rune.TargetMap != null) if (rune.Marked && rune.TargetMap != null)
{ {
Entries.Add(new RunebookEntry(rune.Target, rune.TargetMap, rune.Description, rune.House)); Entries.Add(new RunebookEntry(this, rune.Target, rune.TargetMap, rune.Description, rune.House));
rune.Delete(); rune.Delete();
@ -370,60 +372,67 @@ public partial class Runebook : Item, ISecurable, ICraftable
} }
} }
[ManualDirtyChecking] [SerializationGenerator(2)]
public class RunebookEntry public partial class RunebookEntry
{ {
public RunebookEntry(Point3D loc, Map map, string description, BaseHouse house = null) [CanBeNull]
[DirtyTrackingEntity]
private Runebook _runebook;
[SerializableField(0)]
private BaseHouse _house;
[SerializableFieldSaveFlag(0)]
public bool ShouldSerializeHouse() => _house?.Deleted == false;
[SerializableField(1)]
private Point3D _location;
[SerializableFieldSaveFlag(1)]
public bool ShouldSerializeLocation() => _house?.Deleted != false;
[SerializableField(2)]
private Map _map;
[SerializableFieldSaveFlag(2)]
public bool ShouldSerializeMap() => _house?.Deleted != false;
[SerializableField(3)]
private string _description;
[SerializableFieldSaveFlag(3)]
public bool ShouldSerializeDesc() => _house?.Deleted != false;
public RunebookEntry(Runebook runebook) : this(runebook, new Point3D(), null, null)
{ {
Location = loc;
Map = map;
Description = description;
House = house;
} }
public RunebookEntry(IGenericReader reader) public RunebookEntry(Runebook runebook, Point3D loc, Map map, string description, BaseHouse house = null)
{
_runebook = runebook;
_house = house;
_location = loc;
_map = map;
_description = description;
}
private void Deserialize(IGenericReader reader, int version)
{ {
var version = reader.ReadByte();
switch (version) switch (version)
{ {
case 1: case 1:
{ {
House = reader.ReadEntity<BaseHouse>(); _house = reader.ReadEntity<BaseHouse>();
goto case 0; goto case 0;
} }
case 0: case 0:
{ {
Location = reader.ReadPoint3D(); _location = reader.ReadPoint3D();
Map = reader.ReadMap(); _map = reader.ReadMap();
Description = reader.ReadString(); _description = reader.ReadString();
break; break;
} }
} }
} }
public void Serialize(IGenericWriter writer)
{
if (House?.Deleted == false)
{
writer.Write((byte)1); // version
writer.Write(House);
}
else
{
writer.Write((byte)0); // version
}
writer.Write(Location);
writer.Write(Map);
writer.Write(Description);
}
public BaseHouse House { get; }
public Point3D Location { get; }
public Map Map { get; }
public string Description { get; }
} }

View file

@ -26,8 +26,8 @@
"rule": "ListMigrationRule", "rule": "ListMigrationRule",
"ruleArguments": [ "ruleArguments": [
"Server.Items.RunebookEntry", "Server.Items.RunebookEntry",
"SerializationMethodSignatureMigrationRule", "RawSerializableMigrationRule",
"" "DeserializationRequiresParent"
] ]
}, },
{ {

View file

@ -5,11 +5,13 @@
{ {
"name": "House", "name": "House",
"type": "Server.Multis.BaseHouse", "type": "Server.Multis.BaseHouse",
"usesSaveFlag": true,
"rule": "SerializableInterfaceMigrationRule" "rule": "SerializableInterfaceMigrationRule"
}, },
{ {
"name": "Location", "name": "Location",
"type": "Server.Point3D", "type": "Server.Point3D",
"usesSaveFlag": true,
"rule": "PrimitiveUOTypeMigrationRule", "rule": "PrimitiveUOTypeMigrationRule",
"ruleArguments": [ "ruleArguments": [
"Point3D" "Point3D"
@ -18,6 +20,7 @@
{ {
"name": "Map", "name": "Map",
"type": "Server.Map", "type": "Server.Map",
"usesSaveFlag": true,
"rule": "PrimitiveUOTypeMigrationRule", "rule": "PrimitiveUOTypeMigrationRule",
"ruleArguments": [ "ruleArguments": [
"Map" "Map"
@ -26,6 +29,7 @@
{ {
"name": "Description", "name": "Description",
"type": "string", "type": "string",
"usesSaveFlag": true,
"rule": "PrimitiveTypeMigrationRule", "rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [ "ruleArguments": [
"" ""

View file

@ -1,24 +0,0 @@
{
"version": 1,
"type": "Server.Mobiles.BaseMount",
"properties": [
{
"name": "NextMountAbility",
"type": "System.DateTime",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
""
]
},
{
"name": "Rider",
"type": "Server.Mobile",
"rule": "SerializableInterfaceMigrationRule"
},
{
"name": "InternalItem",
"type": "Server.Item",
"rule": "SerializableInterfaceMigrationRule"
}
]
}

View file

@ -1,4 +0,0 @@
{
"version": 1,
"type": "Server.Mobiles.SkeletalMount"
}

View file

@ -39,7 +39,7 @@
<PackageReference Include="Zstd.Binaries" Version="1.6.0" /> <PackageReference Include="Zstd.Binaries" Version="1.6.0" />
<PackageReference Include="ModernUO.Serialization.Annotations" Version="2.6.0" /> <PackageReference Include="ModernUO.Serialization.Annotations" Version="2.6.0" />
<PackageReference Include="ModernUO.Serialization.Generator" Version="2.6.1" /> <PackageReference Include="ModernUO.Serialization.Generator" Version="2.6.2" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<AdditionalFiles Include="Migrations/*.v*.json" /> <AdditionalFiles Include="Migrations/*.v*.json" />