fix: Codegens character statues (#1523)

This commit is contained in:
Kamron Batman 2023-09-30 01:30:47 -07:00 committed by GitHub
parent 27cd214d58
commit 5ea5fb43cc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 927 additions and 920 deletions

View file

@ -1,187 +1,163 @@
using ModernUO.Serialization;
using Server.Engines.VeteranRewards;
using Server.Mobiles;
namespace Server.Items
namespace Server.Items;
[SerializationGenerator(1)]
public partial class CharacterStatueMaker : Item, IRewardItem
{
public class CharacterStatueMaker : Item, IRewardItem
[InvalidateProperties]
[SerializableField(0)]
[SerializedCommandProperty(AccessLevel.GameMaster)]
private bool _isRewardItem;
public CharacterStatueMaker(StatueType type) : base(0x32F0)
{
private bool m_IsRewardItem;
private StatueType m_Type;
_statueType = type;
public CharacterStatueMaker(StatueType type) : base(0x32F0)
InvalidateHue();
LootType = LootType.Blessed;
Weight = 5.0;
}
public override int LabelNumber => 1076173; // Character Statue Maker
[SerializableProperty(1)]
[CommandProperty(AccessLevel.GameMaster)]
public StatueType StatueType
{
get => _statueType;
set
{
m_Type = type;
_statueType = value;
InvalidateHue();
this.MarkDirty();
}
}
LootType = LootType.Blessed;
Weight = 5.0;
public override void OnDoubleClick(Mobile from)
{
if (_isRewardItem && !RewardSystem.CheckIsUsableBy(from, this, new object[] { _statueType }))
{
return;
}
public CharacterStatueMaker(Serial serial) : base(serial)
if (IsChildOf(from.Backpack))
{
}
public override int LabelNumber => 1076173; // Character Statue Maker
[CommandProperty(AccessLevel.GameMaster)]
public StatueType StatueType
{
get => m_Type;
set
if (!from.IsBodyMod)
{
m_Type = value;
InvalidateHue();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public bool IsRewardItem
{
get => m_IsRewardItem;
set
{
m_IsRewardItem = value;
InvalidateProperties();
}
}
public override void OnDoubleClick(Mobile from)
{
if (m_IsRewardItem && !RewardSystem.CheckIsUsableBy(from, this, new object[] { m_Type }))
{
return;
}
if (IsChildOf(from.Backpack))
{
if (!from.IsBodyMod)
{
from.SendLocalizedMessage(1076194); // Select a place where you would like to put your statue.
from.Target = new CharacterStatueTarget(this, m_Type);
}
else
{
from.SendLocalizedMessage(1073648); // You may only proceed while in your original state...
}
from.SendLocalizedMessage(1076194); // Select a place where you would like to put your statue.
from.Target = new CharacterStatueTarget(this, _statueType);
}
else
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
from.SendLocalizedMessage(1073648); // You may only proceed while in your original state...
}
}
public override void GetProperties(IPropertyList list)
else
{
base.GetProperties(list);
if (m_IsRewardItem)
{
list.Add(1076222); // 6th Year Veteran Reward
}
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
writer.Write(m_IsRewardItem);
writer.Write((int)m_Type);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadEncodedInt();
m_IsRewardItem = reader.ReadBool();
m_Type = (StatueType)reader.ReadInt();
}
public void InvalidateHue()
{
Hue = 0xB8F + (int)m_Type * 4;
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
}
public class MarbleStatueMaker : CharacterStatueMaker
public override void GetProperties(IPropertyList list)
{
[Constructible]
public MarbleStatueMaker() : base(StatueType.Marble)
base.GetProperties(list);
if (_isRewardItem)
{
}
public MarbleStatueMaker(Serial serial) : base(serial)
{
}
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();
list.Add(1076222); // 6th Year Veteran Reward
}
}
public class JadeStatueMaker : CharacterStatueMaker
private void Deserialize(IGenericReader reader, int version)
{
[Constructible]
public JadeStatueMaker() : base(StatueType.Jade)
{
}
public JadeStatueMaker(Serial serial) : base(serial)
{
}
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();
}
_isRewardItem = reader.ReadBool();
_statueType = (StatueType)reader.ReadInt();
}
public class BronzeStatueMaker : CharacterStatueMaker
public void InvalidateHue()
{
[Constructible]
public BronzeStatueMaker() : base(StatueType.Bronze)
{
}
public BronzeStatueMaker(Serial serial) : base(serial)
{
}
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();
}
Hue = 0xB8F + (int)_statueType * 4;
}
}
public class MarbleStatueMaker : CharacterStatueMaker
{
[Constructible]
public MarbleStatueMaker() : base(StatueType.Marble)
{
}
public MarbleStatueMaker(Serial serial) : base(serial)
{
}
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();
}
}
public class JadeStatueMaker : CharacterStatueMaker
{
[Constructible]
public JadeStatueMaker() : base(StatueType.Jade)
{
}
public JadeStatueMaker(Serial serial) : base(serial)
{
}
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();
}
}
public class BronzeStatueMaker : CharacterStatueMaker
{
[Constructible]
public BronzeStatueMaker() : base(StatueType.Bronze)
{
}
public BronzeStatueMaker(Serial serial) : base(serial)
{
}
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();
}
}

