fix: Adds Poison to codegen (#1002)

This commit is contained in:
Kamron Batman 2022-04-18 00:05:44 -07:00 committed by GitHub
parent 933c41070f
commit fc3d9b926d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 140 additions and 171 deletions

View file

@ -3,7 +3,7 @@
"isRoot": true,
"tools": {
"modernuoschemagenerator": {
"version": "2.0.3",
"version": "2.0.4",
"commands": [
"ModernUOSchemaGenerator"
]

View file

@ -2571,8 +2571,6 @@ namespace Server
writer.Write(DisarmReady);
writer.Write(StunReady);
// Poison.Serialize( m_Poison, writer );
writer.Write(m_StatCap);
writer.Write(NameHue);
@ -6386,7 +6384,7 @@ namespace Server
{
if (version <= 25)
{
Poison.Deserialize(reader);
reader.ReadPoison();
}
goto case 3;

View file

@ -76,35 +76,5 @@ namespace Server
return null;
}
public static void Serialize(Poison p, IGenericWriter writer)
{
if (p == null)
{
writer.Write((byte)0);
}
else
{
writer.Write((byte)1);
writer.Write((byte)p.Level);
}
}
public static Poison Deserialize(IGenericReader reader)
{
switch (reader.ReadByte())
{
case 1: return GetPoison(reader.ReadByte());
case 2:
// no longer used, safe to remove?
reader.ReadInt();
reader.ReadDouble();
reader.ReadInt();
reader.ReadTimeSpan();
break;
}
return null;
}
}
}

View file

@ -1,23 +0,0 @@
/*************************************************************************
* ModernUO *
* Copyright 2019-2021 - ModernUO Development Team *
* Email: hi@modernuo.com *
* File: IRawSerializable.cs *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
*************************************************************************/
namespace Server
{
public interface IRawSerializable
{
void Deserialize(IGenericReader reader);
void Serialize(IGenericWriter writer);
}
}

View file

@ -0,0 +1,118 @@
using System;
using System.Collections.Generic;
using Server.Guilds;
namespace Server;
public static class SerializationExtensions
{
public static T ReadEntity<T>(this IGenericReader reader) where T : class, ISerializable
{
Serial serial = reader.ReadSerial();
var typeT = typeof(T);
T entity;
// Add to this list when creating new serializable types
if (typeof(BaseGuild).IsAssignableFrom(typeT))
{
entity = World.FindGuild(serial) as T;
// If we check for `entity.Deleted` here during deserialization then all guilds are deleted because
// Deleted -> Disbanded -> No leader, which is the case before deserialization.
// TODO: Use a deleted flag instead, and actively check for dibanded guilds properly.
}
else
{
entity = World.FindEntity<IEntity>(serial) as T;
if (entity?.Deleted == false)
{
return entity;
}
}
return entity?.Created <= reader.LastSerialized ? entity : null;
}
public static List<T> ReadEntityList<T>(this IGenericReader reader) where T : class, ISerializable
{
var count = reader.ReadInt();
var list = new List<T>(count);
for (var i = 0; i < count; ++i)
{
var entity = reader.ReadEntity<T>();
if (entity != null)
{
list.Add(entity);
}
}
return list;
}
public static HashSet<T> ReadEntitySet<T>(this IGenericReader reader) where T : class, ISerializable
{
var count = reader.ReadInt();
var set = new HashSet<T>(count);
for (var i = 0; i < count; ++i)
{
var entity = reader.ReadEntity<T>();
if (entity != null)
{
set.Add(entity);
}
}
return set;
}
public static void Write(this IGenericWriter writer, ISerializable value)
{
writer.Write(value?.Deleted != false ? Serial.MinusOne : value.Serial);
}
public static void Write<T>(this IGenericWriter writer, ICollection<T> coll) where T : class, ISerializable
{
writer.Write(coll.Count);
foreach (var entry in coll)
{
writer.Write(entry);
}
}
public static void Write<T>(
this IGenericWriter writer, ICollection<T> coll, Action<IGenericWriter, T> action
) where T : class, ISerializable
{
if (coll == null)
{
writer.Write(0);
return;
}
writer.Write(coll.Count);
foreach (var entry in coll)
{
action(writer, entry);
}
}
public static void Write(this IGenericWriter writer, Poison p)
{
if (p == null)
{
writer.Write(false);
}
else
{
writer.Write(true);
writer.Write((byte)p.Level);
}
}
public static Poison ReadPoison(this IGenericReader reader) =>
reader.ReadBool() ? Poison.GetPoison(reader.ReadByte()) : null;
}

View file

@ -39,7 +39,7 @@
<PackageReference Include="Zlib.Bindings" Version="1.8.0" />
<PackageReference Include="ModernUO.Serialization.Annotations" Version="2.0.2" />
<PackageReference Include="ModernUO.Serialization.Generator" Version="2.0.3" />
<PackageReference Include="ModernUO.Serialization.Generator" Version="2.0.4" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="Migrations/*.v*.json" />

View file

@ -657,99 +657,5 @@ namespace Server
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void RemoveGuild(BaseGuild guild) => Guilds.Remove(guild.Serial);
public static T ReadEntity<T>(this IGenericReader reader) where T : class, ISerializable
{
Serial serial = reader.ReadSerial();
var typeT = typeof(T);
T entity;
// Add to this list when creating new serializable types
if (typeof(BaseGuild).IsAssignableFrom(typeT))
{
entity = FindGuild(serial) as T;
// If we check for `entity.Deleted` here during deserialization then all guilds are deleted because
// Deleted -> Disbanded -> No leader, which is the case before deserialization.
// TODO: Use a deleted flag instead, and actively check for dibanded guilds properly.
}
else
{
entity = FindEntity<IEntity>(serial) as T;
if (entity?.Deleted == false)
{
return entity;
}
}
return entity?.Created <= reader.LastSerialized ? entity : null;
}
public static List<T> ReadEntityList<T>(this IGenericReader reader) where T : class, ISerializable
{
var count = reader.ReadInt();
var list = new List<T>(count);
for (var i = 0; i < count; ++i)
{
var entity = reader.ReadEntity<T>();
if (entity != null)
{
list.Add(entity);
}
}
return list;
}
public static HashSet<T> ReadEntitySet<T>(this IGenericReader reader) where T : class, ISerializable
{
var count = reader.ReadInt();
var set = new HashSet<T>(count);
for (var i = 0; i < count; ++i)
{
var entity = reader.ReadEntity<T>();
if (entity != null)
{
set.Add(entity);
}
}
return set;
}
public static void Write(this IGenericWriter writer, ISerializable value)
{
writer.Write(value?.Deleted != false ? Serial.MinusOne : value.Serial);
}
public static void Write<T>(this IGenericWriter writer, ICollection<T> coll) where T : class, ISerializable
{
writer.Write(coll.Count);
foreach (var entry in coll)
{
writer.Write(entry);
}
}
public static void Write<T>(
this IGenericWriter writer, ICollection<T> coll, Action<IGenericWriter, T> action
) where T : class, ISerializable
{
if (coll == null)
{
writer.Write(0);
return;
}
writer.Write(coll.Count);
foreach (var entry in coll)
{
action(writer, entry);
}
}
}
}

