fix: Adds Created, LastSerialized, and BeforeSerialize for all entities. (#775)

* Adds `BeforeSerialized` for entities to handle cleanup.
* Adds `Created` and `LastSerialized` fields to all entities. While this is a big bloat, this will be necessary for identifying dangling references to other invalid entities.
* Changes formula for determining a valid reference to be _not null, not deleted, and reference's created date must be at or before the entities last serialized date_.
* Adds versioning to idx file and serializes `Created` and `LastSerialized`.
* Fixes Save Stats and also disables it by default.
This commit is contained in:
Kamron Batman 2021-09-26 01:09:45 -07:00 • committed by GitHub
parent 3f6a87483b
commit fa5eafdaff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 325 additions and 88 deletions

View file

@ -1147,9 +1147,6 @@ namespace Server
public virtual bool ShouldCheckStatTimers => true;
[CommandProperty(AccessLevel.GameMaster)]
public DateTime CreationTime { get; private set; }
[CommandProperty(AccessLevel.GameMaster)]
public int LightLevel
{
@ -2472,6 +2469,12 @@ namespace Server
AddNameProperties(list);
}
[CommandProperty(AccessLevel.GameMaster, readOnly: true)]
public DateTime Created { get; set; } = Core.Now;
[CommandProperty(AccessLevel.GameMaster)]
DateTime ISerializable.LastSerialized { get; set; } = Core.Now;
long ISerializable.SavePosition { get; set; } = -1;
BufferWriter ISerializable.SaveBuffer { get; set; }
@ -2483,7 +2486,7 @@ namespace Server
public virtual void Serialize(IGenericWriter writer)
{
writer.Write(32); // version
writer.Write(33); // version
writer.WriteDeltaTime(LastStrGain);
writer.WriteDeltaTime(LastIntGain);
@ -2519,7 +2522,7 @@ namespace Server
writer.Write(Corpse);
writer.Write(CreationTime);
// writer.Write(CreationTime);
Stabled.Tidy();
writer.Write(Stabled);
@ -6167,12 +6170,21 @@ namespace Server
{
}
public virtual void BeforeSerialize()
{
}
public virtual void Deserialize(IGenericReader reader)
{
var version = reader.ReadInt();
switch (version)
{
case 33:
{
// Removed created
goto case 32;
}
case 32:
{
// Removed StuckMenu
@ -6232,7 +6244,10 @@ namespace Server
}
case 23:
{
CreationTime = reader.ReadDateTime();
if (version < 33)
{
Created = reader.ReadDateTime();
}
goto case 22;
}
@ -7818,7 +7833,6 @@ namespace Server
DamageEntries = new List<DamageEntry>();
NextSkillTime = Core.TickCount;
CreationTime = Core.Now;
}
public virtual void Delta(MobileDelta flag)