fix(codegen): Fixes various code gen issues. Adds better embedded serialization support (#688)

* Adds save flag support (see `ElvenGlasses` for an example)
* Updates AOSAttributes so they are code genned
* Fixes embedded object support by adding an `IRawSerializable`
* Fixes various inconsistencies in serializing with codegen
This commit is contained in:
Kamron Batman 2021-08-17 02:43:52 -07:00 committed by GitHub
parent 69af652a18
commit 2c8097f707
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
54 changed files with 787 additions and 507 deletions

View file

@ -11,7 +11,7 @@ using Server.Network;
namespace Server.Accounting
{
[Serializable(2)]
[Serializable(3)]
public partial class Account : IAccount, IComparable<Account>, ISerializable
{
public static readonly TimeSpan YoungDuration = TimeSpan.FromHours(40.0);
@ -348,16 +348,18 @@ namespace Server.Accounting
}
}
// Handle old deserialization before codegen
private void Deserialize(IGenericReader reader, int version)
{
// Due to a bug where we were not versioning at all, reset so we don't have an issue deserializing
reader.Seek(0, SeekOrigin.Begin);
if (version != 2)
{
// Due to a bug where we were not versioning at all, reset so we don't have an issue deserializing
reader.Seek(0, SeekOrigin.Begin);
}
_username = reader.ReadString();
_passwordAlgorithm = (PasswordProtectionAlgorithm)reader.ReadInt();
_passwordAlgorithm = version < 2 ? (PasswordProtectionAlgorithm)reader.ReadInt() : reader.ReadEnum<PasswordProtectionAlgorithm>();
_password = reader.ReadString();
_accessLevel = (AccessLevel)reader.ReadInt();
_accessLevel = version < 2 ? (AccessLevel)reader.ReadInt() : reader.ReadEnum<AccessLevel>();
_flags = reader.ReadInt();
_created = reader.ReadDateTime();
_lastLogin = reader.ReadDateTime();
@ -390,9 +392,16 @@ namespace Server.Accounting
_loginIPs = new IPAddress[length];
for (int i = 0; i < length; i++)
{
if (IPAddress.TryParse(reader.ReadString(), out var address))
if (version < 2)
{
_loginIPs[i] = Utility.Intern(address);
if (IPAddress.TryParse(reader.ReadString(), out var address))
{
_loginIPs[i] = Utility.Intern(address);
}
}
else
{
_loginIPs[i] = reader.ReadIPAddress();
}
}
@ -405,6 +414,8 @@ namespace Server.Accounting
_totalGameTime = reader.ReadTimeSpan();
_email = reader.ReadString();
Timer.StartTimer(AfterDeserialization);
}