fix(core): Fixes issues with deserialization due to bad checking of dirty tracking (#618)

Fixes a major issue where serialization was not respecting the dirty tracking feature flag.
This commit is contained in:
Kamron Batman 2021-05-26 13:47:04 -07:00 committed by GitHub
parent 3c6356e8fa
commit 1f499b00c6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 16 additions and 7 deletions

View file

@ -33,6 +33,7 @@ namespace Server.Guilds
World.AddGuild(this); World.AddGuild(this);
SetTypeRef(GetType()); SetTypeRef(GetType());
((ISerializable)this).MarkDirty();
} }
protected BaseGuild(Serial serial) protected BaseGuild(Serial serial)

View file

@ -231,6 +231,7 @@ namespace Server
World.AddEntity(this); World.AddEntity(this);
SetTypeRef(GetType()); SetTypeRef(GetType());
((ISerializable)this).MarkDirty();
} }
public Item(Serial serial) public Item(Serial serial)

View file

@ -559,8 +559,8 @@ namespace Server
DefaultMobileInit(); DefaultMobileInit();
World.AddEntity(this); World.AddEntity(this);
SetTypeRef(GetType()); SetTypeRef(GetType());
((ISerializable)this).MarkDirty();
} }
public Mobile(Serial serial) public Mobile(Serial serial)

View file

@ -39,6 +39,14 @@ namespace Server
public void InitializeSaveBuffer(byte[] buffer) public void InitializeSaveBuffer(byte[] buffer)
{ {
SaveBuffer = new BufferWriter(buffer, true); SaveBuffer = new BufferWriter(buffer, true);
if (World.DirtyTrackingEnabled)
{
SavePosition = SaveBuffer.Position;
}
else
{
SavePosition = -1;
}
} }
public void Serialize() public void Serialize()
@ -59,6 +67,10 @@ namespace Server
{ {
SavePosition = SaveBuffer.Position; SavePosition = SaveBuffer.Position;
} }
else
{
SavePosition = -1;
}
} }
} }
} }

View file

@ -1,4 +1,3 @@
using System;
using System.IO; using System.IO;
using System.Net; using System.Net;
using Server.Logging; using Server.Logging;

View file

@ -1,8 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Net; using System.Net;
using System.Runtime.CompilerServices;
using System.Xml; using System.Xml;
using Server.Accounting.Security; using Server.Accounting.Security;
using Server.Misc; using Server.Misc;
@ -43,12 +41,12 @@ namespace Server.Accounting
LoginIPs = Array.Empty<IPAddress>(); LoginIPs = Array.Empty<IPAddress>();
Accounts.Add(this); Accounts.Add(this);
((ISerializable)this).MarkDirty();
} }
public Account(Serial serial) public Account(Serial serial)
{ {
Serial = serial; Serial = serial;
SetTypeRef(GetType()); SetTypeRef(GetType());
} }

View file

@ -5,7 +5,6 @@ using System.Net;
using Server.Accounting; using Server.Accounting;
using Server.Engines.Help; using Server.Engines.Help;
using Server.Logging; using Server.Logging;
using Server.Multis;
using Server.Network; using Server.Network;
using Server.Regions; using Server.Regions;

View file

@ -16,7 +16,6 @@
using System; using System;
using System.Buffers.Binary; using System.Buffers.Binary;
using System.Security.Cryptography; using System.Security.Cryptography;
using Server.Network;
using Server.Text; using Server.Text;
namespace Server.Accounting.Security namespace Server.Accounting.Security