fix: Adds Poison to codegen (#1002)
This commit is contained in:
parent
933c41070f
commit
fc3d9b926d
16 changed files with 140 additions and 171 deletions
|
|
@ -3,7 +3,7 @@
|
|||
"isRoot": true,
|
||||
"tools": {
|
||||
"modernuoschemagenerator": {
|
||||
"version": "2.0.3",
|
||||
"version": "2.0.4",
|
||||
"commands": [
|
||||
"ModernUOSchemaGenerator"
|
||||
]
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
118
Projects/Server/Serialization/SerializationExtensions.cs
Normal file
118
Projects/Server/Serialization/SerializationExtensions.cs
Normal 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;
|
||||
}
|
||||
|
|
@ -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" />
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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" />
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue