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;