From ca89b8b08b524486e4b374dac3c030bd9c79874b Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Wed, 23 Aug 2023 20:25:54 -0700 Subject: [PATCH] fix: Codegens suits and adds StaffRobe to replace the others (#1468) --- .../UOContent/Commands/ResetStaffDress.cs | 18 +-- Projects/UOContent/Items/Suits/AdminRobe.cs | 32 ++--- Projects/UOContent/Items/Suits/BaseSuit.cs | 135 +++++++++--------- .../UOContent/Items/Suits/CounselorRobe.cs | 32 ++--- Projects/UOContent/Items/Suits/DeathShroud.cs | 32 ++--- Projects/UOContent/Items/Suits/DupreSuit.cs | 32 ++--- Projects/UOContent/Items/Suits/GMRobe.cs | 32 ++--- .../Items/Suits/LordBlackthorneSuit.cs | 32 ++--- .../UOContent/Items/Suits/LordBritishSuit.cs | 32 ++--- Projects/UOContent/Items/Suits/SeerRobe.cs | 32 ++--- Projects/UOContent/Items/Suits/StaffRobe.cs | 34 +++++ .../Migrations/Server.Items.AdminRobe.v0.json | 4 + .../Migrations/Server.Items.BaseSuit.v1.json | 11 ++ .../Server.Items.CounselorRobe.v0.json | 4 + .../Server.Items.DeathShroud.v0.json | 4 + .../Migrations/Server.Items.DupreSuit.v0.json | 4 + .../Migrations/Server.Items.GMRobe.v0.json | 4 + .../Server.Items.LordBlackthorneSuit.v0.json | 4 + .../Server.Items.LordBritishSuit.v0.json | 4 + .../Migrations/Server.Items.SeerRobe.v0.json | 4 + .../Migrations/Server.Items.StaffRobe.v0.json | 4 + 21 files changed, 214 insertions(+), 276 deletions(-) create mode 100644 Projects/UOContent/Items/Suits/StaffRobe.cs create mode 100644 Projects/UOContent/Migrations/Server.Items.AdminRobe.v0.json create mode 100644 Projects/UOContent/Migrations/Server.Items.BaseSuit.v1.json create mode 100644 Projects/UOContent/Migrations/Server.Items.CounselorRobe.v0.json create mode 100644 Projects/UOContent/Migrations/Server.Items.DeathShroud.v0.json create mode 100644 Projects/UOContent/Migrations/Server.Items.DupreSuit.v0.json create mode 100644 Projects/UOContent/Migrations/Server.Items.GMRobe.v0.json create mode 100644 Projects/UOContent/Migrations/Server.Items.LordBlackthorneSuit.v0.json create mode 100644 Projects/UOContent/Migrations/Server.Items.LordBritishSuit.v0.json create mode 100644 Projects/UOContent/Migrations/Server.Items.SeerRobe.v0.json create mode 100644 Projects/UOContent/Migrations/Server.Items.StaffRobe.v0.json diff --git a/Projects/UOContent/Commands/ResetStaffDress.cs b/Projects/UOContent/Commands/ResetStaffDress.cs index cd94e0350..2a42357bd 100644 --- a/Projects/UOContent/Commands/ResetStaffDress.cs +++ b/Projects/UOContent/Commands/ResetStaffDress.cs @@ -1,24 +1,11 @@ -using System; using Server.Items; using Server.Mobiles; using Server.Network; -using Server.Utilities; namespace Server.Commands; public static class StaffDress { - private static readonly Type[] _staffRobeTypes = - { - null, - typeof(CounselorRobe), - typeof(GMRobe), - typeof(SeerRobe), - typeof(AdminRobe), - typeof(AdminRobe), - typeof(AdminRobe) - }; - public static void Initialize() { CommandSystem.Register("ResetStaffDress", AccessLevel.Counselor, StaffDress_OnCommand); @@ -75,6 +62,9 @@ public static class StaffDress } } - pm.AddItem(_staffRobeTypes[(int)pm.AccessLevel].CreateInstance()); + if (pm.AccessLevel > AccessLevel.Player) + { + pm.AddItem(new StaffRobe(pm.AccessLevel)); + } } } diff --git a/Projects/UOContent/Items/Suits/AdminRobe.cs b/Projects/UOContent/Items/Suits/AdminRobe.cs index 7becdf49b..5af2e78aa 100644 --- a/Projects/UOContent/Items/Suits/AdminRobe.cs +++ b/Projects/UOContent/Items/Suits/AdminRobe.cs @@ -1,28 +1,12 @@ -namespace Server.Items +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0, false)] +public partial class AdminRobe : BaseSuit { - public class AdminRobe : BaseSuit + // [Constructible] // Deprecated, use StaffRobe + public AdminRobe() : base(AccessLevel.Administrator, 0x0, 0x204F) // Blank hue { - [Constructible] - public AdminRobe() : base(AccessLevel.Administrator, 0x0, 0x204F) // Blank hue - { - } - - public AdminRobe(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(); - } } } diff --git a/Projects/UOContent/Items/Suits/BaseSuit.cs b/Projects/UOContent/Items/Suits/BaseSuit.cs index 19976269c..ee7bf3897 100644 --- a/Projects/UOContent/Items/Suits/BaseSuit.cs +++ b/Projects/UOContent/Items/Suits/BaseSuit.cs @@ -1,87 +1,82 @@ -namespace Server.Items +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(1, false)] +public abstract partial class BaseSuit : Item { - public abstract class BaseSuit : Item + public BaseSuit(AccessLevel level, int hue, int itemID) : base(itemID) { - public BaseSuit(AccessLevel level, int hue, int itemID) : base(itemID) - { - Hue = hue; - Weight = 1.0; - Movable = false; - LootType = LootType.Newbied; - Layer = Layer.OuterTorso; + Hue = hue; + Weight = 1.0; + Movable = false; + LootType = LootType.Newbied; + Layer = Layer.OuterTorso; - AccessLevel = level; + _accessLevel = level; + } + + [SerializableProperty(0)] + public AccessLevel AccessLevel + { + get => _accessLevel; + set + { + var oldAccessLevel = _accessLevel; + _accessLevel = value; + InvalidateProperties(); + this.MarkDirty(); + + OnAccessLevelChanged(oldAccessLevel, _accessLevel); + } + } + + public virtual void OnAccessLevelChanged(AccessLevel oldAccessLevel, AccessLevel accessLevel) + { + } + + private void Deserialize(IGenericReader reader, int version) + { + AccessLevel = (AccessLevel)reader.ReadInt(); + } + + public bool Validate() + { + if (RootParent is not Mobile mobile || mobile.AccessLevel >= AccessLevel) + { + return true; } - public BaseSuit(Serial serial) : base(serial) + Delete(); + return false; + } + + public override void OnSingleClick(Mobile from) + { + if (Validate()) { + base.OnSingleClick(from); } + } - [CommandProperty(AccessLevel.Administrator)] - public AccessLevel AccessLevel { get; set; } - - public override void Serialize(IGenericWriter writer) + public override void OnDoubleClick(Mobile from) + { + if (Validate()) { - base.Serialize(writer); - - writer.Write(0); // version - - writer.Write((int)AccessLevel); + base.OnDoubleClick(from); } + } - public override void Deserialize(IGenericReader reader) + public override bool VerifyMove(Mobile from) => from.AccessLevel >= AccessLevel; + + public override bool OnEquip(Mobile from) + { + if (from.AccessLevel < AccessLevel) { - base.Deserialize(reader); - - var version = reader.ReadInt(); - - switch (version) - { - case 0: - { - AccessLevel = (AccessLevel)reader.ReadInt(); - break; - } - } - } - - public bool Validate() - { - if (RootParent is not Mobile mobile || mobile.AccessLevel >= AccessLevel) - { - return true; - } - - Delete(); + from.SendMessage("You may not wear this."); return false; } - public override void OnSingleClick(Mobile from) - { - if (Validate()) - { - base.OnSingleClick(from); - } - } - - public override void OnDoubleClick(Mobile from) - { - if (Validate()) - { - base.OnDoubleClick(from); - } - } - - public override bool VerifyMove(Mobile from) => from.AccessLevel >= AccessLevel; - - public override bool OnEquip(Mobile from) - { - if (from.AccessLevel < AccessLevel) - { - from.SendMessage("You may not wear this."); - } - - return from.AccessLevel >= AccessLevel; - } + return true; } } diff --git a/Projects/UOContent/Items/Suits/CounselorRobe.cs b/Projects/UOContent/Items/Suits/CounselorRobe.cs index 96992c4da..c4c6dd90e 100644 --- a/Projects/UOContent/Items/Suits/CounselorRobe.cs +++ b/Projects/UOContent/Items/Suits/CounselorRobe.cs @@ -1,28 +1,12 @@ -namespace Server.Items +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0, false)] +public partial class CounselorRobe : BaseSuit { - public class CounselorRobe : BaseSuit + // [Constructible] // Deprecated, use StaffRobe + public CounselorRobe() : base(AccessLevel.Counselor, 0x3, 0x204F) { - [Constructible] - public CounselorRobe() : base(AccessLevel.Counselor, 0x3, 0x204F) - { - } - - public CounselorRobe(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(); - } } } diff --git a/Projects/UOContent/Items/Suits/DeathShroud.cs b/Projects/UOContent/Items/Suits/DeathShroud.cs index 82339e7bc..242534036 100644 --- a/Projects/UOContent/Items/Suits/DeathShroud.cs +++ b/Projects/UOContent/Items/Suits/DeathShroud.cs @@ -1,28 +1,12 @@ -namespace Server.Items +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0, false)] +public partial class DeathShroud : BaseSuit { - public class DeathShroud : BaseSuit + [Constructible] + public DeathShroud() : base(AccessLevel.GameMaster, 0x0, 0x204E) { - [Constructible] - public DeathShroud() : base(AccessLevel.GameMaster, 0x0, 0x204E) - { - } - - public DeathShroud(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(); - } } } diff --git a/Projects/UOContent/Items/Suits/DupreSuit.cs b/Projects/UOContent/Items/Suits/DupreSuit.cs index 6456925cf..386ecf753 100644 --- a/Projects/UOContent/Items/Suits/DupreSuit.cs +++ b/Projects/UOContent/Items/Suits/DupreSuit.cs @@ -1,28 +1,12 @@ -namespace Server.Items +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0, false)] +public partial class DupreSuit : BaseSuit { - public class DupreSuit : BaseSuit + [Constructible] + public DupreSuit() : base(AccessLevel.GameMaster, 0x0, 0x2050) { - [Constructible] - public DupreSuit() : base(AccessLevel.GameMaster, 0x0, 0x2050) - { - } - - public DupreSuit(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(); - } } } diff --git a/Projects/UOContent/Items/Suits/GMRobe.cs b/Projects/UOContent/Items/Suits/GMRobe.cs index efe07b3ef..1b33c95e6 100644 --- a/Projects/UOContent/Items/Suits/GMRobe.cs +++ b/Projects/UOContent/Items/Suits/GMRobe.cs @@ -1,28 +1,12 @@ -namespace Server.Items +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0, false)] +public partial class GMRobe : BaseSuit { - public class GMRobe : BaseSuit + // [Constructible] // Deprecated, use StaffRobe + public GMRobe() : base(AccessLevel.GameMaster, 0x26, 0x204F) { - [Constructible] - public GMRobe() : base(AccessLevel.GameMaster, 0x26, 0x204F) - { - } - - public GMRobe(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(); - } } } diff --git a/Projects/UOContent/Items/Suits/LordBlackthorneSuit.cs b/Projects/UOContent/Items/Suits/LordBlackthorneSuit.cs index 06552fd17..5623b71a7 100644 --- a/Projects/UOContent/Items/Suits/LordBlackthorneSuit.cs +++ b/Projects/UOContent/Items/Suits/LordBlackthorneSuit.cs @@ -1,28 +1,12 @@ -namespace Server.Items +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0, false)] +public partial class LordBlackthorneSuit : BaseSuit { - public class LordBlackthorneSuit : BaseSuit + [Constructible] + public LordBlackthorneSuit() : base(AccessLevel.GameMaster, 0x0, 0x2043) { - [Constructible] - public LordBlackthorneSuit() : base(AccessLevel.GameMaster, 0x0, 0x2043) - { - } - - public LordBlackthorneSuit(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(); - } } } diff --git a/Projects/UOContent/Items/Suits/LordBritishSuit.cs b/Projects/UOContent/Items/Suits/LordBritishSuit.cs index 5404e341e..647e4ed6c 100644 --- a/Projects/UOContent/Items/Suits/LordBritishSuit.cs +++ b/Projects/UOContent/Items/Suits/LordBritishSuit.cs @@ -1,28 +1,12 @@ -namespace Server.Items +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0, false)] +public partial class LordBritishSuit : BaseSuit { - public class LordBritishSuit : BaseSuit + [Constructible] + public LordBritishSuit() : base(AccessLevel.GameMaster, 0x0, 0x2042) { - [Constructible] - public LordBritishSuit() : base(AccessLevel.GameMaster, 0x0, 0x2042) - { - } - - public LordBritishSuit(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(); - } } } diff --git a/Projects/UOContent/Items/Suits/SeerRobe.cs b/Projects/UOContent/Items/Suits/SeerRobe.cs index 72980d62b..8613c3b7e 100644 --- a/Projects/UOContent/Items/Suits/SeerRobe.cs +++ b/Projects/UOContent/Items/Suits/SeerRobe.cs @@ -1,28 +1,12 @@ -namespace Server.Items +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0, false)] +public partial class SeerRobe : BaseSuit { - public class SeerRobe : BaseSuit + // [Constructible] // Deprecated, use StaffRobe + public SeerRobe() : base(AccessLevel.Seer, 0x1D3, 0x204F) { - [Constructible] - public SeerRobe() : base(AccessLevel.Seer, 0x1D3, 0x204F) - { - } - - public SeerRobe(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(); - } } } diff --git a/Projects/UOContent/Items/Suits/StaffRobe.cs b/Projects/UOContent/Items/Suits/StaffRobe.cs new file mode 100644 index 000000000..9d98abf7e --- /dev/null +++ b/Projects/UOContent/Items/Suits/StaffRobe.cs @@ -0,0 +1,34 @@ +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0)] +public partial class StaffRobe : BaseSuit +{ + public static int GetStaffRobeHue(AccessLevel accessLevel) + { + return accessLevel switch + { + AccessLevel.Counselor => 0x3, + AccessLevel.GameMaster => 0x26, + AccessLevel.Seer => 0x1D3, + AccessLevel.Administrator => 0x488, + AccessLevel.Developer => 11, + AccessLevel.Owner => 0x496, + }; + } + + public StaffRobe(AccessLevel level) : base(level, GetStaffRobeHue(level), 0x204F) + { + } + + public override void OnAccessLevelChanged(AccessLevel oldAccessLevel, AccessLevel accessLevel) + { + var oldHue = GetStaffRobeHue(oldAccessLevel); + + if (oldHue == Hue) + { + Hue = GetStaffRobeHue(accessLevel); + } + } +} diff --git a/Projects/UOContent/Migrations/Server.Items.AdminRobe.v0.json b/Projects/UOContent/Migrations/Server.Items.AdminRobe.v0.json new file mode 100644 index 000000000..724764eb5 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.AdminRobe.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.AdminRobe" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.BaseSuit.v1.json b/Projects/UOContent/Migrations/Server.Items.BaseSuit.v1.json new file mode 100644 index 000000000..1c3ed89c3 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.BaseSuit.v1.json @@ -0,0 +1,11 @@ +{ + "version": 1, + "type": "Server.Items.BaseSuit", + "properties": [ + { + "name": "AccessLevel", + "type": "Server.AccessLevel", + "rule": "EnumMigrationRule" + } + ] +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.CounselorRobe.v0.json b/Projects/UOContent/Migrations/Server.Items.CounselorRobe.v0.json new file mode 100644 index 000000000..e564e39db --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.CounselorRobe.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.CounselorRobe" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.DeathShroud.v0.json b/Projects/UOContent/Migrations/Server.Items.DeathShroud.v0.json new file mode 100644 index 000000000..e4ac216cf --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.DeathShroud.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.DeathShroud" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.DupreSuit.v0.json b/Projects/UOContent/Migrations/Server.Items.DupreSuit.v0.json new file mode 100644 index 000000000..643aa06ab --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.DupreSuit.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.DupreSuit" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.GMRobe.v0.json b/Projects/UOContent/Migrations/Server.Items.GMRobe.v0.json new file mode 100644 index 000000000..7638e893a --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.GMRobe.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.GMRobe" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.LordBlackthorneSuit.v0.json b/Projects/UOContent/Migrations/Server.Items.LordBlackthorneSuit.v0.json new file mode 100644 index 000000000..abb8cea54 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.LordBlackthorneSuit.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.LordBlackthorneSuit" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.LordBritishSuit.v0.json b/Projects/UOContent/Migrations/Server.Items.LordBritishSuit.v0.json new file mode 100644 index 000000000..9013b1b24 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.LordBritishSuit.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.LordBritishSuit" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.SeerRobe.v0.json b/Projects/UOContent/Migrations/Server.Items.SeerRobe.v0.json new file mode 100644 index 000000000..dfe173108 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.SeerRobe.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.SeerRobe" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.StaffRobe.v0.json b/Projects/UOContent/Migrations/Server.Items.StaffRobe.v0.json new file mode 100644 index 000000000..335b4bfb8 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.StaffRobe.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.StaffRobe" +} \ No newline at end of file