View file

@ -1,144 +1,128 @@
using ModernUO.Serialization;
using Server.Gumps;
using Server.Mobiles;
using Server.Multis;
namespace Server.Items
namespace Server.Items;
[SerializationGenerator(0)]
public partial class CharacterStatuePlinth : Static, IAddon
{
public class CharacterStatuePlinth : Static, IAddon
[SerializableField(0, setter: "private")]
private CharacterStatue _statue;
public CharacterStatuePlinth(CharacterStatue statue) : base(0x32F2)
{
private CharacterStatue m_Statue;
_statue = statue;
public CharacterStatuePlinth(CharacterStatue statue) : base(0x32F2)
InvalidateHue();
}
public override int LabelNumber => 1076201; // Character Statue
public Item Deed => new CharacterStatueDeed(_statue);
public virtual bool CouldFit(IPoint3D p, Map map)
{
var point = new Point3D(p.X, p.Y, p.Z);
if (map?.CanFit(point, 20) != true)
{
m_Statue = statue;
InvalidateHue();
}
public CharacterStatuePlinth(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1076201; // Character Statue
public Item Deed => new CharacterStatueDeed(m_Statue);
public virtual bool CouldFit(IPoint3D p, Map map)
{
var point = new Point3D(p.X, p.Y, p.Z);
if (map?.CanFit(point, 20) != true)
{
return false;
}
var house = BaseHouse.FindHouseAt(point, map, 20);
if (house == null)
{
return false;
}
var result = CharacterStatueTarget.CheckDoors(point, 20, house);
if (result == AddonFitResult.Valid)
{
return true;
}
return false;
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
var house = BaseHouse.FindHouseAt(point, map, 20);
if (m_Statue?.Deleted == false)
{
m_Statue.Delete();
}
if (house == null)
{
return false;
}
public override void OnMapChange()
var result = CharacterStatueTarget.CheckDoors(point, 20, house);
if (result == AddonFitResult.Valid)
{
if (m_Statue != null)
{
m_Statue.Map = Map;
}
return true;
}
public override void OnLocationChange(Point3D oldLocation)
return false;
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
if (_statue?.Deleted == false)
{
if (m_Statue != null)
{
m_Statue.Location = new Point3D(X, Y, Z + 5);
}
_statue.Delete();
}
}
public override void OnMapChange()
{
if (_statue != null)
{
_statue.Map = Map;
}
}
public override void OnLocationChange(Point3D oldLocation)
{
if (_statue != null)
{
_statue.Location = new Point3D(X, Y, Z + 5);
}
}
public override void OnDoubleClick(Mobile from)
{
if (_statue != null)
{
from.SendGump(new CharacterPlinthGump(_statue));
}
}
[AfterDeserialization(false)]
private void AfterDeserialization()
{
if (string.IsNullOrEmpty(_statue?.SculptedBy) || Map == Map.Internal)
{
Delete();
}
}
public void InvalidateHue()
{
if (_statue != null)
{
Hue = 0xB8F + (int)_statue.StatueType * 4 + (int)_statue.Material;
}
}
private class CharacterPlinthGump : Gump
{
public CharacterPlinthGump(CharacterStatue statue) : base(60, 30)
{
Closable = true;
Disposable = true;
Draggable = true;
Resizable = false;
AddPage(0);
AddImage(0, 0, 0x24F4);
AddHtml(55, 50, 150, 20, statue.Name);
AddHtml(55, 75, 150, 20, statue.SculptedOn.ToString());
AddHtmlLocalized(55, 100, 150, 20, GetTypeNumber(statue.StatueType), 0);
}
public override void OnDoubleClick(Mobile from)
public static int GetTypeNumber(StatueType type)
{
if (m_Statue != null)
return type switch
{
from.SendGump(new CharacterPlinthGump(m_Statue));
}
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
writer.Write(m_Statue);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadEncodedInt();
m_Statue = reader.ReadEntity<CharacterStatue>();
if (m_Statue?.SculptedBy == null || Map == Map.Internal)
{
Timer.StartTimer(Delete);
}
}
public void InvalidateHue()
{
if (m_Statue != null)
{
Hue = 0xB8F + (int)m_Statue.StatueType * 4 + (int)m_Statue.Material;
}
}
private class CharacterPlinthGump : Gump
{
public CharacterPlinthGump(CharacterStatue statue) : base(60, 30)
{
Closable = true;
Disposable = true;
Draggable = true;
Resizable = false;
AddPage(0);
AddImage(0, 0, 0x24F4);
AddHtml(55, 50, 150, 20, statue.Name);
AddHtml(55, 75, 150, 20, statue.SculptedOn.ToString());
AddHtmlLocalized(55, 100, 150, 20, GetTypeNumber(statue.StatueType), 0);
}
public int GetTypeNumber(StatueType type)
{
return type switch
{
StatueType.Marble => 1076181,
StatueType.Jade => 1076180,
StatueType.Bronze => 1076230,
_ => 1076181
};
}
StatueType.Marble => 1076181,
StatueType.Jade => 1076180,
StatueType.Bronze => 1076230,
_ => 1076181
};
}
}
}

View file

@ -0,0 +1,19 @@
{
"version": 1,
"type": "Server.Items.CharacterStatueMaker",
"properties": [
{
"name": "IsRewardItem",
"type": "bool",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
""
]
},
{
"name": "StatueType",
"type": "Server.Mobiles.StatueType",
"rule": "EnumMigrationRule"
}
]
}

View file

@ -0,0 +1,11 @@
{
"version": 0,
"type": "Server.Items.CharacterStatuePlinth",
"properties": [
{
"name": "Statue",
"type": "Server.Mobiles.CharacterStatue",
"rule": "SerializableInterfaceMigrationRule"
}
]
}

View file

@ -0,0 +1,50 @@
{
"version": 1,
"type": "Server.Mobiles.CharacterStatue",
"properties": [
{
"name": "StatueType",
"type": "Server.Mobiles.StatueType",
"rule": "EnumMigrationRule"
},
{
"name": "Pose",
"type": "Server.Mobiles.StatuePose",
"rule": "EnumMigrationRule"
},
{
"name": "Material",
"type": "Server.Mobiles.StatueMaterial",
"rule": "EnumMigrationRule"
},
{
"name": "SculptedBy",
"type": "string",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
""
]
},
{
"name": "SculptedOn",
"type": "System.DateTime",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
""
]
},
{
"name": "Plinth",
"type": "Server.Items.CharacterStatuePlinth",
"rule": "SerializableInterfaceMigrationRule"
},
{
"name": "IsRewardItem",
"type": "bool",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
""
]
}
]
}

View file

@ -0,0 +1,24 @@
{
"version": 1,
"type": "Server.Mobiles.CharacterStatueDeed",
"properties": [
{
"name": "StatueType",
"type": "Server.Mobiles.StatueType",
"rule": "EnumMigrationRule"
},
{
"name": "Statue",
"type": "Server.Mobiles.CharacterStatue",
"rule": "SerializableInterfaceMigrationRule"
},
{
"name": "IsRewardItem",
"type": "bool",
"rule": "PrimitiveTypeMigrationRule",
"ruleArguments": [
""
]
}
]
}