fix(codegen): Reverts & Disables codegen (for now) (#625)

After speaking with the C# devs, it is clear that code gen is not ready.
I can get around this by doing the following:
1. Creating a library
2. Splitting out the schema writing from the source generator
3. Moving the schema loading to `AdditionalFiles`
4. Writing a new post-build application using Roslyn to write the schema files after building.
This commit is contained in:
Kamron Batman 2021-05-27 19:50:22 -07:00 • committed by GitHub
parent 6e9108302a
commit f2d44e0283
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
84 changed files with 1053 additions and 487 deletions

View file

@ -27,13 +27,6 @@ namespace SerializationGenerator
{ {
public void Initialize(GeneratorInitializationContext context) public void Initialize(GeneratorInitializationContext context)
{ {
#if DEBUG
if (!Debugger.IsAttached)
{
Debugger.Launch();
}
#endif
context.RegisterForPostInitialization(i => context.RegisterForPostInitialization(i =>
{ {
SerializerSyntaxReceiver.AttributeTypes.Add("Server.SerializableAttribute"); SerializerSyntaxReceiver.AttributeTypes.Add("Server.SerializableAttribute");

View file

@ -70,7 +70,7 @@ namespace SerializationGenerator
Array.Copy(ruleArguments, 2, arrayElementRuleArguments, 0, ruleArguments.Length - 2); Array.Copy(ruleArguments, 2, arrayElementRuleArguments, 0, ruleArguments.Length - 2);
var propertyIndex = $"{property.Name}Index"; var propertyIndex = $"{property.Name}Index";
source.AppendLine($"{indent}{property.Name} = new {ruleArguments[0]}[reader.ReadEncodedInt()];"); source.AppendLine($"{indent}{property.Name} = new {ruleArguments[0]}[reader.ReadInt()];");
source.AppendLine($"{indent}for (var {propertyIndex} = 0; {propertyIndex} < {property.Name}.Length; {propertyIndex}++)"); source.AppendLine($"{indent}for (var {propertyIndex} = 0; {propertyIndex} < {property.Name}.Length; {propertyIndex}++)");
source.AppendLine($"{indent}{{"); source.AppendLine($"{indent}{{");
@ -101,9 +101,11 @@ namespace SerializationGenerator
var arrayElementRuleArguments = new string[ruleArguments.Length - 2]; var arrayElementRuleArguments = new string[ruleArguments.Length - 2];
Array.Copy(ruleArguments, 2, arrayElementRuleArguments, 0, ruleArguments.Length - 2); Array.Copy(ruleArguments, 2, arrayElementRuleArguments, 0, ruleArguments.Length - 2);
var propertyIndex = $"{property.Name}Index"; var propertyName = property.Name;
source.AppendLine($"{indent}writer.WriteEncodedInt({property.Name}.Length);"); var propertyVarPrefix = $"{char.ToLower(propertyName[0])}{propertyName.Substring(1, propertyName.Length - 1)}";
source.AppendLine($"{indent}for (var {propertyIndex} = 0; {propertyIndex} < {property.Name}.Length; {propertyIndex}++)"); var propertyIndex = $"{propertyVarPrefix}Index";
source.AppendLine($"{indent}writer.Write({property.Name}.Length);");
source.AppendLine($"{indent}for (var {propertyIndex} = 0; {propertyIndex} < {propertyVarPrefix}.Length; {propertyIndex}++)");
source.AppendLine($"{indent}{{"); source.AppendLine($"{indent}{{");
var serializableArrayElement = new SerializableProperty var serializableArrayElement = new SerializableProperty

View file

@ -76,12 +76,10 @@ namespace SerializationGenerator
var propertyVarPrefix = $"{char.ToLower(propertyName[0])}{propertyName.Substring(1, propertyName.Length - 1)}"; var propertyVarPrefix = $"{char.ToLower(propertyName[0])}{propertyName.Substring(1, propertyName.Length - 1)}";
var propertyIndex = $"{propertyVarPrefix}Index"; var propertyIndex = $"{propertyVarPrefix}Index";
var propertyEntry = $"{propertyVarPrefix}Entry"; var propertyEntry = $"{propertyVarPrefix}Entry";
var propertyCount = $"{propertyVarPrefix}Count";
source.AppendLine($"{indent}{ruleArguments[0]} {propertyEntry};"); source.AppendLine($"{indent}{ruleArguments[0]} {propertyEntry};");
source.AppendLine($"{indent}var {propertyCount} = reader.ReadEncodedInt();"); source.AppendLine($"{indent}{propertyName} = new System.Collections.Generic.HashSet<{ruleArguments[0]}>(reader.ReadInt());");
source.AppendLine($"{indent}{property.Name} = new System.Collections.Generic.HashSet<{ruleArguments[0]}>({propertyCount});"); source.AppendLine($"{indent}for (var {propertyIndex} = 0; i < {propertyName}.Count; {propertyIndex}++)");
source.AppendLine($"{indent}for (var {propertyIndex} = 0; i < {propertyCount}; {propertyIndex}++)");
source.AppendLine($"{indent}{{"); source.AppendLine($"{indent}{{");
var serializableSetElement = new SerializableProperty var serializableSetElement = new SerializableProperty
@ -115,7 +113,7 @@ namespace SerializationGenerator
var propertyName = property.Name; var propertyName = property.Name;
var propertyVarPrefix = $"{char.ToLower(propertyName[0])}{propertyName.Substring(1, propertyName.Length - 1)}"; var propertyVarPrefix = $"{char.ToLower(propertyName[0])}{propertyName.Substring(1, propertyName.Length - 1)}";
var propertyEntry = $"{propertyVarPrefix}Entry"; var propertyEntry = $"{propertyVarPrefix}Entry";
source.AppendLine($"{indent}writer.WriteEncodedInt({property.Name}.Count);"); source.AppendLine($"{indent}writer.Write({property.Name}.Count);");
source.AppendLine($"{indent}foreach (var {propertyEntry} in {property.Name});"); source.AppendLine($"{indent}foreach (var {propertyEntry} in {property.Name});");
source.AppendLine($"{indent}{{"); source.AppendLine($"{indent}{{");

View file

@ -76,12 +76,10 @@ namespace SerializationGenerator
var propertyVarPrefix = $"{char.ToLower(propertyName[0])}{propertyName.Substring(1, propertyName.Length - 1)}"; var propertyVarPrefix = $"{char.ToLower(propertyName[0])}{propertyName.Substring(1, propertyName.Length - 1)}";
var propertyIndex = $"{propertyVarPrefix}Index"; var propertyIndex = $"{propertyVarPrefix}Index";
var propertyEntry = $"{propertyVarPrefix}Entry"; var propertyEntry = $"{propertyVarPrefix}Entry";
var propertyCount = $"{propertyVarPrefix}Count";
source.AppendLine($"{indent}{ruleArguments[0]} {propertyEntry};"); source.AppendLine($"{indent}{ruleArguments[0]} {propertyEntry};");
source.AppendLine($"{indent}var {propertyCount} = reader.ReadEncodedInt();"); source.AppendLine($"{indent}{propertyName} = new System.Collections.Generic.List<{ruleArguments[0]}>(reader.ReadInt());");
source.AppendLine($"{indent}{propertyName} = new System.Collections.Generic.List<{ruleArguments[0]}>({propertyCount});"); source.AppendLine($"{indent}for (var {propertyIndex} = 0; {propertyIndex} < {propertyName}.Count; {propertyIndex}++)");
source.AppendLine($"{indent}for (var {propertyIndex} = 0; {propertyIndex} < {propertyCount}; {propertyIndex}++)");
source.AppendLine($"{indent}{{"); source.AppendLine($"{indent}{{");
var serializableListElement = new SerializableProperty var serializableListElement = new SerializableProperty
@ -114,7 +112,7 @@ namespace SerializationGenerator
var propertyName = property.Name; var propertyName = property.Name;
var propertyEntry = $"{char.ToLower(propertyName[0])}{propertyName.Substring(1, propertyName.Length - 1)}Entry"; var propertyEntry = $"{char.ToLower(propertyName[0])}{propertyName.Substring(1, propertyName.Length - 1)}Entry";
source.AppendLine($"{indent}writer.WriteEncodedInt({propertyName}.Count);"); source.AppendLine($"{indent}writer.Write({propertyName}.Count);");
source.AppendLine($"{indent}foreach (var {propertyEntry} in {propertyName})"); source.AppendLine($"{indent}foreach (var {propertyEntry} in {propertyName})");
source.AppendLine($"{indent}{{"); source.AppendLine($"{indent}{{");

View file

@ -41,32 +41,32 @@
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" /> <PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
<PackageReference Include="Zlib.Bindings" Version="1.5.0" /> <PackageReference Include="Zlib.Bindings" Version="1.5.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <!-- <ItemGroup>-->
<ProjectReference Include="..\SerializationGenerator\SerializationGenerator.csproj"> <!-- <ProjectReference Include="..\SerializationGenerator\SerializationGenerator.csproj">-->
<SetTargetFramework>TargetFramework=netstandard2.0</SetTargetFramework> <!-- <SetTargetFramework>TargetFramework=netstandard2.0</SetTargetFramework>-->
<OutputItemType>Analyzer</OutputItemType> <!-- <OutputItemType>Analyzer</OutputItemType>-->
<ReferenceOutputAssembly>false</ReferenceOutputAssembly> <!-- <ReferenceOutputAssembly>false</ReferenceOutputAssembly>-->
<PrivateAssets>all</PrivateAssets> <!-- <PrivateAssets>all</PrivateAssets>-->
</ProjectReference> <!-- </ProjectReference>-->
</ItemGroup> <!-- </ItemGroup>-->
<Target Name="AddSourceGeneratedFiles" AfterTargets="CoreCompile"> <!-- <Target Name="AddSourceGeneratedFiles" AfterTargets="CoreCompile">-->
<ItemGroup> <!-- <ItemGroup>-->
<Compile Include="Generated\**" /> <!-- <Compile Include="Generated\**" />-->
</ItemGroup> <!-- </ItemGroup>-->
</Target> <!-- </Target>-->
<Target Name="RemoveSourceGeneratedFiles" BeforeTargets="CoreCompile"> <!-- <Target Name="RemoveSourceGeneratedFiles" BeforeTargets="CoreCompile">-->
<ItemGroup> <!-- <ItemGroup>-->
<Compile Remove="Generated\**" /> <!-- <Compile Remove="Generated\**" />-->
</ItemGroup> <!-- </ItemGroup>-->
<RemoveDir Directories="Generated" /> <!-- <RemoveDir Directories="Generated" />-->
</Target> <!-- </Target>-->
<ItemGroup> <!-- <ItemGroup>-->
<CompilerVisibleProperty Include="SerializableMigrationPath" /> <!-- <CompilerVisibleProperty Include="SerializableMigrationPath" />-->
</ItemGroup> <!-- </ItemGroup>-->
<ItemGroup> <!-- <ItemGroup>-->
<Folder Include="Migrations" /> <!-- <Folder Include="Migrations" />-->
</ItemGroup> <!-- </ItemGroup>-->
<PropertyGroup> <!-- <PropertyGroup>-->
<SerializableMigrationPath>.\Migrations\</SerializableMigrationPath> <!-- <SerializableMigrationPath>.\Migrations\</SerializableMigrationPath>-->
</PropertyGroup> <!-- </PropertyGroup>-->
</Project> </Project>

View file

@ -6,8 +6,7 @@ using Server.Targeting;
namespace Server.Items namespace Server.Items
{ {
[Serializable(0)] public class Fireflies : Item, IAddon
public partial class Fireflies : Item, IAddon
{ {
[Constructible] [Constructible]
public Fireflies(int itemID = 0x1596) public Fireflies(int itemID = 0x1596)
@ -17,11 +16,35 @@ namespace Server.Items
Movable = false; Movable = false;
} }
public Fireflies(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1150061; public override int LabelNumber => 1150061;
public bool FacingSouth => ItemID == 0x2336; public bool FacingSouth
{
get
{
if (ItemID == 0x2336)
{
return true;
}
public Item Deed => new FirefliesDeed(); return false;
}
}
public Item Deed
{
get
{
var deed = new FirefliesDeed();
return deed;
}
}
public bool CouldFit(IPoint3D p, Map map) public bool CouldFit(IPoint3D p, Map map)
{ {
@ -30,9 +53,12 @@ namespace Server.Items
return false; return false;
} }
return FacingSouth ? if (FacingSouth)
BaseAddon.IsWall(p.X, p.Y - 1, p.Z, map) : {
BaseAddon.IsWall(p.X - 1, p.Y, p.Z, map); return BaseAddon.IsWall(p.X, p.Y - 1, p.Z, map); // north wall
}
return BaseAddon.IsWall(p.X - 1, p.Y, p.Z, map); // west wall
} }
public override void OnDoubleClick(Mobile from) public override void OnDoubleClick(Mobile from)
@ -58,10 +84,23 @@ namespace Server.Items
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that. from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
} }
} }
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadEncodedInt();
}
} }
[Serializable(0)] public class FirefliesDeed : Item
public partial class FirefliesDeed : Item
{ {
[Constructible] [Constructible]
public FirefliesDeed() public FirefliesDeed()
@ -71,6 +110,11 @@ namespace Server.Items
Weight = 1.0; Weight = 1.0;
} }
public FirefliesDeed(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1150061; public override int LabelNumber => 1150061;
public override void OnDoubleClick(Mobile from) public override void OnDoubleClick(Mobile from)
@ -99,6 +143,20 @@ namespace Server.Items
} }
} }
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadEncodedInt();
}
private class FacingGump : Gump private class FacingGump : Gump
{ {
private readonly FirefliesDeed m_Deed; private readonly FirefliesDeed m_Deed;

View file

@ -1,8 +1,7 @@
namespace Server.Items.Holiday namespace Server.Items.Holiday
{ {
[Serializable(0, false)]
[TypeAlias("Server.Items.AngelDecoration"), Flippable(0x46FA, 0x46FB)] [TypeAlias("Server.Items.AngelDecoration"), Flippable(0x46FA, 0x46FB)]
public partial class AngelDecoration : Item public class AngelDecoration : Item
{ {
public AngelDecoration() : base(0x46FA) public AngelDecoration() : base(0x46FA)
{ {
@ -10,5 +9,24 @@
Weight = 30; Weight = 30;
} }
public AngelDecoration(Serial serial)
: base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,8 +1,7 @@
namespace Server.Items.Holiday namespace Server.Items.Holiday
{ {
[Serializable(0, false)]
[TypeAlias("Server.Items.RockingHorse"), Flippable(0x4214, 0x4215)] [TypeAlias("Server.Items.RockingHorse"), Flippable(0x4214, 0x4215)]
public partial class RockingHorse : Item public class RockingHorse : Item
{ {
public RockingHorse() : base(0x4214) public RockingHorse() : base(0x4214)
{ {
@ -10,5 +9,24 @@
Weight = 30; Weight = 30;
} }
public RockingHorse(Serial serial)
: base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,7 +1,6 @@
namespace Server.Items namespace Server.Items
{ {
[Serializable(0, false)] public class DragonEasterEgg : Item, IDyable
public partial class DragonEasterEgg : Item, IDyable
{ {
[Constructible] [Constructible]
public DragonEasterEgg() public DragonEasterEgg()
@ -9,6 +8,11 @@
{ {
} }
public DragonEasterEgg(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1097278; public override int LabelNumber => 1097278;
public bool Dye(Mobile from, DyeTub sender) public bool Dye(Mobile from, DyeTub sender)
@ -22,5 +26,19 @@
return true; return true;
} }
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -230,8 +230,7 @@ namespace Server.Engines.Events
} }
} }
[Serializable(0, false)] public class NaughtyTwin : BaseCreature
public partial class NaughtyTwin : BaseCreature
{ {
private static readonly Point3D[] Felucca_Locations = private static readonly Point3D[] Felucca_Locations =
{ {
@ -287,6 +286,11 @@ namespace Server.Engines.Events
} }
} }
public NaughtyTwin(Serial serial)
: base(serial)
{
}
public override void OnThink() public override void OnThink()
{ {
if (m_From?.Deleted != false) if (m_From?.Deleted != false)
@ -300,7 +304,12 @@ namespace Server.Engines.Events
Type[] types = Type[] types =
{ typeof(WrappedCandy), typeof(Lollipops), typeof(NougatSwirl), typeof(Taffy), typeof(JellyBeans) }; { typeof(WrappedCandy), typeof(Lollipops), typeof(NougatSwirl), typeof(Taffy), typeof(JellyBeans) };
return TrickOrTreat.CheckMobile(target) ? target.Backpack.FindItemByType(types) : null; if (TrickOrTreat.CheckMobile(target))
{
return target.Backpack.FindItemByType(types);
}
return null;
} }
public static void StealCandyOrGate(Mobile target) public static void StealCandyOrGate(Mobile target)
@ -336,5 +345,17 @@ namespace Server.Engines.Events
_ => Felucca_Locations.RandomElement() _ => Felucca_Locations.RandomElement()
}; };
} }
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -2,16 +2,11 @@
namespace Server.Items namespace Server.Items
{ {
[Serializable(1, false)] public class HalloweenPumpkin : Item
public partial class HalloweenPumpkin : Item
{ {
private static readonly string[] m_Staff = private static readonly string[] m_Staff =
{ {
"Owyn", "Ryan", "Mark", "Eos", "Athena", "Xavier", "Krrios", "Zippy"
"Luthius",
"Kamron",
"Jaedan",
"Vorspire"
}; };
[Constructible] [Constructible]
@ -23,6 +18,11 @@ namespace Server.Items
: Utility.RandomList(0xc6a, 0xc6b, 0xc6c); : Utility.RandomList(0xc6a, 0xc6b, 0xc6c);
} }
public HalloweenPumpkin(Serial serial)
: base(serial)
{
}
public override void OnDoubleClick(Mobile from) public override void OnDoubleClick(Mobile from)
{ {
if (!from.InRange(GetWorldLocation(), 2)) if (!from.InRange(GetWorldLocation(), 2))
@ -78,8 +78,19 @@ namespace Server.Items
return true; return true;
} }
private void Deserialize(IGenericReader reader, int version) public override void Serialize(IGenericWriter writer)
{ {
base.Serialize(writer);
writer.Write(1); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
if (version == 0 && Name == null && ItemID == 0x4698) if (version == 0 && Name == null && ItemID == 0x4698)
{ {
AssignRandomName(); AssignRandomName();

View file

@ -1,7 +1,6 @@
namespace Server.Items namespace Server.Items
{ {
[Serializable(0, false)] public class PumpkinScarecrow : Item
public partial class PumpkinScarecrow : Item
{ {
[Constructible] [Constructible]
public PumpkinScarecrow() public PumpkinScarecrow()
@ -9,6 +8,25 @@
{ {
} }
public PumpkinScarecrow(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1096947; public override int LabelNumber => 1096947;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,7 +1,6 @@
namespace Server.Items namespace Server.Items
{ {
[Serializable(0, false)] public class RuinedTapestry : Item
public partial class RuinedTapestry : Item
{ {
[Constructible] [Constructible]
public RuinedTapestry() public RuinedTapestry()
@ -9,6 +8,25 @@
{ {
} }
public RuinedTapestry(Serial serial)
: base(serial)
{
}
public override string DefaultName => "Ruined Tapestry "; public override string DefaultName => "Ruined Tapestry ";
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,11 +1,15 @@
namespace Server.Items namespace Server.Items
{ {
[Serializable(0, false)] public class TwilightLantern : Lantern
public partial class TwilightLantern : Lantern
{ {
[Constructible] [Constructible]
public TwilightLantern() => Hue = Utility.RandomBool() ? 244 : 997; public TwilightLantern() => Hue = Utility.RandomBool() ? 244 : 997;
public TwilightLantern(Serial serial)
: base(serial)
{
}
public override string DefaultName => "Twilight Lantern"; public override string DefaultName => "Twilight Lantern";
public override bool AllowEquippedCast(Mobile from) => true; public override bool AllowEquippedCast(Mobile from) => true;
@ -16,5 +20,19 @@
list.Add(1060482); // Spell Channeling list.Add(1060482); // Spell Channeling
} }
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -4,12 +4,31 @@
first seen halloween 2009. subsequently in 2010, first seen halloween 2009. subsequently in 2010,
2011 and 2012. GM Beggar-only Semi-Rare Treats 2011 and 2012. GM Beggar-only Semi-Rare Treats
*/ */
[Serializable(0, false)]
public partial class CreepyCake : Food public class CreepyCake : Food
{ {
[Constructible] [Constructible]
public CreepyCake() : base(0x9e9, 1) => Hue = 0x3E4; public CreepyCake() : base(0x9e9, 1) => Hue = 0x3E4;
public CreepyCake(Serial serial)
: base(serial)
{
}
public override string DefaultName => "Creepy Cake"; public override string DefaultName => "Creepy Cake";
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -4,13 +4,34 @@
first seen halloween 2009. subsequently in 2010, first seen halloween 2009. subsequently in 2010,
2011 and 2012. GM Beggar-only Semi-Rare Treats 2011 and 2012. GM Beggar-only Semi-Rare Treats
*/ */
[Serializable(0, false)]
public partial class HarvestWine : BeverageBottle public class HarvestWine : BeverageBottle
{ {
[Constructible] [Constructible]
public HarvestWine() : base(BeverageType.Wine) => Hue = 0xe0; public HarvestWine()
: base(BeverageType.Wine) =>
Hue = 0xe0;
public HarvestWine(Serial serial)
: base(serial)
{
}
public override string DefaultName => "Harvest Wine"; public override string DefaultName => "Harvest Wine";
public override double DefaultWeight => 1; public override double DefaultWeight => 1;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,7 +1,6 @@
namespace Server.Items namespace Server.Items
{ {
[Serializable(0, false)] public class MrPlainsCookies : Food
public partial class MrPlainsCookies : Food
{ {
[Constructible] [Constructible]
public MrPlainsCookies() : base(0x160C, 1) public MrPlainsCookies() : base(0x160C, 1)
@ -11,6 +10,25 @@
Hue = 0xF4; Hue = 0xF4;
} }
public MrPlainsCookies(Serial serial)
: base(serial)
{
}
public override string DefaultName => "Mr Plain's Cookies"; public override string DefaultName => "Mr Plain's Cookies";
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -4,19 +4,39 @@
first seen halloween 2009. subsequently in 2010, first seen halloween 2009. subsequently in 2010,
2011 and 2012. GM Beggar-only Semi-Rare Treats 2011 and 2012. GM Beggar-only Semi-Rare Treats
*/ */
[Serializable(0, false)]
public partial class MurkyMilk : Pitcher public class MurkyMilk : Pitcher
{ {
[Constructible] [Constructible]
public MurkyMilk() : base(BeverageType.Milk) public MurkyMilk()
: base(BeverageType.Milk)
{ {
Hue = 0x3e5; Hue = 0x3e5;
Quantity = MaxQuantity; Quantity = MaxQuantity;
ItemID = Utility.RandomBool() ? 0x09F0 : 0x09AD; ItemID = Utility.RandomBool() ? 0x09F0 : 0x09AD;
} }
public MurkyMilk(Serial serial)
: base(serial)
{
}
public override string DefaultName => "Murky Milk"; public override string DefaultName => "Murky Milk";
public override int MaxQuantity => 5; public override int MaxQuantity => 5;
public override double DefaultWeight => 1; public override double DefaultWeight => 1;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -4,12 +4,31 @@
first seen halloween 2009. subsequently in 2010, first seen halloween 2009. subsequently in 2010,
2011 and 2012. GM Beggar-only Semi-Rare Treats 2011 and 2012. GM Beggar-only Semi-Rare Treats
*/ */
[Serializable(0, false)]
public partial class PumpkinPizza : CheesePizza public class PumpkinPizza : CheesePizza
{ {
[Constructible] [Constructible]
public PumpkinPizza() => Hue = 0xF3; public PumpkinPizza() => Hue = 0xF3;
public PumpkinPizza(Serial serial)
: base(serial)
{
}
public override string DefaultName => "Pumpkin Pizza"; public override string DefaultName => "Pumpkin Pizza";
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -4,14 +4,34 @@
first seen halloween 2009. subsequently in 2010, first seen halloween 2009. subsequently in 2010,
2011 and 2012. GM Beggar-only Semi-Rare Treats 2011 and 2012. GM Beggar-only Semi-Rare Treats
*/ */
[Serializable(0, false)]
public partial class GrimWarning : Item public class GrimWarning : Item
{ {
[Constructible] [Constructible]
public GrimWarning() : base(0x42BD) public GrimWarning()
: base(0x42BD)
{
}
public GrimWarning(Serial serial)
: base(serial)
{ {
} }
public override double DefaultWeight => 1; public override double DefaultWeight => 1;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -4,14 +4,34 @@
first seen halloween 2009. subsequently in 2010, first seen halloween 2009. subsequently in 2010,
2011 and 2012. GM Beggar-only Semi-Rare Treats 2011 and 2012. GM Beggar-only Semi-Rare Treats
*/ */
[Serializable(0, false)]
public partial class SkullsOnPike : Item public class SkullsOnPike : Item
{ {
[Constructible] [Constructible]
public SkullsOnPike() : base(0x42B5) public SkullsOnPike()
: base(0x42B5)
{
}
public SkullsOnPike(Serial serial)
: base(serial)
{ {
} }
public override double DefaultWeight => 1; public override double DefaultWeight => 1;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,13 +1,32 @@
namespace Server.Items namespace Server.Items
{ {
[Serializable(0, false)] public class ChairInAGhostCostume : Item
public partial class ChairInAGhostCostume : Item
{ {
[Constructible] [Constructible]
public ChairInAGhostCostume() : base(0x3F26) public ChairInAGhostCostume()
: base(0x3F26)
{
}
public ChairInAGhostCostume(Serial serial)
: base(serial)
{ {
} }
public override double DefaultWeight => 5; public override double DefaultWeight => 5;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,12 +1,31 @@
namespace Server.Items namespace Server.Items
{ {
[Serializable(0, false)] public class ColoredSmallWebs : Item
public partial class ColoredSmallWebs : Item
{ {
[Constructible] [Constructible]
public ColoredSmallWebs() : base(Utility.RandomBool() ? 0x10d6 : 0x10d7) => public ColoredSmallWebs()
: base(Utility.RandomBool() ? 0x10d6 : 0x10d7) =>
Hue = Utility.RandomBool() ? 0x455 : 0x4E9; Hue = Utility.RandomBool() ? 0x455 : 0x4E9;
public ColoredSmallWebs(Serial serial)
: base(serial)
{
}
public override double DefaultWeight => 5; public override double DefaultWeight => 5;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,13 +1,32 @@
namespace Server.Items namespace Server.Items
{ {
[Serializable(0, false)] public class ExcellentIronMaiden : Item
public partial class ExcellentIronMaiden : Item
{ {
[Constructible] [Constructible]
public ExcellentIronMaiden() : base(0x3f15) public ExcellentIronMaiden()
: base(0x3f15)
{
}
public ExcellentIronMaiden(Serial serial)
: base(serial)
{ {
} }
public override double DefaultWeight => 5; public override double DefaultWeight => 5;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,13 +1,31 @@
namespace Server.Items namespace Server.Items
{ {
[Serializable(0, false)] public class HalloweenGuillotine : Item
public partial class HalloweenGuillotine : Item
{ {
[Constructible] [Constructible]
public HalloweenGuillotine() : base(0x3F27) public HalloweenGuillotine() : base(0x3F27)
{ {
} }
public HalloweenGuillotine(Serial serial)
: base(serial)
{
}
public override double DefaultWeight => 5; public override double DefaultWeight => 5;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -7,14 +7,15 @@ namespace Server.Items.Holiday
{ {
private static readonly string[] m_Staffers = private static readonly string[] m_Staffers =
{ {
"Owyn", "Ryan",
"Luthius", "Mark",
"Kamron", "Krrios",
"Jaedan", "Zippy",
"Vorspire" "Athena",
"Eos",
"Xavier"
}; };
// Todo: Requires private-only modifiers
private string m_Staffer; private string m_Staffer;
public BasePaintedMask(int itemid) : this(m_Staffers.RandomElement(), itemid) public BasePaintedMask(int itemid) : this(m_Staffers.RandomElement(), itemid)

View file

@ -1,13 +1,32 @@
namespace Server.Items.Holiday namespace Server.Items.Holiday
{ {
[Serializable(0, false)] public class PaintedEvilClownMask : BasePaintedMask
public partial class PaintedEvilClownMask : BasePaintedMask
{ {
[Constructible] [Constructible]
public PaintedEvilClownMask() : base(0x4a90) public PaintedEvilClownMask()
: base(0x4a90)
{
}
public PaintedEvilClownMask(Serial serial)
: base(serial)
{ {
} }
public override string MaskName => "Evil Clown Mask"; public override string MaskName => "Evil Clown Mask";
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,7 +1,6 @@
namespace Server.Items.Holiday namespace Server.Items.Holiday
{ {
[Serializable(0, false)] public class PaintedDaemonMask : BasePaintedMask
public partial class PaintedDaemonMask : BasePaintedMask
{ {
[Constructible] [Constructible]
public PaintedDaemonMask() public PaintedDaemonMask()
@ -9,6 +8,25 @@
{ {
} }
public PaintedDaemonMask(Serial serial)
: base(serial)
{
}
public override string MaskName => "Daemon Mask"; public override string MaskName => "Daemon Mask";
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,7 +1,6 @@
namespace Server.Items.Holiday namespace Server.Items.Holiday
{ {
[Serializable(0, false)] public class PaintedPlagueMask : BasePaintedMask
public partial class PaintedPlagueMask : BasePaintedMask
{ {
[Constructible] [Constructible]
public PaintedPlagueMask() public PaintedPlagueMask()
@ -9,6 +8,25 @@
{ {
} }
public PaintedPlagueMask(Serial serial)
: base(serial)
{
}
public override string MaskName => "Plague Mask"; public override string MaskName => "Plague Mask";
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -4,8 +4,7 @@ using Server.Items.Holiday;
namespace Server.Mobiles namespace Server.Mobiles
{ {
[Serializable(0, false)] public class PumpkinHead : BaseCreature
public partial class PumpkinHead : BaseCreature
{ {
[Constructible] [Constructible]
public PumpkinHead() public PumpkinHead()
@ -48,6 +47,11 @@ namespace Server.Mobiles
VirtualArmor = 49; VirtualArmor = 49;
} }
public PumpkinHead(Serial serial)
: base(serial)
{
}
public override string CorpseName => "a killer pumpkin corpse"; public override string CorpseName => "a killer pumpkin corpse";
public override bool AutoDispel => true; public override bool AutoDispel => true;
public override bool BardImmune => true; public override bool BardImmune => true;
@ -115,5 +119,17 @@ namespace Server.Mobiles
base.OnDamage(amount, from, willKill); base.OnDamage(amount, from, willKill);
} }
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -175,9 +175,8 @@ namespace Server.Engines.Events
public class ZombieSkeleton : BaseCreature public class ZombieSkeleton : BaseCreature
{ {
private const string _name = "Zombie Skeleton"; private static readonly string m_Name = "Zombie Skeleton";
// TODO: Requires private modifier
private PlayerMobile m_DeadPlayer; private PlayerMobile m_DeadPlayer;
public ZombieSkeleton(PlayerMobile player = null) public ZombieSkeleton(PlayerMobile player = null)
@ -185,7 +184,7 @@ namespace Server.Engines.Events
{ {
m_DeadPlayer = player; m_DeadPlayer = player;
Name = player != null ? $"{player.Name}'s {_name}" : _name; Name = player != null ? $"{player.Name}'s {m_Name}" : m_Name;
Body = 0x93; Body = 0x93;
BaseSoundID = 0x1c3; BaseSoundID = 0x1c3;

View file

@ -1,13 +1,32 @@
namespace Server.Items.Holiday namespace Server.Items.Holiday
{ {
[Serializable(0, false)] public class PaintedEvilJesterMask : BasePaintedMask
public partial class PaintedEvilJesterMask : BasePaintedMask
{ {
[Constructible] [Constructible]
public PaintedEvilJesterMask() : base(0x4BA5) public PaintedEvilJesterMask()
: base(0x4BA5)
{
}
public PaintedEvilJesterMask(Serial serial)
: base(serial)
{ {
} }
public override string MaskName => "Evil Jester Mask"; public override string MaskName => "Evil Jester Mask";
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,13 +1,32 @@
namespace Server.Items.Holiday namespace Server.Items.Holiday
{ {
[Serializable(0, false)] public class PaintedPorcelainMask : BasePaintedMask
public partial class PaintedPorcelainMask : BasePaintedMask
{ {
[Constructible] [Constructible]
public PaintedPorcelainMask() : base(0x4BA7) public PaintedPorcelainMask()
: base(0x4BA7)
{
}
public PaintedPorcelainMask(Serial serial)
: base(serial)
{ {
} }
public override string MaskName => "Porcelain Mask"; public override string MaskName => "Porcelain Mask";
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -30,12 +30,13 @@ namespace Server.Events.Halloween
typeof(NougatSwirl) typeof(NougatSwirl)
}; };
// YY MM DD public static DateTime StartHalloween // YY MM DD
public static DateTime StartHalloween => new(2021, 10, 24); => new(2012, 10, 24);
public static DateTime FinishHalloween => new(2021, 11, 15); public static DateTime FinishHalloween => new(2012, 11, 15);
public static Item RandomGMBeggerItem => m_GMBeggarTreats.RandomElement().CreateInstance<Item>(); public static Item RandomGMBeggerItem =>
m_GMBeggarTreats.RandomElement().CreateInstance<Item>();
public static Item RandomTreat => m_Treats.RandomElement().CreateInstance<Item>(); public static Item RandomTreat => m_Treats.RandomElement().CreateInstance<Item>();
} }

View file

@ -1,11 +1,31 @@
namespace Server.Items namespace Server.Items
{ {
[Serializable(0, false)] public class JellyBeans : CandyCane
public partial class JellyBeans : CandyCane
{ {
[Constructible] [Constructible]
public JellyBeans(int amount = 1) : base(0x468C) => Stackable = true; public JellyBeans(int amount = 1)
: base(0x468C) =>
Stackable = true;
public JellyBeans(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1096932; /* jellybeans */ public override int LabelNumber => 1096932; /* jellybeans */
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,10 +1,30 @@
namespace Server.Items namespace Server.Items
{ {
[TypeAlias("Server.Items.Lollipop")] [TypeAlias("Server.Items.Lollipop")]
[Serializable(0, false)] public class Lollipops : CandyCane
public partial class Lollipops : CandyCane
{ {
[Constructible] [Constructible]
public Lollipops(int amount = 1) : base(0x468D + Utility.Random(3)) => Stackable = true; public Lollipops(int amount = 1)
: base(0x468D + Utility.Random(3)) =>
Stackable = true;
public Lollipops(Serial serial)
: base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,11 +1,31 @@
namespace Server.Items namespace Server.Items
{ {
[Serializable(0, false)] public class NougatSwirl : CandyCane
public partial class NougatSwirl : CandyCane
{ {
[Constructible] [Constructible]
public NougatSwirl(int amount = 1) : base(0x4690) => Stackable = true; public NougatSwirl(int amount = 1)
: base(0x4690) =>
Stackable = true;
public NougatSwirl(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1096936; /* nougat swirl */ public override int LabelNumber => 1096936; /* nougat swirl */
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,11 +1,31 @@
namespace Server.Items namespace Server.Items
{ {
[Serializable(0, false)] public class Taffy : CandyCane
public partial class Taffy : CandyCane
{ {
[Constructible] [Constructible]
public Taffy(int amount = 1) : base(0x469D) => Stackable = true; public Taffy(int amount = 1)
: base(0x469D) =>
Stackable = true;
public Taffy(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1096949; /* taffy */ public override int LabelNumber => 1096949; /* taffy */
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,11 +1,31 @@
namespace Server.Items namespace Server.Items
{ {
[Serializable(0, false)] public class WrappedCandy : CandyCane
public partial class WrappedCandy : CandyCane
{ {
[Constructible] [Constructible]
public WrappedCandy(int amount = 1) : base(0x469e) => Stackable = true; public WrappedCandy(int amount = 1)
: base(0x469e) =>
Stackable = true;
public WrappedCandy(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1096950; /* wrapped candy */ public override int LabelNumber => 1096950; /* wrapped candy */
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,10 +1,28 @@
namespace Server.Items namespace Server.Items
{ {
[Serializable(0, false)]
[Flippable(0x49CC, 0x49D0)] [Flippable(0x49CC, 0x49D0)]
public partial class AnimatedHeartShapedBox : HeartShapedBox public class AnimatedHeartShapedBox : HeartShapedBox
{ {
[Constructible] [Constructible]
public AnimatedHeartShapedBox() => ItemID = 0x49CC; public AnimatedHeartShapedBox() => ItemID = 0x49CC;
public AnimatedHeartShapedBox(Serial serial)
: base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -4,62 +4,104 @@ using Server.Network;
namespace Server.Items namespace Server.Items
{ {
[Serializable(0, false)] public abstract class StValentinesBear : Item
public abstract partial class StValentinesBear : Item
{ {
[InternString] private string m_Line1;
[InvalidateProperties] private string m_Line2;
[SerializableField(0)] private string m_Line3;
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private string _owner;
[InternString] private string m_Owner;
[InvalidateProperties]
[SerializableField(1)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private string _line1;
[InternString] public StValentinesBear(int itemid, string name)
[InvalidateProperties] : base(itemid)
[SerializableField(2)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private string _line2;
[InternString]
[InvalidateProperties]
[SerializableField(3)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private string _line3;
public StValentinesBear(int itemid, string name) : base(itemid)
{ {
_owner = name; m_Owner = name;
LootType = LootType.Blessed; LootType = LootType.Blessed;
} }
public override string DefaultName => _owner != null ? $"{_owner}'s St. Valentine Bear" : "St. Valentine Bear"; public StValentinesBear(Serial serial)
: base(serial)
{
}
public override string DefaultName
{
get
{
if (m_Owner != null)
{
return $"{m_Owner}'s St. Valentine Bear";
}
return "St. Valentine Bear";
}
}
[CommandProperty(AccessLevel.GameMaster)]
public string Owner
{
get => m_Owner;
set
{
m_Owner = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public string Line1
{
get => m_Line1;
set
{
m_Line1 = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public string Line2
{
get => m_Line2;
set
{
m_Line2 = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public string Line3
{
get => m_Line3;
set
{
m_Line3 = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)] [CommandProperty(AccessLevel.GameMaster)]
public DateTime EditLimit { get; set; } public DateTime EditLimit { get; set; }
public bool IsSigned => _line1 != null || _line2 != null || _line3 != null; public bool IsSigned => m_Line1 != null || m_Line2 != null || m_Line3 != null;
public bool CanSign => !IsSigned || Core.Now <= EditLimit; public bool CanSign => !IsSigned || Core.Now <= EditLimit;
public override void AddNameProperty(ObjectPropertyList list) public override void AddNameProperty(ObjectPropertyList list)
{ {
if (_owner != null) if (m_Owner != null)
{ {
list.Add(1150295, _owner); // ~1_NAME~'s St. Valentine Bear list.Add(1150295, m_Owner); // ~1_NAME~'s St. Valentine Bear
} }
else else
{ {
list.Add(1150294); // St. Valentine Bear list.Add(1150294); // St. Valentine Bear
} }
AddLine(list, 1150301, _line1); // [ ~1_LINE0~ ] AddLine(list, 1150301, m_Line1); // [ ~1_LINE0~ ]
AddLine(list, 1150302, _line2); // [ ~1_LINE1~ ] AddLine(list, 1150302, m_Line2); // [ ~1_LINE1~ ]
AddLine(list, 1150303, _line3); // [ ~1_LINE2~ ] AddLine(list, 1150303, m_Line3); // [ ~1_LINE2~ ]
} }
private static void AddLine(ObjectPropertyList list, int cliloc, string line) private static void AddLine(ObjectPropertyList list, int cliloc, string line)
@ -74,9 +116,9 @@ namespace Server.Items
{ {
base.OnSingleClick(from); base.OnSingleClick(from);
ShowLine(from, 1150301, _line1); // [ ~1_LINE0~ ] ShowLine(from, 1150301, m_Line1); // [ ~1_LINE0~ ]
ShowLine(from, 1150302, _line2); // [ ~1_LINE1~ ] ShowLine(from, 1150302, m_Line2); // [ ~1_LINE1~ ]
ShowLine(from, 1150303, _line3); // [ ~1_LINE2~ ] ShowLine(from, 1150303, m_Line3); // [ ~1_LINE2~ ]
} }
private void ShowLine(Mobile from, int cliloc, string line) private void ShowLine(Mobile from, int cliloc, string line)
@ -103,6 +145,30 @@ namespace Server.Items
from.SendGump(new InternalGump(this)); from.SendGump(new InternalGump(this));
} }
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
writer.Write(m_Owner);
writer.Write(m_Line1);
writer.Write(m_Line2);
writer.Write(m_Line3);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
m_Owner = Utility.Intern(reader.ReadString());
m_Line1 = Utility.Intern(reader.ReadString());
m_Line2 = Utility.Intern(reader.ReadString());
m_Line3 = Utility.Intern(reader.ReadString());
}
private class InternalGump : Gump private class InternalGump : Gump
{ {
private readonly StValentinesBear m_Bear; private readonly StValentinesBear m_Bear;
@ -190,23 +256,61 @@ namespace Server.Items
} }
} }
[Serializable(0, false)]
[Flippable(0x48E0, 0x48E1)] [Flippable(0x48E0, 0x48E1)]
public partial class StValentinesPanda : StValentinesBear public class StValentinesPanda : StValentinesBear
{ {
[Constructible] [Constructible]
public StValentinesPanda(string name = null) : base(0x48E0, name) public StValentinesPanda(string name = null)
: base(0x48E0, name)
{ {
} }
public StValentinesPanda(Serial serial)
: base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
[Serializable(0, false)]
[Flippable(0x48E2, 0x48E3)] [Flippable(0x48E2, 0x48E3)]
public partial class StValentinesPolarBear : StValentinesBear public class StValentinesPolarBear : StValentinesBear
{ {
[Constructible] [Constructible]
public StValentinesPolarBear(string name = null) : base(0x48E2, name) public StValentinesPolarBear(string name = null)
: base(0x48E2, name)
{ {
} }
public StValentinesPolarBear(Serial serial)
: base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,12 +1,32 @@
namespace Server.Items namespace Server.Items
{ {
[Serializable(0, false)]
[Flippable(0x4F7C, 0x4F7D)] [Flippable(0x4F7C, 0x4F7D)]
public partial class CupidStatue : Item public class CupidStatue : Item
{ {
[Constructible] [Constructible]
public CupidStatue() : base(0x4F7D) => LootType = LootType.Blessed; public CupidStatue()
: base(0x4F7D) =>
LootType = LootType.Blessed;
public CupidStatue(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1099220; // cupid statue public override int LabelNumber => 1099220; // cupid statue
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,30 +1,49 @@
using System;
using Server.Targeting; using Server.Targeting;
namespace Server.Items namespace Server.Items
{ {
[Serializable(0, false)] public class CupidsArrow : Item
public partial class CupidsArrow : Item
{ {
[InternString] private string m_From;
[InvalidateProperties] private string m_To;
[SerializableField(0)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private string _from;
[InternString]
[InvalidateProperties]
[SerializableField(1)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
private string _to;
[Constructible] [Constructible]
public CupidsArrow() : base(0x4F7F) => LootType = LootType.Blessed; public CupidsArrow()
: base(0x4F7F) =>
LootType = LootType.Blessed;
public CupidsArrow(Serial serial)
: base(serial)
{
}
// TODO: Check messages // TODO: Check messages
public override int LabelNumber => 1152270; // Cupid's Arrow 2012 public override int LabelNumber => 1152270; // Cupid's Arrow 2012
public bool IsSigned => _from != null && _to != null; [CommandProperty(AccessLevel.GameMaster)]
public string From
{
get => m_From;
set
{
m_From = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public string To
{
get => m_To;
set
{
m_To = value;
InvalidateProperties();
}
}
public bool IsSigned => m_From != null && m_To != null;
public override void AddNameProperty(ObjectPropertyList list) public override void AddNameProperty(ObjectPropertyList list)
{ {
@ -32,7 +51,7 @@ namespace Server.Items
if (IsSigned) if (IsSigned)
{ {
list.Add(1152273, $"{_from}\t{_to}"); // ~1_val~ is madly in love with ~2_val~ list.Add(1152273, $"{m_From}\t{m_To}"); // ~1_val~ is madly in love with ~2_val~
} }
} }
@ -53,7 +72,7 @@ namespace Server.Items
if (IsSigned) if (IsSigned)
{ {
LabelTo(from, 1152273, $"{_from}\t{_to}"); // ~1_val~ is madly in love with ~2_val~ LabelTo(from, 1152273, $"{m_From}\t{m_To}"); // ~1_val~ is madly in love with ~2_val~
} }
} }
@ -91,8 +110,8 @@ namespace Server.Items
return; return;
} }
_from = from.Name; m_From = from.Name;
_to = m.Name; m_To = m.Name;
InvalidateProperties(); InvalidateProperties();
@ -103,5 +122,25 @@ namespace Server.Items
from.SendMessage("That is not a person."); from.SendMessage("That is not a person.");
} }
} }
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
writer.Write(m_From);
writer.Write(m_To);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
m_From = Utility.Intern(reader.ReadString());
m_To = Utility.Intern(reader.ReadString());
}
} }
} }

View file

@ -1,13 +1,18 @@
namespace Server.Items namespace Server.Items
{ {
[Serializable(0, false)]
[Flippable(0x49CA, 0x49CB)] [Flippable(0x49CA, 0x49CB)]
public partial class HeartShapedBox : BaseContainer public class HeartShapedBox : BaseContainer
{ {
private static int m_DropSound; private static int m_DropSound;
[Constructible] [Constructible]
public HeartShapedBox() : base(0x49CA) public HeartShapedBox()
: base(0x49CA)
{
}
public HeartShapedBox(Serial serial)
: base(serial)
{ {
} }
@ -29,5 +34,19 @@ namespace Server.Items
{ {
m_DropSound = from.Female ? 0x430 : 0x320; m_DropSound = from.Female ? 0x430 : 0x320;
} }
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
} }
} }

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Engines.Events.NaughtyTwin",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.AnimatedHeartShapedBox",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.ChairInAGhostCostume",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.ColoredSmallWebs",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.CreepyCake",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.CupidStatue",
"properties": []
}

View file

@ -1,22 +0,0 @@
{
"version": 0,
"type": "Server.Items.CupidsArrow",
"properties": [
{
"name": "From",
"type": "string",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
"InternString"
]
},
{
"name": "To",
"type": "string",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
"InternString"
]
}
]
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.DragonEasterEgg",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.ExcellentIronMaiden",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.Fireflies",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.FirefliesDeed",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.GrimWarning",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.HalloweenGuillotine",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 1,
"type": "Server.Items.HalloweenPumpkin",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.HarvestWine",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.HeartShapedBox",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.Holiday.AngelDecoration",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.Holiday.PaintedDaemonMask",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.Holiday.PaintedEvilClownMask",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.Holiday.PaintedEvilJesterMask",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.Holiday.PaintedPlagueMask",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.Holiday.PaintedPorcelainMask",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.Holiday.RockingHorse",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.JellyBeans",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.Lollipops",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.MrPlainsCookies",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.MurkyMilk",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.NougatSwirl",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.PumpkinPizza",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.PumpkinScarecrow",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.RuinedTapestry",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.SkullsOnPike",
"properties": []
}

View file

@ -1,38 +0,0 @@
{
"version": 0,
"type": "Server.Items.StValentinesBear",
"properties": [
{
"name": "Owner",
"type": "string",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
"InternString"
]
},
{
"name": "Line1",
"type": "string",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
"InternString"
]
},
{
"name": "Line2",
"type": "string",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
"InternString"
]
},
{
"name": "Line3",
"type": "string",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
"InternString"
]
}
]
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.StValentinesPanda",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.StValentinesPolarBear",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.Taffy",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.TwilightLantern",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Items.WrappedCandy",
"properties": []
}

View file

@ -1,5 +0,0 @@
{
"version": 0,
"type": "Server.Mobiles.PumpkinHead",
"properties": []
}

View file

@ -39,24 +39,24 @@
<PackageReference Include="Zlib.Bindings" Version="1.5.0" /> <PackageReference Include="Zlib.Bindings" Version="1.5.0" />
<PackageReference Include="Argon2.Bindings" Version="1.9.1" /> <PackageReference Include="Argon2.Bindings" Version="1.9.1" />
</ItemGroup> </ItemGroup>
<ItemGroup> <!-- <ItemGroup>-->
<ProjectReference Include="..\SerializationGenerator\SerializationGenerator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" /> <!-- <ProjectReference Include="..\SerializationGenerator\SerializationGenerator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />-->
</ItemGroup> <!-- </ItemGroup>-->
<Target Name="AddSourceGeneratedFiles" AfterTargets="CoreCompile"> <!-- <Target Name="AddSourceGeneratedFiles" AfterTargets="CoreCompile">-->
<ItemGroup> <!-- <ItemGroup>-->
<Compile Include="Generated\**" /> <!-- <Compile Include="Generated\**" />-->
</ItemGroup> <!-- </ItemGroup>-->
</Target> <!-- </Target>-->
<Target Name="RemoveSourceGeneratedFiles" BeforeTargets="CoreCompile"> <!-- <Target Name="RemoveSourceGeneratedFiles" BeforeTargets="CoreCompile">-->
<ItemGroup> <!-- <ItemGroup>-->
<Compile Remove="Generated\**" /> <!-- <Compile Remove="Generated\**" />-->
</ItemGroup> <!-- </ItemGroup>-->
<RemoveDir Directories="Generated" /> <!-- <RemoveDir Directories="Generated" />-->
</Target> <!-- </Target>-->
<ItemGroup> <!-- <ItemGroup>-->
<CompilerVisibleProperty Include="SerializableMigrationPath" /> <!-- <CompilerVisibleProperty Include="SerializableMigrationPath" />-->
</ItemGroup> <!-- </ItemGroup>-->
<PropertyGroup> <!-- <PropertyGroup>-->
<SerializableMigrationPath>.\Migrations\</SerializableMigrationPath> <!-- <SerializableMigrationPath>.\Migrations\</SerializableMigrationPath>-->
</PropertyGroup> <!-- </PropertyGroup>-->
</Project> </Project>