View file

@ -1101,7 +1101,7 @@ namespace Server.Items
writer.Write(Poisoner);
Poison.Serialize(Poison, writer);
writer.Write(Poison);
writer.Write((int)m_Content);
writer.Write(m_Quantity);
}
@ -1133,7 +1133,7 @@ namespace Server.Items
}
case 0:
{
Poison = Poison.Deserialize(reader);
Poison = reader.ReadPoison();
m_Content = (BeverageType)reader.ReadInt();
m_Quantity = reader.ReadInt();
break;

View file

@ -142,7 +142,7 @@ namespace Server.Items
writer.Write(Poisoner);
Poison.Serialize(Poison, writer);
writer.Write(Poison);
writer.Write(FillFactor);
}
@ -170,12 +170,12 @@ namespace Server.Items
}
case 2:
{
Poison = Poison.Deserialize(reader);
Poison = reader.ReadPoison();
break;
}
case 3:
{
Poison = Poison.Deserialize(reader);
Poison = reader.ReadPoison();
FillFactor = reader.ReadInt();
break;
}

View file

@ -123,7 +123,7 @@ namespace Server.Items
writer.Write(m_UsesRemaining);
Poison.Serialize(m_Poison, writer);
writer.Write(m_Poison);
writer.Write(m_PoisonCharges);
}
@ -139,7 +139,7 @@ namespace Server.Items
{
m_UsesRemaining = reader.ReadInt();
m_Poison = Poison.Deserialize(reader);
m_Poison = reader.ReadPoison();
m_PoisonCharges = reader.ReadInt();
break;

View file

@ -93,7 +93,7 @@ namespace Server.Items
writer.Write(m_UsesRemaining);
Poison.Serialize(m_Poison, writer);
writer.Write(m_Poison);
writer.Write(m_PoisonCharges);
}
@ -109,7 +109,7 @@ namespace Server.Items
{
m_UsesRemaining = reader.ReadInt();
m_Poison = Poison.Deserialize(reader);
m_Poison = reader.ReadPoison();
m_PoisonCharges = reader.ReadInt();
break;

View file

@ -136,7 +136,7 @@ namespace Server.Items
writer.Write(m_UsesRemaining);
Poison.Serialize(m_Poison, writer);
writer.Write(m_Poison);
writer.Write(m_PoisonCharges);
}
@ -152,7 +152,7 @@ namespace Server.Items
{
m_UsesRemaining = reader.ReadInt();
m_Poison = Poison.Deserialize(reader);
m_Poison = reader.ReadPoison();
m_PoisonCharges = reader.ReadInt();
break;

View file

@ -94,7 +94,7 @@ namespace Server.Items
writer.Write(m_UsesRemaining);
Poison.Serialize(m_Poison, writer);
writer.Write(m_Poison);
writer.Write(m_PoisonCharges);
}
@ -110,7 +110,7 @@ namespace Server.Items
{
m_UsesRemaining = reader.ReadInt();
m_Poison = Poison.Deserialize(reader);
m_Poison = reader.ReadPoison();
m_PoisonCharges = reader.ReadInt();
break;

View file

@ -85,7 +85,7 @@ namespace Server.Items
writer.Write(0); // version
Poison.Serialize(Poison, writer);
writer.Write(Poison);
}
public override void Deserialize(IGenericReader reader)
@ -98,7 +98,7 @@ namespace Server.Items
{
case 0:
{
Poison = Poison.Deserialize(reader);
Poison = reader.ReadPoison();
break;
}
}

