fix(core): Fixes several serialization issues (#355)
- [X] Fixes an issue where a buffer smaller than 8 bytes would not double with enough space in some cases. - [X] Fixes an issue with dupe copying the savebuffer reference (ugh). - [X] Streamlines the IGenericWriter API to use better generics. - [X] Streamlines the IGenericReader API to use better generics. - [X] Forces `tidying` of a List/HashSet to be done externally since Writers/Readers should not have side effects. - [X] Fixes an issue where Tidying a list didn't TrimExcess, causing memory leaks. - [X] Reverted the meaning of `World.Running` to specifically refer to any world state post world loading. - NOTE: Do not use this if you want to block on world saves. Instead use checks against `WorldState.Saving` states. - [X] Fixes an issue with serializing negative DateTime deltas. - [X] Fixes a potential issue with serializing non-UTC DateTime. Bumps release version
This commit is contained in:
parent
0888ab9b86
commit
4ddb3de026
162 changed files with 652 additions and 1045 deletions
|
|
@ -260,7 +260,7 @@ namespace Server.Items
|
|||
case 1:
|
||||
case 0:
|
||||
{
|
||||
Addon = reader.ReadItem() as BaseAddon;
|
||||
Addon = reader.ReadEntity<BaseAddon>();
|
||||
Offset = reader.ReadPoint3D();
|
||||
|
||||
Addon?.OnComponentLoaded(this);
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ namespace Server.Items
|
|||
|
||||
var version = reader.ReadInt();
|
||||
|
||||
Addon = reader.ReadItem() as BaseAddonContainer;
|
||||
Addon = reader.ReadEntity<BaseAddonContainer>();
|
||||
Offset = reader.ReadPoint3D();
|
||||
|
||||
Addon?.OnComponentLoaded(this);
|
||||
|
|
|
|||
|
|
@ -105,8 +105,11 @@ namespace Server.Items
|
|||
writer.Write(Topic[i]);
|
||||
}
|
||||
|
||||
writer.Write(Yes, true);
|
||||
writer.Write(No, true);
|
||||
Yes.Tidy();
|
||||
writer.Write(Yes);
|
||||
|
||||
No.Tidy();
|
||||
writer.Write(No);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
|
|
@ -122,8 +125,8 @@ namespace Server.Items
|
|||
Topic[i] = reader.ReadString();
|
||||
}
|
||||
|
||||
Yes = reader.ReadStrongMobileList();
|
||||
No = reader.ReadStrongMobileList();
|
||||
Yes = reader.ReadEntityList<Mobile>();
|
||||
No = reader.ReadEntityList<Mobile>();
|
||||
}
|
||||
|
||||
private class InternalGump : Gump
|
||||
|
|
|
|||
|
|
@ -283,7 +283,7 @@ namespace Server.Items
|
|||
|
||||
writer.Write(1); // version
|
||||
|
||||
writer.WriteItemList(Components);
|
||||
writer.Write(Components);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
|
|
@ -297,7 +297,7 @@ namespace Server.Items
|
|||
case 1:
|
||||
case 0:
|
||||
{
|
||||
Components = reader.ReadStrongItemList<AddonComponent>();
|
||||
Components = reader.ReadEntityList<AddonComponent>();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -192,7 +192,7 @@ namespace Server.Items
|
|||
|
||||
writer.Write(0); // version
|
||||
|
||||
writer.WriteItemList(Components);
|
||||
writer.Write(Components);
|
||||
writer.Write((int)m_Resource);
|
||||
}
|
||||
|
||||
|
|
@ -202,7 +202,7 @@ namespace Server.Items
|
|||
|
||||
var version = reader.ReadInt();
|
||||
|
||||
Components = reader.ReadStrongItemList<AddonContainerComponent>();
|
||||
Components = reader.ReadEntityList<AddonContainerComponent>();
|
||||
m_Resource = (CraftResource)reader.ReadInt();
|
||||
|
||||
AddonComponent.ApplyLightTo(this);
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ namespace Server.Items
|
|||
var version = reader.ReadInt();
|
||||
|
||||
m_Active = reader.ReadBool();
|
||||
m_TeleDest = reader.ReadItem() as SHTeleComponent;
|
||||
m_TeleDest = reader.ReadEntity<SHTeleComponent>();
|
||||
TeleOffset = reader.ReadPoint3D();
|
||||
}
|
||||
}
|
||||
|
|
@ -302,10 +302,10 @@ namespace Server.Items
|
|||
|
||||
External = reader.ReadBool();
|
||||
|
||||
UpTele = (SHTeleComponent)reader.ReadItem();
|
||||
RightTele = (SHTeleComponent)reader.ReadItem();
|
||||
DownTele = (SHTeleComponent)reader.ReadItem();
|
||||
LeftTele = (SHTeleComponent)reader.ReadItem();
|
||||
UpTele = (SHTeleComponent)reader.ReadEntity<Item>();
|
||||
RightTele = (SHTeleComponent)reader.ReadEntity<Item>();
|
||||
DownTele = (SHTeleComponent)reader.ReadEntity<Item>();
|
||||
LeftTele = (SHTeleComponent)reader.ReadEntity<Item>();
|
||||
}
|
||||
|
||||
public class SHTeleporterCreator
|
||||
|
|
|
|||
|
|
@ -179,7 +179,7 @@ namespace Server.Items
|
|||
|
||||
writer.WriteEncodedInt(0); // version
|
||||
|
||||
writer.WriteMobileList(m_Spawned);
|
||||
writer.Write(m_Spawned);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
|
|
@ -188,7 +188,7 @@ namespace Server.Items
|
|||
|
||||
var version = reader.ReadEncodedInt();
|
||||
|
||||
m_Spawned = reader.ReadStrongMobileList<Mobile>();
|
||||
m_Spawned = reader.ReadEntityList<Mobile>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue