diff --git a/Projects/UOContent/Items/Games/Backgammon.cs b/Projects/UOContent/Items/Games/Backgammon.cs index 836a62786..5b6a71b77 100644 --- a/Projects/UOContent/Items/Games/Backgammon.cs +++ b/Projects/UOContent/Items/Games/Backgammon.cs @@ -1,51 +1,37 @@ -namespace Server.Items +using ModernUO.Serialization; + +namespace Server.Items; + +[Flippable(0xE1C, 0xFAD)] +[SerializationGenerator(0, false)] +public partial class Backgammon : BaseBoard { - [Flippable(0xE1C, 0xFAD)] - public class Backgammon : BaseBoard + [Constructible] + public Backgammon() : base(0xE1C) { - [Constructible] - public Backgammon() : base(0xE1C) + } + + public override void CreatePieces() + { + for (var i = 0; i < 5; i++) { + CreatePiece(new PieceWhiteChecker(this), 42, 17 * i + 6); + CreatePiece(new PieceBlackChecker(this), 42, 17 * i + 119); + + CreatePiece(new PieceBlackChecker(this), 142, 17 * i + 6); + CreatePiece(new PieceWhiteChecker(this), 142, 17 * i + 119); } - public Backgammon(Serial serial) : base(serial) + for (var i = 0; i < 3; i++) { + CreatePiece(new PieceBlackChecker(this), 108, 17 * i + 6); + CreatePiece(new PieceWhiteChecker(this), 108, 17 * i + 153); } - public override void CreatePieces() + for (var i = 0; i < 2; i++) { - for (var i = 0; i < 5; i++) - { - CreatePiece(new PieceWhiteChecker(this), 42, 17 * i + 6); - CreatePiece(new PieceBlackChecker(this), 42, 17 * i + 119); - - CreatePiece(new PieceBlackChecker(this), 142, 17 * i + 6); - CreatePiece(new PieceWhiteChecker(this), 142, 17 * i + 119); - } - - for (var i = 0; i < 3; i++) - { - CreatePiece(new PieceBlackChecker(this), 108, 17 * i + 6); - CreatePiece(new PieceWhiteChecker(this), 108, 17 * i + 153); - } - - for (var i = 0; i < 2; i++) - { - CreatePiece(new PieceWhiteChecker(this), 223, 17 * i + 6); - CreatePiece(new PieceBlackChecker(this), 223, 17 * i + 170); - } - } - - 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(); + CreatePiece(new PieceWhiteChecker(this), 223, 17 * i + 6); + CreatePiece(new PieceBlackChecker(this), 223, 17 * i + 170); } } } diff --git a/Projects/UOContent/Items/Games/BaseBoard.cs b/Projects/UOContent/Items/Games/BaseBoard.cs index 8426bcb84..869402f70 100644 --- a/Projects/UOContent/Items/Games/BaseBoard.cs +++ b/Projects/UOContent/Items/Games/BaseBoard.cs @@ -1,145 +1,129 @@ using System; using System.Collections.Generic; +using ModernUO.Serialization; using Server.ContextMenus; using Server.Gumps; using Server.Multis; using Server.Network; -namespace Server.Items +namespace Server.Items; + +[SerializationGenerator(2, false)] +public abstract partial class BaseBoard : Container, ISecurable { - public abstract class BaseBoard : Container, ISecurable + [SerializableField(0)] + [SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")] + private SecureLevel _level; + + public BaseBoard(int itemID) : base(itemID) { - public BaseBoard(int itemID) : base(itemID) + CreatePieces(); + + Weight = 5.0; + } + + public override bool DisplaysContent => false; // Do not display (x items, y stones) + + public override bool IsDecoContainer => false; + + public override TimeSpan DecayTime => TimeSpan.FromDays(1.0); + + public abstract void CreatePieces(); + + public void Reset() + { + for (var i = Items.Count - 1; i >= 0; --i) { - CreatePieces(); - - Weight = 5.0; - } - - public BaseBoard(Serial serial) : base(serial) - { - } - - public override bool DisplaysContent => false; // Do not display (x items, y stones) - - public override bool IsDecoContainer => false; - - public override TimeSpan DecayTime => TimeSpan.FromDays(1.0); - - [CommandProperty(AccessLevel.GameMaster)] - public SecureLevel Level { get; set; } - - public abstract void CreatePieces(); - - public void Reset() - { - for (var i = Items.Count - 1; i >= 0; --i) + if (i < Items.Count) { - if (i < Items.Count) + Items[i].Delete(); + } + } + + CreatePieces(); + } + + public void CreatePiece(BasePiece piece, int x, int y) + { + AddItem(piece); + piece.Location = new Point3D(x, y, 0); + } + + private void Deserialize(IGenericReader reader, int version) + { + base.Deserialize(reader); + + if (version == 1) + { + Level = (SecureLevel)reader.ReadInt(); + } + } + + public override bool OnDragDrop(Mobile from, Item dropped) => + dropped is BasePiece piece && piece.Board == this && base.OnDragDrop(from, dropped); + + public override bool OnDragDropInto(Mobile from, Item dropped, Point3D point) + { + if (dropped is BasePiece piece && piece.Board == this && base.OnDragDropInto(from, dropped, point)) + { + if (RootParent == from) + { + from.SendSound(0x127, GetWorldLocation()); + } + else + { + Span buffer = stackalloc byte[OutgoingEffectPackets.SoundPacketLength].InitializePacket(); + + foreach (var state in GetClientsInRange(2)) { - Items[i].Delete(); + OutgoingEffectPackets.CreateSoundEffect(buffer, 0x127, GetWorldLocation()); + state.Send(buffer); } } - CreatePieces(); + return true; } - public void CreatePiece(BasePiece piece, int x, int y) + return false; + } + + public override void GetContextMenuEntries(Mobile from, List list) + { + base.GetContextMenuEntries(from, list); + + if (ValidateDefault(from, this)) { - AddItem(piece); - piece.Location = new Point3D(x, y, 0); + list.Add(new DefaultEntry(from, this)); } - public override void Serialize(IGenericWriter writer) - { - base.Serialize(writer); - writer.Write(1); // version + SetSecureLevelEntry.AddTo(from, this, list); + } - writer.Write((int)Level); + public static bool ValidateDefault(Mobile from, BaseBoard board) => + !board.Deleted && (from.AccessLevel >= AccessLevel.GameMaster || from.Alive && + (board.IsChildOf(from.Backpack) || board.RootParent is not Mobile && + board.Map == from.Map && from.InRange(board.GetWorldLocation(), 1) && + BaseHouse.FindHouseAt(board)?.IsOwner(from) == true)); + + public class DefaultEntry : ContextMenuEntry + { + private readonly BaseBoard m_Board; + private readonly Mobile m_From; + + public DefaultEntry(Mobile from, BaseBoard board) : base( + 6162, + from.AccessLevel >= AccessLevel.GameMaster ? -1 : 1 + ) + { + m_From = from; + m_Board = board; } - public override void Deserialize(IGenericReader reader) + public override void OnClick() { - base.Deserialize(reader); - var version = reader.ReadInt(); - - if (version == 1) + if (ValidateDefault(m_From, m_Board)) { - Level = (SecureLevel)reader.ReadInt(); - } - - if (Weight == 1.0) - { - Weight = 5.0; - } - } - - public override bool OnDragDrop(Mobile from, Item dropped) => - dropped is BasePiece piece && piece.Board == this && base.OnDragDrop(from, dropped); - - public override bool OnDragDropInto(Mobile from, Item dropped, Point3D point) - { - if (dropped is BasePiece piece && piece.Board == this && base.OnDragDropInto(from, dropped, point)) - { - if (RootParent == from) - { - from.SendSound(0x127, GetWorldLocation()); - } - else - { - Span buffer = stackalloc byte[OutgoingEffectPackets.SoundPacketLength].InitializePacket(); - - foreach (var state in GetClientsInRange(2)) - { - OutgoingEffectPackets.CreateSoundEffect(buffer, 0x127, GetWorldLocation()); - state.Send(buffer); - } - } - - return true; - } - - return false; - } - - public override void GetContextMenuEntries(Mobile from, List list) - { - base.GetContextMenuEntries(from, list); - - if (ValidateDefault(from, this)) - { - list.Add(new DefaultEntry(from, this)); - } - - SetSecureLevelEntry.AddTo(from, this, list); - } - - public static bool ValidateDefault(Mobile from, BaseBoard board) => - !board.Deleted && (from.AccessLevel >= AccessLevel.GameMaster || from.Alive && - (board.IsChildOf(from.Backpack) || board.RootParent is not Mobile && - board.Map == from.Map && from.InRange(board.GetWorldLocation(), 1) && - BaseHouse.FindHouseAt(board)?.IsOwner(from) == true)); - - public class DefaultEntry : ContextMenuEntry - { - private readonly BaseBoard m_Board; - private readonly Mobile m_From; - - public DefaultEntry(Mobile from, BaseBoard board) : base( - 6162, - from.AccessLevel >= AccessLevel.GameMaster ? -1 : 1 - ) - { - m_From = from; - m_Board = board; - } - - public override void OnClick() - { - if (ValidateDefault(m_From, m_Board)) - { - m_Board.Reset(); - } + m_Board.Reset(); } } } diff --git a/Projects/UOContent/Items/Games/BasePiece.cs b/Projects/UOContent/Items/Games/BasePiece.cs index a1ef5347a..f80234898 100644 --- a/Projects/UOContent/Items/Games/BasePiece.cs +++ b/Projects/UOContent/Items/Games/BasePiece.cs @@ -1,89 +1,67 @@ -namespace Server.Items +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0, false)] +public partial class BasePiece : Item { - public class BasePiece : Item + [SerializableField(0)] + private BaseBoard _board; + + public BasePiece(int itemID, BaseBoard board) : base(itemID) => _board = board; + + public override bool IsVirtualItem => true; + + public override bool CanTarget => false; + + [AfterDeserialization(false)] + private void AfterDeserialization() { - public BasePiece(int itemID, BaseBoard board) : base(itemID) => Board = board; - - public BasePiece(Serial serial) : base(serial) + if (Board == null || Parent == null) { + Delete(); } - - public BaseBoard Board { get; set; } - - public override bool IsVirtualItem => true; - - public override bool CanTarget => false; - - public override void Serialize(IGenericWriter writer) - { - base.Serialize(writer); - - writer.Write(0); - writer.Write(Board); - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - - var version = reader.ReadInt(); - - switch (version) - { - case 0: - { - Board = (BaseBoard)reader.ReadEntity(); - - if (Board == null || Parent == null) - { - Delete(); - } - - break; - } - } - } - - public override void OnSingleClick(Mobile from) - { - if (Board?.Deleted != false) - { - Delete(); - } - else if (!IsChildOf(Board)) - { - Board.DropItem(this); - } - else - { - base.OnSingleClick(from); - } - } - - public override bool OnDragLift(Mobile from) - { - if (Board?.Deleted != false) - { - Delete(); - return false; - } - - if (!IsChildOf(Board)) - { - Board.DropItem(this); - return false; - } - - return true; - } - - public override bool DropToMobile(Mobile from, Mobile target, Point3D p) => false; - - public override bool DropToItem(Mobile from, Item target, Point3D p) => - target == Board && p.X != -1 && p.Y != -1 && base.DropToItem(from, target, p); - - public override bool DropToWorld(Mobile from, Point3D p) => false; - - public override int GetLiftSound(Mobile from) => -1; } + + public override void OnSingleClick(Mobile from) + { + if (Board?.Deleted != false) + { + Delete(); + } + else if (!IsChildOf(Board)) + { + Board.DropItem(this); + } + else + { + base.OnSingleClick(from); + } + } + + public override bool OnDragLift(Mobile from) + { + if (Board?.Deleted != false) + { + Delete(); + return false; + } + + if (!IsChildOf(Board)) + { + Board.DropItem(this); + return false; + } + + return true; + } + + public override bool DropToMobile(Mobile from, Mobile target, Point3D p) => false; + + public override bool DropToItem(Mobile from, Item target, Point3D p) => + target == Board && p.X != -1 && p.Y != -1 && base.DropToItem(from, target, p); + + public override bool DropToWorld(Mobile from, Point3D p) => false; + + public override int GetLiftSound(Mobile from) => -1; } diff --git a/Projects/UOContent/Items/Games/CheckerBoard.cs b/Projects/UOContent/Items/Games/CheckerBoard.cs index 815666784..84b4a5daa 100644 --- a/Projects/UOContent/Items/Games/CheckerBoard.cs +++ b/Projects/UOContent/Items/Games/CheckerBoard.cs @@ -1,41 +1,27 @@ -namespace Server.Items +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0, false)] +public partial class CheckerBoard : BaseBoard { - public class CheckerBoard : BaseBoard + [Constructible] + public CheckerBoard() : base(0xFA6) { - [Constructible] - public CheckerBoard() : base(0xFA6) - { - } + } - public CheckerBoard(Serial serial) : base(serial) - { - } + public override int LabelNumber => 1016449; // a checker board - public override int LabelNumber => 1016449; // a checker board - - public override void CreatePieces() + public override void CreatePieces() + { + for (var i = 0; i < 4; i++) { - for (var i = 0; i < 4; i++) - { - CreatePiece(new PieceWhiteChecker(this), 50 * i + 45, 25); - CreatePiece(new PieceWhiteChecker(this), 50 * i + 70, 50); - CreatePiece(new PieceWhiteChecker(this), 50 * i + 45, 75); - CreatePiece(new PieceBlackChecker(this), 50 * i + 70, 150); - CreatePiece(new PieceBlackChecker(this), 50 * i + 45, 175); - CreatePiece(new PieceBlackChecker(this), 50 * i + 70, 200); - } - } - - 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(); + CreatePiece(new PieceWhiteChecker(this), 50 * i + 45, 25); + CreatePiece(new PieceWhiteChecker(this), 50 * i + 70, 50); + CreatePiece(new PieceWhiteChecker(this), 50 * i + 45, 75); + CreatePiece(new PieceBlackChecker(this), 50 * i + 70, 150); + CreatePiece(new PieceBlackChecker(this), 50 * i + 45, 175); + CreatePiece(new PieceBlackChecker(this), 50 * i + 70, 200); } } } diff --git a/Projects/UOContent/Items/Games/CheckersPieces.cs b/Projects/UOContent/Items/Games/CheckersPieces.cs index 1030b60c8..288d65517 100644 --- a/Projects/UOContent/Items/Games/CheckersPieces.cs +++ b/Projects/UOContent/Items/Games/CheckersPieces.cs @@ -1,52 +1,23 @@ -namespace Server.Items +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0, false)] +public partial class PieceWhiteChecker : BasePiece { - public class PieceWhiteChecker : BasePiece + public PieceWhiteChecker(BaseBoard board) : base(0x3584, board) { - public PieceWhiteChecker(BaseBoard board) : base(0x3584, board) - { - } - - public PieceWhiteChecker(Serial serial) : base(serial) - { - } - - public override string DefaultName => "white checker"; - - 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(); - } } - public class PieceBlackChecker : BasePiece - { - public PieceBlackChecker(BaseBoard board) : base(0x358B, board) - { - } - - public PieceBlackChecker(Serial serial) : base(serial) - { - } - - public override string DefaultName => "black checker"; - - 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(); - } - } + public override string DefaultName => "white checker"; +} + +[SerializationGenerator(0, false)] +public partial class PieceBlackChecker : BasePiece +{ + public PieceBlackChecker(BaseBoard board) : base(0x358B, board) + { + } + + public override string DefaultName => "black checker"; } diff --git a/Projects/UOContent/Items/Games/ChessPieces.cs b/Projects/UOContent/Items/Games/ChessPieces.cs index 01b76c21e..6da1afde2 100644 --- a/Projects/UOContent/Items/Games/ChessPieces.cs +++ b/Projects/UOContent/Items/Games/ChessPieces.cs @@ -1,302 +1,123 @@ -namespace Server.Items +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0, false)] +public partial class PieceWhiteKing : BasePiece { - public class PieceWhiteKing : BasePiece + public PieceWhiteKing(BaseBoard board) : base(0x3587, board) { - public PieceWhiteKing(BaseBoard board) : base(0x3587, board) - { - } - - public PieceWhiteKing(Serial serial) : base(serial) - { - } - - public override string DefaultName => "white king"; - - 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(); - } } - public class PieceBlackKing : BasePiece - { - public PieceBlackKing(BaseBoard board) : base(0x358E, board) - { - } - - public PieceBlackKing(Serial serial) : base(serial) - { - } - - public override string DefaultName => "black king"; - - 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(); - } - } - - public class PieceWhiteQueen : BasePiece - { - public PieceWhiteQueen(BaseBoard board) : base(0x358A, board) - { - } - - public PieceWhiteQueen(Serial serial) : base(serial) - { - } - - public override string DefaultName => "white queen"; - - 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(); - } - } - - public class PieceBlackQueen : BasePiece - { - public PieceBlackQueen(BaseBoard board) : base(0x3591, board) - { - } - - public PieceBlackQueen(Serial serial) : base(serial) - { - } - - public override string DefaultName => "black queen"; - - 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(); - } - } - - public class PieceWhiteRook : BasePiece - { - public PieceWhiteRook(BaseBoard board) : base(0x3586, board) - { - } - - public PieceWhiteRook(Serial serial) : base(serial) - { - } - - public override string DefaultName => "white rook"; - - 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(); - } - } - - public class PieceBlackRook : BasePiece - { - public PieceBlackRook(BaseBoard board) : base(0x358D, board) - { - } - - public PieceBlackRook(Serial serial) : base(serial) - { - } - - public override string DefaultName => "black rook"; - - 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(); - } - } - - public class PieceWhiteBishop : BasePiece - { - public PieceWhiteBishop(BaseBoard board) : base(0x3585, board) - { - } - - public PieceWhiteBishop(Serial serial) : base(serial) - { - } - - public override string DefaultName => "white bishop"; - - 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(); - } - } - - public class PieceBlackBishop : BasePiece - { - public PieceBlackBishop(BaseBoard board) : base(0x358C, board) - { - } - - public PieceBlackBishop(Serial serial) : base(serial) - { - } - - public override string DefaultName => "black bishop"; - - 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(); - } - } - - public class PieceWhiteKnight : BasePiece - { - public PieceWhiteKnight(BaseBoard board) : base(0x3588, board) - { - } - - public PieceWhiteKnight(Serial serial) : base(serial) - { - } - - public override string DefaultName => "white knight"; - - 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(); - } - } - - public class PieceBlackKnight : BasePiece - { - public PieceBlackKnight(BaseBoard board) : base(0x358F, board) - { - } - - public PieceBlackKnight(Serial serial) : base(serial) - { - } - - public override string DefaultName => "black knight"; - - 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(); - } - } - - public class PieceWhitePawn : BasePiece - { - public PieceWhitePawn(BaseBoard board) : base(0x3589, board) - { - } - - public PieceWhitePawn(Serial serial) : base(serial) - { - } - - public override string DefaultName => "white pawn"; - - 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(); - } - } - - public class PieceBlackPawn : BasePiece - { - public PieceBlackPawn(BaseBoard board) : base(0x3590, board) - { - } - - public PieceBlackPawn(Serial serial) : base(serial) - { - } - - public override string DefaultName => "black pawn"; - - 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(); - } - } + public override string DefaultName => "white king"; +} + +[SerializationGenerator(0, false)] +public partial class PieceBlackKing : BasePiece +{ + public PieceBlackKing(BaseBoard board) : base(0x358E, board) + { + } + + public override string DefaultName => "black king"; +} + +[SerializationGenerator(0, false)] +public partial class PieceWhiteQueen : BasePiece +{ + public PieceWhiteQueen(BaseBoard board) : base(0x358A, board) + { + } + + public override string DefaultName => "white queen"; +} + +[SerializationGenerator(0, false)] +public partial class PieceBlackQueen : BasePiece +{ + public PieceBlackQueen(BaseBoard board) : base(0x3591, board) + { + } + + public override string DefaultName => "black queen"; +} + +[SerializationGenerator(0, false)] +public partial class PieceWhiteRook : BasePiece +{ + public PieceWhiteRook(BaseBoard board) : base(0x3586, board) + { + } + + public override string DefaultName => "white rook"; +} + +[SerializationGenerator(0, false)] +public partial class PieceBlackRook : BasePiece +{ + public PieceBlackRook(BaseBoard board) : base(0x358D, board) + { + } + + public override string DefaultName => "black rook"; +} + +[SerializationGenerator(0, false)] +public partial class PieceWhiteBishop : BasePiece +{ + public PieceWhiteBishop(BaseBoard board) : base(0x3585, board) + { + } + + public override string DefaultName => "white bishop"; +} + +[SerializationGenerator(0, false)] +public partial class PieceBlackBishop : BasePiece +{ + public PieceBlackBishop(BaseBoard board) : base(0x358C, board) + { + } + + public override string DefaultName => "black bishop"; +} + +[SerializationGenerator(0, false)] +public partial class PieceWhiteKnight : BasePiece +{ + public PieceWhiteKnight(BaseBoard board) : base(0x3588, board) + { + } + + public override string DefaultName => "white knight"; +} + +[SerializationGenerator(0, false)] +public partial class PieceBlackKnight : BasePiece +{ + public PieceBlackKnight(BaseBoard board) : base(0x358F, board) + { + } + + public override string DefaultName => "black knight"; +} + +[SerializationGenerator(0, false)] +public partial class PieceWhitePawn : BasePiece +{ + public PieceWhitePawn(BaseBoard board) : base(0x3589, board) + { + } + + public override string DefaultName => "white pawn"; +} + +[SerializationGenerator(0, false)] +public partial class PieceBlackPawn : BasePiece +{ + public PieceBlackPawn(BaseBoard board) : base(0x3590, board) + { + } + + public override string DefaultName => "black pawn"; } diff --git a/Projects/UOContent/Items/Games/Chessboard.cs b/Projects/UOContent/Items/Games/Chessboard.cs index 5ac9e4141..b09f89ee6 100644 --- a/Projects/UOContent/Items/Games/Chessboard.cs +++ b/Projects/UOContent/Items/Games/Chessboard.cs @@ -1,66 +1,52 @@ -namespace Server.Items +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0, false)] +public partial class Chessboard : BaseBoard { - public class Chessboard : BaseBoard + [Constructible] + public Chessboard() : base(0xFA6) { - [Constructible] - public Chessboard() : base(0xFA6) + } + + public override int LabelNumber => 1016450; // a chessboard + + public override void CreatePieces() + { + for (var i = 0; i < 8; i++) { + CreatePiece(new PieceBlackPawn(this), 67, 25 * i + 17); + CreatePiece(new PieceWhitePawn(this), 192, 25 * i + 17); } - public Chessboard(Serial serial) : base(serial) - { - } + // Rook + CreatePiece(new PieceBlackRook(this), 42, 5); + CreatePiece(new PieceBlackRook(this), 42, 180); - public override int LabelNumber => 1016450; // a chessboard + CreatePiece(new PieceWhiteRook(this), 216, 5); + CreatePiece(new PieceWhiteRook(this), 216, 180); - public override void CreatePieces() - { - for (var i = 0; i < 8; i++) - { - CreatePiece(new PieceBlackPawn(this), 67, 25 * i + 17); - CreatePiece(new PieceWhitePawn(this), 192, 25 * i + 17); - } + // Knight + CreatePiece(new PieceBlackKnight(this), 42, 30); + CreatePiece(new PieceBlackKnight(this), 42, 155); - // Rook - CreatePiece(new PieceBlackRook(this), 42, 5); - CreatePiece(new PieceBlackRook(this), 42, 180); + CreatePiece(new PieceWhiteKnight(this), 216, 30); + CreatePiece(new PieceWhiteKnight(this), 216, 155); - CreatePiece(new PieceWhiteRook(this), 216, 5); - CreatePiece(new PieceWhiteRook(this), 216, 180); + // Bishop + CreatePiece(new PieceBlackBishop(this), 42, 55); + CreatePiece(new PieceBlackBishop(this), 42, 130); - // Knight - CreatePiece(new PieceBlackKnight(this), 42, 30); - CreatePiece(new PieceBlackKnight(this), 42, 155); + CreatePiece(new PieceWhiteBishop(this), 216, 55); + CreatePiece(new PieceWhiteBishop(this), 216, 130); - CreatePiece(new PieceWhiteKnight(this), 216, 30); - CreatePiece(new PieceWhiteKnight(this), 216, 155); + // Queen + CreatePiece(new PieceBlackQueen(this), 42, 105); + CreatePiece(new PieceWhiteQueen(this), 216, 105); - // Bishop - CreatePiece(new PieceBlackBishop(this), 42, 55); - CreatePiece(new PieceBlackBishop(this), 42, 130); - - CreatePiece(new PieceWhiteBishop(this), 216, 55); - CreatePiece(new PieceWhiteBishop(this), 216, 130); - - // Queen - CreatePiece(new PieceBlackQueen(this), 42, 105); - CreatePiece(new PieceWhiteQueen(this), 216, 105); - - // King - CreatePiece(new PieceBlackKing(this), 42, 80); - CreatePiece(new PieceWhiteKing(this), 216, 80); - } - - 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(); - } + // King + CreatePiece(new PieceBlackKing(this), 42, 80); + CreatePiece(new PieceWhiteKing(this), 216, 80); } } diff --git a/Projects/UOContent/Items/Games/Dices.cs b/Projects/UOContent/Items/Games/Dices.cs index e277a8e54..0cd9cf22e 100644 --- a/Projects/UOContent/Items/Games/Dices.cs +++ b/Projects/UOContent/Items/Games/Dices.cs @@ -1,54 +1,39 @@ +using ModernUO.Serialization; using Server.Network; -namespace Server.Items +namespace Server.Items; + +[SerializationGenerator(0, false)] +public partial class Dices : Item, ITelekinesisable { - public class Dices : Item, ITelekinesisable + [Constructible] + public Dices() : base(0xFA7) => Weight = 1.0; + + public void OnTelekinesis(Mobile from) { - [Constructible] - public Dices() : base(0xFA7) => Weight = 1.0; + Effects.SendLocationParticles(EffectItem.Create(Location, Map, EffectItem.DefaultDuration), 0x376A, 9, 32, 5022); + Effects.PlaySound(Location, Map, 0x1F5); - public Dices(Serial serial) : base(serial) + Roll(from); + } + + public override void OnDoubleClick(Mobile from) + { + if (!from.InRange(GetWorldLocation(), 2)) { + return; } - public void OnTelekinesis(Mobile from) - { - Effects.SendLocationParticles(EffectItem.Create(Location, Map, EffectItem.DefaultDuration), 0x376A, 9, 32, 5022); - Effects.PlaySound(Location, Map, 0x1F5); + Roll(from); + } - Roll(from); - } - - public override void OnDoubleClick(Mobile from) - { - if (!from.InRange(GetWorldLocation(), 2)) - { - return; - } - - Roll(from); - } - - public void Roll(Mobile from) - { - PublicOverheadMessage( - MessageType.Regular, - 0, - false, - $"*{from.Name} rolls {Utility.Random(1, 6)}, {Utility.Random(1, 6)}*" - ); - } - - 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(); - } + public void Roll(Mobile from) + { + PublicOverheadMessage( + MessageType.Regular, + 0, + false, + $"*{from.Name} rolls {Utility.Random(1, 6)}, {Utility.Random(1, 6)}*" + ); } } diff --git a/Projects/UOContent/Migrations/Server.Items.Backgammon.v0.json b/Projects/UOContent/Migrations/Server.Items.Backgammon.v0.json new file mode 100644 index 000000000..b5b6599dd --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.Backgammon.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.Backgammon" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.BaseBoard.v2.json b/Projects/UOContent/Migrations/Server.Items.BaseBoard.v2.json new file mode 100644 index 000000000..75c01eb01 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.BaseBoard.v2.json @@ -0,0 +1,11 @@ +{ + "version": 2, + "type": "Server.Items.BaseBoard", + "properties": [ + { + "name": "Level", + "type": "Server.Multis.SecureLevel", + "rule": "EnumMigrationRule" + } + ] +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.BasePiece.v0.json b/Projects/UOContent/Migrations/Server.Items.BasePiece.v0.json new file mode 100644 index 000000000..25ebbe0f5 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.BasePiece.v0.json @@ -0,0 +1,11 @@ +{ + "version": 0, + "type": "Server.Items.BasePiece", + "properties": [ + { + "name": "Board", + "type": "Server.Items.BaseBoard", + "rule": "SerializableInterfaceMigrationRule" + } + ] +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.CheckerBoard.v0.json b/Projects/UOContent/Migrations/Server.Items.CheckerBoard.v0.json new file mode 100644 index 000000000..be1070419 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.CheckerBoard.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.CheckerBoard" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.Chessboard.v0.json b/Projects/UOContent/Migrations/Server.Items.Chessboard.v0.json new file mode 100644 index 000000000..3956ffa9e --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.Chessboard.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.Chessboard" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.Dices.v0.json b/Projects/UOContent/Migrations/Server.Items.Dices.v0.json new file mode 100644 index 000000000..3097cfff5 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.Dices.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.Dices" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.PieceBlackBishop.v0.json b/Projects/UOContent/Migrations/Server.Items.PieceBlackBishop.v0.json new file mode 100644 index 000000000..5f8df22fe --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.PieceBlackBishop.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.PieceBlackBishop" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.PieceBlackChecker.v0.json b/Projects/UOContent/Migrations/Server.Items.PieceBlackChecker.v0.json new file mode 100644 index 000000000..5179c0e65 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.PieceBlackChecker.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.PieceBlackChecker" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.PieceBlackKing.v0.json b/Projects/UOContent/Migrations/Server.Items.PieceBlackKing.v0.json new file mode 100644 index 000000000..1c595a4ce --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.PieceBlackKing.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.PieceBlackKing" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.PieceBlackKnight.v0.json b/Projects/UOContent/Migrations/Server.Items.PieceBlackKnight.v0.json new file mode 100644 index 000000000..12c0c2b30 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.PieceBlackKnight.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.PieceBlackKnight" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.PieceBlackPawn.v0.json b/Projects/UOContent/Migrations/Server.Items.PieceBlackPawn.v0.json new file mode 100644 index 000000000..e875fddd4 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.PieceBlackPawn.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.PieceBlackPawn" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.PieceBlackQueen.v0.json b/Projects/UOContent/Migrations/Server.Items.PieceBlackQueen.v0.json new file mode 100644 index 000000000..bbde0e9e7 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.PieceBlackQueen.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.PieceBlackQueen" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.PieceBlackRook.v0.json b/Projects/UOContent/Migrations/Server.Items.PieceBlackRook.v0.json new file mode 100644 index 000000000..8f34dceb3 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.PieceBlackRook.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.PieceBlackRook" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.PieceWhiteBishop.v0.json b/Projects/UOContent/Migrations/Server.Items.PieceWhiteBishop.v0.json new file mode 100644 index 000000000..28de1dca9 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.PieceWhiteBishop.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.PieceWhiteBishop" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.PieceWhiteChecker.v0.json b/Projects/UOContent/Migrations/Server.Items.PieceWhiteChecker.v0.json new file mode 100644 index 000000000..0d0049e99 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.PieceWhiteChecker.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.PieceWhiteChecker" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.PieceWhiteKing.v0.json b/Projects/UOContent/Migrations/Server.Items.PieceWhiteKing.v0.json new file mode 100644 index 000000000..e26819c8c --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.PieceWhiteKing.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.PieceWhiteKing" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.PieceWhiteKnight.v0.json b/Projects/UOContent/Migrations/Server.Items.PieceWhiteKnight.v0.json new file mode 100644 index 000000000..d550344f1 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.PieceWhiteKnight.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.PieceWhiteKnight" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.PieceWhitePawn.v0.json b/Projects/UOContent/Migrations/Server.Items.PieceWhitePawn.v0.json new file mode 100644 index 000000000..f3921fda1 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.PieceWhitePawn.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.PieceWhitePawn" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.PieceWhiteQueen.v0.json b/Projects/UOContent/Migrations/Server.Items.PieceWhiteQueen.v0.json new file mode 100644 index 000000000..2e8b7aa57 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.PieceWhiteQueen.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.PieceWhiteQueen" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.PieceWhiteRook.v0.json b/Projects/UOContent/Migrations/Server.Items.PieceWhiteRook.v0.json new file mode 100644 index 000000000..807f09712 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.PieceWhiteRook.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.PieceWhiteRook" +} \ No newline at end of file