View file

@ -3614,7 +3614,7 @@ namespace Server.Items
if (GetSaveFlag(flags, SaveFlag.Poison))
{
Poison.Serialize(m_Poison, writer);
writer.Write(m_Poison);
}
if (GetSaveFlag(flags, SaveFlag.PoisonCharges))
@ -3797,7 +3797,7 @@ namespace Server.Items
if (GetSaveFlag(flags, SaveFlag.Poison))
{
m_Poison = Poison.Deserialize(reader);
m_Poison = reader.ReadPoison();
}
if (GetSaveFlag(flags, SaveFlag.PoisonCharges))
@ -4057,7 +4057,7 @@ namespace Server.Items
m_Crafter = reader.ReadEntity<Mobile>();
m_Poison = Poison.Deserialize(reader);
m_Poison = reader.ReadPoison();
m_PoisonCharges = reader.ReadInt();
if (m_StrReq == OldStrengthReq)

View file

@ -46,7 +46,7 @@
<PackageReference Include="Zstd.Binaries" Version="1.3.0" />
<PackageReference Include="ModernUO.Serialization.Annotations" Version="2.0.2" />
<PackageReference Include="ModernUO.Serialization.Generator" Version="2.0.3" />
<PackageReference Include="ModernUO.Serialization.Generator" Version="2.0.4" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="Migrations/*.v*.json" />