From 0dc4acc1646178e160d3b2f48806293cbff21c39 Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Wed, 25 Aug 2021 00:27:19 -0700 Subject: [PATCH] fix(core): Removes implicit cast between Serial and uint (#728) * Fixes spellbooks using serial ctor * Fixes misc items where someone thought they had an amount and it didn't * Fixes all `Food` types. --- .../Packets/BenchmarkPacketBroadcast.cs | 2 +- Projects/Server.Tests/Helpers/PacketWriter.cs | 2 + .../Packets/Outgoing/AccountPacketTests.cs | 14 +++--- .../Packets/Outgoing/CombatPacketTests.cs | 6 +-- .../Packets/Outgoing/ContainerPacketTests.cs | 22 ++++---- .../Packets/Outgoing/DamagePacketTests.cs | 4 +- .../Packets/Outgoing/EffectPacketTests.cs | 12 ++--- .../Packets/Outgoing/EquipmentPacketTests.cs | 4 +- .../Packets/Outgoing/GumpPacketTests.cs | 4 +- .../Network/Packets/Outgoing/GumpPackets.cs | 5 ++ .../Packets/Outgoing/ItemPacketTests.cs | 6 +-- .../Packets/Outgoing/LightPacketTests.cs | 2 +- .../Packets/Outgoing/MenuPacketTests.cs | 2 +- .../Packets/Outgoing/MessagePacketTests.cs | 14 +++--- .../Packets/Outgoing/MobilePacketTests.cs | 50 +++++++++---------- .../Packets/Outgoing/MovementPacketTests.cs | 4 +- .../Packets/Outgoing/PlayerPacketTests.cs | 19 ++++--- .../Outgoing/SecureTradePacketTests.cs | 6 +-- .../Packets/Outgoing/VendorBuyPacketTests.cs | 6 +-- .../Packets/Outgoing/VendorSellPacketTests.cs | 4 +- .../Outgoing/VirtualHairPacketTests.cs | 4 +- Projects/Server/Buffers/SpanWriter.cs | 4 ++ Projects/Server/Gumps/Gump.cs | 6 +-- Projects/Server/Gumps/GumpItemProperty.cs | 8 +-- Projects/Server/HuePicker.cs | 4 +- Projects/Server/Items/Item.cs | 23 ++------- Projects/Server/Items/VirtualHair.cs | 12 ++--- .../Network/Packets/IncomingAccountPackets.cs | 8 +-- .../Network/Packets/IncomingEntityPackets.cs | 8 +-- .../Packets/IncomingExtendedCommandPackets.cs | 28 +++++------ .../Network/Packets/IncomingItemPackets.cs | 10 ++-- .../Network/Packets/IncomingMobilePackets.cs | 12 ++--- .../Network/Packets/IncomingPlayerPackets.cs | 12 ++--- .../Packets/IncomingTargetingPackets.cs | 2 +- .../Network/Packets/IncomingVendorPackets.cs | 8 +-- .../Network/Packets/OutgoingItemPackets.cs | 2 +- Projects/Server/Serial.cs | 40 ++++++++++++++- .../Server/Serialization/BinaryFileReader.cs | 20 ++++++++ Projects/Server/Serialization/BufferReader.cs | 15 ++++++ Projects/Server/Serialization/BufferWriter.cs | 3 ++ .../Server/Serialization/IGenericReader.cs | 1 + .../Server/Serialization/IGenericWriter.cs | 1 + Projects/Server/World/EntityTypeIndex.cs | 2 +- Projects/Server/World/World.cs | 15 +++--- .../Tests/Engines/Party/PartyPacketTests.cs | 14 +++--- .../CharacterStatuePacketTests.cs | 5 +- .../Tests/Items/Books/BookPacketTests.cs | 8 +-- .../BulletinBoardPacketTests.cs | 2 +- .../Items/Games/Mahjong/MahjongPacketTests.cs | 10 ++-- .../Items/Misc/Corpses/CorpsePacketTests.cs | 4 +- .../Tests/Multis/Boats/BoatPacketTests.cs | 4 +- .../Tests/Multis/Houses/HousePacketTests.cs | 14 +++--- .../Tests/Multis/Houses/HousePackets.cs | 4 +- .../Tests/Network/Packets/ArrowPacketTests.cs | 4 +- .../Network/Packets/BuffIconPacketTests.cs | 6 +-- Projects/UOContent/Accounting/Account.cs | 2 +- Projects/UOContent/Accounting/Accounts.cs | 2 +- .../Implementors/SerialCommandImplementor.cs | 2 +- Projects/UOContent/Commands/Handlers.cs | 2 +- Projects/UOContent/Commands/Properties.cs | 2 +- .../Engines/ML Quests/Items/NibbetSatchel.cs | 2 +- .../Engines/ML Quests/MLQuestEntry.cs | 2 +- .../UOContent/Gumps/Props/SetObjectGump.cs | 2 +- Projects/UOContent/Items/Books/BookPackets.cs | 6 +-- .../Bulletin Boards/BulletinBoardPackets.cs | 10 ++-- Projects/UOContent/Items/Food/Food.cs | 2 +- .../Items/Games/Mahjong/MahjongPackets.cs | 2 +- .../UOContent/Items/Maps/MapItemPackets.cs | 2 +- .../UOContent/Items/Misc/EffectController.cs | 6 +-- Projects/UOContent/Misc/Guild.cs | 2 +- .../UOContent/Mobiles/Vendors/BaseVendor.cs | 4 +- Projects/UOContent/Multis/Houses/BaseHouse.cs | 2 +- .../Multis/Houses/HouseFoundation.cs | 2 +- .../UOContent/Multis/Houses/HousePackets.cs | 2 +- 74 files changed, 319 insertions(+), 248 deletions(-) diff --git a/Projects/Benchmarks/Benchmarks/Packets/BenchmarkPacketBroadcast.cs b/Projects/Benchmarks/Benchmarks/Packets/BenchmarkPacketBroadcast.cs index a60b75eb0..2535dca0f 100644 --- a/Projects/Benchmarks/Benchmarks/Packets/BenchmarkPacketBroadcast.cs +++ b/Projects/Benchmarks/Benchmarks/Packets/BenchmarkPacketBroadcast.cs @@ -27,7 +27,7 @@ namespace Benchmarks var writer = new CircularBufferWriter(buffer); writer.Write((byte)0xAE); writer.Write((ushort)(50 + text.Length * 2)); - writer.Write(serial); + writer.Write(serial.Value); writer.Write((short)graphic); writer.Write((byte)type); writer.Write((short)hue); diff --git a/Projects/Server.Tests/Helpers/PacketWriter.cs b/Projects/Server.Tests/Helpers/PacketWriter.cs index bd85aa27c..404bf82c2 100644 --- a/Projects/Server.Tests/Helpers/PacketWriter.cs +++ b/Projects/Server.Tests/Helpers/PacketWriter.cs @@ -137,6 +137,8 @@ namespace Server.Network UnderlyingStream.Write(m_Buffer, 0, 4); } + public void Write(Serial serial) => Write(serial.Value); + /// /// Writes a sequence of bytes to the underlying stream /// diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/AccountPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/AccountPacketTests.cs index 844d92505..a0f480386 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/AccountPacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/AccountPacketTests.cs @@ -35,11 +35,11 @@ namespace Server.Tests.Network [Fact] public void TestChangeCharacter() { - var firstMobile = new Mobile(0x1); + var firstMobile = new Mobile((Serial)0x1); firstMobile.DefaultMobileInit(); firstMobile.RawName = "Test Mobile"; - var secondMobile = new Mobile(0x2); + var secondMobile = new Mobile((Serial)0x2); secondMobile.DefaultMobileInit(); secondMobile.RawName = null; @@ -98,7 +98,7 @@ namespace Server.Tests.Network [Theory, InlineData(ProtocolChanges.Version70610), InlineData(ProtocolChanges.Version6000)] public void TestSupportedFeatures(ProtocolChanges protocolChanges) { - var firstMobile = new Mobile(0x1); + var firstMobile = new Mobile((Serial)0x1); firstMobile.DefaultMobileInit(); firstMobile.Name = "Test Mobile"; @@ -123,7 +123,7 @@ namespace Server.Tests.Network [Fact] public void TestLoginConfirm() { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); m.Body = 0x100; m.X = 100; @@ -156,7 +156,7 @@ namespace Server.Tests.Network [Fact] public void TestCharacterListUpdate() { - var firstMobile = new Mobile(0x1); + var firstMobile = new Mobile((Serial)0x1); firstMobile.DefaultMobileInit(); firstMobile.RawName = "Test Mobile"; @@ -179,7 +179,7 @@ namespace Server.Tests.Network [Fact] public void TestCharacterList70130() { - var firstMobile = new Mobile(0x1); + var firstMobile = new Mobile((Serial)0x1); firstMobile.DefaultMobileInit(); firstMobile.Name = "Test Mobile"; @@ -211,7 +211,7 @@ namespace Server.Tests.Network [Fact] public void TestCharacterListOld() { - var firstMobile = new Mobile(0x1); + var firstMobile = new Mobile((Serial)0x1); firstMobile.DefaultMobileInit(); firstMobile.Name = "Test Mobile"; diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/CombatPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/CombatPacketTests.cs index 8953eedc1..545f06421 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/CombatPacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/CombatPacketTests.cs @@ -9,8 +9,8 @@ namespace Server.Tests.Network [Fact] public void TestSwing() { - Serial attacker = 0x1000; - Serial defender = 0x2000; + Serial attacker = (Serial)0x1024; + Serial defender = (Serial)0x2048; var expected = new Swing(attacker, defender).Compile(); @@ -36,7 +36,7 @@ namespace Server.Tests.Network [Fact] public void TestChangeCombatant() { - Serial serial = 0x1024; + Serial serial = (Serial)0x1024; var expected = new ChangeCombatant(serial).Compile(); diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/ContainerPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/ContainerPacketTests.cs index 2ad7bc9ea..296a68edc 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/ContainerPacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/ContainerPacketTests.cs @@ -12,7 +12,7 @@ namespace Server.Tests.Network [Fact] public void TestContainerDisplay() { - Serial serial = 0x1000; + Serial serial = (Serial)0x1024; ushort gumpId = 100; var expected = new ContainerDisplay(serial, gumpId).Compile(); @@ -27,7 +27,7 @@ namespace Server.Tests.Network [Fact] public void TestContainerDisplayHS() { - Serial serial = 0x1000; + Serial serial = (Serial)0x1024; ushort gumpId = 100; var expected = new ContainerDisplayHS(serial, gumpId).Compile(); @@ -43,7 +43,7 @@ namespace Server.Tests.Network [Fact] public void TestDisplaySpellbook() { - Serial serial = 0x1000; + Serial serial = (Serial)0x1024; var expected = new DisplaySpellbook(serial).Compile(); @@ -57,7 +57,7 @@ namespace Server.Tests.Network [Fact] public void TestDisplaySpellbookHS() { - Serial serial = 0x1000; + Serial serial = (Serial)0x1024; var expected = new DisplaySpellbookHS(serial).Compile(); @@ -72,7 +72,7 @@ namespace Server.Tests.Network [Fact] public void TestNewSpellbookContent() { - Serial serial = 0x1000; + Serial serial = (Serial)0x1024; ushort graphic = 100; ushort offset = 10; ulong content = 0x123456789ABCDEF0; @@ -93,7 +93,7 @@ namespace Server.Tests.Network [Fact] public void TestSpellbookContent() { - Serial serial = 0x1000; + Serial serial = (Serial)0x1024; ushort offset = 10; ushort graphic = 100; ulong content = 0x123456789ABCDEF0; @@ -110,7 +110,7 @@ namespace Server.Tests.Network [Fact] public void TestSpellbookContent6017() { - Serial serial = 0x1000; + Serial serial = (Serial)0x1024; ushort offset = 10; ushort graphic = 100; ulong content = 0x123456789ABCDEF0; @@ -128,7 +128,7 @@ namespace Server.Tests.Network [Fact] public void TestContainerContentUpdate() { - Serial serial = 0x1; + Serial serial = (Serial)0x1024; var item = new Item(serial); var expected = new ContainerContentUpdate(item).Compile(); @@ -143,7 +143,7 @@ namespace Server.Tests.Network [Fact] public void TestContainerContentUpdate6017() { - Serial serial = 0x1; + Serial serial = (Serial)0x1024; var item = new Item(serial); var expected = new ContainerContentUpdate6017(item).Compile(); @@ -163,7 +163,7 @@ namespace Server.Tests.Network cont.AddItem(new Item(World.NewItem)); cont.Map = Map.Felucca; - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); m.AccessLevel = AccessLevel.Administrator; m.Map = Map.Felucca; @@ -184,7 +184,7 @@ namespace Server.Tests.Network cont.AddItem(new Item(World.NewItem)); cont.Map = Map.Felucca; - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); m.AccessLevel = AccessLevel.Administrator; m.Map = Map.Felucca; diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/DamagePacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/DamagePacketTests.cs index dfd973d59..f9e8338d1 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/DamagePacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/DamagePacketTests.cs @@ -9,7 +9,7 @@ namespace Server.Tests.Network [Theory, InlineData(10), InlineData(-5), InlineData(1024)] public void TestDamagePacketOld(int inputAmount) { - Serial serial = 0x1024; + Serial serial = (Serial)0x1024; var expected = new DamagePacketOld(serial, inputAmount).Compile(); @@ -23,7 +23,7 @@ namespace Server.Tests.Network [Theory, InlineData(10), InlineData(-5), InlineData(1024), InlineData(100000)] public void TestDamage(int inputAmount) { - Serial serial = 0x1024; + Serial serial = (Serial)0x1024; var expected = new DamagePacket(serial, inputAmount).Compile(); diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/EffectPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/EffectPacketTests.cs index 5613ec624..37d4be5a1 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/EffectPacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/EffectPacketTests.cs @@ -24,9 +24,9 @@ namespace Server.Tests.Network public void TestParticleEffect() { var effectType = EffectType.Moving; - Serial serial = 0x4000; - Serial from = 0x1000; - Serial to = 0x2000; + Serial serial = (Serial)0x4000; + Serial from = (Serial)0x1000; + Serial to = (Serial)0x2000; var itemId = 0x100; var fromPoint = new Point3D(1000, 100, -10); var toPoint = new Point3D(1500, 500, 0); @@ -63,8 +63,8 @@ namespace Server.Tests.Network public void TestHuedEffect() { var effectType = EffectType.Moving; - Serial from = 0x1000; - Serial to = 0x2000; + Serial from = (Serial)0x1000; + Serial to = (Serial)0x2000; var itemId = 0x100; var fromPoint = new Point3D(1000, 100, -10); var toPoint = new Point3D(1500, 500, 0); @@ -105,7 +105,7 @@ namespace Server.Tests.Network [Fact] public void TestBoltEffect() { - IEntity entity = new Entity(0x1000, new Point3D(1000, 100, -10), Map.Felucca); + IEntity entity = new Entity((Serial)0x1000, new Point3D(1000, 100, -10), Map.Felucca); var hue = 0x1024; var expected = new BoltEffect(entity, hue).Compile(); diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/EquipmentPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/EquipmentPacketTests.cs index 5341151b0..46a775ad7 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/EquipmentPacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/EquipmentPacketTests.cs @@ -13,7 +13,7 @@ namespace Server.Tests.Network [InlineData("", true)] public void TestDisplayEquipmentInfo(string name, bool unidentified) { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); m.RawName = name; @@ -49,7 +49,7 @@ namespace Server.Tests.Network [Fact] public void TestEquipUpdate() { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); var item = new Item(World.NewItem) { Parent = m }; diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/GumpPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/GumpPacketTests.cs index 36ee53166..fd8aeba6c 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/GumpPacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/GumpPacketTests.cs @@ -23,7 +23,7 @@ namespace Server.Tests.Network [Fact] public void TestDisplaySignGump() { - Serial gumpSerial = 0x1000; + Serial gumpSerial = (Serial)0x1000; var gumpId = 100; var unknownString = "This is an unknown string"; var caption = "This is a caption"; @@ -60,7 +60,7 @@ namespace Server.Tests.Network [InlineData(ProtocolChanges.Unpack)] public void TestGumpPacketAdmin(ProtocolChanges changes) { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); m.RawName = "Test Mobile"; m.AccessLevel = AccessLevel.Administrator; diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/GumpPackets.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/GumpPackets.cs index be305fa48..74888fd37 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/GumpPackets.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/GumpPackets.cs @@ -16,6 +16,7 @@ namespace Server.Tests void AppendLayout(bool val); void AppendLayout(int val); void AppendLayout(uint val); + void AppendLayout(Serial serial); void AppendLayoutNS(int val); void AppendLayout(string text); void AppendLayoutNS(string text); @@ -89,6 +90,8 @@ namespace Server.Tests m_Layout.Write(m_Buffer, 0, bytes); } + public void AppendLayout(Serial serial) => AppendLayout(serial.Value); + public void AppendLayoutNS(int val) { var toString = val.ToString(); @@ -232,6 +235,8 @@ namespace Server.Tests m_LayoutLength += bytes; } + public void AppendLayout(Serial serial) => AppendLayout(serial.Value); + public void AppendLayoutNS(int val) { var toString = val.ToString(); diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/ItemPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/ItemPacketTests.cs index a6d975a2a..3451f076a 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/ItemPacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/ItemPacketTests.cs @@ -9,7 +9,7 @@ namespace Server.Tests.Network [Fact] public void TestWorldItemPacket() { - Serial serial = 0x1000; + Serial serial = (Serial)0x1024; var itemId = 1; // Move to fixture @@ -45,7 +45,7 @@ namespace Server.Tests.Network [Fact] public void TestWorldItemSAPacket() { - Serial serial = 0x1000; + Serial serial = (Serial)0x1024; ushort itemId = 1; // Move to fixture @@ -81,7 +81,7 @@ namespace Server.Tests.Network [Fact] public void TestWorldItemHSPacket() { - Serial serial = 0x1000; + Serial serial = (Serial)0x1024; var itemId = 1; // Move to fixture diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/LightPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/LightPacketTests.cs index 9774a93d2..36e79adf9 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/LightPacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/LightPacketTests.cs @@ -22,7 +22,7 @@ namespace Server.Tests.Network [Fact] public void TestPersonalLightLevel() { - Serial serial = 0x1024; + Serial serial = (Serial)0x1024; byte lightLevel = 5; var expected = new PersonalLightLevel(serial, lightLevel).Compile(); diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MenuPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MenuPacketTests.cs index dce1dff93..c3408c343 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MenuPacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MenuPacketTests.cs @@ -81,7 +81,7 @@ namespace Server.Tests.Network [InlineData(true, true)] public void TestDisplayContextMenu(bool newHaven, bool newPacket) { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); var item = new ContextMenuItem(World.NewItem, newPacket); diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MessagePacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MessagePacketTests.cs index 993b03944..3991f800c 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MessagePacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MessagePacketTests.cs @@ -10,7 +10,7 @@ namespace Server.Tests.Network [Fact] public void TestMessageLocalized() { - Serial serial = 0x1; + Serial serial = (Serial)0x1024; var graphic = 0x100; var messageType = MessageType.Label; var hue = 1024; @@ -49,7 +49,7 @@ namespace Server.Tests.Network [Fact] public void TestMessageLocalizedAffix() { - Serial serial = 0x1; + Serial serial = (Serial)0x1024; var graphic = 0x100; var messageType = MessageType.Label; var hue = 1024; @@ -94,7 +94,7 @@ namespace Server.Tests.Network [Fact] public void TestAsciiMessage() { - Serial serial = 0x1; + Serial serial = (Serial)0x1024; var graphic = 0x100; var messageType = MessageType.Label; var hue = 1024; @@ -132,7 +132,7 @@ namespace Server.Tests.Network [Fact] public void TestUnicodeMessage() { - Serial serial = 0x1; + Serial serial = (Serial)0x1024; var graphic = 0x100; var messageType = MessageType.Label; var hue = 1024; @@ -172,8 +172,8 @@ namespace Server.Tests.Network [Fact] public void TestFollowMessage() { - Serial serial = 0x1; - Serial serial2 = 0x2; + Serial serial = (Serial)0x1024; + Serial serial2 = (Serial)0x2; var expected = new FollowMessage(serial, serial2).Compile(); @@ -187,7 +187,7 @@ namespace Server.Tests.Network [Fact] public void TestObjectHelpResponse() { - Serial s = 0x100; + Serial s = (Serial)0x100; var text = "This is some testing text"; var expected = new ObjectHelpResponse(s, text).Compile(); diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MobilePacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MobilePacketTests.cs index 962936108..08dae2a70 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MobilePacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MobilePacketTests.cs @@ -10,8 +10,8 @@ namespace Server.Tests.Network [Fact] public void TestDeathAnimation() { - Serial killed = 0x1; - Serial corpse = 0x1000; + Serial killed = (Serial)0x1; + Serial corpse = (Serial)0x1000; var expected = new DeathAnimation(killed, corpse).Compile(); @@ -25,7 +25,7 @@ namespace Server.Tests.Network [Fact] public void TestBondStatus() { - Serial petSerial = 0x1; + Serial petSerial = (Serial)0x1; const bool bonded = true; var expected = new BondedStatus(petSerial, bonded).Compile(); @@ -42,7 +42,7 @@ namespace Server.Tests.Network [InlineData(ProtocolChanges.None)] public void TestMobileMoving(ProtocolChanges protocolChanges) { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); var noto = 10; @@ -63,7 +63,7 @@ namespace Server.Tests.Network [InlineData("Some Really Long Mobile Name That Gets Cut off")] public void TestMobileName(string name) { - var m = new Mobile(0x1) { Name = name }; + var m = new Mobile((Serial)0x1) { Name = name }; m.DefaultMobileInit(); var expected = new MobileName(m).Compile(); @@ -80,7 +80,7 @@ namespace Server.Tests.Network [InlineData(10, 100, 25, true, false, 0)] public void TestMobileAnimation(int action, int frameCount, int repeatCount, bool reverse, bool repeat, byte delay) { - Serial mobile = 0x1; + Serial mobile = (Serial)0x1; var expected = new MobileAnimation( mobile, @@ -112,7 +112,7 @@ namespace Server.Tests.Network [InlineData(10, 100, 20)] public void TestNewMobileAnimation(int action, int frameCount, byte delay) { - Serial mobile = 0x1; + Serial mobile = (Serial)0x1; var expected = new NewMobileAnimation( mobile, @@ -140,7 +140,7 @@ namespace Server.Tests.Network public void TestHealthbarPoison(string pName) { var p = Poison.GetPoison(pName); - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); m.Poison = p; @@ -160,7 +160,7 @@ namespace Server.Tests.Network [InlineData(true, true)] public void TestYellowBar(bool isBlessed, bool isYellowHealth) { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); m.Blessed = isBlessed; m.YellowHealthbar = isYellowHealth; @@ -179,7 +179,7 @@ namespace Server.Tests.Network [InlineData(false)] public void TestMobileStatusCompact(bool canBeRenamed) { - var m = new Mobile(0x1) { Name = "Random Mobile 1" }; + var m = new Mobile((Serial)0x1) { Name = "Random Mobile 1" }; m.DefaultMobileInit(); m.Str = 50; m.Hits = 100; @@ -203,7 +203,7 @@ namespace Server.Tests.Network [InlineData(ProtocolChanges.Version502b)] public void TestMobileStatus(ProtocolChanges changes) { - var beholder = new Mobile(0x1) { Name = "Random Mobile 1" }; + var beholder = new Mobile((Serial)0x1) { Name = "Random Mobile 1" }; beholder.DefaultMobileInit(); beholder.Str = 50; beholder.Hits = 100; @@ -212,7 +212,7 @@ namespace Server.Tests.Network beholder.Dex = 25; beholder.Stam = 100; - var beheld = new Mobile(0x2) { Name = "Random Mobile 2" }; + var beheld = new Mobile((Serial)0x2) { Name = "Random Mobile 2" }; beheld.DefaultMobileInit(); beheld.Str = 50; beheld.Hits = 100; @@ -237,7 +237,7 @@ namespace Server.Tests.Network [InlineData(ProtocolChanges.Version502b)] public void TestMobileStatusExtendedSelf(ProtocolChanges changes) { - var m = new Mobile(0x1) { Name = "Random Mobile 1" }; + var m = new Mobile((Serial)0x1) { Name = "Random Mobile 1" }; m.DefaultMobileInit(); m.Str = 50; m.Hits = 100; @@ -261,7 +261,7 @@ namespace Server.Tests.Network [InlineData(ProtocolChanges.StygianAbyss, 100)] public void TestMobileUpdate(ProtocolChanges changes, int solidHueOverride) { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); m.SolidHueOverride = solidHueOverride; @@ -289,13 +289,13 @@ namespace Server.Tests.Network ProtocolChanges changes, int hairItemId, int hairHue, int facialHairItemId, int facialHairHue ) { - var beholder = new Mobile(0x1) + var beholder = new Mobile((Serial)0x1) { Name = "Random Mobile 1" }; beholder.DefaultMobileInit(); - var beheld = new Mobile(0x2) + var beheld = new Mobile((Serial)0x2) { Name = "Random Mobile 2" }; @@ -333,7 +333,7 @@ namespace Server.Tests.Network [Fact] public void TestMobileHits() { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); m.Str = 100; m.Hits = 100; @@ -350,7 +350,7 @@ namespace Server.Tests.Network [Fact] public void TestMobileHitsN() { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); m.Str = 100; m.Hits = 100; @@ -367,7 +367,7 @@ namespace Server.Tests.Network [Fact] public void TestMobileMana() { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); m.Int = 75; m.Mana = 100; @@ -384,7 +384,7 @@ namespace Server.Tests.Network [Fact] public void TestMobileManaN() { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); m.Int = 75; m.Mana = 100; @@ -401,7 +401,7 @@ namespace Server.Tests.Network [Fact] public void TestMobileStam() { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); m.Dex = 75; m.Stam = 100; @@ -418,7 +418,7 @@ namespace Server.Tests.Network [Fact] public void TestMobileStamN() { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); m.Dex = 75; m.Stam = 100; @@ -435,7 +435,7 @@ namespace Server.Tests.Network [Fact] public void TestMobileAttributes() { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); m.Str = 50; m.Hits = 100; @@ -456,7 +456,7 @@ namespace Server.Tests.Network [Fact] public void TestMobileAttributesN() { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); m.Str = 50; m.Hits = 100; @@ -477,7 +477,7 @@ namespace Server.Tests.Network [Fact] public void TestRemoveEntity() { - Serial e = 0x1000; + Serial e = (Serial)0x1000; var expected = new RemoveEntity(e).Compile(); var ns = PacketTestUtilities.CreateTestNetState(); diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MovementPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MovementPacketTests.cs index 18fe63974..a506bdd9c 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MovementPacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MovementPacketTests.cs @@ -37,7 +37,7 @@ namespace Server.Tests.Network [Fact] public void TestMovementRej() { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); const byte seq = 100; @@ -54,7 +54,7 @@ namespace Server.Tests.Network [Fact] public void TestMovementAck() { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); const byte seq = 100; diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/PlayerPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/PlayerPacketTests.cs index 07287b17a..d33d4d0de 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/PlayerPacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/PlayerPacketTests.cs @@ -12,7 +12,7 @@ namespace Server.Tests.Network [InlineData(StatLockType.Down, StatLockType.Up, StatLockType.Locked)] public void TestStatLockInfo(StatLockType str, StatLockType intel, StatLockType dex) { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); m.StrLock = str; m.IntLock = intel; @@ -77,11 +77,10 @@ namespace Server.Tests.Network [InlineData(0x1000u, null, null, null)] public void TestDisplayProfile(uint serial, string header, string body, string footer) { - Serial m = serial; - var expected = new DisplayProfile(m, header, body, footer).Compile(); + var expected = new DisplayProfile((Serial)serial, header, body, footer).Compile(); var ns = PacketTestUtilities.CreateTestNetState(); - ns.SendDisplayProfile(m, header, body, footer); + ns.SendDisplayProfile((Serial)serial, header, body, footer); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); @@ -146,7 +145,7 @@ namespace Server.Tests.Network [Fact] public void TestSkillsUpdate() { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); var skills = m.Skills; @@ -182,7 +181,7 @@ namespace Server.Tests.Network [InlineData(SkillName.Begging, 100000, 1000)] public void TestSkillChange(SkillName skillName, int baseFixedPoint, int capFixedPoint) { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); var skill = m.Skills[skillName]; @@ -222,8 +221,8 @@ namespace Server.Tests.Network int itemId, int hue, int amount ) { - var src = new Entity(srcSerial, new Point3D(srcX, srcY, srcZ), null); - var targ = new Entity(trgSerial, new Point3D(trgX, trgY, trgZ), null); + var src = new Entity((Serial)srcSerial, new Point3D(srcX, srcY, srcZ), null); + var targ = new Entity((Serial)trgSerial, new Point3D(trgX, trgY, trgZ), null); var expected = new DragEffect(src, targ, itemId, hue, amount).Compile(); @@ -258,10 +257,10 @@ namespace Server.Tests.Network [InlineData(0x1024u, "Test Title", true, false)] public void TestDisplayPaperdoll(uint m, string title, bool warmode, bool canLift) { - var expected = new DisplayPaperdoll(m, title, warmode, canLift).Compile(); + var expected = new DisplayPaperdoll((Serial)m, title, warmode, canLift).Compile(); var ns = PacketTestUtilities.CreateTestNetState(); - ns.SendDisplayPaperdoll(m, title, warmode, canLift); + ns.SendDisplayPaperdoll((Serial)m, title, warmode, canLift); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/SecureTradePacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/SecureTradePacketTests.cs index b60b3aeb8..f7c0adb6d 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/SecureTradePacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/SecureTradePacketTests.cs @@ -12,7 +12,7 @@ namespace Server.Tests.Network [InlineData("this is a really long name that is more than 30 characters, probably")] public void TestDisplaySecureTrade(string name) { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); var firstCont = new Container(World.NewItem); @@ -77,7 +77,7 @@ namespace Server.Tests.Network [Fact] public void TestSecureTradeEquip() { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); var cont = new Container(World.NewItem); @@ -95,7 +95,7 @@ namespace Server.Tests.Network [Fact] public void TestSecureTradeEquip6017() { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); var cont = new Container(World.NewItem); diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/VendorBuyPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/VendorBuyPacketTests.cs index 5f6ceb4ae..9ef5fd045 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/VendorBuyPacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/VendorBuyPacketTests.cs @@ -39,7 +39,7 @@ namespace Server.Tests.Network [InlineData(ProtocolChanges.HighSeas)] public void TestDisplayBuyList(ProtocolChanges protocolChanges) { - var vendor = new Mobile(0x1); + var vendor = new Mobile((Serial)0x1); vendor.DefaultMobileInit(); var ns = PacketTestUtilities.CreateTestNetState(); @@ -56,7 +56,7 @@ namespace Server.Tests.Network [Fact] public void TestVendorBuyList() { - var vendor = new Mobile(0x1); + var vendor = new Mobile((Serial)0x1); vendor.DefaultMobileInit(); var cont = new Container(World.NewItem); @@ -80,7 +80,7 @@ namespace Server.Tests.Network [Fact] public void TestEndVendorBuy() { - var vendor = new Mobile(0x1); + var vendor = new Mobile((Serial)0x1); vendor.DefaultMobileInit(); var expected = new EndVendorBuy(vendor.Serial).Compile(); diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/VendorSellPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/VendorSellPacketTests.cs index 35725ce1a..4c9e9aff1 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/VendorSellPacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/VendorSellPacketTests.cs @@ -11,7 +11,7 @@ namespace Server.Tests.Network [Fact] public void TestVendorSellList() { - var vendor = new Mobile(0x1024u); + var vendor = new Mobile((Serial)0x1024u); vendor.DefaultMobileInit(); var item1 = new Item(World.NewItem); @@ -37,7 +37,7 @@ namespace Server.Tests.Network [Fact] public void TestEndVendorSell() { - var vendor = new Mobile(0x1024u); + var vendor = new Mobile((Serial)0x1024u); vendor.DefaultMobileInit(); var expected = new EndVendorBuy(vendor.Serial).Compile(); diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/VirtualHairPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/VirtualHairPacketTests.cs index 4fe317faf..5b1de60d7 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/VirtualHairPacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/VirtualHairPacketTests.cs @@ -10,7 +10,7 @@ namespace Server.Tests [Fact] public void TestSendVirtualHairUpdate() { - var m = new Mobile(0x1024u); + var m = new Mobile((Serial)0x1024u); m.DefaultMobileInit(); m.HairHue = 0x1000; m.HairItemID = 0x2000; @@ -27,7 +27,7 @@ namespace Server.Tests [Fact] public void TestSendRemoveVirtualHair() { - var m = new Mobile(0x1024u); + var m = new Mobile((Serial)0x1024u); m.DefaultMobileInit(); var expected = new RemoveHair(m).Compile(); diff --git a/Projects/Server/Buffers/SpanWriter.cs b/Projects/Server/Buffers/SpanWriter.cs index 32ca394c9..607e226a2 100644 --- a/Projects/Server/Buffers/SpanWriter.cs +++ b/Projects/Server/Buffers/SpanWriter.cs @@ -21,6 +21,7 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Text; using Microsoft.Toolkit.HighPerformance; +using Server; using Server.Text; namespace System.Buffers @@ -234,6 +235,9 @@ namespace System.Buffers Position += 4; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Write(Serial serial) => Write(serial.Value); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteLE(uint value) { diff --git a/Projects/Server/Gumps/Gump.cs b/Projects/Server/Gumps/Gump.cs index 126cd306d..cc0940914 100644 --- a/Projects/Server/Gumps/Gump.cs +++ b/Projects/Server/Gumps/Gump.cs @@ -7,7 +7,7 @@ namespace Server.Gumps { public class Gump { - private static uint m_NextSerial = 1; + private static Serial _nextSerial = (Serial)1; public static readonly byte[] NoMove = StringToBuffer("{ nomove }"); public static readonly byte[] NoClose = StringToBuffer("{ noclose }"); @@ -20,7 +20,7 @@ namespace Server.Gumps { do { - Serial = m_NextSerial++; + Serial = _nextSerial++; } while (Serial == 0); // standard client apparently doesn't send a gump response packet if serial == 0 X = x; @@ -186,7 +186,7 @@ namespace Server.Gumps Add(new GumpTextEntryLimited(x, y, width, height, hue, entryID, initialText, size)); } - public void AddItemProperty(uint serial) + public void AddItemProperty(Serial serial) { Add(new GumpItemProperty(serial)); } diff --git a/Projects/Server/Gumps/GumpItemProperty.cs b/Projects/Server/Gumps/GumpItemProperty.cs index 1d97d0992..fb248fd50 100644 --- a/Projects/Server/Gumps/GumpItemProperty.cs +++ b/Projects/Server/Gumps/GumpItemProperty.cs @@ -22,18 +22,18 @@ namespace Server.Gumps { public static readonly byte[] LayoutName = Gump.StringToBuffer("itemproperty"); - public GumpItemProperty(uint serial) => Serial = serial; + public GumpItemProperty(Serial serial) => Serial = serial; - public uint Serial { get; set; } + public Serial Serial { get; set; } - public override string Compile(OrderedHashSet strings) => $"{{ itemproperty {Serial} }}"; + public override string Compile(OrderedHashSet strings) => $"{{ itemproperty {Serial.Value} }}"; public override void AppendTo(ref SpanWriter writer, OrderedHashSet strings, ref int entries, ref int switches) { writer.Write((ushort)0x7B20); // "{ " writer.Write(LayoutName); writer.WriteAscii(' '); - writer.WriteAscii(Serial.ToString()); + writer.WriteAscii(Serial.Value.ToString()); writer.Write((ushort)0x207D); // " }" } } diff --git a/Projects/Server/HuePicker.cs b/Projects/Server/HuePicker.cs index dc5408834..ae67eb676 100644 --- a/Projects/Server/HuePicker.cs +++ b/Projects/Server/HuePicker.cs @@ -4,13 +4,13 @@ namespace Server.HuePickers { public class HuePicker { - private static Serial m_NextSerial = 1; + private static Serial _nextSerial = (Serial)1; public HuePicker(int itemID) { do { - Serial = m_NextSerial++; + Serial = _nextSerial++; } while (Serial == 0); ItemID = itemID; diff --git a/Projects/Server/Items/Item.cs b/Projects/Server/Items/Item.cs index 2704039d6..417ce769b 100644 --- a/Projects/Server/Items/Item.cs +++ b/Projects/Server/Items/Item.cs @@ -114,22 +114,7 @@ namespace Server var loc = reader.ReadPoint3D(); var worldLoc = reader.ReadPoint3D(); - IEntity parent; - - Serial serial = reader.ReadUInt(); - - if (serial.IsItem) - { - parent = World.FindItem(serial); - } - else if (serial.IsMobile) - { - parent = World.FindMobile(serial); - } - else - { - parent = null; - } + IEntity parent = reader.ReadEntity(); return new BounceInfo(map, loc, worldLoc, parent); } @@ -2651,7 +2636,7 @@ namespace Server if (GetSaveFlag(flags, SaveFlag.Parent)) { - Serial parent = reader.ReadUInt(); + Serial parent = reader.ReadSerial(); if (parent.IsMobile) { @@ -2812,7 +2797,7 @@ namespace Server if (GetSaveFlag(flags, SaveFlag.Parent)) { - Serial parent = reader.ReadUInt(); + Serial parent = reader.ReadSerial(); if (parent.IsMobile) { @@ -2930,7 +2915,7 @@ namespace Server AcquireCompactInfo().m_Name = name; } - Serial parent = reader.ReadUInt(); + Serial parent = reader.ReadSerial(); if (parent.IsMobile) { diff --git a/Projects/Server/Items/VirtualHair.cs b/Projects/Server/Items/VirtualHair.cs index 21192a26d..ba09bedf1 100644 --- a/Projects/Server/Items/VirtualHair.cs +++ b/Projects/Server/Items/VirtualHair.cs @@ -10,7 +10,7 @@ namespace Server public const int EquipUpdatePacketLength = 15; public const int RemovePacketLength = 5; - public static void SendHairEquipUpdatePacket(this NetState ns, Mobile m, Serial hairSerial, int itemId, int hue, Layer layer) + public static void SendHairEquipUpdatePacket(this NetState ns, Mobile m, uint hairSerial, int itemId, int hue, Layer layer) { if (ns == null) { @@ -22,7 +22,7 @@ namespace Server ns.Send(buffer); } - public static void CreateHairEquipUpdatePacket(Span buffer, Mobile m, Serial hairSerial, int itemId, int hue, Layer layer) + public static void CreateHairEquipUpdatePacket(Span buffer, Mobile m, uint hairSerial, int itemId, int hue, Layer layer) { if (buffer[0] != 0) { @@ -40,7 +40,7 @@ namespace Server writer.Write((short)(m.SolidHueOverride >= 0 ? m.SolidHueOverride : hue)); } - public static void SendRemoveHairPacket(this NetState ns, Serial hairSerial) + public static void SendRemoveHairPacket(this NetState ns, uint hairSerial) { if (ns == null) { @@ -52,7 +52,7 @@ namespace Server ns.Send(buffer); } - public static void CreateRemoveHairPacket(Span buffer, Serial hairSerial) + public static void CreateRemoveHairPacket(Span buffer, uint hairSerial) { if (buffer[0] != 0) { @@ -121,7 +121,7 @@ namespace Server // TODO: Can we make this higher for newer clients? [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static uint FakeSerial(Serial m) => 0x7FFFFFFF - 0x400 - m * 4; + public static uint FakeSerial(Serial m) => 0x7FFFFFFF - 0x400 - m.Value * 4; } public class FacialHairInfo : BaseHairInfo @@ -143,6 +143,6 @@ namespace Server // TODO: Can we make this higher for newer clients? [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static uint FakeSerial(Serial m) => 0x7FFFFFFF - 0x400 - 1 - m * 4; + public static uint FakeSerial(Serial m) => 0x7FFFFFFF - 0x400 - 1 - m.Value* 4; } } diff --git a/Projects/Server/Network/Packets/IncomingAccountPackets.cs b/Projects/Server/Network/Packets/IncomingAccountPackets.cs index ad4af8ca8..dd34c9099 100644 --- a/Projects/Server/Network/Packets/IncomingAccountPackets.cs +++ b/Projects/Server/Network/Packets/IncomingAccountPackets.cs @@ -350,12 +350,12 @@ namespace Server.Network var oldestID = 0; var oldest = DateTime.MaxValue; - foreach (var kvp in m_AuthIDWindow) + foreach (var (key, authId) in m_AuthIDWindow) { - if (kvp.Value.Age < oldest) + if (authId.Age < oldest) { - oldestID = kvp.Key; - oldest = kvp.Value.Age; + oldestID = key; + oldest = authId.Age; } } diff --git a/Projects/Server/Network/Packets/IncomingEntityPackets.cs b/Projects/Server/Network/Packets/IncomingEntityPackets.cs index 1a6c7711a..ac6c0dd3d 100644 --- a/Projects/Server/Network/Packets/IncomingEntityPackets.cs +++ b/Projects/Server/Network/Packets/IncomingEntityPackets.cs @@ -31,7 +31,7 @@ namespace Server.Network { var from = state.Mobile; - Serial serial = reader.ReadUInt32(); + var serial = (Serial)reader.ReadUInt32(); int unk = reader.ReadByte(); var lang = reader.ReadAscii(3); @@ -70,7 +70,7 @@ namespace Server.Network } else { - Serial s = value; + Serial s = (Serial)value; if (s.IsMobile) { @@ -104,7 +104,7 @@ namespace Server.Network { var from = state.Mobile; - Serial s = reader.ReadUInt32(); + Serial s = (Serial)reader.ReadUInt32(); if (s.IsMobile) { @@ -167,7 +167,7 @@ namespace Server.Network while (reader.Remaining > 0) { - Serial s = reader.ReadUInt32(); + Serial s = (Serial)reader.ReadUInt32(); if (s.IsMobile) { diff --git a/Projects/Server/Network/Packets/IncomingExtendedCommandPackets.cs b/Projects/Server/Network/Packets/IncomingExtendedCommandPackets.cs index 3579b40a1..c78da3903 100644 --- a/Projects/Server/Network/Packets/IncomingExtendedCommandPackets.cs +++ b/Projects/Server/Network/Packets/IncomingExtendedCommandPackets.cs @@ -184,14 +184,14 @@ namespace Server.Network public static void PartyMessage_RemoveMember(NetState state, CircularBufferReader reader, ref int packetLength) { - PartyCommands.Handler?.OnRemove(state.Mobile, World.FindMobile(reader.ReadUInt32())); + PartyCommands.Handler?.OnRemove(state.Mobile, World.FindMobile((Serial)reader.ReadUInt32())); } public static void PartyMessage_PrivateMessage(NetState state, CircularBufferReader reader, ref int packetLength) { PartyCommands.Handler?.OnPrivateMessage( state.Mobile, - World.FindMobile(reader.ReadUInt32()), + World.FindMobile((Serial)reader.ReadUInt32()), reader.ReadBigUniSafe() ); } @@ -208,12 +208,12 @@ namespace Server.Network public static void PartyMessage_Accept(NetState state, CircularBufferReader reader, ref int packetLength) { - PartyCommands.Handler?.OnAccept(state.Mobile, World.FindMobile(reader.ReadUInt32())); + PartyCommands.Handler?.OnAccept(state.Mobile, World.FindMobile((Serial)reader.ReadUInt32())); } public static void PartyMessage_Decline(NetState state, CircularBufferReader reader, ref int packetLength) { - PartyCommands.Handler?.OnDecline(state.Mobile, World.FindMobile(reader.ReadUInt32())); + PartyCommands.Handler?.OnDecline(state.Mobile, World.FindMobile((Serial)reader.ReadUInt32())); } public static void Animate(NetState state, CircularBufferReader reader, ref int packetLength) @@ -249,7 +249,7 @@ namespace Server.Network return; } - Item spellbook = reader.ReadInt16() == 1 ? World.FindItem(reader.ReadUInt32()) : null; + Item spellbook = reader.ReadInt16() == 1 ? World.FindItem((Serial)reader.ReadUInt32()) : null; var spellID = reader.ReadInt16() - 1; EventSink.InvokeCastSpellRequest(from, spellID, spellbook); @@ -317,7 +317,7 @@ namespace Server.Network public static void CloseStatus(NetState state, CircularBufferReader reader, ref int packetLength) { - Serial serial = reader.ReadUInt32(); + var serial = (Serial)reader.ReadUInt32(); } public static void Language(NetState state, CircularBufferReader reader, ref int packetLength) @@ -341,7 +341,7 @@ namespace Server.Network var from = state.Mobile; - Serial s = reader.ReadUInt32(); + Serial s = (Serial)reader.ReadUInt32(); if (s.IsMobile) { @@ -379,7 +379,7 @@ namespace Server.Network if (menu != null && from == menu.From) { - var entity = World.FindEntity(reader.ReadUInt32()); + var entity = World.FindEntity((Serial)reader.ReadUInt32()); if (entity != null && entity == menu.Target && from.CanSee(entity)) { @@ -423,7 +423,7 @@ namespace Server.Network public static void ContextMenuRequest(NetState state, CircularBufferReader reader, ref int packetLength) { var from = state.Mobile; - var target = World.FindEntity(reader.ReadUInt32()); + var target = World.FindEntity((Serial)reader.ReadUInt32()); if (from != null && target != null && from.Map == target.Map && from.CanSee(target)) { @@ -466,14 +466,14 @@ namespace Server.Network if (from.AccessLevel >= AccessLevel.Counselor || Core.TickCount - from.NextActionTime >= 0) { - var bandage = World.FindItem(reader.ReadUInt32()); + var bandage = World.FindItem((Serial)reader.ReadUInt32()); if (bandage == null) { return; } - var target = World.FindMobile(reader.ReadUInt32()); + var target = World.FindMobile((Serial)reader.ReadUInt32()); if (target == null) { @@ -494,19 +494,19 @@ namespace Server.Network { var spellId = (short)(reader.ReadInt16() - 1); // zero based; - EventSink.InvokeTargetedSpell(state.Mobile, World.FindEntity(reader.ReadUInt32()), spellId); + EventSink.InvokeTargetedSpell(state.Mobile, World.FindEntity((Serial)reader.ReadUInt32()), spellId); } public static void TargetedSkillUse(NetState state, CircularBufferReader reader, ref int packetLength) { var skillId = reader.ReadInt16(); - EventSink.InvokeTargetedSkillUse(state.Mobile, World.FindEntity(reader.ReadUInt32()), skillId); + EventSink.InvokeTargetedSkillUse(state.Mobile, World.FindEntity((Serial)reader.ReadUInt32()), skillId); } public static void TargetByResourceMacro(NetState state, CircularBufferReader reader, ref int packetLength) { - Serial serial = reader.ReadUInt32(); + var serial = (Serial)reader.ReadUInt32(); if (serial.IsItem) { diff --git a/Projects/Server/Network/Packets/IncomingItemPackets.cs b/Projects/Server/Network/Packets/IncomingItemPackets.cs index 0e8480a6e..6ad33ef4c 100644 --- a/Projects/Server/Network/Packets/IncomingItemPackets.cs +++ b/Projects/Server/Network/Packets/IncomingItemPackets.cs @@ -32,7 +32,7 @@ namespace Server.Network public static void LiftReq(NetState state, CircularBufferReader reader, ref int packetLength) { - Serial serial = reader.ReadUInt32(); + var serial = (Serial)reader.ReadUInt32(); int amount = reader.ReadUInt16(); var item = World.FindItem(serial); @@ -54,7 +54,7 @@ namespace Server.Network } reader.Seek(5, SeekOrigin.Current); - var to = World.FindMobile(reader.ReadUInt32()) ?? from; + var to = World.FindMobile((Serial)reader.ReadUInt32()) ?? from; if (!to.AllowEquipFrom(from) || !to.EquipItem(item)) { @@ -79,7 +79,7 @@ namespace Server.Network packetLength -= 1; } - Serial dest = reader.ReadUInt32(); + Serial dest = (Serial)reader.ReadUInt32(); var loc = new Point3D(x, y, z); @@ -117,7 +117,7 @@ namespace Server.Network int y = reader.ReadInt16(); int z = reader.ReadSByte(); reader.ReadByte(); // Grid Location? - Serial dest = reader.ReadUInt32(); + Serial dest = (Serial)reader.ReadUInt32(); var loc = new Point3D(x, y, z); @@ -154,7 +154,7 @@ namespace Server.Network var serialList = new List(count); for (var i = 0; i < count; ++i) { - serialList.Add(reader.ReadUInt32()); + serialList.Add((Serial)reader.ReadUInt32()); } EventSink.InvokeEquipMacro(state.Mobile, serialList); diff --git a/Projects/Server/Network/Packets/IncomingMobilePackets.cs b/Projects/Server/Network/Packets/IncomingMobilePackets.cs index 5d15625d8..eed4135ce 100644 --- a/Projects/Server/Network/Packets/IncomingMobilePackets.cs +++ b/Projects/Server/Network/Packets/IncomingMobilePackets.cs @@ -30,7 +30,7 @@ namespace Server.Network public static void RenameRequest(NetState state, CircularBufferReader reader, ref int packetLength) { var from = state.Mobile; - var targ = World.FindMobile(reader.ReadUInt32()); + var targ = World.FindMobile((Serial)reader.ReadUInt32()); if (targ != null) { @@ -40,7 +40,7 @@ namespace Server.Network public static void MobileNameRequest(NetState state, CircularBufferReader reader, ref int packetLength) { - var m = World.FindMobile(reader.ReadUInt32()); + var m = World.FindMobile((Serial)reader.ReadUInt32()); if (m != null && Utility.InUpdateRange(state.Mobile.Location, m.Location) && state.Mobile.CanSee(m)) { @@ -51,7 +51,7 @@ namespace Server.Network public static void ProfileReq(NetState state, CircularBufferReader reader, ref int packetLength) { int type = reader.ReadByte(); - Serial serial = reader.ReadUInt32(); + var serial = (Serial)reader.ReadUInt32(); var beholder = state.Mobile; var beheld = World.FindMobile(serial); @@ -94,7 +94,7 @@ namespace Server.Network { case 1: // Cancel { - Serial serial = reader.ReadUInt32(); + var serial = (Serial)reader.ReadUInt32(); if (World.FindItem(serial) is SecureTradeContainer cont && cont.Trade != null && (cont.Trade.From.Mobile == state.Mobile || cont.Trade.To.Mobile == state.Mobile)) @@ -106,7 +106,7 @@ namespace Server.Network } case 2: // Check { - Serial serial = reader.ReadUInt32(); + var serial = (Serial)reader.ReadUInt32(); if (World.FindItem(serial) is SecureTradeContainer cont) { @@ -133,7 +133,7 @@ namespace Server.Network } case 3: // Update Gold { - Serial serial = reader.ReadUInt32(); + var serial = (Serial)reader.ReadUInt32(); if (World.FindItem(serial) is SecureTradeContainer cont) { diff --git a/Projects/Server/Network/Packets/IncomingPlayerPackets.cs b/Projects/Server/Network/Packets/IncomingPlayerPackets.cs index cab618b2e..51b9161b6 100644 --- a/Projects/Server/Network/Packets/IncomingPlayerPackets.cs +++ b/Projects/Server/Network/Packets/IncomingPlayerPackets.cs @@ -73,7 +73,7 @@ namespace Server.Network return; } - var m = World.FindMobile(reader.ReadUInt32()); + var m = World.FindMobile((Serial)reader.ReadUInt32()); if (m != null) { @@ -161,7 +161,7 @@ namespace Server.Network { var tokenizer = command.Tokenize(' '); var spellID = (tokenizer.MoveNext() ? Utility.ToInt32(tokenizer.Current) : 0) - 1; - var serial = tokenizer.MoveNext() ? Utility.ToUInt32(tokenizer.Current) : (uint)Serial.MinusOne; + var serial = tokenizer.MoveNext() ? (Serial)Utility.ToUInt32(tokenizer.Current) : Serial.MinusOne; EventSink.InvokeCastSpellRequest(from, spellID, World.FindItem(serial)); @@ -340,7 +340,7 @@ namespace Server.Network public static void DisplayGumpResponse(NetState state, CircularBufferReader reader, ref int packetLength) { - var serial = reader.ReadUInt32(); + var serial = (Serial)reader.ReadUInt32(); var typeID = reader.ReadInt32(); var buttonID = reader.ReadInt32(); @@ -461,7 +461,7 @@ namespace Server.Network if (buttonID == 1 && switchCount > 0) { - var beheld = World.FindMobile(reader.ReadUInt32()); + var beheld = World.FindMobile((Serial)reader.ReadUInt32()); if (beheld != null) { @@ -523,7 +523,7 @@ namespace Server.Network reader.ReadInt32(); // 0xEDEDEDED int type = reader.ReadByte(); - var m = World.FindMobile(reader.ReadUInt32()); + var m = World.FindMobile((Serial)reader.ReadUInt32()); if (m == null) { @@ -601,7 +601,7 @@ namespace Server.Network public static void EncodedCommand(NetState state, CircularBufferReader reader, ref int packetLength) { - var e = World.FindEntity(reader.ReadUInt32()); + var e = World.FindEntity((Serial)reader.ReadUInt32()); int packetId = reader.ReadUInt16(); var ph = IncomingPackets.GetEncodedHandler(packetId); diff --git a/Projects/Server/Network/Packets/IncomingTargetingPackets.cs b/Projects/Server/Network/Packets/IncomingTargetingPackets.cs index 3c4648029..b87b221de 100644 --- a/Projects/Server/Network/Packets/IncomingTargetingPackets.cs +++ b/Projects/Server/Network/Packets/IncomingTargetingPackets.cs @@ -30,7 +30,7 @@ namespace Server.Network int type = reader.ReadByte(); var targetID = reader.ReadInt32(); int flags = reader.ReadByte(); - Serial serial = reader.ReadUInt32(); + var serial = (Serial)reader.ReadUInt32(); int x = reader.ReadInt16(); int y = reader.ReadInt16(); reader.ReadByte(); diff --git a/Projects/Server/Network/Packets/IncomingVendorPackets.cs b/Projects/Server/Network/Packets/IncomingVendorPackets.cs index 8d08218c1..4a9f9cf8a 100644 --- a/Projects/Server/Network/Packets/IncomingVendorPackets.cs +++ b/Projects/Server/Network/Packets/IncomingVendorPackets.cs @@ -27,7 +27,7 @@ namespace Server.Network public static void VendorBuyReply(NetState state, CircularBufferReader reader, ref int packetLength) { - var vendor = World.FindMobile(reader.ReadUInt32()); + var vendor = World.FindMobile((Serial)reader.ReadUInt32()); if (vendor == null) { @@ -49,7 +49,7 @@ namespace Server.Network while (msgSize > 0) { var layer = reader.ReadByte(); - Serial serial = reader.ReadUInt32(); + var serial = (Serial)reader.ReadUInt32(); int amount = reader.ReadInt16(); buyList.Add(new BuyItemResponse(serial, amount)); @@ -67,7 +67,7 @@ namespace Server.Network public static void VendorSellReply(NetState state, CircularBufferReader reader, ref int packetLength) { - Serial serial = reader.ReadUInt32(); + var serial = (Serial)reader.ReadUInt32(); var vendor = World.FindMobile(serial); if (vendor == null) @@ -92,7 +92,7 @@ namespace Server.Network for (var i = 0; i < count; i++) { - var item = World.FindItem(reader.ReadUInt32()); + var item = World.FindItem((Serial)reader.ReadUInt32()); int amount = reader.ReadInt16(); if (item != null && amount > 0) diff --git a/Projects/Server/Network/Packets/OutgoingItemPackets.cs b/Projects/Server/Network/Packets/OutgoingItemPackets.cs index 5dff9f4d6..47997e7de 100644 --- a/Projects/Server/Network/Packets/OutgoingItemPackets.cs +++ b/Projects/Server/Network/Packets/OutgoingItemPackets.cs @@ -32,7 +32,7 @@ namespace Server.Network var itemID = item is BaseMulti ? item.ItemID | 0x4000 : item.ItemID & 0x3FFF; var amount = item.Amount; var hasAmount = amount != 0; - var serial = hasAmount ? item.Serial | 0x80000000 : item.Serial & 0x7FFFFFFF; + var serial = hasAmount ? item.Serial.Value | 0x80000000 : item.Serial.Value & 0x7FFFFFFF; var loc = item.Location; var hue = item.Hue; var flags = item.GetPacketFlags(); diff --git a/Projects/Server/Serial.cs b/Projects/Server/Serial.cs index 5f76dde2f..3f90dbb21 100644 --- a/Projects/Server/Serial.cs +++ b/Projects/Server/Serial.cs @@ -66,29 +66,65 @@ namespace Server [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool operator ==(Serial l, Serial r) => l.Value == r.Value; + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator ==(Serial l, uint r) => l.Value == r; + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool operator !=(Serial l, Serial r) => l.Value != r.Value; + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator !=(Serial l, uint r) => l.Value != r; + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool operator >(Serial l, Serial r) => l.Value > r.Value; + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator >(Serial l, uint r) => l.Value > r; + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool operator <(Serial l, Serial r) => l.Value < r.Value; + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator <(Serial l, uint r) => l.Value < r; + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool operator >=(Serial l, Serial r) => l.Value >= r.Value; + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator >=(Serial l, uint r) => l.Value >= r; + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool operator <=(Serial l, Serial r) => l.Value <= r.Value; + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator <=(Serial l, uint r) => l.Value <= r; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Serial operator +(Serial l, Serial r) => (Serial)(l.Value + r.Value); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Serial operator +(Serial l, uint r) => (Serial)(l.Value + r); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Serial operator ++(Serial l) => (Serial)(l.Value + 1); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Serial operator -(Serial l, Serial r) => (Serial)(l.Value - r.Value); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Serial operator -(Serial l, uint r) => (Serial)(l.Value - r); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Serial operator --(Serial l) => (Serial)(l.Value - 1); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public override string ToString() => $"0x{Value:X8}"; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static implicit operator uint(Serial a) => a.Value; + public static explicit operator uint(Serial a) => a.Value; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static implicit operator Serial(uint a) => new(a); + public static explicit operator Serial(uint a) => new(a); [MethodImpl(MethodImplOptions.AggressiveInlining)] public bool Equals(Serial other) => Value == other.Value; diff --git a/Projects/Server/Serialization/BinaryFileReader.cs b/Projects/Server/Serialization/BinaryFileReader.cs index 51e86bd8b..890fc0c49 100644 --- a/Projects/Server/Serialization/BinaryFileReader.cs +++ b/Projects/Server/Serialization/BinaryFileReader.cs @@ -15,6 +15,7 @@ using System; using System.IO; +using System.Runtime.CompilerServices; namespace Server { @@ -26,40 +27,59 @@ namespace Server public BinaryFileReader(Stream stream) => _reader = new BinaryReader(stream); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Close() => _reader.Close(); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public string ReadString(bool intern = false) { var str = _reader.ReadString(); return intern ? Utility.Intern(str) : str; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public long ReadLong() => _reader.ReadInt64(); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public ulong ReadULong() => _reader.ReadUInt64(); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public int ReadInt() => _reader.ReadInt32(); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public uint ReadUInt() => _reader.ReadUInt32(); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public short ReadShort() => _reader.ReadInt16(); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public ushort ReadUShort() => _reader.ReadUInt16(); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public double ReadDouble() => _reader.ReadDouble(); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public float ReadFloat() => _reader.ReadSingle(); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public byte ReadByte() => _reader.ReadByte(); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public sbyte ReadSByte() => _reader.ReadSByte(); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public bool ReadBool() => _reader.ReadBoolean(); + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public Serial ReadSerial() => (Serial)_reader.ReadUInt32(); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] public int Read(Span buffer) => _reader.Read(buffer); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public long Seek(long offset, SeekOrigin origin) => _reader.BaseStream.Seek(offset, origin); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Dispose() => Close(); } } diff --git a/Projects/Server/Serialization/BufferReader.cs b/Projects/Server/Serialization/BufferReader.cs index 806956b27..5b512215b 100644 --- a/Projects/Server/Serialization/BufferReader.cs +++ b/Projects/Server/Serialization/BufferReader.cs @@ -17,6 +17,7 @@ using System; using System.Buffers.Binary; using System.Diagnostics; using System.IO; +using System.Runtime.CompilerServices; using System.Text; using Server.Text; @@ -62,6 +63,7 @@ namespace Server return intern ? Utility.Intern(str) : str; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public long ReadLong() { var v = BinaryPrimitives.ReadInt64LittleEndian(_buffer.AsSpan(_position, 8)); @@ -69,6 +71,7 @@ namespace Server return v; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public ulong ReadULong() { var v = BinaryPrimitives.ReadUInt64LittleEndian(_buffer.AsSpan(_position, 8)); @@ -76,6 +79,7 @@ namespace Server return v; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public int ReadInt() { var v = BinaryPrimitives.ReadInt32LittleEndian(_buffer.AsSpan(_position, 4)); @@ -83,6 +87,7 @@ namespace Server return v; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public uint ReadUInt() { var v = BinaryPrimitives.ReadUInt32LittleEndian(_buffer.AsSpan(_position, 4)); @@ -90,6 +95,7 @@ namespace Server return v; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public short ReadShort() { var v = BinaryPrimitives.ReadInt16LittleEndian(_buffer.AsSpan(_position, 2)); @@ -97,6 +103,7 @@ namespace Server return v; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public ushort ReadUShort() { var v = BinaryPrimitives.ReadUInt16LittleEndian(_buffer.AsSpan(_position, 2)); @@ -104,6 +111,7 @@ namespace Server return v; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public double ReadDouble() { var v = BinaryPrimitives.ReadDoubleLittleEndian(_buffer.AsSpan(_position, 8)); @@ -111,6 +119,7 @@ namespace Server return v; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public float ReadFloat() { var v = BinaryPrimitives.ReadSingleLittleEndian(_buffer.AsSpan(_position, 4)); @@ -118,12 +127,18 @@ namespace Server return v; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public byte ReadByte() => _buffer[_position++]; + [MethodImpl(MethodImplOptions.AggressiveInlining)] public sbyte ReadSByte() => (sbyte)_buffer[_position++]; + [MethodImpl(MethodImplOptions.AggressiveInlining)] public bool ReadBool() => _buffer[_position++] != 0; + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public Serial ReadSerial() => (Serial)ReadUInt(); + public int Read(Span buffer) { var length = buffer.Length; diff --git a/Projects/Server/Serialization/BufferWriter.cs b/Projects/Server/Serialization/BufferWriter.cs index 9503fd884..208039916 100644 --- a/Projects/Server/Serialization/BufferWriter.cs +++ b/Projects/Server/Serialization/BufferWriter.cs @@ -286,6 +286,9 @@ namespace Server _buffer[Index++] = *(byte*)&value; // up to 30% faster to dereference the raw value on the stack } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Write(Serial serial) => Write(serial.Value); + internal void InternalWriteString(string value) { var remaining = m_Encoding.GetByteCount(value); diff --git a/Projects/Server/Serialization/IGenericReader.cs b/Projects/Server/Serialization/IGenericReader.cs index ca88ba6b6..d5d0ed7d7 100644 --- a/Projects/Server/Serialization/IGenericReader.cs +++ b/Projects/Server/Serialization/IGenericReader.cs @@ -33,6 +33,7 @@ namespace Server byte ReadByte(); sbyte ReadSByte(); bool ReadBool(); + Serial ReadSerial(); DateTime ReadDateTime() => new(ReadLong(), DateTimeKind.Utc); TimeSpan ReadTimeSpan() => new(ReadLong()); diff --git a/Projects/Server/Serialization/IGenericWriter.cs b/Projects/Server/Serialization/IGenericWriter.cs index 36be59a1a..68e8ea0b9 100644 --- a/Projects/Server/Serialization/IGenericWriter.cs +++ b/Projects/Server/Serialization/IGenericWriter.cs @@ -35,6 +35,7 @@ namespace Server void Write(byte value); void Write(sbyte value); void Write(bool value); + void Write(Serial serial); void Write(DateTime value) { diff --git a/Projects/Server/World/EntityTypeIndex.cs b/Projects/Server/World/EntityTypeIndex.cs index 23208eecc..219ac4340 100644 --- a/Projects/Server/World/EntityTypeIndex.cs +++ b/Projects/Server/World/EntityTypeIndex.cs @@ -21,6 +21,6 @@ namespace Server public EntityTypeIndex(string typeName) => TypeName = typeName; - public Serial CreateIndex(uint num) => num; + public Serial CreateIndex(uint num) => (Serial)num; } } diff --git a/Projects/Server/World/World.cs b/Projects/Server/World/World.cs index 1e03d7228..0120d2991 100644 --- a/Projects/Server/World/World.cs +++ b/Projects/Server/World/World.cs @@ -55,22 +55,23 @@ namespace Server private const uint _maxItems = MaxItemSerial - ItemOffset + 1; private static Serial _lastMobile = Serial.Zero; - private static Serial _lastItem = ItemOffset; + private static Serial _lastItem = (Serial)ItemOffset; private static Serial _lastGuild = Serial.Zero; public static Serial NewMobile { get { - uint last = _lastMobile; + var last = _lastMobile; + var maxMobile = (Serial)MaxMobileSerial; for (int i = 0; i < MaxMobileSerial; i++) { last++; - if (last > MaxMobileSerial) + if (last > maxMobile) { - last = 1; + last = (Serial)1; } if (FindMobile(last) == null) @@ -88,7 +89,7 @@ namespace Server { get { - uint last = _lastItem; + var last = _lastItem; for (int i = 0; i < _maxItems; i++) { @@ -96,7 +97,7 @@ namespace Server if (last > MaxItemSerial) { - last = ItemOffset; + last = (Serial)ItemOffset; } if (FindItem(last) == null) @@ -648,7 +649,7 @@ namespace Server public static T ReadEntity(this IGenericReader reader) where T : class, ISerializable { - Serial serial = reader.ReadUInt(); + Serial serial = reader.ReadSerial(); var typeT = typeof(T); // Add to this list when creating new serializable types diff --git a/Projects/UOContent.Tests/Tests/Engines/Party/PartyPacketTests.cs b/Projects/UOContent.Tests/Tests/Engines/Party/PartyPacketTests.cs index f005cdfa0..26c2747e9 100644 --- a/Projects/UOContent.Tests/Tests/Engines/Party/PartyPacketTests.cs +++ b/Projects/UOContent.Tests/Tests/Engines/Party/PartyPacketTests.cs @@ -12,7 +12,7 @@ namespace UOContent.Tests [Fact] public void TestPartyEmptyList() { - Serial m = 0x1024u; + Serial m = (Serial)0x1024u; var expected = new PartyEmptyList(m).Compile(); @@ -26,10 +26,10 @@ namespace UOContent.Tests [Fact] public void TestPartyRemoveMember() { - var leader = new Mobile(0x1024u); + var leader = new Mobile((Serial)0x1024u); leader.DefaultMobileInit(); - var member = new Mobile(0x2048u); + var member = new Mobile((Serial)0x2048u); member.DefaultMobileInit(); var p = new Party(leader); @@ -47,10 +47,10 @@ namespace UOContent.Tests [Fact] public void TestPartyMemberList() { - var leader = new Mobile(0x1024u); + var leader = new Mobile((Serial)0x1024u); leader.DefaultMobileInit(); - var member = new Mobile(0x2048u); + var member = new Mobile((Serial)0x2048u); member.DefaultMobileInit(); var p = new Party(leader); @@ -70,7 +70,7 @@ namespace UOContent.Tests [InlineData(false)] public void TestPartyTextMessage(bool toAll) { - Serial serial = 0x1024u; + Serial serial = (Serial)0x1024u; var text = "[Party] Stuff Happens"; var expected = new PartyTextMessage(toAll, serial, text).Compile(); @@ -85,7 +85,7 @@ namespace UOContent.Tests [Fact] public void TestPartyInvitation() { - Serial m = 0x1024u; + Serial m = (Serial)0x1024u; var expected = new PartyInvitation(m).Compile(); diff --git a/Projects/UOContent.Tests/Tests/Engines/Veteran Rewards/Character Statue Maker/CharacterStatuePacketTests.cs b/Projects/UOContent.Tests/Tests/Engines/Veteran Rewards/Character Statue Maker/CharacterStatuePacketTests.cs index 7540c83a6..978ac9fd3 100644 --- a/Projects/UOContent.Tests/Tests/Engines/Veteran Rewards/Character Statue Maker/CharacterStatuePacketTests.cs +++ b/Projects/UOContent.Tests/Tests/Engines/Veteran Rewards/Character Statue Maker/CharacterStatuePacketTests.cs @@ -14,11 +14,10 @@ namespace UOContent.Tests [InlineData(0x1024u, 1, 100, 200)] public void TestSendStatueAnimation(uint s, int status, int anim, int frame) { - Serial serial = s; - var expected = new UpdateStatueAnimation(serial, status, anim, frame).Compile(); + var expected = new UpdateStatueAnimation((Serial)s, status, anim, frame).Compile(); var ns = PacketTestUtilities.CreateTestNetState(); - ns.SendStatueAnimation(serial, status, anim, frame); + ns.SendStatueAnimation((Serial)s, status, anim, frame); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); diff --git a/Projects/UOContent.Tests/Tests/Items/Books/BookPacketTests.cs b/Projects/UOContent.Tests/Tests/Items/Books/BookPacketTests.cs index c5662f9fe..5e764690a 100644 --- a/Projects/UOContent.Tests/Tests/Items/Books/BookPacketTests.cs +++ b/Projects/UOContent.Tests/Tests/Items/Books/BookPacketTests.cs @@ -39,10 +39,10 @@ namespace UOContent.Tests [InlineData("🅵🅰🅽🅲🆈 🆃🅴🆇🆃 Author", "🅵🅰🅽🅲🆈 🆃🅴🆇🆃 Title")] public void TestBookCover(string author, string title) { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); - Serial serial = 0x1001; + Serial serial = (Serial)0x1001; var book = new TestBook(serial) { Author = author, Title = title }; var expected = new BookHeader(m, book).Compile(); @@ -57,10 +57,10 @@ namespace UOContent.Tests [Fact] public void TestBookContent() { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); - Serial serial = 0x1001; + Serial serial = (Serial)0x1001; var book = new TestBook(serial) { Author = "Some Author", Title = "Some Title" }; book.Pages[0].Lines = new[] { diff --git a/Projects/UOContent.Tests/Tests/Items/Bulletin Boards/BulletinBoardPacketTests.cs b/Projects/UOContent.Tests/Tests/Items/Bulletin Boards/BulletinBoardPacketTests.cs index ebe028ae5..ec8929361 100644 --- a/Projects/UOContent.Tests/Tests/Items/Bulletin Boards/BulletinBoardPacketTests.cs +++ b/Projects/UOContent.Tests/Tests/Items/Bulletin Boards/BulletinBoardPacketTests.cs @@ -37,7 +37,7 @@ namespace UOContent.Tests [InlineData("🅵🅰🅽🅲🆈 🆃🅴🆇🆃", true, "First Line", "Second Line")] public void TestSendBBHeaderMessage(string subject, bool content, params string[] lines) { - var poster = new Mobile(0x1024u) { Name = "Kamron" }; + var poster = new Mobile((Serial)0x1024u) { Name = "Kamron" }; poster.DefaultMobileInit(); var bb = new TestBulletinBoard(0x234); diff --git a/Projects/UOContent.Tests/Tests/Items/Games/Mahjong/MahjongPacketTests.cs b/Projects/UOContent.Tests/Tests/Items/Games/Mahjong/MahjongPacketTests.cs index 5b7d18881..16599dacb 100644 --- a/Projects/UOContent.Tests/Tests/Items/Games/Mahjong/MahjongPacketTests.cs +++ b/Projects/UOContent.Tests/Tests/Items/Games/Mahjong/MahjongPacketTests.cs @@ -13,7 +13,7 @@ namespace UOContent.Tests [Fact] public void TestMahjongJoinGame() { - Serial game = 0x1024u; + Serial game = (Serial)0x1024u; var expected = new MahjongJoinGame(game).Compile(); @@ -29,7 +29,7 @@ namespace UOContent.Tests [InlineData(false)] public void TestMahjongPlayersInfo(bool showScores) { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); var game = new MahjongGame { ShowScores = showScores }; @@ -67,7 +67,7 @@ namespace UOContent.Tests [InlineData(false)] public void TestMahjongTilesInfo(bool spectatorVision) { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); var game = new MahjongGame { SpectatorVision = spectatorVision }; @@ -87,7 +87,7 @@ namespace UOContent.Tests [InlineData(false)] public void TestMahjongTileInfo(bool spectatorVision) { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); var game = new MahjongGame { SpectatorVision = spectatorVision }; @@ -105,7 +105,7 @@ namespace UOContent.Tests [Fact] public void TestMahjongRelieve() { - Serial game = 0x1024u; + Serial game = (Serial)0x1024u; var expected = new MahjongRelieve(game).Compile(); diff --git a/Projects/UOContent.Tests/Tests/Items/Misc/Corpses/CorpsePacketTests.cs b/Projects/UOContent.Tests/Tests/Items/Misc/Corpses/CorpsePacketTests.cs index 21b59e458..74ee2f6e0 100644 --- a/Projects/UOContent.Tests/Tests/Items/Misc/Corpses/CorpsePacketTests.cs +++ b/Projects/UOContent.Tests/Tests/Items/Misc/Corpses/CorpsePacketTests.cs @@ -14,7 +14,7 @@ namespace UOContent.Tests [Fact] public void TestCorpseEquipPacket() { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); var weapon = new VikingSword(); @@ -36,7 +36,7 @@ namespace UOContent.Tests [InlineData(ProtocolChanges.ContainerGridLines)] public void TestCorpseContainerPacket(ProtocolChanges changes) { - var m = new Mobile(0x1); + var m = new Mobile((Serial)0x1); m.DefaultMobileInit(); var weapon = new VikingSword(); diff --git a/Projects/UOContent.Tests/Tests/Multis/Boats/BoatPacketTests.cs b/Projects/UOContent.Tests/Tests/Multis/Boats/BoatPacketTests.cs index 9570802b2..d015ec80a 100644 --- a/Projects/UOContent.Tests/Tests/Multis/Boats/BoatPacketTests.cs +++ b/Projects/UOContent.Tests/Tests/Multis/Boats/BoatPacketTests.cs @@ -43,7 +43,7 @@ namespace UOContent.Tests var list = new List { item1, beholder.Object }; var notContained = new List { item2 }; - var boat = new TestBoat(0x3000, list, notContained) + var boat = new TestBoat((Serial)0x3000, list, notContained) { Location = new Point3D(10, 20, 15), Facing = Direction.Right, @@ -87,7 +87,7 @@ namespace UOContent.Tests var list = new List { item1, beholder.Object }; var notContained = new List { item2 }; - var boat = new TestBoat(0x3000, list, notContained) + var boat = new TestBoat((Serial)0x3000, list, notContained) { Location = new Point3D(10, 20, 15), Facing = Direction.Right diff --git a/Projects/UOContent.Tests/Tests/Multis/Houses/HousePacketTests.cs b/Projects/UOContent.Tests/Tests/Multis/Houses/HousePacketTests.cs index 87b308814..6f871511c 100644 --- a/Projects/UOContent.Tests/Tests/Multis/Houses/HousePacketTests.cs +++ b/Projects/UOContent.Tests/Tests/Multis/Houses/HousePacketTests.cs @@ -15,10 +15,10 @@ namespace UOContent.Tests [InlineData(0x1001u)] public void TestBeginHouseCustomization(uint serial) { - var expected = new BeginHouseCustomization(serial).Compile(); + var expected = new BeginHouseCustomization((Serial)serial).Compile(); var ns = PacketTestUtilities.CreateTestNetState(); - ns.SendBeginHouseCustomization(serial); + ns.SendBeginHouseCustomization((Serial)serial); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); @@ -28,10 +28,10 @@ namespace UOContent.Tests [InlineData(0x1001u)] public void TestEndHouseCustomization(uint serial) { - var expected = new EndHouseCustomization(serial).Compile(); + var expected = new EndHouseCustomization((Serial)serial).Compile(); var ns = PacketTestUtilities.CreateTestNetState(); - ns.SendEndHouseCustomization(serial); + ns.SendEndHouseCustomization((Serial)serial); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); @@ -42,10 +42,10 @@ namespace UOContent.Tests [InlineData(0x1001u, 100)] public void TestDesignStateGeneral(uint serial, int revision) { - var expected = new DesignStateGeneral(serial, revision).Compile(); + var expected = new DesignStateGeneral((Serial)serial, revision).Compile(); var ns = PacketTestUtilities.CreateTestNetState(); - ns.SendDesignStateGeneral(serial, revision); + ns.SendDesignStateGeneral((Serial)serial, revision); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); @@ -54,7 +54,7 @@ namespace UOContent.Tests [Fact] public void TestHouseDesignStateDetailed() { - Serial serial = 0x40000001; + Serial serial = (Serial)0x40000001; var revision = 10; var tiles = new MultiTileEntry[250]; for (var i = 0; i < tiles.Length; i++) diff --git a/Projects/UOContent.Tests/Tests/Multis/Houses/HousePackets.cs b/Projects/UOContent.Tests/Tests/Multis/Houses/HousePackets.cs index 75c757ea6..3b3f91be0 100644 --- a/Projects/UOContent.Tests/Tests/Multis/Houses/HousePackets.cs +++ b/Projects/UOContent.Tests/Tests/Multis/Houses/HousePackets.cs @@ -56,14 +56,14 @@ namespace Server.Network private readonly bool[] m_PlaneUsed = new bool[9]; private readonly byte[] m_PrimBuffer = new byte[4]; - public DesignStateDetailed(uint serial, int revision, int xMin, int yMin, int xMax, int yMax, MultiTileEntry[] tiles) + public DesignStateDetailed(Serial serial, int revision, int xMin, int yMin, int xMax, int yMax, MultiTileEntry[] tiles) : base(0xD8) { EnsureCapacity(17 + tiles.Length * 5); Write((byte)0x03); // Compression Type Write((byte)0x00); // Unknown - Write(serial); + Write(serial.Value); Write(revision); Write((short)tiles.Length); Write((short)0); // Buffer length : reserved diff --git a/Projects/UOContent.Tests/Tests/Network/Packets/ArrowPacketTests.cs b/Projects/UOContent.Tests/Tests/Network/Packets/ArrowPacketTests.cs index 838091643..7c7707c79 100644 --- a/Projects/UOContent.Tests/Tests/Network/Packets/ArrowPacketTests.cs +++ b/Projects/UOContent.Tests/Tests/Network/Packets/ArrowPacketTests.cs @@ -39,7 +39,7 @@ namespace Server.Tests.Network [InlineData(100000, 100000)] public void TestCancelArrowHS(int x, int y) { - Serial serial = 0x1024; + Serial serial = (Serial)0x1024; var expected = new CancelArrowHS(x, y, serial).Compile(); @@ -57,7 +57,7 @@ namespace Server.Tests.Network [InlineData(100000, 100000)] public void TestSetArrowHS(int x, int y) { - Serial serial = 0x1024; + Serial serial = (Serial)0x1024; var expected = new SetArrowHS(x, y, serial).Compile(); diff --git a/Projects/UOContent.Tests/Tests/Network/Packets/BuffIconPacketTests.cs b/Projects/UOContent.Tests/Tests/Network/Packets/BuffIconPacketTests.cs index 69963afe2..98086042c 100644 --- a/Projects/UOContent.Tests/Tests/Network/Packets/BuffIconPacketTests.cs +++ b/Projects/UOContent.Tests/Tests/Network/Packets/BuffIconPacketTests.cs @@ -16,11 +16,11 @@ namespace UOContent.Tests { var timeSpan = new TimeSpan(ts); var expected = new AddBuffPacket( - mob, iconID, titleCliloc, secondaryCliloc, args, timeSpan + (Serial)mob, iconID, titleCliloc, secondaryCliloc, args, timeSpan ).Compile(); var ns = PacketTestUtilities.CreateTestNetState(); - BuffInfo.SendAddBuffPacket(ns, mob, iconID, titleCliloc, secondaryCliloc, args, (int)timeSpan.TotalMilliseconds); + BuffInfo.SendAddBuffPacket(ns, (Serial)mob, iconID, titleCliloc, secondaryCliloc, args, (int)timeSpan.TotalMilliseconds); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); @@ -29,7 +29,7 @@ namespace UOContent.Tests [Fact] public void TestRemoveBuffIcon() { - Serial m = 0x1024; + Serial m = (Serial)0x1024; var buffIcon = BuffIcon.Disguised; var expected = new RemoveBuffPacket(m, buffIcon).Compile(); diff --git a/Projects/UOContent/Accounting/Account.cs b/Projects/UOContent/Accounting/Account.cs index 0fd95c522..02a3cc2ff 100644 --- a/Projects/UOContent/Accounting/Account.cs +++ b/Projects/UOContent/Accounting/Account.cs @@ -1029,7 +1029,7 @@ namespace Server.Accounting try { var index = Utility.GetXMLInt32(Utility.GetAttribute(ele, "index", "0"), 0); - var serial = Utility.GetXMLUInt32(Utility.GetText(ele, "0"), 0); + var serial = (Serial)Utility.GetXMLUInt32(Utility.GetText(ele, "0"), 0); if (index >= 0 && index < list.Length) { diff --git a/Projects/UOContent/Accounting/Accounts.cs b/Projects/UOContent/Accounting/Accounts.cs index ce25d8f46..555d5cb91 100644 --- a/Projects/UOContent/Accounting/Accounts.cs +++ b/Projects/UOContent/Accounting/Accounts.cs @@ -21,7 +21,7 @@ namespace Server.Accounting { get { - uint last = _lastAccount; + var last = _lastAccount; for (uint i = 0; i < uint.MaxValue; i++) { diff --git a/Projects/UOContent/Commands/Generic/Implementors/SerialCommandImplementor.cs b/Projects/UOContent/Commands/Generic/Implementors/SerialCommandImplementor.cs index af9392e76..6ee458ea4 100644 --- a/Projects/UOContent/Commands/Generic/Implementors/SerialCommandImplementor.cs +++ b/Projects/UOContent/Commands/Generic/Implementors/SerialCommandImplementor.cs @@ -15,7 +15,7 @@ namespace Server.Commands.Generic { if (e.Length >= 2) { - Serial serial = e.GetUInt32(0); + Serial serial = (Serial)e.GetUInt32(0); object obj = null; diff --git a/Projects/UOContent/Commands/Handlers.cs b/Projects/UOContent/Commands/Handlers.cs index cb9fa7e75..03dc060af 100644 --- a/Projects/UOContent/Commands/Handlers.cs +++ b/Projects/UOContent/Commands/Handlers.cs @@ -499,7 +499,7 @@ namespace Server.Commands { try { - var ser = e.GetUInt32(0); + var ser = (Serial)e.GetUInt32(0); var ent = World.FindEntity(ser); diff --git a/Projects/UOContent/Commands/Properties.cs b/Projects/UOContent/Commands/Properties.cs index 4c856850a..eedffd808 100644 --- a/Projects/UOContent/Commands/Properties.cs +++ b/Projects/UOContent/Commands/Properties.cs @@ -34,7 +34,7 @@ namespace Server.Commands { if (e.Length == 1) { - var ent = World.FindEntity(e.GetUInt32(0)); + var ent = World.FindEntity((Serial)e.GetUInt32(0)); if (ent == null) { diff --git a/Projects/UOContent/Engines/ML Quests/Items/NibbetSatchel.cs b/Projects/UOContent/Engines/ML Quests/Items/NibbetSatchel.cs index a6d8275d4..651fc098f 100644 --- a/Projects/UOContent/Engines/ML Quests/Items/NibbetSatchel.cs +++ b/Projects/UOContent/Engines/ML Quests/Items/NibbetSatchel.cs @@ -16,7 +16,7 @@ 2 => new Hinge(3), 3 => new Key(), 4 => new Scissors(), - 5 => new BarrelTap(3), + 5 => new BarrelTap(), 6 => new BarrelHoops(), 7 => new Gears(3), 8 => new Lockpick(3), diff --git a/Projects/UOContent/Engines/ML Quests/MLQuestEntry.cs b/Projects/UOContent/Engines/ML Quests/MLQuestEntry.cs index 49b63857b..940159f57 100644 --- a/Projects/UOContent/Engines/ML Quests/MLQuestEntry.cs +++ b/Projects/UOContent/Engines/ML Quests/MLQuestEntry.cs @@ -535,7 +535,7 @@ namespace Server.Engines.MLQuests var quest = MLQuestSystem.ReadQuestRef(reader); // TODO: Serialize quester TYPE too, the quest giver reference then becomes optional (only for escorts) - var quester = World.FindEntity(reader.ReadUInt()) as IQuestGiver; + var quester = reader.ReadEntity() as IQuestGiver; var claimReward = reader.ReadBool(); var objectives = reader.ReadInt(); diff --git a/Projects/UOContent/Gumps/Props/SetObjectGump.cs b/Projects/UOContent/Gumps/Props/SetObjectGump.cs index bf41934fe..bdac7eaa0 100644 --- a/Projects/UOContent/Gumps/Props/SetObjectGump.cs +++ b/Projects/UOContent/Gumps/Props/SetObjectGump.cs @@ -231,7 +231,7 @@ namespace Server.Gumps { try { - var serial = Utility.ToUInt32(text); + var serial = (Serial)Utility.ToUInt32(text); var toSet = World.FindEntity(serial); diff --git a/Projects/UOContent/Items/Books/BookPackets.cs b/Projects/UOContent/Items/Books/BookPackets.cs index ef6b0ae66..303bb34e0 100644 --- a/Projects/UOContent/Items/Books/BookPackets.cs +++ b/Projects/UOContent/Items/Books/BookPackets.cs @@ -33,7 +33,7 @@ namespace Server.Items { var from = state.Mobile; - if (!(World.FindItem(reader.ReadUInt32()) is BaseBook book) || !book.Writable || + if (!(World.FindItem((Serial)reader.ReadUInt32()) is BaseBook book) || !book.Writable || !from.InRange(book.GetWorldLocation(), 1) || !book.IsAccessibleTo(from)) { return; @@ -52,7 +52,7 @@ namespace Server.Items { var from = state.Mobile; - if (!(World.FindItem(reader.ReadUInt32()) is BaseBook book) || !book.Writable || + if (!(World.FindItem((Serial)reader.ReadUInt32()) is BaseBook book) || !book.Writable || !from.InRange(book.GetWorldLocation(), 1) || !book.IsAccessibleTo(from)) { return; @@ -88,7 +88,7 @@ namespace Server.Items { var from = state.Mobile; - if (!(World.FindItem(reader.ReadUInt32()) is BaseBook book) || !book.Writable || + if (!(World.FindItem((Serial)reader.ReadUInt32()) is BaseBook book) || !book.Writable || !from.InRange(book.GetWorldLocation(), 1) || !book.IsAccessibleTo(from)) { return; diff --git a/Projects/UOContent/Items/Bulletin Boards/BulletinBoardPackets.cs b/Projects/UOContent/Items/Bulletin Boards/BulletinBoardPackets.cs index b6d30c2a0..5a5ada1c9 100644 --- a/Projects/UOContent/Items/Bulletin Boards/BulletinBoardPackets.cs +++ b/Projects/UOContent/Items/Bulletin Boards/BulletinBoardPackets.cs @@ -54,7 +54,7 @@ namespace Server.Network int packetID = reader.ReadByte(); - if (World.FindItem(reader.ReadUInt32()) is not BaseBulletinBoard board || !board.CheckRange(from)) + if (World.FindItem((Serial)reader.ReadUInt32()) is not BaseBulletinBoard board || !board.CheckRange(from)) { return; } @@ -78,7 +78,7 @@ namespace Server.Network public static void BBRequestContent(Mobile from, BaseBulletinBoard board, CircularBufferReader reader) { - if (World.FindItem(reader.ReadUInt32()) is not BulletinMessage msg || msg.Parent != board) + if (World.FindItem((Serial)reader.ReadUInt32()) is not BulletinMessage msg || msg.Parent != board) { return; } @@ -88,7 +88,7 @@ namespace Server.Network public static void BBRequestHeader(Mobile from, BaseBulletinBoard board, CircularBufferReader reader) { - if (World.FindItem(reader.ReadUInt32()) is not BulletinMessage msg || msg.Parent != board) + if (World.FindItem((Serial)reader.ReadUInt32()) is not BulletinMessage msg || msg.Parent != board) { return; } @@ -98,7 +98,7 @@ namespace Server.Network public static void BBPostMessage(Mobile from, BaseBulletinBoard board, CircularBufferReader reader) { - var thread = World.FindItem(reader.ReadUInt32()) as BulletinMessage; + var thread = World.FindItem((Serial)reader.ReadUInt32()) as BulletinMessage; if (thread != null && thread.Parent != board) { @@ -153,7 +153,7 @@ namespace Server.Network public static void BBRemoveMessage(Mobile from, BaseBulletinBoard board, CircularBufferReader reader) { - if (World.FindItem(reader.ReadUInt32()) is not BulletinMessage msg || msg.Parent != board) + if (World.FindItem((Serial)reader.ReadUInt32()) is not BulletinMessage msg || msg.Parent != board) { return; } diff --git a/Projects/UOContent/Items/Food/Food.cs b/Projects/UOContent/Items/Food/Food.cs index 9b26c085e..cc86ebe68 100644 --- a/Projects/UOContent/Items/Food/Food.cs +++ b/Projects/UOContent/Items/Food/Food.cs @@ -5,7 +5,7 @@ namespace Server.Items { public abstract class Food : Item { - public Food(int itemID, int amount) : base(itemID) + public Food(int itemID, int amount = 1) : base(itemID) { Stackable = true; Amount = amount; diff --git a/Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs b/Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs index 770706c53..73da28c08 100644 --- a/Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs +++ b/Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs @@ -63,7 +63,7 @@ namespace Server.Engines.Mahjong public static void OnPacket(NetState state, CircularBufferReader reader, ref int packetLength) { - var game = World.FindItem(reader.ReadUInt32()) as MahjongGame; + var game = World.FindItem((Serial)reader.ReadUInt32()) as MahjongGame; game?.Players.CheckPlayers(); diff --git a/Projects/UOContent/Items/Maps/MapItemPackets.cs b/Projects/UOContent/Items/Maps/MapItemPackets.cs index cce464580..a413e6213 100644 --- a/Projects/UOContent/Items/Maps/MapItemPackets.cs +++ b/Projects/UOContent/Items/Maps/MapItemPackets.cs @@ -29,7 +29,7 @@ namespace Server.Network { var from = state.Mobile; - if (!(World.FindItem(reader.ReadUInt32()) is MapItem map)) + if (!(World.FindItem((Serial)reader.ReadUInt32()) is MapItem map)) { return; } diff --git a/Projects/UOContent/Items/Misc/EffectController.cs b/Projects/UOContent/Items/Misc/EffectController.cs index 9b0fe536f..3f5f0ca82 100644 --- a/Projects/UOContent/Items/Misc/EffectController.cs +++ b/Projects/UOContent/Items/Misc/EffectController.cs @@ -227,8 +227,6 @@ namespace Server.Items writer.WriteEncodedInt(TriggerRange); } - private IEntity ReadEntity(IGenericReader reader) => World.FindEntity(reader.ReadUInt()); - public override void Deserialize(IGenericReader reader) { base.Deserialize(reader); @@ -243,8 +241,8 @@ namespace Server.Items TriggerDelay = reader.ReadTimeSpan(); SoundDelay = reader.ReadTimeSpan(); - m_Source = ReadEntity(reader); - m_Target = ReadEntity(reader); + m_Source = reader.ReadEntity(); + m_Target = reader.ReadEntity(); Sequence = reader.ReadEntity(); FixedDirection = reader.ReadBool(); diff --git a/Projects/UOContent/Misc/Guild.cs b/Projects/UOContent/Misc/Guild.cs index 48ac54ca4..854b7680e 100644 --- a/Projects/UOContent/Misc/Guild.cs +++ b/Projects/UOContent/Misc/Guild.cs @@ -928,7 +928,7 @@ namespace Server.Guilds else { var g = uint.TryParse(arg, out var id) - ? World.FindGuild(id) as Guild + ? World.FindGuild((Serial)id) as Guild : FindByAbbrev(arg) as Guild ?? FindByName(arg) as Guild; if (g != null) diff --git a/Projects/UOContent/Mobiles/Vendors/BaseVendor.cs b/Projects/UOContent/Mobiles/Vendors/BaseVendor.cs index f260de694..8140a8443 100644 --- a/Projects/UOContent/Mobiles/Vendors/BaseVendor.cs +++ b/Projects/UOContent/Mobiles/Vendors/BaseVendor.cs @@ -845,6 +845,8 @@ namespace Server.Mobiles PackGold(100, 200); } + private static readonly Serial _COFFEE = (Serial)0x7FC0FFEE; + public virtual void VendorBuy(Mobile from) { if (!IsActiveSeller) @@ -898,7 +900,7 @@ namespace Server.Mobiles new BuyItemState( buyItem.Name, cont.Serial, - disp?.Serial ?? 0x7FC0FFEE, + disp?.Serial ?? _COFFEE, buyItem.Price, buyItem.Amount, buyItem.ItemID, diff --git a/Projects/UOContent/Multis/Houses/BaseHouse.cs b/Projects/UOContent/Multis/Houses/BaseHouse.cs index 80303a89a..9eba0fca3 100644 --- a/Projects/UOContent/Multis/Houses/BaseHouse.cs +++ b/Projects/UOContent/Multis/Houses/BaseHouse.cs @@ -3002,7 +3002,7 @@ namespace Server.Multis for (var i = 0; i < relocatedCount; i++) { var relLocation = reader.ReadPoint3D(); - var entity = World.FindEntity(reader.ReadUInt()); + var entity = reader.ReadEntity(); if (entity != null) { diff --git a/Projects/UOContent/Multis/Houses/HouseFoundation.cs b/Projects/UOContent/Multis/Houses/HouseFoundation.cs index fbafbacbd..92c91f63f 100644 --- a/Projects/UOContent/Multis/Houses/HouseFoundation.cs +++ b/Projects/UOContent/Multis/Houses/HouseFoundation.cs @@ -1770,7 +1770,7 @@ namespace Server.Multis { var from = state.Mobile; - if (World.FindItem(reader.ReadUInt32()) is HouseFoundation foundation && from.Map == foundation.Map && + if (World.FindItem((Serial)reader.ReadUInt32()) is HouseFoundation foundation && from.Map == foundation.Map && from.InRange(foundation.GetWorldLocation(), 24) && from.CanSee(foundation)) { diff --git a/Projects/UOContent/Multis/Houses/HousePackets.cs b/Projects/UOContent/Multis/Houses/HousePackets.cs index 724c22d90..98e8a675e 100644 --- a/Projects/UOContent/Multis/Houses/HousePackets.cs +++ b/Projects/UOContent/Multis/Houses/HousePackets.cs @@ -91,7 +91,7 @@ namespace Server.Multis private const int maxPerPlaneOffsetBuffer = 750; private static readonly int maxPackedPlaneOffsetBuffer = Zlib.MaxPackSize(maxPerPlaneOffsetBuffer * 5); - public static byte[] CreateHouseDesignStateDetailed(uint serial, int revision, MultiComponentList components) + public static byte[] CreateHouseDesignStateDetailed(Serial serial, int revision, MultiComponentList components) { var xMin = components.Min.X; var yMin = components.Min.Y;