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.
This commit is contained in:
Kamron Batman 2021-08-25 00:27:19 -07:00 committed by GitHub
parent 17521c9cd7
commit 0dc4acc164
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
74 changed files with 319 additions and 248 deletions

View file

@ -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;
}
}

View file

@ -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)
{

View file

@ -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)
{

View file

@ -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<Serial>(count);
for (var i = 0; i < count; ++i)
{
serialList.Add(reader.ReadUInt32());
serialList.Add((Serial)reader.ReadUInt32());
}
EventSink.InvokeEquipMacro(state.Mobile, serialList);

View file

@ -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)
{

View file

@ -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);

View file

@ -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();

View file

@ -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)

View file

@ -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();