fix: Reverts GetAccount to use IAccount. Adds IAccount to serialization. (#1565)
### Summary - Fixes usernames not being `Intern`ed - Reverts methods related to getting accounts from returning `Account` to `IAccount`. - Makes `IAccount` also `ISerializable` - Adds `IGenericReader.ReadAccount()` and `IGenericWriter.Write(IAccount)` -> The read method supports the original serialization of username, and using `IAccount.Serial`. The write method only serializes the `Serial`. - Exposes `ReadStringRaw()` to allow some advanced scenarios.
This commit is contained in:
parent
a4e2226a5c
commit
e6d30fef0f
9 changed files with 201 additions and 19 deletions
29
Projects/UOContent/Misc/SerializationExt.cs
Normal file
29
Projects/UOContent/Misc/SerializationExt.cs
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
using Server.Accounting;
|
||||
|
||||
namespace Server.Misc;
|
||||
|
||||
public static class SerializationExt
|
||||
{
|
||||
public static IAccount ReadAccount(this IGenericReader reader)
|
||||
{
|
||||
return reader.ReadByte() switch
|
||||
{
|
||||
0 => null,
|
||||
1 => Accounts.GetAccount(reader.ReadStringRaw()),
|
||||
2 => Accounts.FindAccount(reader.ReadSerial())
|
||||
};
|
||||
}
|
||||
|
||||
public static void Write(this IGenericWriter writer, IAccount acct)
|
||||
{
|
||||
if (acct == null)
|
||||
{
|
||||
writer.Write((byte)0);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.Write((byte)2);
|
||||
writer.Write(acct.Serial);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue