diff --git a/Projects/Server/Guild.cs b/Projects/Server/Guild.cs index 33aa98aa3..ce5196210 100644 --- a/Projects/Server/Guild.cs +++ b/Projects/Server/Guild.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.IO; using System.Linq; namespace Server.Guilds @@ -30,19 +31,14 @@ namespace Server.Guilds public abstract bool Disbanded { get; } public abstract void Delete(); - public BufferWriter SaveBuffer { get; set; } + public bool Deleted => Disbanded; [CommandProperty(AccessLevel.Counselor)] public Serial Serial { get; } - public int TypeRef => 0; + BufferWriter ISerializable.SaveBuffer { get; set; } - public void Serialize() - { - SaveBuffer ??= new BufferWriter(true); - SaveBuffer.Reset(); - Serialize(SaveBuffer); - } + public int TypeRef => 0; public abstract void Serialize(IGenericWriter writer); public abstract void Deserialize(IGenericReader reader); diff --git a/Projects/Server/IEntity.cs b/Projects/Server/IEntity.cs index f2749b98f..8a22e4950 100644 --- a/Projects/Server/IEntity.cs +++ b/Projects/Server/IEntity.cs @@ -45,8 +45,10 @@ namespace Server Deleted = false; } - public BufferWriter SaveBuffer { get; set; } + BufferWriter ISerializable.SaveBuffer { get; set; } + public int TypeRef { get; } = -1; + public Serial Serial { get; } public Point3D Location { get; private set; } @@ -97,10 +99,6 @@ namespace Server && p.Y >= Location.m_Y - range && p.Y <= Location.m_Y + range; - public void Serialize() - { - } - public void Deserialize(IGenericReader reader) { // Should not actually be saved diff --git a/Projects/Server/Items/Containers.cs b/Projects/Server/Items/Containers.cs index 0217d1973..132cc2fc7 100644 --- a/Projects/Server/Items/Containers.cs +++ b/Projects/Server/Items/Containers.cs @@ -65,7 +65,7 @@ namespace Server.Items { case 0: { - Owner = reader.ReadMobile(); + Owner = reader.ReadEntity(); Opened = reader.ReadBool(); if (Owner == null) diff --git a/Projects/Server/Items/Item.cs b/Projects/Server/Items/Item.cs index 5f2a4b72c..1584eb7ca 100644 --- a/Projects/Server/Items/Item.cs +++ b/Projects/Server/Items/Item.cs @@ -795,20 +795,13 @@ namespace Server AddNameProperties(list); } - public BufferWriter SaveBuffer { get; set; } + BufferWriter ISerializable.SaveBuffer { get; set; } [CommandProperty(AccessLevel.Counselor)] public Serial Serial { get; } public int TypeRef { get; } - public void Serialize() - { - SaveBuffer ??= new BufferWriter(true); - SaveBuffer.Reset(); - Serialize(SaveBuffer); - } - public virtual void Serialize(IGenericWriter writer) { // The item is clean, so let's skip @@ -1039,19 +1032,12 @@ namespace Server if (GetSaveFlag(flags, SaveFlag.Parent)) { - if (m_Parent?.Deleted == false) - { - writer.Write(m_Parent.Serial); - } - else - { - writer.Write(Serial.MinusOne); - } + writer.Write(m_Parent); } if (GetSaveFlag(flags, SaveFlag.Items)) { - writer.Write(items, false); + writer.Write(items); } if (GetSaveFlag(flags, SaveFlag.IntWeight)) @@ -2710,7 +2696,7 @@ namespace Server if (GetSaveFlag(flags, SaveFlag.Items)) { - var items = reader.ReadStrongItemList(); + var items = reader.ReadEntityList(); if (this is Container) { @@ -2768,17 +2754,17 @@ namespace Server if (GetSaveFlag(flags, SaveFlag.InsuredFor)) /*m_InsuredFor = */ { - reader.ReadMobile(); + reader.ReadEntity(); } if (GetSaveFlag(flags, SaveFlag.BlessedFor)) { - AcquireCompactInfo().m_BlessedFor = reader.ReadMobile(); + AcquireCompactInfo().m_BlessedFor = reader.ReadEntity(); } if (GetSaveFlag(flags, SaveFlag.HeldBy)) { - AcquireCompactInfo().m_HeldBy = reader.ReadMobile(); + AcquireCompactInfo().m_HeldBy = reader.ReadEntity(); } if (GetSaveFlag(flags, SaveFlag.SavedFlags)) @@ -2871,7 +2857,7 @@ namespace Server if (GetSaveFlag(flags, SaveFlag.Items)) { - var items = reader.ReadStrongItemList(); + var items = reader.ReadEntityList(); if (this is Container cont) { @@ -2994,7 +2980,7 @@ namespace Server for (var i = 0; i < count; ++i) { - var item = reader.ReadItem(); + var item = reader.ReadEntity(); if (item != null) { diff --git a/Projects/Server/Mobiles/Mobile.cs b/Projects/Server/Mobiles/Mobile.cs index 649220f66..676a479fc 100644 --- a/Projects/Server/Mobiles/Mobile.cs +++ b/Projects/Server/Mobiles/Mobile.cs @@ -2567,20 +2567,13 @@ namespace Server AddNameProperties(list); } - public BufferWriter SaveBuffer { get; set; } + BufferWriter ISerializable.SaveBuffer { get; set; } [CommandProperty(AccessLevel.Counselor)] public Serial Serial { get; } public int TypeRef { get; } - public void Serialize() - { - SaveBuffer ??= new BufferWriter(true); - SaveBuffer.Reset(); - Serialize(SaveBuffer); - } - public virtual void Serialize(IGenericWriter writer) { // The item is clean, so let's skip @@ -2628,7 +2621,8 @@ namespace Server writer.Write(CreationTime); - writer.Write(Stabled, true); + Stabled.Tidy(); + writer.Write(Stabled); writer.Write(CantWalk); @@ -6393,7 +6387,7 @@ namespace Server case 25: case 24: { - Corpse = reader.ReadItem() as Container; + Corpse = reader.ReadEntity(); goto case 23; } @@ -6406,7 +6400,7 @@ namespace Server case 22: // Just removed followers case 21: { - Stabled = reader.ReadStrongMobileList(); + Stabled = reader.ReadEntityList(); goto case 20; } @@ -6461,13 +6455,13 @@ namespace Server } case 13: { - GuildFealty = reader.ReadMobile(); + GuildFealty = reader.ReadEntity(); goto case 12; } case 12: { - m_Guild = reader.ReadGuild(); + m_Guild = reader.ReadEntity(); goto case 11; } @@ -6491,7 +6485,7 @@ namespace Server } case 8: { - m_Holding = reader.ReadItem(); + m_Holding = reader.ReadEntity(); goto case 7; } @@ -6599,7 +6593,7 @@ namespace Server Skills = new Skills(this, reader); - Items = reader.ReadStrongItemList(); + Items = reader.ReadEntityList(); m_Player = reader.ReadBool(); m_Title = reader.ReadString(); diff --git a/Projects/Server/Serialization/BufferReader.cs b/Projects/Server/Serialization/BufferReader.cs index 1255537e9..250f0ee82 100644 --- a/Projects/Server/Serialization/BufferReader.cs +++ b/Projects/Server/Serialization/BufferReader.cs @@ -43,41 +43,21 @@ namespace Server } var length = ReadEncodedInt(); - var s = length == 0 ? "" : _encoding.GetString(_buffer.AsSpan(Position, length)); + if (length <= 0) + { + return ""; + } + + var s = _encoding.GetString(_buffer.AsSpan(Position, length)); Position += length; return s; } - public DateTime ReadDateTime() => new(ReadLong()); - - public DateTimeOffset ReadDateTimeOffset() => new(ReadLong(), ReadTimeSpan()); + public DateTime ReadDateTime() => new(ReadLong(), DateTimeKind.Utc); public TimeSpan ReadTimeSpan() => new(ReadLong()); - public DateTime ReadDeltaTime() - { - var ticks = ReadLong(); - var now = DateTime.UtcNow.Ticks; - - if (ticks > 0 && ticks + now < 0) - { - return DateTime.MaxValue; - } - - if (ticks < 0 && ticks + now < 0) - { - return DateTime.MinValue; - } - - try - { - return new DateTime(now + ticks); - } - catch - { - return ticks > 0 ? DateTime.MaxValue : DateTime.MinValue; - } - } + public DateTime ReadDeltaTime() => new(ReadLong() + DateTime.UtcNow.Ticks, DateTimeKind.Utc); public decimal ReadDecimal() => new(new[] { ReadInt(), ReadInt(), ReadInt(), ReadInt() }); @@ -177,27 +157,20 @@ namespace Server public Map ReadMap() => Map.Maps[ReadByte()]; - public IEntity ReadEntity() + public T ReadEntity() where T : class, ISerializable { Serial serial = ReadUInt(); - return World.FindEntity(serial) ?? new Entity(serial, new Point3D(0, 0, 0), Map.Internal); + + // Special case for now: + if (typeof(T).IsAssignableTo(typeof(BaseGuild))) + { + return World.FindGuild(serial) as T; + } + + return World.FindEntity(serial) as T; } - public Item ReadItem() => World.FindItem(ReadUInt()); - - public Mobile ReadMobile() => World.FindMobile(ReadUInt()); - - public BaseGuild ReadGuild() => World.FindGuild(ReadUInt()); - - public T ReadItem() where T : Item => ReadItem() as T; - - public T ReadMobile() where T : Mobile => ReadMobile() as T; - - public T ReadGuild() where T : BaseGuild => ReadGuild() as T; - - public List ReadStrongItemList() => ReadStrongItemList(); - - public List ReadStrongItemList() where T : Item + public List ReadEntityList() where T : class, ISerializable { var count = ReadInt(); @@ -205,108 +178,28 @@ namespace Server for (var i = 0; i < count; ++i) { - if (ReadItem() is T item) + var entity = ReadEntity(); + if (entity != null) { - list.Add(item); + list.Add(entity); } } return list; } - public HashSet ReadItemSet() => ReadItemSet(); - - public HashSet ReadItemSet() where T : Item + public HashSet ReadEntitySet() where T : class, ISerializable { var count = ReadInt(); - var set = new HashSet(); + var set = new HashSet(count); for (var i = 0; i < count; ++i) { - if (ReadItem() is T item) + var entity = ReadEntity(); + if (entity != null) { - set.Add(item); - } - } - - return set; - } - - public List ReadStrongMobileList() => ReadStrongMobileList(); - - public List ReadStrongMobileList() where T : Mobile - { - var count = ReadInt(); - - var list = new List(count); - - for (var i = 0; i < count; ++i) - { - if (ReadMobile() is T m) - { - list.Add(m); - } - } - - return list; - } - - public HashSet ReadMobileSet() => ReadMobileSet(); - - public HashSet ReadMobileSet() where T : Mobile - { - var count = ReadInt(); - var set = new HashSet(); - - for (var i = 0; i < count; ++i) - { - if (ReadMobile() is T item) - { - set.Add(item); - } - } - - return set; - } - - public List ReadStrongGuildList() => ReadStrongGuildList(); - - public List ReadStrongGuildList() where T : BaseGuild - { - var count = ReadInt(); - var list = new List(count); - - if (count > 0) - { - for (var i = 0; i < count; ++i) - { - if (ReadGuild() is T g) - { - list.Add(g); - } - } - } - - return list; - } - - public HashSet ReadGuildSet() => ReadGuildSet(); - - public HashSet ReadGuildSet() where T : BaseGuild - { - var count = ReadInt(); - - var set = new HashSet(); - - if (count > 0) - { - for (var i = 0; i < count; ++i) - { - if (ReadGuild() is T item) - { - set.Add(item); - } + set.Add(entity); } } @@ -332,10 +225,9 @@ namespace Server { return origin switch { - SeekOrigin.Begin => Position = offset, SeekOrigin.Current => Position += offset, SeekOrigin.End => Position = _buffer.Length - offset, - _ => Position + _ => Position = offset // Begin }; } } diff --git a/Projects/Server/Serialization/BufferWriter.cs b/Projects/Server/Serialization/BufferWriter.cs index 5930787ba..f4fae7a0b 100644 --- a/Projects/Server/Serialization/BufferWriter.cs +++ b/Projects/Server/Serialization/BufferWriter.cs @@ -19,7 +19,6 @@ using System.IO; using System.Net; using System.Runtime.CompilerServices; using System.Text; -using Server.Guilds; namespace Server { @@ -45,6 +44,13 @@ namespace Server _buffer = GC.AllocateUninitializedArray(BufferSize); } + public BufferWriter(int count, bool prefixStr) + { + m_PrefixStrings = prefixStr; + m_Encoding = Utility.UTF8; + _buffer = GC.AllocateUninitializedArray(count); + } + public virtual long Position => Index; protected virtual int BufferSize => 256; @@ -69,21 +75,22 @@ namespace Server public virtual void Flush() { - Resize(_buffer.Length * 2); + // Need to avoid buffer.Length = 2, buffer * 2 is 4, but we need 8 or 16bytes, causing an exception. + // The least we need is 16bytes + Index, but we use BufferSize since it should always be big enough for a single + // non-dynamic field. + Resize(Math.Max(BufferSize, _buffer.Length * 2)); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - private void FlushIfNeeded(int amount) + private bool FlushIfNeeded(int amount) { if (Index + amount > _buffer.Length) { Flush(); + return true; } - } - public void Reset() - { - Index = 0; + return false; } public void Write(ReadOnlySpan bytes) @@ -94,6 +101,7 @@ namespace Server while (remaining > 0) { FlushIfNeeded(remaining); + var count = Math.Min((int)(_buffer.Length - Index), remaining); bytes.Slice(idx, count).CopyTo(_buffer.AsSpan((int)Index, count)); @@ -107,10 +115,9 @@ namespace Server { return origin switch { - SeekOrigin.Begin => Index = offset, SeekOrigin.Current => Index += offset, - SeekOrigin.End => Index = BufferSize - offset, - _ => Index + SeekOrigin.End => Index = _buffer.Length - offset, + _ => Index = offset // Begin }; } @@ -133,11 +140,11 @@ namespace Server { if (value == null) { - Write((byte)0); + Write(false); } else { - Write((byte)1); + Write(true); InternalWriteString(value); } } @@ -149,32 +156,27 @@ namespace Server public void Write(DateTime value) { - Write(value.Ticks); - } + var ticks = (value.Kind switch + { + DateTimeKind.Local => value.ToUniversalTime(), + DateTimeKind.Unspecified => value.ToLocalTime().ToUniversalTime(), + _ => value + }).Ticks; - public void Write(DateTimeOffset value) - { - Write(value.Ticks); - Write(value.Offset.Ticks); + Write(ticks); } public void WriteDeltaTime(DateTime value) { - var ticks = value.Ticks; - var now = DateTime.UtcNow.Ticks; - - TimeSpan d; - - try + var ticks = (value.Kind switch { - d = new TimeSpan(ticks - now); - } - catch - { - d = TimeSpan.MaxValue; - } + DateTimeKind.Local => value.ToUniversalTime(), + DateTimeKind.Unspecified => value.ToLocalTime().ToUniversalTime(), + _ => value + }).Ticks; - Write(d); + // Technically supports negative deltas for times in the past + Write(ticks - DateTime.UtcNow.Ticks); } public void Write(IPAddress value) @@ -204,70 +206,64 @@ namespace Server { FlushIfNeeded(8); - _buffer[Index] = (byte)value; - _buffer[Index + 1] = (byte)(value >> 8); - _buffer[Index + 2] = (byte)(value >> 16); - _buffer[Index + 3] = (byte)(value >> 24); - _buffer[Index + 4] = (byte)(value >> 32); - _buffer[Index + 5] = (byte)(value >> 40); - _buffer[Index + 6] = (byte)(value >> 48); - _buffer[Index + 7] = (byte)(value >> 56); - Index += 8; + _buffer[Index++] = (byte)value; + _buffer[Index++] = (byte)(value >> 8); + _buffer[Index++] = (byte)(value >> 16); + _buffer[Index++] = (byte)(value >> 24); + _buffer[Index++] = (byte)(value >> 32); + _buffer[Index++] = (byte)(value >> 40); + _buffer[Index++] = (byte)(value >> 48); + _buffer[Index++] = (byte)(value >> 56); } public void Write(ulong value) { FlushIfNeeded(8); - _buffer[Index] = (byte)value; - _buffer[Index + 1] = (byte)(value >> 8); - _buffer[Index + 2] = (byte)(value >> 16); - _buffer[Index + 3] = (byte)(value >> 24); - _buffer[Index + 4] = (byte)(value >> 32); - _buffer[Index + 5] = (byte)(value >> 40); - _buffer[Index + 6] = (byte)(value >> 48); - _buffer[Index + 7] = (byte)(value >> 56); - Index += 8; + _buffer[Index++] = (byte)value; + _buffer[Index++] = (byte)(value >> 8); + _buffer[Index++] = (byte)(value >> 16); + _buffer[Index++] = (byte)(value >> 24); + _buffer[Index++] = (byte)(value >> 32); + _buffer[Index++] = (byte)(value >> 40); + _buffer[Index++] = (byte)(value >> 48); + _buffer[Index++] = (byte)(value >> 56); } public void Write(int value) { FlushIfNeeded(4); - _buffer[Index] = (byte)value; - _buffer[Index + 1] = (byte)(value >> 8); - _buffer[Index + 2] = (byte)(value >> 16); - _buffer[Index + 3] = (byte)(value >> 24); - Index += 4; + _buffer[Index++] = (byte)value; + _buffer[Index++] = (byte)(value >> 8); + _buffer[Index++] = (byte)(value >> 16); + _buffer[Index++] = (byte)(value >> 24); } public void Write(uint value) { FlushIfNeeded(4); - _buffer[Index] = (byte)value; - _buffer[Index + 1] = (byte)(value >> 8); - _buffer[Index + 2] = (byte)(value >> 16); - _buffer[Index + 3] = (byte)(value >> 24); - Index += 4; + _buffer[Index++] = (byte)value; + _buffer[Index++] = (byte)(value >> 8); + _buffer[Index++] = (byte)(value >> 16); + _buffer[Index++] = (byte)(value >> 24); } public void Write(short value) { FlushIfNeeded(2); - _buffer[Index] = (byte)value; - _buffer[Index + 1] = (byte)(value >> 8); - Index += 2; + _buffer[Index++] = (byte)value; + _buffer[Index++] = (byte)(value >> 8); } public void Write(ushort value) { FlushIfNeeded(2); - _buffer[Index] = (byte)value; - _buffer[Index + 1] = (byte)(value >> 8); - Index += 2; + _buffer[Index++] = (byte)value; + _buffer[Index++] = (byte)(value >> 8); } public unsafe void Write(double value) @@ -301,16 +297,18 @@ namespace Server _buffer[Index++] = value; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Write(sbyte value) { FlushIfNeeded(1); _buffer[Index++] = (byte)value; } - public void Write(bool value) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe void Write(bool value) { FlushIfNeeded(1); - _buffer[Index++] = value ? 1 : 0; + _buffer[Index++] = *(byte*)&value; // up to 30% faster to dereference the raw value on the stack } public void Write(Point3D value) @@ -348,318 +346,32 @@ namespace Server Write((byte)(value?.RaceIndex ?? 0xFF)); } - public void WriteEntity(IEntity value) + public void Write(ISerializable value) { Write(value?.Deleted != false ? Serial.MinusOne : value.Serial); } - public void Write(Item value) + public void Write(ICollection coll) where T : class, ISerializable { - Write(value?.Deleted != false ? Serial.MinusOne : value.Serial); - } - - public void Write(Mobile value) - { - Write(value?.Deleted != false ? Serial.MinusOne : value.Serial); - } - - public void Write(BaseGuild value) - { - Write(value?.Serial ?? 0); - } - - public void WriteItem(T value) where T : Item - { - Write(value); - } - - public void WriteMobile(T value) where T : Mobile - { - Write(value); - } - - public void WriteGuild(T value) where T : BaseGuild - { - Write(value); - } - - public void Write(List list) - { - WriteItemList(list); - } - - public void Write(List list, bool tidy) - { - WriteItemList(list, tidy); - } - - public void WriteItemList(List list) where T : Item - { - WriteItemList(list, false); - } - - public void WriteItemList(List list, bool tidy) where T : Item - { - if (tidy) + Write(coll.Count); + foreach (var entry in coll) { - for (var i = 0; i < list.Count;) - { - if (list[i].Deleted) - { - list.RemoveAt(i); - } - else - { - ++i; - } - } - } - - Write(list.Count); - - for (var i = 0; i < list.Count; ++i) - { - Write(list[i]); + Write(entry); } } - public void Write(HashSet set) + public void Write(ICollection coll, Action action) where T : class, ISerializable { - Write(set, false); - } - - public void Write(HashSet set, bool tidy) - { - if (tidy) + if (coll == null) { - set.RemoveWhere(item => item.Deleted); + Write(0); + return; } - Write(set.Count); - - foreach (var item in set) + Write(coll.Count); + foreach (var entry in coll) { - Write(item); - } - } - - public void WriteItemSet(HashSet set) where T : Item - { - WriteItemSet(set, false); - } - - public void WriteItemSet(HashSet set, bool tidy) where T : Item - { - if (tidy) - { - set.RemoveWhere(item => item.Deleted); - } - - Write(set.Count); - - foreach (var item in set) - { - Write(item); - } - } - - public void Write(List list) - { - Write(list, false); - } - - public void Write(List list, bool tidy) - { - if (tidy) - { - for (var i = 0; i < list.Count;) - { - if (list[i].Deleted) - { - list.RemoveAt(i); - } - else - { - ++i; - } - } - } - - Write(list.Count); - - for (var i = 0; i < list.Count; ++i) - { - Write(list[i]); - } - } - - public void WriteMobileList(List list) where T : Mobile - { - WriteMobileList(list, false); - } - - public void WriteMobileList(List list, bool tidy) where T : Mobile - { - if (tidy) - { - for (var i = 0; i < list.Count;) - { - if (list[i].Deleted) - { - list.RemoveAt(i); - } - else - { - ++i; - } - } - } - - Write(list.Count); - - for (var i = 0; i < list.Count; ++i) - { - Write(list[i]); - } - } - - public void Write(HashSet set) - { - Write(set, false); - } - - public void Write(HashSet set, bool tidy) - { - if (tidy) - { - set.RemoveWhere(mobile => mobile.Deleted); - } - - Write(set.Count); - - foreach (var mob in set) - { - Write(mob); - } - } - - public void WriteMobileSet(HashSet set) where T : Mobile - { - WriteMobileSet(set, false); - } - - public void WriteMobileSet(HashSet set, bool tidy) where T : Mobile - { - if (tidy) - { - set.RemoveWhere(mob => mob.Deleted); - } - - Write(set.Count); - - foreach (var mob in set) - { - Write(mob); - } - } - - public void Write(List list) - { - Write(list, false); - } - - public void Write(List list, bool tidy) - { - if (tidy) - { - for (var i = 0; i < list.Count;) - { - if (list[i].Disbanded) - { - list.RemoveAt(i); - } - else - { - ++i; - } - } - } - - Write(list.Count); - - for (var i = 0; i < list.Count; ++i) - { - Write(list[i]); - } - } - - public void WriteGuildList(List list) where T : BaseGuild - { - WriteGuildList(list, false); - } - - public void WriteGuildList(List list, bool tidy) where T : BaseGuild - { - if (tidy) - { - for (var i = 0; i < list.Count;) - { - if (list[i].Disbanded) - { - list.RemoveAt(i); - } - else - { - ++i; - } - } - } - - Write(list.Count); - - for (var i = 0; i < list.Count; ++i) - { - Write(list[i]); - } - } - - public void Write(HashSet set) - { - Write(set, false); - } - - public void Write(HashSet set, bool tidy) - { - if (tidy) - { - set.RemoveWhere(guild => guild.Disbanded); - } - - Write(set.Count); - - foreach (var guild in set) - { - Write(guild); - } - } - - public void WriteGuildSet(HashSet set) where T : BaseGuild - { - WriteGuildSet(set, false); - } - - public void WriteGuildSet(HashSet set, bool tidy) where T : BaseGuild - { - if (tidy) - { - set.RemoveWhere(guild => guild.Disbanded); - } - - Write(set.Count); - - foreach (var guild in set) - { - Write(guild); + action(this, entry); } } @@ -668,6 +380,7 @@ namespace Server var remaining = m_Encoding.GetByteCount(value); WriteEncodedInt(remaining); + if (remaining == 0) { return; diff --git a/Projects/Server/Serialization/IGenericReader.cs b/Projects/Server/Serialization/IGenericReader.cs index 609e28626..6d180ba23 100644 --- a/Projects/Server/Serialization/IGenericReader.cs +++ b/Projects/Server/Serialization/IGenericReader.cs @@ -16,7 +16,6 @@ using System; using System.Collections.Generic; using System.Net; -using Server.Guilds; namespace Server { @@ -24,7 +23,6 @@ namespace Server { string ReadString(); DateTime ReadDateTime(); - DateTimeOffset ReadDateTimeOffset(); TimeSpan ReadTimeSpan(); DateTime ReadDeltaTime(); decimal ReadDecimal(); @@ -46,25 +44,9 @@ namespace Server Rectangle2D ReadRect2D(); Rectangle3D ReadRect3D(); Map ReadMap(); - IEntity ReadEntity(); - Item ReadItem(); - Mobile ReadMobile(); - BaseGuild ReadGuild(); - T ReadItem() where T : Item; - T ReadMobile() where T : Mobile; - T ReadGuild() where T : BaseGuild; - List ReadStrongItemList(); - List ReadStrongItemList() where T : Item; - List ReadStrongMobileList(); - List ReadStrongMobileList() where T : Mobile; - List ReadStrongGuildList(); - List ReadStrongGuildList() where T : BaseGuild; - HashSet ReadItemSet(); - HashSet ReadItemSet() where T : Item; - HashSet ReadMobileSet(); - HashSet ReadMobileSet() where T : Mobile; - HashSet ReadGuildSet(); - HashSet ReadGuildSet() where T : BaseGuild; + T ReadEntity() where T : class, ISerializable; + List ReadEntityList() where T : class, ISerializable; + HashSet ReadEntitySet() where T : class, ISerializable; Race ReadRace(); int Read(Span buffer); } diff --git a/Projects/Server/Serialization/IGenericWriter.cs b/Projects/Server/Serialization/IGenericWriter.cs index 001215cdf..5476ec84f 100644 --- a/Projects/Server/Serialization/IGenericWriter.cs +++ b/Projects/Server/Serialization/IGenericWriter.cs @@ -17,7 +17,6 @@ using System; using System.Collections.Generic; using System.IO; using System.Net; -using Server.Guilds; namespace Server { @@ -27,7 +26,6 @@ namespace Server void Close(); void Write(string value); void Write(DateTime value); - void Write(DateTimeOffset value); void Write(TimeSpan value); void Write(decimal value); void Write(long value); @@ -49,38 +47,9 @@ namespace Server void Write(Rectangle2D value); void Write(Rectangle3D value); void Write(Map value); - void WriteEntity(IEntity value); - void Write(Item value); - void Write(Mobile value); - void Write(BaseGuild value); - void WriteItem(T value) where T : Item; - void WriteMobile(T value) where T : Mobile; - void WriteGuild(T value) where T : BaseGuild; + void Write(ISerializable value); void Write(Race value); - void Write(List list); - void Write(List list, bool tidy); - void WriteItemList(List list) where T : Item; - void WriteItemList(List list, bool tidy) where T : Item; - void Write(HashSet list); - void Write(HashSet list, bool tidy); - void WriteItemSet(HashSet set) where T : Item; - void WriteItemSet(HashSet set, bool tidy) where T : Item; - void Write(List list); - void Write(List list, bool tidy); - void WriteMobileList(List list) where T : Mobile; - void WriteMobileList(List list, bool tidy) where T : Mobile; - void Write(HashSet list); - void Write(HashSet list, bool tidy); - void WriteMobileSet(HashSet set) where T : Mobile; - void WriteMobileSet(HashSet set, bool tidy) where T : Mobile; - void Write(List list); - void Write(List list, bool tidy); - void WriteGuildList(List list) where T : BaseGuild; - void WriteGuildList(List list, bool tidy) where T : BaseGuild; - void Write(HashSet list); - void Write(HashSet list, bool tidy); - void WriteGuildSet(HashSet set) where T : BaseGuild; - void WriteGuildSet(HashSet set, bool tidy) where T : BaseGuild; + void Write(ICollection list) where T : class, ISerializable; void Write(ReadOnlySpan bytes); long Seek(long offset, SeekOrigin origin); diff --git a/Projects/Server/Serialization/ISerializable.cs b/Projects/Server/Serialization/ISerializable.cs index 58f4bf41d..665159386 100644 --- a/Projects/Server/Serialization/ISerializable.cs +++ b/Projects/Server/Serialization/ISerializable.cs @@ -13,16 +13,30 @@ * along with this program. If not, see . * *************************************************************************/ +using System.IO; + namespace Server { public interface ISerializable { - BufferWriter SaveBuffer { get; set; } + BufferWriter SaveBuffer { get; protected internal set; } int TypeRef { get; } Serial Serial { get; } - void Serialize(); void Deserialize(IGenericReader reader); void Serialize(IGenericWriter writer); void Delete(); + bool Deleted { get; } + + public void InitializeSaveBuffer(byte[] buffer) + { + SaveBuffer = new BufferWriter(buffer, true); + } + + public void Serialize() + { + SaveBuffer ??= new BufferWriter(true); + SaveBuffer.Seek(0, SeekOrigin.Begin); + Serialize(SaveBuffer); + } } } diff --git a/Projects/Server/Utilities/Utility.cs b/Projects/Server/Utilities/Utility.cs index bfe60d8b8..5df39a574 100644 --- a/Projects/Server/Utilities/Utility.cs +++ b/Projects/Server/Utilities/Utility.cs @@ -1437,5 +1437,24 @@ namespace Server return string.Join(lineSeparator, parts); } + + public static void Tidy(this List list) where T : ISerializable + { + for (int i = list.Count - 1; i >= 0; i--) + { + var entry = list[i]; + if (entry?.Deleted != false) + { + list.RemoveAt(i); + } + } + + list.TrimExcess(); + } + + public static void Tidy(this HashSet set) where T : ISerializable + { + set.RemoveWhere(entry => entry?.Deleted != false); + } } } diff --git a/Projects/Server/World/World.cs b/Projects/Server/World/World.cs index 6bead8af6..bcd16bd27 100644 --- a/Projects/Server/World/World.cs +++ b/Projects/Server/World/World.cs @@ -126,7 +126,7 @@ namespace Server public static WorldState WorldState { get; private set; } public static bool Saving => WorldState == WorldState.Saving; - public static bool Running => WorldState == WorldState.Running; + public static bool Running => WorldState != WorldState.Loading && WorldState != WorldState.Initial; public static bool Loading => WorldState == WorldState.Loading; public static Dictionary Mobiles { get; private set; } @@ -290,7 +290,7 @@ namespace Server return map; } - private static void SaveBuffers(IIndexInfo indexInfo, List> entities) where T : ISerializable + private static void SaveBuffers(IIndexInfo indexInfo, List> entities) where T : class, ISerializable { var indexType = indexInfo.TypeName; @@ -306,20 +306,20 @@ namespace Server foreach (var entry in entities) { - T t = entry.Entity; + T e = entry.Entity; - if (t == null || t is IEntity entity && entity.Deleted) + if (e == null || e is IEntity entity && entity.Deleted) { continue; } byte[] saveBuffer = GC.AllocateUninitializedArray(entry.Length); reader.Read(saveBuffer, 0, entry.Length); - t.SaveBuffer = new BufferWriter(saveBuffer, true); + e.InitializeSaveBuffer(saveBuffer); } } - private static void LoadData(IIndexInfo indexInfo, List> entities) where T : ISerializable + private static void LoadData(IIndexInfo indexInfo, List> entities) where T : class, ISerializable { var indexType = indexInfo.TypeName; @@ -772,7 +772,7 @@ namespace Server public static void RemoveGuild(BaseGuild guild) => Guilds.Remove(guild.Serial); - public static void SerializeTo(this ISerializable entity, IGenericWriter writer) + private static void SerializeTo(this ISerializable entity, IGenericWriter writer) { var saveBuffer = entity.SaveBuffer; writer.Write(saveBuffer.Buffer.AsSpan(0, (int)saveBuffer.Position)); diff --git a/Projects/UOContent/Engines/CannedEvil/ChampionAltar.cs b/Projects/UOContent/Engines/CannedEvil/ChampionAltar.cs index a852e9178..afc5c9cb0 100644 --- a/Projects/UOContent/Engines/CannedEvil/ChampionAltar.cs +++ b/Projects/UOContent/Engines/CannedEvil/ChampionAltar.cs @@ -38,7 +38,7 @@ namespace Server.Engines.CannedEvil { case 0: { - m_Spawn = reader.ReadItem() as ChampionSpawn; + m_Spawn = reader.ReadEntity(); if (m_Spawn == null) { diff --git a/Projects/UOContent/Engines/CannedEvil/ChampionPlatform.cs b/Projects/UOContent/Engines/CannedEvil/ChampionPlatform.cs index ef10f9762..690c2926d 100644 --- a/Projects/UOContent/Engines/CannedEvil/ChampionPlatform.cs +++ b/Projects/UOContent/Engines/CannedEvil/ChampionPlatform.cs @@ -80,7 +80,7 @@ namespace Server.Engines.CannedEvil { case 0: { - m_Spawn = reader.ReadItem() as ChampionSpawn; + m_Spawn = reader.ReadEntity(); if (m_Spawn == null) { diff --git a/Projects/UOContent/Engines/CannedEvil/ChampionSkullBrazier.cs b/Projects/UOContent/Engines/CannedEvil/ChampionSkullBrazier.cs index 6a3fad62a..f1bb20a25 100644 --- a/Projects/UOContent/Engines/CannedEvil/ChampionSkullBrazier.cs +++ b/Projects/UOContent/Engines/CannedEvil/ChampionSkullBrazier.cs @@ -157,8 +157,8 @@ namespace Server.Engines.CannedEvil case 0: { m_Type = (ChampionSkullType)reader.ReadInt(); - Platform = reader.ReadItem() as ChampionSkullPlatform; - m_Skull = reader.ReadItem(); + Platform = reader.ReadEntity(); + m_Skull = reader.ReadEntity(); if (Platform == null) { diff --git a/Projects/UOContent/Engines/CannedEvil/ChampionSkullPlatform.cs b/Projects/UOContent/Engines/CannedEvil/ChampionSkullPlatform.cs index 867dd4cc3..4c0902dfe 100644 --- a/Projects/UOContent/Engines/CannedEvil/ChampionSkullPlatform.cs +++ b/Projects/UOContent/Engines/CannedEvil/ChampionSkullPlatform.cs @@ -112,12 +112,12 @@ namespace Server.Engines.CannedEvil { case 0: { - m_Power = reader.ReadItem() as ChampionSkullBrazier; - m_Enlightenment = reader.ReadItem() as ChampionSkullBrazier; - m_Venom = reader.ReadItem() as ChampionSkullBrazier; - m_Pain = reader.ReadItem() as ChampionSkullBrazier; - m_Greed = reader.ReadItem() as ChampionSkullBrazier; - m_Death = reader.ReadItem() as ChampionSkullBrazier; + m_Power = reader.ReadEntity(); + m_Enlightenment = reader.ReadEntity(); + m_Venom = reader.ReadEntity(); + m_Pain = reader.ReadEntity(); + m_Greed = reader.ReadEntity(); + m_Death = reader.ReadEntity(); break; } diff --git a/Projects/UOContent/Engines/CannedEvil/ChampionSpawn.cs b/Projects/UOContent/Engines/CannedEvil/ChampionSpawn.cs index 07ec6510f..877ed2ca5 100644 --- a/Projects/UOContent/Engines/CannedEvil/ChampionSpawn.cs +++ b/Projects/UOContent/Engines/CannedEvil/ChampionSpawn.cs @@ -1169,7 +1169,7 @@ namespace Server.Engines.CannedEvil } writer.Write(ConfinedRoaming); - writer.WriteItem(m_Idol); + writer.Write(m_Idol); writer.Write(HasBeenAdvanced); writer.Write(m_SpawnArea); @@ -1180,11 +1180,14 @@ namespace Server.Engines.CannedEvil writer.Write(m_Active); writer.Write((int)m_Type); - writer.Write(m_Creatures, true); - writer.Write(m_RedSkulls, true); - writer.Write(m_WhiteSkulls, true); - writer.WriteItem(m_Platform); - writer.WriteItem(m_Altar); + m_Creatures.Tidy(); + writer.Write(m_Creatures); + m_RedSkulls.Tidy(); + writer.Write(m_RedSkulls); + m_WhiteSkulls.Tidy(); + writer.Write(m_WhiteSkulls); + writer.Write(m_Platform); + writer.Write(m_Altar); writer.Write(ExpireDelay); writer.WriteDeltaTime(ExpireTime); writer.Write(Champion); @@ -1218,7 +1221,7 @@ namespace Server.Engines.CannedEvil var entries = reader.ReadInt(); for (var i = 0; i < entries; ++i) { - var m = reader.ReadMobile(); + var m = reader.ReadEntity(); var damage = reader.ReadInt(); if (m == null) @@ -1234,7 +1237,7 @@ namespace Server.Engines.CannedEvil case 4: { ConfinedRoaming = reader.ReadBool(); - m_Idol = reader.ReadItem(); + m_Idol = reader.ReadEntity(); HasBeenAdvanced = reader.ReadBool(); goto case 3; @@ -1277,14 +1280,14 @@ namespace Server.Engines.CannedEvil var active = reader.ReadBool(); m_Type = (ChampionSpawnType)reader.ReadInt(); - m_Creatures = reader.ReadStrongMobileList(); - m_RedSkulls = reader.ReadStrongItemList(); - m_WhiteSkulls = reader.ReadStrongItemList(); - m_Platform = reader.ReadItem(); - m_Altar = reader.ReadItem(); + m_Creatures = reader.ReadEntityList(); + m_RedSkulls = reader.ReadEntityList(); + m_WhiteSkulls = reader.ReadEntityList(); + m_Platform = reader.ReadEntity(); + m_Altar = reader.ReadEntity(); ExpireDelay = reader.ReadTimeSpan(); ExpireTime = reader.ReadDeltaTime(); - Champion = reader.ReadMobile(); + Champion = reader.ReadEntity(); RestartDelay = reader.ReadTimeSpan(); if (reader.ReadBool()) @@ -1384,7 +1387,7 @@ namespace Server.Engines.CannedEvil { case 0: { - Spawn = reader.ReadItem() as ChampionSpawn; + Spawn = reader.ReadEntity(); if (Spawn == null) { diff --git a/Projects/UOContent/Engines/CannedEvil/HarrowerGate.cs b/Projects/UOContent/Engines/CannedEvil/HarrowerGate.cs index 3d2a04299..aa11225df 100644 --- a/Projects/UOContent/Engines/CannedEvil/HarrowerGate.cs +++ b/Projects/UOContent/Engines/CannedEvil/HarrowerGate.cs @@ -40,7 +40,7 @@ namespace Server.Items { case 0: { - m_Harrower = reader.ReadMobile(); + m_Harrower = reader.ReadEntity(); if (m_Harrower == null) { diff --git a/Projects/UOContent/Engines/ConPVP/Arena.cs b/Projects/UOContent/Engines/ConPVP/Arena.cs index 0f9865bfc..0d74695fa 100644 --- a/Projects/UOContent/Engines/ConPVP/Arena.cs +++ b/Projects/UOContent/Engines/ConPVP/Arena.cs @@ -263,14 +263,14 @@ namespace Server.Engines.ConPVP } case 6: { - Ladder = reader.ReadItem() as LadderController; + Ladder = reader.ReadEntity(); goto case 5; } case 5: { - m_Tournament = reader.ReadItem() as TournamentController; - Announcer = reader.ReadMobile(); + m_Tournament = reader.ReadEntity(); + Announcer = reader.ReadEntity(); goto case 4; } @@ -290,13 +290,13 @@ namespace Server.Engines.ConPVP { GateIn = reader.ReadPoint3D(); m_GateOut = reader.ReadPoint3D(); - Teleporter = reader.ReadItem(); + Teleporter = reader.ReadEntity(); goto case 1; } case 1: { - Players = reader.ReadStrongMobileList(); + Players = reader.ReadEntityList(); goto case 0; } diff --git a/Projects/UOContent/Engines/ConPVP/DuelContext.cs b/Projects/UOContent/Engines/ConPVP/DuelContext.cs index 392e7ecf3..640ba2a19 100644 --- a/Projects/UOContent/Engines/ConPVP/DuelContext.cs +++ b/Projects/UOContent/Engines/ConPVP/DuelContext.cs @@ -2747,7 +2747,7 @@ namespace Server.Engines.ConPVP for (var i = 0; i < count; ++i) { - var mob = reader.ReadMobile(); + var mob = reader.ReadEntity(); var loc = reader.ReadPoint3D(); var map = reader.ReadMap(); diff --git a/Projects/UOContent/Engines/ConPVP/Games/BombingRun.cs b/Projects/UOContent/Engines/ConPVP/Games/BombingRun.cs index 92324ad9f..fede73408 100644 --- a/Projects/UOContent/Engines/ConPVP/Games/BombingRun.cs +++ b/Projects/UOContent/Engines/ConPVP/Games/BombingRun.cs @@ -1380,10 +1380,10 @@ namespace Server.Engines.ConPVP { case 0: { - Board = ip.ReadItem() as BRBoard; + Board = ip.ReadEntity(); TeamName = ip.ReadString(); Color = ip.ReadEncodedInt(); - m_Goal = ip.ReadItem() as BRGoal; + m_Goal = ip.ReadEntity(); break; } } diff --git a/Projects/UOContent/Engines/ConPVP/Games/CTF.cs b/Projects/UOContent/Engines/ConPVP/Games/CTF.cs index e9410a79e..8e6fb29c3 100644 --- a/Projects/UOContent/Engines/ConPVP/Games/CTF.cs +++ b/Projects/UOContent/Engines/ConPVP/Games/CTF.cs @@ -665,7 +665,7 @@ namespace Server.Engines.ConPVP { case 2: { - Board = ip.ReadItem() as CTFBoard; + Board = ip.ReadEntity(); goto case 1; } @@ -679,7 +679,7 @@ namespace Server.Engines.ConPVP { Color = ip.ReadEncodedInt(); - Flag = ip.ReadItem() as CTFFlag; + Flag = ip.ReadEntity(); Origin = ip.ReadPoint3D(); break; } diff --git a/Projects/UOContent/Engines/ConPVP/Games/DoubleDom.cs b/Projects/UOContent/Engines/ConPVP/Games/DoubleDom.cs index fb880c190..0083e29d7 100644 --- a/Projects/UOContent/Engines/ConPVP/Games/DoubleDom.cs +++ b/Projects/UOContent/Engines/ConPVP/Games/DoubleDom.cs @@ -311,7 +311,7 @@ namespace Server.Engines.ConPVP { case 0: { - Board = ip.ReadItem() as DDBoard; + Board = ip.ReadEntity(); TeamName = ip.ReadString(); Color = ip.ReadEncodedInt(); Origin = ip.ReadPoint3D(); @@ -481,8 +481,8 @@ namespace Server.Engines.ConPVP TeamInfo[i] = new DDTeamInfo(i, reader); } - PointA = reader.ReadItem() as DDWayPoint; - PointB = reader.ReadItem() as DDWayPoint; + PointA = reader.ReadEntity(); + PointB = reader.ReadEntity(); break; } diff --git a/Projects/UOContent/Engines/ConPVP/Games/KingOfTheHill.cs b/Projects/UOContent/Engines/ConPVP/Games/KingOfTheHill.cs index de58ce944..db04fbd1e 100644 --- a/Projects/UOContent/Engines/ConPVP/Games/KingOfTheHill.cs +++ b/Projects/UOContent/Engines/ConPVP/Games/KingOfTheHill.cs @@ -354,7 +354,7 @@ namespace Server.Engines.ConPVP { case 0: { - m_Controller = reader.ReadItem() as KHController; + m_Controller = reader.ReadEntity(); break; } } @@ -814,7 +814,8 @@ namespace Server.Engines.ConPVP writer.WriteEncodedInt(m_ScoreInterval); writer.Write(Duration); - writer.WriteItemList(Boards, true); + Boards.Tidy(); + writer.Write(Boards); writer.WriteEncodedInt(Hills.Length); for (var i = 0; i < Hills.Length; ++i) @@ -843,12 +844,12 @@ namespace Server.Engines.ConPVP Duration = reader.ReadTimeSpan(); - Boards = reader.ReadStrongItemList(); + Boards = reader.ReadEntityList(); Hills = new HillOfTheKing[reader.ReadEncodedInt()]; for (var i = 0; i < Hills.Length; ++i) { - Hills[i] = reader.ReadItem() as HillOfTheKing; + Hills[i] = reader.ReadEntity(); } TeamInfo = new KHTeamInfo[reader.ReadEncodedInt()]; diff --git a/Projects/UOContent/Engines/ConPVP/Gumps/LadderGump.cs b/Projects/UOContent/Engines/ConPVP/Gumps/LadderGump.cs index c5247c55c..991c57835 100644 --- a/Projects/UOContent/Engines/ConPVP/Gumps/LadderGump.cs +++ b/Projects/UOContent/Engines/ConPVP/Gumps/LadderGump.cs @@ -38,7 +38,7 @@ namespace Server.Engines.ConPVP { case 1: { - Ladder = reader.ReadItem(); + Ladder = reader.ReadEntity(); break; } } diff --git a/Projects/UOContent/Engines/ConPVP/Ladder.cs b/Projects/UOContent/Engines/ConPVP/Ladder.cs index 7cc4cca2f..e66148110 100644 --- a/Projects/UOContent/Engines/ConPVP/Ladder.cs +++ b/Projects/UOContent/Engines/ConPVP/Ladder.cs @@ -337,7 +337,7 @@ namespace Server.Engines.ConPVP case 1: case 0: { - Mobile = reader.ReadMobile(); + Mobile = reader.ReadEntity(); m_Experience = reader.ReadEncodedInt(); Wins = reader.ReadEncodedInt(); Losses = reader.ReadEncodedInt(); diff --git a/Projects/UOContent/Engines/ConPVP/Preferences.cs b/Projects/UOContent/Engines/ConPVP/Preferences.cs index ada665b83..41fc74e34 100644 --- a/Projects/UOContent/Engines/ConPVP/Preferences.cs +++ b/Projects/UOContent/Engines/ConPVP/Preferences.cs @@ -149,7 +149,7 @@ namespace Server.Engines.ConPVP { case 0: { - Mobile = reader.ReadMobile(); + Mobile = reader.ReadEntity(); var count = reader.ReadEncodedInt(); diff --git a/Projects/UOContent/Engines/ConPVP/Tournament.cs b/Projects/UOContent/Engines/ConPVP/Tournament.cs index 7b99cfc82..1c7aa3e16 100644 --- a/Projects/UOContent/Engines/ConPVP/Tournament.cs +++ b/Projects/UOContent/Engines/ConPVP/Tournament.cs @@ -61,7 +61,7 @@ namespace Server.Engines.ConPVP } case 4: { - EventController = reader.ReadItem() as EventController; + EventController = reader.ReadEntity(); goto case 3; } diff --git a/Projects/UOContent/Engines/ConPVP/TournamentBracketItem.cs b/Projects/UOContent/Engines/ConPVP/TournamentBracketItem.cs index a2a2cf009..34aef4313 100644 --- a/Projects/UOContent/Engines/ConPVP/TournamentBracketItem.cs +++ b/Projects/UOContent/Engines/ConPVP/TournamentBracketItem.cs @@ -53,7 +53,7 @@ namespace Server.Engines.ConPVP { case 0: { - Tournament = reader.ReadItem() as TournamentController; + Tournament = reader.ReadEntity(); break; } } diff --git a/Projects/UOContent/Engines/ConPVP/TournamentRegistrar.cs b/Projects/UOContent/Engines/ConPVP/TournamentRegistrar.cs index 480ba2a12..8cc0d1c05 100644 --- a/Projects/UOContent/Engines/ConPVP/TournamentRegistrar.cs +++ b/Projects/UOContent/Engines/ConPVP/TournamentRegistrar.cs @@ -98,7 +98,7 @@ namespace Server.Engines.ConPVP { case 0: { - Tournament = reader.ReadItem() as TournamentController; + Tournament = reader.ReadEntity(); break; } } diff --git a/Projects/UOContent/Engines/ConPVP/TournamentSignupItem.cs b/Projects/UOContent/Engines/ConPVP/TournamentSignupItem.cs index 74002acb7..680e0f1ab 100644 --- a/Projects/UOContent/Engines/ConPVP/TournamentSignupItem.cs +++ b/Projects/UOContent/Engines/ConPVP/TournamentSignupItem.cs @@ -187,8 +187,8 @@ namespace Server.Engines.ConPVP { case 0: { - Tournament = reader.ReadItem() as TournamentController; - Registrar = reader.ReadMobile(); + Tournament = reader.ReadEntity(); + Registrar = reader.ReadEntity(); break; } } diff --git a/Projects/UOContent/Engines/ConPVP/Trophy.cs b/Projects/UOContent/Engines/ConPVP/Trophy.cs index c20400990..d4f8859e1 100644 --- a/Projects/UOContent/Engines/ConPVP/Trophy.cs +++ b/Projects/UOContent/Engines/ConPVP/Trophy.cs @@ -70,7 +70,7 @@ namespace Server.Items Title = reader.ReadString(); m_Rank = (TrophyRank)reader.ReadInt(); - Owner = reader.ReadMobile(); + Owner = reader.ReadEntity(); Date = reader.ReadDateTime(); if (version == 0) diff --git a/Projects/UOContent/Engines/Doom/GauntletSpawner.cs b/Projects/UOContent/Engines/Doom/GauntletSpawner.cs index 60c19d90e..bc87fe3c6 100644 --- a/Projects/UOContent/Engines/Doom/GauntletSpawner.cs +++ b/Projects/UOContent/Engines/Doom/GauntletSpawner.cs @@ -405,14 +405,14 @@ namespace Server.Engines.Doom writer.Write(RegionBounds); - writer.WriteItemList(Traps, false); + writer.Write(Traps); - writer.Write(Creatures, false); + writer.Write(Creatures); writer.Write(TypeName); - writer.WriteItem(Door); - writer.WriteItem(Addon); - writer.WriteItem(Sequence); + writer.Write(Door); + writer.Write(Addon); + writer.Write(Sequence); writer.Write((int)m_State); } @@ -428,7 +428,7 @@ namespace Server.Engines.Doom case 1: { RegionBounds = reader.ReadRect2D(); - Traps = reader.ReadStrongItemList(); + Traps = reader.ReadEntityList(); goto case 0; } @@ -440,12 +440,12 @@ namespace Server.Engines.Doom RegionBounds = new Rectangle2D(X - 40, Y - 40, 80, 80); } - Creatures = reader.ReadStrongMobileList(); + Creatures = reader.ReadEntityList(); TypeName = reader.ReadString(); - Door = reader.ReadItem(); - Addon = reader.ReadItem(); - Sequence = reader.ReadItem(); + Door = reader.ReadEntity(); + Addon = reader.ReadEntity(); + Sequence = reader.ReadEntity(); State = (GauntletSpawnerState)reader.ReadInt(); diff --git a/Projects/UOContent/Engines/Doom/LeverPuzzle/LeverPuzzleController.cs b/Projects/UOContent/Engines/Doom/LeverPuzzle/LeverPuzzleController.cs index 21a2ee0da..2d673d699 100644 --- a/Projects/UOContent/Engines/Doom/LeverPuzzle/LeverPuzzleController.cs +++ b/Projects/UOContent/Engines/Doom/LeverPuzzle/LeverPuzzleController.cs @@ -534,9 +534,16 @@ namespace Server.Engines.Doom { base.Serialize(writer); writer.Write(0); // version - writer.WriteItemList(m_Levers, true); - writer.WriteItemList(m_Statues, true); - writer.WriteItemList(m_Teles, true); + + m_Levers.Tidy(); + writer.Write(m_Levers); + + m_Statues.Tidy(); + writer.Write(m_Statues); + + m_Teles.Tidy(); + writer.Write(m_Teles); + writer.Write(m_Box); } @@ -546,11 +553,11 @@ namespace Server.Engines.Doom var version = reader.ReadInt(); - m_Levers = reader.ReadStrongItemList(); - m_Statues = reader.ReadStrongItemList(); - m_Teles = reader.ReadStrongItemList(); + m_Levers = reader.ReadEntityList(); + m_Statues = reader.ReadEntityList(); + m_Teles = reader.ReadEntityList(); - m_Box = reader.ReadItem() as LampRoomBox; + m_Box = reader.ReadEntity(); m_Tiles = new List(); for (var i = 4; i < 9; i++) diff --git a/Projects/UOContent/Engines/Doom/LeverPuzzle/LeverPuzzleItems.cs b/Projects/UOContent/Engines/Doom/LeverPuzzle/LeverPuzzleItems.cs index 3058073af..91eee421e 100644 --- a/Projects/UOContent/Engines/Doom/LeverPuzzle/LeverPuzzleItems.cs +++ b/Projects/UOContent/Engines/Doom/LeverPuzzle/LeverPuzzleItems.cs @@ -66,7 +66,7 @@ namespace Server.Engines.Doom { base.Deserialize(reader); var version = reader.ReadInt(); - m_Controller = reader.ReadItem() as LeverPuzzleController; + m_Controller = reader.ReadEntity(); } } @@ -104,7 +104,7 @@ namespace Server.Engines.Doom { base.Deserialize(reader); var version = reader.ReadInt(); - m_Controller = reader.ReadItem() as LeverPuzzleController; + m_Controller = reader.ReadEntity(); } } @@ -162,7 +162,7 @@ namespace Server.Engines.Doom base.Deserialize(reader); var version = reader.ReadInt(); Code = reader.ReadUShort(); - m_Controller = reader.ReadItem() as LeverPuzzleController; + m_Controller = reader.ReadEntity(); } } diff --git a/Projects/UOContent/Engines/Ethics/Core/Player.cs b/Projects/UOContent/Engines/Ethics/Core/Player.cs index 7aaf35538..2ab302521 100644 --- a/Projects/UOContent/Engines/Ethics/Core/Player.cs +++ b/Projects/UOContent/Engines/Ethics/Core/Player.cs @@ -32,13 +32,13 @@ namespace Server.Ethics { case 0: { - Mobile = reader.ReadMobile(); + Mobile = reader.ReadEntity(); Power = reader.ReadEncodedInt(); History = reader.ReadEncodedInt(); - Steed = reader.ReadMobile(); - Familiar = reader.ReadMobile(); + Steed = reader.ReadEntity(); + Familiar = reader.ReadEntity(); m_Shield = reader.ReadDeltaTime(); diff --git a/Projects/UOContent/Engines/Factions/Core/Election.cs b/Projects/UOContent/Engines/Factions/Core/Election.cs index e4c116a5b..292fb1439 100644 --- a/Projects/UOContent/Engines/Factions/Core/Election.cs +++ b/Projects/UOContent/Engines/Factions/Core/Election.cs @@ -426,7 +426,7 @@ namespace Server.Factions { case 0: { - From = reader.ReadMobile(); + From = reader.ReadEntity(); Address = Utility.Intern(reader.ReadIPAddress()); Time = reader.ReadDateTime(); @@ -498,7 +498,7 @@ namespace Server.Factions { case 1: { - Mobile = reader.ReadMobile(); + Mobile = reader.ReadEntity(); var count = reader.ReadEncodedInt(); Voters = new List(count); @@ -517,9 +517,9 @@ namespace Server.Factions } case 0: { - Mobile = reader.ReadMobile(); + Mobile = reader.ReadEntity(); - var mobs = reader.ReadStrongMobileList(); + var mobs = reader.ReadEntityList(); Voters = new List(mobs.Count); for (var i = 0; i < mobs.Count; ++i) diff --git a/Projects/UOContent/Engines/Factions/Core/FactionItem.cs b/Projects/UOContent/Engines/Factions/Core/FactionItem.cs index e8f9df85e..320b74a37 100644 --- a/Projects/UOContent/Engines/Factions/Core/FactionItem.cs +++ b/Projects/UOContent/Engines/Factions/Core/FactionItem.cs @@ -25,7 +25,7 @@ namespace Server.Factions { case 0: { - Item = reader.ReadItem(); + Item = reader.ReadEntity(); Expiration = reader.ReadDateTime(); break; } diff --git a/Projects/UOContent/Engines/Factions/Core/FactionState.cs b/Projects/UOContent/Engines/Factions/Core/FactionState.cs index 64ce14176..883772ace 100644 --- a/Projects/UOContent/Engines/Factions/Core/FactionState.cs +++ b/Projects/UOContent/Engines/Factions/Core/FactionState.cs @@ -61,7 +61,7 @@ namespace Server.Factions { m_Faction = Faction.ReadReference(reader); - m_Commander = reader.ReadMobile(); + m_Commander = reader.ReadEntity(); if (version < 5) { @@ -136,7 +136,7 @@ namespace Server.Factions for (var i = 0; i < factionTrapCount; ++i) { - if (reader.ReadItem() is BaseFactionTrap trap && !trap.CheckDecay()) + if (reader.ReadEntity() is BaseFactionTrap trap && !trap.CheckDecay()) { Traps.Add(trap); } diff --git a/Projects/UOContent/Engines/Factions/Core/PlayerState.cs b/Projects/UOContent/Engines/Factions/Core/PlayerState.cs index 32fe5f820..d39f868df 100644 --- a/Projects/UOContent/Engines/Factions/Core/PlayerState.cs +++ b/Projects/UOContent/Engines/Factions/Core/PlayerState.cs @@ -43,7 +43,7 @@ namespace Server.Factions } case 0: { - Mobile = reader.ReadMobile(); + Mobile = reader.ReadEntity(); m_KillPoints = reader.ReadEncodedInt(); m_MerchantTitle = (MerchantTitle)reader.ReadEncodedInt(); diff --git a/Projects/UOContent/Engines/Factions/Core/TownState.cs b/Projects/UOContent/Engines/Factions/Core/TownState.cs index 540b51281..27523a7f4 100644 --- a/Projects/UOContent/Engines/Factions/Core/TownState.cs +++ b/Projects/UOContent/Engines/Factions/Core/TownState.cs @@ -39,8 +39,8 @@ namespace Server.Factions Town = Town.ReadReference(reader); Owner = Faction.ReadReference(reader); - m_Sheriff = reader.ReadMobile(); - m_Finance = reader.ReadMobile(); + m_Sheriff = reader.ReadEntity(); + m_Finance = reader.ReadEntity(); Town.State = this; diff --git a/Projects/UOContent/Engines/Factions/Items/BaseMonolith.cs b/Projects/UOContent/Engines/Factions/Items/BaseMonolith.cs index 594864fba..2a2858c71 100644 --- a/Projects/UOContent/Engines/Factions/Items/BaseMonolith.cs +++ b/Projects/UOContent/Engines/Factions/Items/BaseMonolith.cs @@ -128,7 +128,7 @@ namespace Server.Factions { Town = Town.ReadReference(reader); Faction = Faction.ReadReference(reader); - m_Sigil = reader.ReadItem() as Sigil; + m_Sigil = reader.ReadEntity(); break; } } diff --git a/Projects/UOContent/Engines/Factions/Items/Sigil.cs b/Projects/UOContent/Engines/Factions/Items/Sigil.cs index 541c096a9..648848178 100644 --- a/Projects/UOContent/Engines/Factions/Items/Sigil.cs +++ b/Projects/UOContent/Engines/Factions/Items/Sigil.cs @@ -429,7 +429,7 @@ namespace Server.Factions m_Corrupted = Faction.ReadReference(reader); m_Corrupting = Faction.ReadReference(reader); - LastMonolith = reader.ReadItem() as BaseMonolith; + LastMonolith = reader.ReadEntity(); LastStolen = reader.ReadDateTime(); GraceStart = reader.ReadDateTime(); diff --git a/Projects/UOContent/Engines/Factions/Items/Traps/BaseFactionTrap.cs b/Projects/UOContent/Engines/Factions/Items/Traps/BaseFactionTrap.cs index 0d4b2c107..932216d7f 100644 --- a/Projects/UOContent/Engines/Factions/Items/Traps/BaseFactionTrap.cs +++ b/Projects/UOContent/Engines/Factions/Items/Traps/BaseFactionTrap.cs @@ -255,7 +255,7 @@ namespace Server.Factions var version = reader.ReadInt(); Faction = Faction.ReadReference(reader); - Placer = reader.ReadMobile(); + Placer = reader.ReadEntity(); TimeOfPlacement = reader.ReadDateTime(); if (Visible) diff --git a/Projects/UOContent/Engines/Factions/Mobiles/Guards/BaseFactionGuard.cs b/Projects/UOContent/Engines/Factions/Mobiles/Guards/BaseFactionGuard.cs index 29bcef7da..c7a46716d 100644 --- a/Projects/UOContent/Engines/Factions/Mobiles/Guards/BaseFactionGuard.cs +++ b/Projects/UOContent/Engines/Factions/Mobiles/Guards/BaseFactionGuard.cs @@ -522,7 +522,7 @@ namespace Server.Factions var version = reader.ReadInt(); - Rider = reader.ReadMobile(); + Rider = reader.ReadEntity(); if (Rider == null) { diff --git a/Projects/UOContent/Engines/Factions/Mobiles/Guards/Orders.cs b/Projects/UOContent/Engines/Factions/Mobiles/Guards/Orders.cs index 423f7b1a5..705d24dd1 100644 --- a/Projects/UOContent/Engines/Factions/Mobiles/Guards/Orders.cs +++ b/Projects/UOContent/Engines/Factions/Mobiles/Guards/Orders.cs @@ -74,7 +74,7 @@ namespace Server.Factions.AI { case 1: { - Follow = reader.ReadMobile(); + Follow = reader.ReadEntity(); goto case 0; } case 0: diff --git a/Projects/UOContent/Engines/Khaldun/PuzzleChest.cs b/Projects/UOContent/Engines/Khaldun/PuzzleChest.cs index 972ea9a09..06d859842 100644 --- a/Projects/UOContent/Engines/Khaldun/PuzzleChest.cs +++ b/Projects/UOContent/Engines/Khaldun/PuzzleChest.cs @@ -589,7 +589,7 @@ namespace Server.Items var guesses = reader.ReadEncodedInt(); for (var i = 0; i < guesses; i++) { - var m = reader.ReadMobile(); + var m = reader.ReadEntity(); var sol = new PuzzleChestSolutionAndTime(reader); m_Guesses[m] = sol; diff --git a/Projects/UOContent/Engines/Khaldun/RaiseSwitch.cs b/Projects/UOContent/Engines/Khaldun/RaiseSwitch.cs index d25b1c288..f407d160c 100644 --- a/Projects/UOContent/Engines/Khaldun/RaiseSwitch.cs +++ b/Projects/UOContent/Engines/Khaldun/RaiseSwitch.cs @@ -119,7 +119,7 @@ namespace Server.Items var version = reader.ReadEncodedInt(); - RaisableItem = (RaisableItem)reader.ReadItem(); + RaisableItem = (RaisableItem)reader.ReadEntity(); Reset(); } diff --git a/Projects/UOContent/Engines/MLQuests/MLQuestContext.cs b/Projects/UOContent/Engines/MLQuests/MLQuestContext.cs index 44c85e464..86b4e003b 100644 --- a/Projects/UOContent/Engines/MLQuests/MLQuestContext.cs +++ b/Projects/UOContent/Engines/MLQuests/MLQuestContext.cs @@ -31,7 +31,7 @@ namespace Server.Engines.MLQuests public MLQuestContext(IGenericReader reader, int version) { - Owner = reader.ReadMobile(); + Owner = reader.ReadEntity(); QuestInstances = new List(); m_DoneQuests = new List(); ChainOffers = new List(); @@ -234,7 +234,7 @@ namespace Server.Engines.MLQuests { // Version info is written in MLQuestPersistence.Serialize - writer.WriteMobile(Owner); + writer.Write(Owner); writer.Write(QuestInstances.Count); foreach (var instance in QuestInstances) diff --git a/Projects/UOContent/Engines/Quests/Dark Tides/Items/MaabusCoffin.cs b/Projects/UOContent/Engines/Quests/Dark Tides/Items/MaabusCoffin.cs index 0a200b47d..b23921f0a 100644 --- a/Projects/UOContent/Engines/Quests/Dark Tides/Items/MaabusCoffin.cs +++ b/Projects/UOContent/Engines/Quests/Dark Tides/Items/MaabusCoffin.cs @@ -100,7 +100,7 @@ namespace Server.Engines.Quests.Necro var version = reader.ReadInt(); - Maabus = reader.ReadMobile() as Maabus; + Maabus = reader.ReadEntity(); SpawnLocation = reader.ReadPoint3D(); Sleep(); diff --git a/Projects/UOContent/Engines/Quests/Dark Tides/Mobiles/SummonedPaladin.cs b/Projects/UOContent/Engines/Quests/Dark Tides/Mobiles/SummonedPaladin.cs index 826673792..03d4e3975 100644 --- a/Projects/UOContent/Engines/Quests/Dark Tides/Mobiles/SummonedPaladin.cs +++ b/Projects/UOContent/Engines/Quests/Dark Tides/Mobiles/SummonedPaladin.cs @@ -150,7 +150,7 @@ namespace Server.Engines.Quests.Necro var version = reader.ReadInt(); - m_Necromancer = reader.ReadMobile() as PlayerMobile; + m_Necromancer = reader.ReadEntity(); m_ToDelete = reader.ReadBool(); if (m_ToDelete) diff --git a/Projects/UOContent/Engines/Quests/Study of the Solen Hive/StudyOfSolenQuest.cs b/Projects/UOContent/Engines/Quests/Study of the Solen Hive/StudyOfSolenQuest.cs index fadba3651..80e36a439 100644 --- a/Projects/UOContent/Engines/Quests/Study of the Solen Hive/StudyOfSolenQuest.cs +++ b/Projects/UOContent/Engines/Quests/Study of the Solen Hive/StudyOfSolenQuest.cs @@ -41,7 +41,7 @@ namespace Server.Engines.Quests.Naturalist { var version = reader.ReadEncodedInt(); - Naturalist = (Naturalist)reader.ReadMobile(); + Naturalist = (Naturalist)reader.ReadEntity(); } public override void ChildSerialize(IGenericWriter writer) diff --git a/Projects/UOContent/Engines/Quests/The Summoning/Items/BellOfTheDead.cs b/Projects/UOContent/Engines/Quests/The Summoning/Items/BellOfTheDead.cs index 627766811..d0b27d40e 100644 --- a/Projects/UOContent/Engines/Quests/The Summoning/Items/BellOfTheDead.cs +++ b/Projects/UOContent/Engines/Quests/The Summoning/Items/BellOfTheDead.cs @@ -126,8 +126,8 @@ namespace Server.Engines.Quests.Doom var version = reader.ReadInt(); - Chyloth = reader.ReadMobile() as Chyloth; - Dragon = reader.ReadMobile() as SkeletalDragon; + Chyloth = reader.ReadEntity(); + Dragon = reader.ReadEntity(); Chyloth?.Delete(); } diff --git a/Projects/UOContent/Engines/Quests/The Summoning/Items/SummoningAltar.cs b/Projects/UOContent/Engines/Quests/The Summoning/Items/SummoningAltar.cs index 851875a17..6951e14a9 100644 --- a/Projects/UOContent/Engines/Quests/The Summoning/Items/SummoningAltar.cs +++ b/Projects/UOContent/Engines/Quests/The Summoning/Items/SummoningAltar.cs @@ -54,7 +54,7 @@ namespace Server.Engines.Quests.Doom var version = reader.ReadInt(); - m_Daemon = reader.ReadMobile() as BoneDemon; + m_Daemon = reader.ReadEntity(); CheckDaemon(); } diff --git a/Projects/UOContent/Engines/Quests/The Summoning/Objectives.cs b/Projects/UOContent/Engines/Quests/The Summoning/Objectives.cs index 9830f5dda..43f88f3e0 100644 --- a/Projects/UOContent/Engines/Quests/The Summoning/Objectives.cs +++ b/Projects/UOContent/Engines/Quests/The Summoning/Objectives.cs @@ -173,8 +173,8 @@ namespace Server.Engines.Quests.Doom { var version = reader.ReadEncodedInt(); - m_Daemon = reader.ReadMobile() as BoneDemon; - CorpseWithSkull = reader.ReadItem() as Corpse; + m_Daemon = reader.ReadEntity(); + CorpseWithSkull = reader.ReadEntity(); } public override void ChildSerialize(IGenericWriter writer) diff --git a/Projects/UOContent/Engines/Quests/The Summoning/TheSummoningQuest.cs b/Projects/UOContent/Engines/Quests/The Summoning/TheSummoningQuest.cs index 803d415b7..61e299481 100644 --- a/Projects/UOContent/Engines/Quests/The Summoning/TheSummoningQuest.cs +++ b/Projects/UOContent/Engines/Quests/The Summoning/TheSummoningQuest.cs @@ -105,7 +105,7 @@ namespace Server.Engines.Quests.Doom { var version = reader.ReadEncodedInt(); - Victoria = reader.ReadMobile() as Victoria; + Victoria = reader.ReadEntity(); WaitForSummon = reader.ReadBool(); } diff --git a/Projects/UOContent/Engines/Quests/Uzeraan Turmoil/Items/Cannon.cs b/Projects/UOContent/Engines/Quests/Uzeraan Turmoil/Items/Cannon.cs index 1efe69742..8d313ee62 100644 --- a/Projects/UOContent/Engines/Quests/Uzeraan Turmoil/Items/Cannon.cs +++ b/Projects/UOContent/Engines/Quests/Uzeraan Turmoil/Items/Cannon.cs @@ -133,7 +133,7 @@ namespace Server.Engines.Quests.Haven var version = reader.ReadInt(); CannonDirection = (CannonDirection)reader.ReadEncodedInt(); - Canoneer = (MilitiaCanoneer)reader.ReadMobile(); + Canoneer = (MilitiaCanoneer)reader.ReadEntity(); } } diff --git a/Projects/UOContent/Engines/Quests/Uzeraan Turmoil/Items/SchmendrickApprenticeCorpse.cs b/Projects/UOContent/Engines/Quests/Uzeraan Turmoil/Items/SchmendrickApprenticeCorpse.cs index 8dded19d2..9dfd386d6 100644 --- a/Projects/UOContent/Engines/Quests/Uzeraan Turmoil/Items/SchmendrickApprenticeCorpse.cs +++ b/Projects/UOContent/Engines/Quests/Uzeraan Turmoil/Items/SchmendrickApprenticeCorpse.cs @@ -205,7 +205,7 @@ namespace Server.Engines.Quests.Haven var version = reader.ReadInt(); - m_Lantern = (Lantern)reader.ReadItem(); + m_Lantern = (Lantern)reader.ReadEntity(); } } } diff --git a/Projects/UOContent/Engines/Quests/Uzeraan Turmoil/Objectives.cs b/Projects/UOContent/Engines/Quests/Uzeraan Turmoil/Objectives.cs index fa6020e81..d64f067f0 100644 --- a/Projects/UOContent/Engines/Quests/Uzeraan Turmoil/Objectives.cs +++ b/Projects/UOContent/Engines/Quests/Uzeraan Turmoil/Objectives.cs @@ -429,7 +429,7 @@ namespace Server.Engines.Quests.Haven { var version = reader.ReadEncodedInt(); - CorpseWithBone = (Container)reader.ReadItem(); + CorpseWithBone = (Container)reader.ReadEntity(); } public override void ChildSerialize(IGenericWriter writer) diff --git a/Projects/UOContent/Engines/Quests/Witch Apprentice/Objectives.cs b/Projects/UOContent/Engines/Quests/Witch Apprentice/Objectives.cs index 62690d110..f076ac917 100644 --- a/Projects/UOContent/Engines/Quests/Witch Apprentice/Objectives.cs +++ b/Projects/UOContent/Engines/Quests/Witch Apprentice/Objectives.cs @@ -90,7 +90,7 @@ namespace Server.Engines.Quests.Hag } case 0: { - Corpse = (Corpse)reader.ReadItem(); + Corpse = (Corpse)reader.ReadEntity(); break; } } diff --git a/Projects/UOContent/Engines/Spawners/BaseSpawner.cs b/Projects/UOContent/Engines/Spawners/BaseSpawner.cs index 44e370459..b497f6117 100644 --- a/Projects/UOContent/Engines/Spawners/BaseSpawner.cs +++ b/Projects/UOContent/Engines/Spawners/BaseSpawner.cs @@ -981,7 +981,7 @@ namespace Server.Engines.Spawners case 3: case 2: { - WayPoint = reader.ReadItem() as WayPoint; + WayPoint = reader.ReadEntity(); goto case 1; } @@ -1040,23 +1040,27 @@ namespace Server.Engines.Spawners for (var i = 0; i < count; ++i) { - if (reader.ReadEntity() is ISpawnable e) + var e = reader.ReadEntity(); + + if (e == null) { - if (e is BaseCreature creature) - { - creature.RemoveIfUntamed = true; - } + continue; + } - e.Spawner = this; + if (e is BaseCreature creature) + { + creature.RemoveIfUntamed = true; + } - for (var j = 0; j < Entries.Count; j++) + e.Spawner = this; + + for (var j = 0; j < Entries.Count; j++) + { + if (AssemblyHandler.FindFirstTypeForName(Entries[j].SpawnedName) == e.GetType()) { - if (AssemblyHandler.FindFirstTypeForName(Entries[j].SpawnedName) == e.GetType()) - { - Entries[j].Spawned.Add(e); - Spawned.Add(e, Entries[j]); - break; - } + Entries[j].Spawned.Add(e); + Spawned.Add(e, Entries[j]); + break; } } } diff --git a/Projects/UOContent/Engines/Spawners/SpawnerEntry.cs b/Projects/UOContent/Engines/Spawners/SpawnerEntry.cs index 27c659491..c3fd28170 100644 --- a/Projects/UOContent/Engines/Spawners/SpawnerEntry.cs +++ b/Projects/UOContent/Engines/Spawners/SpawnerEntry.cs @@ -32,7 +32,9 @@ namespace Server.Engines.Spawners for (var i = 0; i < count; ++i) { - if (reader.ReadEntity() is ISpawnable e) + var e = reader.ReadEntity(); + + if (e != null) { e.Spawner = parent; diff --git a/Projects/UOContent/Engines/VeteranRewards/Character Statue Maker/CharacterStatue.cs b/Projects/UOContent/Engines/VeteranRewards/Character Statue Maker/CharacterStatue.cs index 0fcbcb8c2..f5f816c68 100644 --- a/Projects/UOContent/Engines/VeteranRewards/Character Statue Maker/CharacterStatue.cs +++ b/Projects/UOContent/Engines/VeteranRewards/Character Statue Maker/CharacterStatue.cs @@ -233,10 +233,10 @@ namespace Server.Mobiles m_Pose = (StatuePose)reader.ReadInt(); m_Material = (StatueMaterial)reader.ReadInt(); - m_SculptedBy = reader.ReadMobile(); + m_SculptedBy = reader.ReadEntity(); SculptedOn = reader.ReadDateTime(); - Plinth = reader.ReadItem() as CharacterStatuePlinth; + Plinth = reader.ReadEntity(); IsRewardItem = reader.ReadBool(); InvalidatePose(); @@ -581,7 +581,7 @@ namespace Server.Mobiles m_Type = (StatueType)reader.ReadInt(); } - Statue = reader.ReadMobile() as CharacterStatue; + Statue = reader.ReadEntity(); m_IsRewardItem = reader.ReadBool(); } } diff --git a/Projects/UOContent/Engines/VeteranRewards/Character Statue Maker/CharacterStatuePlinth.cs b/Projects/UOContent/Engines/VeteranRewards/Character Statue Maker/CharacterStatuePlinth.cs index f5bbf953d..9209c47dd 100644 --- a/Projects/UOContent/Engines/VeteranRewards/Character Statue Maker/CharacterStatuePlinth.cs +++ b/Projects/UOContent/Engines/VeteranRewards/Character Statue Maker/CharacterStatuePlinth.cs @@ -97,7 +97,7 @@ namespace Server.Items var version = reader.ReadEncodedInt(); - m_Statue = reader.ReadMobile() as CharacterStatue; + m_Statue = reader.ReadEntity(); if (m_Statue?.SculptedBy == null || Map == Map.Internal) { diff --git a/Projects/UOContent/Holiday Stuff/Halloween/2012/Engines/PlayerZombies.cs b/Projects/UOContent/Holiday Stuff/Halloween/2012/Engines/PlayerZombies.cs index 6a02f9a29..16ec75256 100644 --- a/Projects/UOContent/Holiday Stuff/Halloween/2012/Engines/PlayerZombies.cs +++ b/Projects/UOContent/Holiday Stuff/Halloween/2012/Engines/PlayerZombies.cs @@ -262,7 +262,7 @@ namespace Server.Engines.Events base.Serialize(writer); writer.Write(0); - writer.WriteMobile(m_DeadPlayer); + writer.Write(m_DeadPlayer); } public override void Deserialize(IGenericReader reader) @@ -270,7 +270,7 @@ namespace Server.Engines.Events base.Deserialize(reader); var version = reader.ReadInt(); - m_DeadPlayer = reader.ReadMobile(); + m_DeadPlayer = reader.ReadEntity(); } } } diff --git a/Projects/UOContent/Items/Addons/AddonComponent.cs b/Projects/UOContent/Items/Addons/AddonComponent.cs index 036a3d2a6..42815cd2c 100644 --- a/Projects/UOContent/Items/Addons/AddonComponent.cs +++ b/Projects/UOContent/Items/Addons/AddonComponent.cs @@ -260,7 +260,7 @@ namespace Server.Items case 1: case 0: { - Addon = reader.ReadItem() as BaseAddon; + Addon = reader.ReadEntity(); Offset = reader.ReadPoint3D(); Addon?.OnComponentLoaded(this); diff --git a/Projects/UOContent/Items/Addons/AddonContainerComponent.cs b/Projects/UOContent/Items/Addons/AddonContainerComponent.cs index a89a62b1a..35a829cd4 100644 --- a/Projects/UOContent/Items/Addons/AddonContainerComponent.cs +++ b/Projects/UOContent/Items/Addons/AddonContainerComponent.cs @@ -112,7 +112,7 @@ namespace Server.Items var version = reader.ReadInt(); - Addon = reader.ReadItem() as BaseAddonContainer; + Addon = reader.ReadEntity(); Offset = reader.ReadPoint3D(); Addon?.OnComponentLoaded(this); diff --git a/Projects/UOContent/Items/Addons/BallotBox.cs b/Projects/UOContent/Items/Addons/BallotBox.cs index 97ad761ff..ff7e5232c 100644 --- a/Projects/UOContent/Items/Addons/BallotBox.cs +++ b/Projects/UOContent/Items/Addons/BallotBox.cs @@ -105,8 +105,11 @@ namespace Server.Items writer.Write(Topic[i]); } - writer.Write(Yes, true); - writer.Write(No, true); + Yes.Tidy(); + writer.Write(Yes); + + No.Tidy(); + writer.Write(No); } public override void Deserialize(IGenericReader reader) @@ -122,8 +125,8 @@ namespace Server.Items Topic[i] = reader.ReadString(); } - Yes = reader.ReadStrongMobileList(); - No = reader.ReadStrongMobileList(); + Yes = reader.ReadEntityList(); + No = reader.ReadEntityList(); } private class InternalGump : Gump diff --git a/Projects/UOContent/Items/Addons/BaseAddon.cs b/Projects/UOContent/Items/Addons/BaseAddon.cs index 1dbd19535..d0e232028 100644 --- a/Projects/UOContent/Items/Addons/BaseAddon.cs +++ b/Projects/UOContent/Items/Addons/BaseAddon.cs @@ -283,7 +283,7 @@ namespace Server.Items writer.Write(1); // version - writer.WriteItemList(Components); + writer.Write(Components); } public override void Deserialize(IGenericReader reader) @@ -297,7 +297,7 @@ namespace Server.Items case 1: case 0: { - Components = reader.ReadStrongItemList(); + Components = reader.ReadEntityList(); break; } } diff --git a/Projects/UOContent/Items/Addons/BaseAddonContainer.cs b/Projects/UOContent/Items/Addons/BaseAddonContainer.cs index aae2de2d0..f0a2385b4 100644 --- a/Projects/UOContent/Items/Addons/BaseAddonContainer.cs +++ b/Projects/UOContent/Items/Addons/BaseAddonContainer.cs @@ -192,7 +192,7 @@ namespace Server.Items writer.Write(0); // version - writer.WriteItemList(Components); + writer.Write(Components); writer.Write((int)m_Resource); } @@ -202,7 +202,7 @@ namespace Server.Items var version = reader.ReadInt(); - Components = reader.ReadStrongItemList(); + Components = reader.ReadEntityList(); m_Resource = (CraftResource)reader.ReadInt(); AddonComponent.ApplyLightTo(this); diff --git a/Projects/UOContent/Items/Addons/SHTeleporter.cs b/Projects/UOContent/Items/Addons/SHTeleporter.cs index 9b2553c8a..4b9e9fa28 100644 --- a/Projects/UOContent/Items/Addons/SHTeleporter.cs +++ b/Projects/UOContent/Items/Addons/SHTeleporter.cs @@ -115,7 +115,7 @@ namespace Server.Items var version = reader.ReadInt(); m_Active = reader.ReadBool(); - m_TeleDest = reader.ReadItem() as SHTeleComponent; + m_TeleDest = reader.ReadEntity(); TeleOffset = reader.ReadPoint3D(); } } @@ -302,10 +302,10 @@ namespace Server.Items External = reader.ReadBool(); - UpTele = (SHTeleComponent)reader.ReadItem(); - RightTele = (SHTeleComponent)reader.ReadItem(); - DownTele = (SHTeleComponent)reader.ReadItem(); - LeftTele = (SHTeleComponent)reader.ReadItem(); + UpTele = (SHTeleComponent)reader.ReadEntity(); + RightTele = (SHTeleComponent)reader.ReadEntity(); + DownTele = (SHTeleComponent)reader.ReadEntity(); + LeftTele = (SHTeleComponent)reader.ReadEntity(); } public class SHTeleporterCreator diff --git a/Projects/UOContent/Items/Addons/SolenAntHole.cs b/Projects/UOContent/Items/Addons/SolenAntHole.cs index 8347e228a..d9e928be9 100644 --- a/Projects/UOContent/Items/Addons/SolenAntHole.cs +++ b/Projects/UOContent/Items/Addons/SolenAntHole.cs @@ -179,7 +179,7 @@ namespace Server.Items writer.WriteEncodedInt(0); // version - writer.WriteMobileList(m_Spawned); + writer.Write(m_Spawned); } public override void Deserialize(IGenericReader reader) @@ -188,7 +188,7 @@ namespace Server.Items var version = reader.ReadEncodedInt(); - m_Spawned = reader.ReadStrongMobileList(); + m_Spawned = reader.ReadEntityList(); } } } diff --git a/Projects/UOContent/Items/Armor/BaseArmor.cs b/Projects/UOContent/Items/Armor/BaseArmor.cs index 5229dbd50..01178b99a 100644 --- a/Projects/UOContent/Items/Armor/BaseArmor.cs +++ b/Projects/UOContent/Items/Armor/BaseArmor.cs @@ -1233,7 +1233,7 @@ namespace Server.Items if (GetSaveFlag(flags, SaveFlag.Crafter)) { - m_Crafter = reader.ReadMobile(); + m_Crafter = reader.ReadEntity(); } if (GetSaveFlag(flags, SaveFlag.Quality)) @@ -1394,7 +1394,7 @@ namespace Server.Items m_ArmorBase = reader.ReadInt(); m_MaxHitPoints = reader.ReadInt(); m_HitPoints = reader.ReadInt(); - m_Crafter = reader.ReadMobile(); + m_Crafter = reader.ReadEntity(); m_Quality = (ArmorQuality)reader.ReadInt(); m_Durability = (ArmorDurabilityLevel)reader.ReadInt(); m_Protection = (ArmorProtectionLevel)reader.ReadInt(); diff --git a/Projects/UOContent/Items/Clothing/BaseClothing.cs b/Projects/UOContent/Items/Clothing/BaseClothing.cs index 17288493f..5fdec2182 100644 --- a/Projects/UOContent/Items/Clothing/BaseClothing.cs +++ b/Projects/UOContent/Items/Clothing/BaseClothing.cs @@ -1087,7 +1087,7 @@ namespace Server.Items if (GetSaveFlag(flags, SaveFlag.Crafter)) { - m_Crafter = reader.ReadMobile(); + m_Crafter = reader.ReadEntity(); } if (GetSaveFlag(flags, SaveFlag.Quality)) @@ -1137,7 +1137,7 @@ namespace Server.Items } case 1: { - m_Crafter = reader.ReadMobile(); + m_Crafter = reader.ReadEntity(); m_Quality = (ClothingQuality)reader.ReadInt(); break; } diff --git a/Projects/UOContent/Items/Construction/Ankhs.cs b/Projects/UOContent/Items/Construction/Ankhs.cs index f3620081f..714b84ae1 100644 --- a/Projects/UOContent/Items/Construction/Ankhs.cs +++ b/Projects/UOContent/Items/Construction/Ankhs.cs @@ -201,7 +201,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as InternalItem; + m_Item = reader.ReadEntity(); } private class InternalItem : Item @@ -292,7 +292,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as AnkhWest; + m_Item = reader.ReadEntity(); } } } @@ -388,7 +388,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as InternalItem; + m_Item = reader.ReadEntity(); } [TypeAlias("Server.Items.AnkhEast+InternalItem")] @@ -481,7 +481,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as AnkhNorth; + m_Item = reader.ReadEntity(); } } } diff --git a/Projects/UOContent/Items/Construction/Decorative/DecorativeWeapon.cs b/Projects/UOContent/Items/Construction/Decorative/DecorativeWeapon.cs index 8a48e59ad..16814d64a 100644 --- a/Projects/UOContent/Items/Construction/Decorative/DecorativeWeapon.cs +++ b/Projects/UOContent/Items/Construction/Decorative/DecorativeWeapon.cs @@ -154,7 +154,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as InternalItem; + m_Item = reader.ReadEntity(); } private class InternalItem : Item @@ -210,7 +210,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as DecorativeSwordNorth; + m_Item = reader.ReadEntity(); } } } @@ -269,7 +269,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as InternalItem; + m_Item = reader.ReadEntity(); } private class InternalItem : Item @@ -325,7 +325,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as DecorativeSwordWest; + m_Item = reader.ReadEntity(); } } } @@ -384,7 +384,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as InternalItem; + m_Item = reader.ReadEntity(); } private class InternalItem : Item @@ -440,7 +440,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as DecorativeDAxeNorth; + m_Item = reader.ReadEntity(); } } } @@ -499,7 +499,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as InternalItem; + m_Item = reader.ReadEntity(); } private class InternalItem : Item @@ -555,7 +555,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as DecorativeDAxeWest; + m_Item = reader.ReadEntity(); } } } diff --git a/Projects/UOContent/Items/Construction/Decorative/Tapestry.cs b/Projects/UOContent/Items/Construction/Decorative/Tapestry.cs index ac6168dd5..d9d474220 100644 --- a/Projects/UOContent/Items/Construction/Decorative/Tapestry.cs +++ b/Projects/UOContent/Items/Construction/Decorative/Tapestry.cs @@ -54,7 +54,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as InternalItem; + m_Item = reader.ReadEntity(); } private class InternalItem : Item @@ -110,7 +110,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as Tapestry1N; + m_Item = reader.ReadEntity(); } } } @@ -169,7 +169,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as InternalItem; + m_Item = reader.ReadEntity(); } private class InternalItem : Item @@ -225,7 +225,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as Tapestry2N; + m_Item = reader.ReadEntity(); } } } @@ -284,7 +284,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as InternalItem; + m_Item = reader.ReadEntity(); } private class InternalItem : Item @@ -340,7 +340,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as Tapestry2W; + m_Item = reader.ReadEntity(); } } } @@ -399,7 +399,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as InternalItem; + m_Item = reader.ReadEntity(); } private class InternalItem : Item @@ -455,7 +455,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as Tapestry3N; + m_Item = reader.ReadEntity(); } } } @@ -514,7 +514,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as InternalItem; + m_Item = reader.ReadEntity(); } private class InternalItem : Item @@ -570,7 +570,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as Tapestry3W; + m_Item = reader.ReadEntity(); } } } @@ -629,7 +629,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as InternalItem; + m_Item = reader.ReadEntity(); } private class InternalItem : Item @@ -685,7 +685,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as Tapestry4N; + m_Item = reader.ReadEntity(); } } } @@ -744,7 +744,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as InternalItem; + m_Item = reader.ReadEntity(); } private class InternalItem : Item @@ -800,7 +800,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as Tapestry4W; + m_Item = reader.ReadEntity(); } } } @@ -859,7 +859,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as InternalItem; + m_Item = reader.ReadEntity(); } private class InternalItem : Item @@ -915,7 +915,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as Tapestry5N; + m_Item = reader.ReadEntity(); } } } @@ -974,7 +974,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as InternalItem; + m_Item = reader.ReadEntity(); } private class InternalItem : Item @@ -1030,7 +1030,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as Tapestry5W; + m_Item = reader.ReadEntity(); } } } @@ -1089,7 +1089,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as InternalItem; + m_Item = reader.ReadEntity(); } private class InternalItem : Item @@ -1145,7 +1145,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as Tapestry6N; + m_Item = reader.ReadEntity(); } } } @@ -1204,7 +1204,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as InternalItem; + m_Item = reader.ReadEntity(); } private class InternalItem : Item @@ -1260,7 +1260,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as Tapestry6W; + m_Item = reader.ReadEntity(); } } } diff --git a/Projects/UOContent/Items/Construction/Doors/BaseDoor.cs b/Projects/UOContent/Items/Construction/Doors/BaseDoor.cs index 657e344b6..c9288c4a5 100644 --- a/Projects/UOContent/Items/Construction/Doors/BaseDoor.cs +++ b/Projects/UOContent/Items/Construction/Doors/BaseDoor.cs @@ -543,7 +543,7 @@ namespace Server.Items OpenedSound = reader.ReadInt(); ClosedSound = reader.ReadInt(); Offset = reader.ReadPoint3D(); - m_Link = reader.ReadItem() as BaseDoor; + m_Link = reader.ReadEntity(); m_Timer = new InternalTimer(this); diff --git a/Projects/UOContent/Items/Containers/Strongbox.cs b/Projects/UOContent/Items/Containers/Strongbox.cs index daa48ecbc..ca0c2eaea 100644 --- a/Projects/UOContent/Items/Containers/Strongbox.cs +++ b/Projects/UOContent/Items/Containers/Strongbox.cs @@ -70,8 +70,8 @@ namespace Server.Items { case 0: { - m_Owner = reader.ReadMobile(); - m_House = reader.ReadItem() as BaseHouse; + m_Owner = reader.ReadEntity(); + m_House = reader.ReadEntity(); break; } diff --git a/Projects/UOContent/Items/Containers/TreasureMapChest.cs b/Projects/UOContent/Items/Containers/TreasureMapChest.cs index 848c455d9..ff8a668f7 100644 --- a/Projects/UOContent/Items/Containers/TreasureMapChest.cs +++ b/Projects/UOContent/Items/Containers/TreasureMapChest.cs @@ -414,14 +414,16 @@ namespace Server.Items writer.Write(2); // version - writer.Write(Guardians, true); + Guardians.Tidy(); + writer.Write(Guardians); writer.Write(Temporary); writer.Write(Owner); writer.Write(Level); writer.WriteDeltaTime(DeleteTime); - writer.Write(m_Lifted, true); + m_Lifted.Tidy(); + writer.Write(m_Lifted); } public override void Deserialize(IGenericReader reader) @@ -434,14 +436,14 @@ namespace Server.Items { case 2: { - Guardians = reader.ReadStrongMobileList(); + Guardians = reader.ReadEntityList(); Temporary = reader.ReadBool(); goto case 1; } case 1: { - Owner = reader.ReadMobile(); + Owner = reader.ReadEntity(); goto case 0; } @@ -449,7 +451,7 @@ namespace Server.Items { Level = reader.ReadInt(); DeleteTime = reader.ReadDeltaTime(); - m_Lifted = reader.ReadStrongItemList(); + m_Lifted = reader.ReadEntityList(); if (version < 2) { diff --git a/Projects/UOContent/Items/Decoration Artifacts/StealableArtifactsSpawner.cs b/Projects/UOContent/Items/Decoration Artifacts/StealableArtifactsSpawner.cs index 9f8b39fa0..799099981 100644 --- a/Projects/UOContent/Items/Decoration Artifacts/StealableArtifactsSpawner.cs +++ b/Projects/UOContent/Items/Decoration Artifacts/StealableArtifactsSpawner.cs @@ -296,7 +296,7 @@ namespace Server.Items for (var i = 0; i < length; i++) { - var item = reader.ReadItem(); + var item = reader.ReadEntity(); var nextRespawn = reader.ReadDeltaTime(); if (i < m_Artifacts.Length) diff --git a/Projects/UOContent/Items/Deeds/CommodityDeed.cs b/Projects/UOContent/Items/Deeds/CommodityDeed.cs index 7d3e7e628..5133f2b3c 100644 --- a/Projects/UOContent/Items/Deeds/CommodityDeed.cs +++ b/Projects/UOContent/Items/Deeds/CommodityDeed.cs @@ -61,7 +61,7 @@ namespace Server.Items var version = reader.ReadInt(); - Commodity = reader.ReadItem(); + Commodity = reader.ReadEntity(); switch (version) { diff --git a/Projects/UOContent/Items/Deeds/DragonBardingDeed.cs b/Projects/UOContent/Items/Deeds/DragonBardingDeed.cs index 992389321..acd638366 100644 --- a/Projects/UOContent/Items/Deeds/DragonBardingDeed.cs +++ b/Projects/UOContent/Items/Deeds/DragonBardingDeed.cs @@ -162,7 +162,7 @@ namespace Server.Items case 0: { m_Exceptional = reader.ReadBool(); - m_Crafter = reader.ReadMobile(); + m_Crafter = reader.ReadEntity(); if (version < 1) { diff --git a/Projects/UOContent/Items/Deeds/NewPlayerTicket.cs b/Projects/UOContent/Items/Deeds/NewPlayerTicket.cs index f246133db..5db09f6ef 100644 --- a/Projects/UOContent/Items/Deeds/NewPlayerTicket.cs +++ b/Projects/UOContent/Items/Deeds/NewPlayerTicket.cs @@ -52,7 +52,7 @@ namespace Server.Items { case 0: { - Owner = reader.ReadMobile(); + Owner = reader.ReadEntity(); break; } } diff --git a/Projects/UOContent/Items/Food/Beverage.cs b/Projects/UOContent/Items/Food/Beverage.cs index dfae77cab..15e14a14d 100644 --- a/Projects/UOContent/Items/Food/Beverage.cs +++ b/Projects/UOContent/Items/Food/Beverage.cs @@ -1128,7 +1128,7 @@ namespace Server.Items { case 1: { - Poisoner = reader.ReadMobile(); + Poisoner = reader.ReadEntity(); goto case 0; } case 0: diff --git a/Projects/UOContent/Items/Food/Food.cs b/Projects/UOContent/Items/Food/Food.cs index f8bbf4747..9b26c085e 100644 --- a/Projects/UOContent/Items/Food/Food.cs +++ b/Projects/UOContent/Items/Food/Food.cs @@ -168,7 +168,7 @@ namespace Server.Items } case 4: { - Poisoner = reader.ReadMobile(); + Poisoner = reader.ReadEntity(); goto case 3; } } diff --git a/Projects/UOContent/Items/Games/BasePiece.cs b/Projects/UOContent/Items/Games/BasePiece.cs index 887623ea2..a1ef5347a 100644 --- a/Projects/UOContent/Items/Games/BasePiece.cs +++ b/Projects/UOContent/Items/Games/BasePiece.cs @@ -32,7 +32,7 @@ namespace Server.Items { case 0: { - Board = (BaseBoard)reader.ReadItem(); + Board = (BaseBoard)reader.ReadEntity(); if (Board == null || Parent == null) { diff --git a/Projects/UOContent/Items/Games/Mahjong/MahjongPlayers.cs b/Projects/UOContent/Items/Games/Mahjong/MahjongPlayers.cs index 172ffe56c..2f1e719a8 100644 --- a/Projects/UOContent/Items/Games/Mahjong/MahjongPlayers.cs +++ b/Projects/UOContent/Items/Games/Mahjong/MahjongPlayers.cs @@ -41,7 +41,7 @@ namespace Server.Engines.Mahjong for (var i = 0; i < seats; i++) { - m_Players[i] = reader.ReadMobile(); + m_Players[i] = reader.ReadEntity(); m_PublicHand[i] = reader.ReadBool(); m_Scores[i] = reader.ReadInt(); } diff --git a/Projects/UOContent/Items/Guilds/GuildTeleporter.cs b/Projects/UOContent/Items/Guilds/GuildTeleporter.cs index e6f7ddb58..8e2d0555f 100644 --- a/Projects/UOContent/Items/Guilds/GuildTeleporter.cs +++ b/Projects/UOContent/Items/Guilds/GuildTeleporter.cs @@ -44,7 +44,7 @@ namespace Server.Items { case 0: { - m_Stone = reader.ReadItem(); + m_Stone = reader.ReadEntity(); break; } diff --git a/Projects/UOContent/Items/Guilds/Guildstone.cs b/Projects/UOContent/Items/Guilds/Guildstone.cs index 458ca8c73..6786b3718 100644 --- a/Projects/UOContent/Items/Guilds/Guildstone.cs +++ b/Projects/UOContent/Items/Guilds/Guildstone.cs @@ -136,7 +136,7 @@ namespace Server.Items } case 1: { - Guild = reader.ReadGuild() as Guild; + Guild = reader.ReadEntity(); goto case 0; } @@ -372,7 +372,7 @@ namespace Server.Items m_GuildName = reader.ReadString(); m_GuildAbbrev = reader.ReadString(); - Guild = reader.ReadGuild() as Guild; + Guild = reader.ReadEntity(); break; } diff --git a/Projects/UOContent/Items/Maps/TreasureMap.cs b/Projects/UOContent/Items/Maps/TreasureMap.cs index b0c7587ea..36307af81 100644 --- a/Projects/UOContent/Items/Maps/TreasureMap.cs +++ b/Projects/UOContent/Items/Maps/TreasureMap.cs @@ -588,7 +588,7 @@ namespace Server.Items { case 1: { - m_CompletedBy = reader.ReadMobile(); + m_CompletedBy = reader.ReadEntity(); goto case 0; } @@ -596,7 +596,7 @@ namespace Server.Items { m_Level = reader.ReadInt(); m_Completed = reader.ReadBool(); - m_Decoder = reader.ReadMobile(); + m_Decoder = reader.ReadEntity(); m_Map = reader.ReadMap(); ChestLocation = reader.ReadPoint2D(); diff --git a/Projects/UOContent/Items/Misc/BulletinBoards.cs b/Projects/UOContent/Items/Misc/BulletinBoards.cs index 82d4dde5c..00ab7a014 100644 --- a/Projects/UOContent/Items/Misc/BulletinBoards.cs +++ b/Projects/UOContent/Items/Misc/BulletinBoards.cs @@ -462,12 +462,12 @@ namespace Server.Items case 1: case 0: { - Poster = reader.ReadMobile(); + Poster = reader.ReadEntity(); Subject = reader.ReadString(); Time = reader.ReadDateTime(); LastPostTime = reader.ReadDateTime(); var hasThread = reader.ReadBool(); - Thread = reader.ReadItem() as BulletinMessage; + Thread = reader.ReadEntity(); PostedName = reader.ReadString(); PostedBody = reader.ReadInt(); PostedHue = reader.ReadInt(); diff --git a/Projects/UOContent/Items/Misc/CommunicationCrystals.cs b/Projects/UOContent/Items/Misc/CommunicationCrystals.cs index 98a3247f8..a8605de49 100644 --- a/Projects/UOContent/Items/Misc/CommunicationCrystals.cs +++ b/Projects/UOContent/Items/Misc/CommunicationCrystals.cs @@ -171,7 +171,7 @@ namespace Server.Items writer.WriteEncodedInt(0); // version writer.WriteEncodedInt(m_Charges); - writer.WriteItemList(Receivers); + writer.Write(Receivers); } public override void Deserialize(IGenericReader reader) @@ -181,7 +181,7 @@ namespace Server.Items var version = reader.ReadEncodedInt(); m_Charges = reader.ReadEncodedInt(); - Receivers = reader.ReadStrongItemList(); + Receivers = reader.ReadEntityList(); } private class InternalTarget : Target @@ -394,7 +394,7 @@ namespace Server.Items writer.WriteEncodedInt(0); // version - writer.WriteItem(m_Sender); + writer.Write(m_Sender); } public override void Deserialize(IGenericReader reader) @@ -403,7 +403,7 @@ namespace Server.Items var version = reader.ReadEncodedInt(); - m_Sender = reader.ReadItem(); + m_Sender = reader.ReadEntity(); } private class InternalTarget : Target diff --git a/Projects/UOContent/Items/Misc/Corpses/Corpse.cs b/Projects/UOContent/Items/Misc/Corpses/Corpse.cs index 4a37dee19..94df03186 100644 --- a/Projects/UOContent/Items/Misc/Corpses/Corpse.cs +++ b/Projects/UOContent/Items/Misc/Corpses/Corpse.cs @@ -628,7 +628,7 @@ namespace Server.Items { if (reader.ReadBool()) { - RestoreEquip = reader.ReadStrongItemList(); + RestoreEquip = reader.ReadEntityList(); } goto case 11; @@ -644,7 +644,7 @@ namespace Server.Items for (var i = 0; i < count; ++i) { - var item = reader.ReadItem(); + var item = reader.ReadEntity(); if (reader.ReadBool()) { @@ -661,11 +661,11 @@ namespace Server.Items BeginDecay(reader.ReadDeltaTime() - DateTime.UtcNow); } - Looters = reader.ReadStrongMobileList(); - Killer = reader.ReadMobile(); + Looters = reader.ReadEntityList(); + Killer = reader.ReadEntity(); - Aggressors = reader.ReadStrongMobileList(); - Owner = reader.ReadMobile(); + Aggressors = reader.ReadEntityList(); + Owner = reader.ReadEntity(); m_CorpseName = reader.ReadString(); @@ -673,7 +673,7 @@ namespace Server.Items reader.ReadInt(); // guild reserve Kills = reader.ReadInt(); - EquipItems = reader.ReadStrongItemList(); + EquipItems = reader.ReadEntityList(); break; } case 10: @@ -688,7 +688,7 @@ namespace Server.Items for (var i = 0; i < count; ++i) { - var item = reader.ReadItem(); + var item = reader.ReadEntity(); if (reader.ReadBool()) { @@ -719,8 +719,8 @@ namespace Server.Items } case 6: { - Looters = reader.ReadStrongMobileList(); - Killer = reader.ReadMobile(); + Looters = reader.ReadEntityList(); + Killer = reader.ReadEntity(); goto case 5; } @@ -732,13 +732,13 @@ namespace Server.Items } case 4: { - Aggressors = reader.ReadStrongMobileList(); + Aggressors = reader.ReadEntityList(); goto case 3; } case 3: { - Owner = reader.ReadMobile(); + Owner = reader.ReadEntity(); goto case 2; } @@ -781,7 +781,7 @@ namespace Server.Items Kills = reader.ReadInt(); SetFlag(CorpseFlag.Criminal, reader.ReadBool()); - EquipItems = reader.ReadStrongItemList(); + EquipItems = reader.ReadEntityList(); break; } diff --git a/Projects/UOContent/Items/Misc/EffectController.cs b/Projects/UOContent/Items/Misc/EffectController.cs index 27f496dae..a8358b1ee 100644 --- a/Projects/UOContent/Items/Misc/EffectController.cs +++ b/Projects/UOContent/Items/Misc/EffectController.cs @@ -245,7 +245,7 @@ namespace Server.Items m_Source = ReadEntity(reader); m_Target = ReadEntity(reader); - Sequence = reader.ReadItem() as EffectController; + Sequence = reader.ReadEntity(); FixedDirection = reader.ReadBool(); Explodes = reader.ReadBool(); diff --git a/Projects/UOContent/Items/Misc/Key.cs b/Projects/UOContent/Items/Misc/Key.cs index 058f4f49d..758f8c1ad 100644 --- a/Projects/UOContent/Items/Misc/Key.cs +++ b/Projects/UOContent/Items/Misc/Key.cs @@ -172,7 +172,7 @@ namespace Server.Items } case 1: { - Link = reader.ReadItem(); + Link = reader.ReadEntity(); goto case 0; } diff --git a/Projects/UOContent/Items/Misc/KeyRing.cs b/Projects/UOContent/Items/Misc/KeyRing.cs index eaf21416b..3ea0e1502 100644 --- a/Projects/UOContent/Items/Misc/KeyRing.cs +++ b/Projects/UOContent/Items/Misc/KeyRing.cs @@ -155,7 +155,7 @@ namespace Server.Items writer.WriteEncodedInt(0); // version - writer.WriteItemList(Keys); + writer.Write(Keys); } public override void Deserialize(IGenericReader reader) @@ -164,7 +164,7 @@ namespace Server.Items var version = reader.ReadEncodedInt(); - Keys = reader.ReadStrongItemList(); + Keys = reader.ReadEntityList(); } private class InternalTarget : Target diff --git a/Projects/UOContent/Items/Misc/PlayerBulletinBoards.cs b/Projects/UOContent/Items/Misc/PlayerBulletinBoards.cs index e5404814a..28da6ff66 100644 --- a/Projects/UOContent/Items/Misc/PlayerBulletinBoards.cs +++ b/Projects/UOContent/Items/Misc/PlayerBulletinBoards.cs @@ -347,7 +347,7 @@ namespace Server.Items case 0: { Time = reader.ReadDateTime(); - Poster = reader.ReadMobile(); + Poster = reader.ReadEntity(); Message = reader.ReadString(); break; } diff --git a/Projects/UOContent/Items/Misc/Teleporter.cs b/Projects/UOContent/Items/Misc/Teleporter.cs index 9ed22b319..778811f00 100644 --- a/Projects/UOContent/Items/Misc/Teleporter.cs +++ b/Projects/UOContent/Items/Misc/Teleporter.cs @@ -930,7 +930,7 @@ namespace Server.Items for (var i = 0; i < count; ++i) { - var m = reader.ReadMobile(); + var m = reader.ReadEntity(); var end = reader.ReadDateTime(); StartTimer(m, end - DateTime.UtcNow); @@ -973,7 +973,7 @@ namespace Server.Items writer.Write(0); // version - writer.WriteItem(Teleporter); + writer.Write(Teleporter); } public override void Deserialize(IGenericReader reader) @@ -982,7 +982,7 @@ namespace Server.Items var version = reader.ReadInt(); - Teleporter = reader.ReadItem(); + Teleporter = reader.ReadEntity(); } } diff --git a/Projects/UOContent/Items/Misc/Waypoint.cs b/Projects/UOContent/Items/Misc/Waypoint.cs index eaff5f78d..a7a222fb2 100644 --- a/Projects/UOContent/Items/Misc/Waypoint.cs +++ b/Projects/UOContent/Items/Misc/Waypoint.cs @@ -83,7 +83,7 @@ namespace Server.Items { case 0: { - m_Next = reader.ReadItem() as WayPoint; + m_Next = reader.ReadEntity(); break; } } diff --git a/Projects/UOContent/Items/Quivers/BaseQuiver.cs b/Projects/UOContent/Items/Quivers/BaseQuiver.cs index 5ce8ee470..1d57f53a1 100644 --- a/Projects/UOContent/Items/Quivers/BaseQuiver.cs +++ b/Projects/UOContent/Items/Quivers/BaseQuiver.cs @@ -532,7 +532,7 @@ namespace Server.Items if (GetSaveFlag(flags, SaveFlag.Crafter)) { - m_Crafter = reader.ReadMobile(); + m_Crafter = reader.ReadEntity(); } if (GetSaveFlag(flags, SaveFlag.Quality)) diff --git a/Projects/UOContent/Items/Resources/Fishing/BigFish.cs b/Projects/UOContent/Items/Resources/Fishing/BigFish.cs index ec48b32ec..7ac00c89b 100644 --- a/Projects/UOContent/Items/Resources/Fishing/BigFish.cs +++ b/Projects/UOContent/Items/Resources/Fishing/BigFish.cs @@ -72,7 +72,7 @@ namespace Server.Items { case 1: { - m_Fisher = reader.ReadMobile(); + m_Fisher = reader.ReadEntity(); break; } case 0: diff --git a/Projects/UOContent/Items/Skill Items/Blacksmith Items/Misc/LargeForge.cs b/Projects/UOContent/Items/Skill Items/Blacksmith Items/Misc/LargeForge.cs index 5bb6ea9fb..7c7cc5c35 100644 --- a/Projects/UOContent/Items/Skill Items/Blacksmith Items/Misc/LargeForge.cs +++ b/Projects/UOContent/Items/Skill Items/Blacksmith Items/Misc/LargeForge.cs @@ -71,8 +71,8 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as InternalItem; - m_Item2 = reader.ReadItem() as InternalItem2; + m_Item = reader.ReadEntity(); + m_Item2 = reader.ReadEntity(); } [Forge] @@ -129,7 +129,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as LargeForgeWest; + m_Item = reader.ReadEntity(); } } @@ -187,7 +187,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as LargeForgeWest; + m_Item = reader.ReadEntity(); } } } @@ -261,8 +261,8 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as InternalItem; - m_Item2 = reader.ReadItem() as InternalItem2; + m_Item = reader.ReadEntity(); + m_Item2 = reader.ReadEntity(); } [Forge] @@ -319,7 +319,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as LargeForgeEast; + m_Item = reader.ReadEntity(); } } @@ -377,7 +377,7 @@ namespace Server.Items var version = reader.ReadInt(); - m_Item = reader.ReadItem() as LargeForgeEast; + m_Item = reader.ReadEntity(); } } } diff --git a/Projects/UOContent/Items/Skill Items/Carpenter Items/TaxidermyKit.cs b/Projects/UOContent/Items/Skill Items/Carpenter Items/TaxidermyKit.cs index f1a66fbcf..3679c5876 100644 --- a/Projects/UOContent/Items/Skill Items/Carpenter Items/TaxidermyKit.cs +++ b/Projects/UOContent/Items/Skill Items/Carpenter Items/TaxidermyKit.cs @@ -293,7 +293,7 @@ namespace Server.Items { case 1: { - m_Hunter = reader.ReadMobile(); + m_Hunter = reader.ReadEntity(); m_AnimalWeight = reader.ReadInt(); goto case 0; } @@ -468,7 +468,7 @@ namespace Server.Items { case 1: { - m_Hunter = reader.ReadMobile(); + m_Hunter = reader.ReadEntity(); m_AnimalWeight = reader.ReadInt(); goto case 0; } diff --git a/Projects/UOContent/Items/Skill Items/Harvest Tools/BaseHarvestTool.cs b/Projects/UOContent/Items/Skill Items/Harvest Tools/BaseHarvestTool.cs index 4456dac5f..264147b2c 100644 --- a/Projects/UOContent/Items/Skill Items/Harvest Tools/BaseHarvestTool.cs +++ b/Projects/UOContent/Items/Skill Items/Harvest Tools/BaseHarvestTool.cs @@ -203,7 +203,7 @@ namespace Server.Items { case 1: { - m_Crafter = reader.ReadMobile(); + m_Crafter = reader.ReadEntity(); m_Quality = (ToolQuality)reader.ReadInt(); goto case 0; } diff --git a/Projects/UOContent/Items/Skill Items/Magical/Misc/RecallRune.cs b/Projects/UOContent/Items/Skill Items/Magical/Misc/RecallRune.cs index 0224ebaa3..d7d6d56fb 100644 --- a/Projects/UOContent/Items/Skill Items/Magical/Misc/RecallRune.cs +++ b/Projects/UOContent/Items/Skill Items/Magical/Misc/RecallRune.cs @@ -119,7 +119,7 @@ namespace Server.Items { case 1: { - m_House = reader.ReadItem() as BaseHouse; + m_House = reader.ReadEntity(); goto case 0; } case 0: diff --git a/Projects/UOContent/Items/Skill Items/Magical/Potions/Conflagration Potions/BaseConflagrationPotion.cs b/Projects/UOContent/Items/Skill Items/Magical/Potions/Conflagration Potions/BaseConflagrationPotion.cs index 4efa8af73..80b1b9a4b 100644 --- a/Projects/UOContent/Items/Skill Items/Magical/Potions/Conflagration Potions/BaseConflagrationPotion.cs +++ b/Projects/UOContent/Items/Skill Items/Magical/Potions/Conflagration Potions/BaseConflagrationPotion.cs @@ -249,7 +249,7 @@ namespace Server.Items var version = reader.ReadInt(); - From = reader.ReadMobile(); + From = reader.ReadEntity(); m_End = reader.ReadDateTime(); m_MinDamage = reader.ReadInt(); m_MaxDamage = reader.ReadInt(); diff --git a/Projects/UOContent/Items/Skill Items/Magical/Runebook.cs b/Projects/UOContent/Items/Skill Items/Magical/Runebook.cs index 385069521..5c50b4f38 100644 --- a/Projects/UOContent/Items/Skill Items/Magical/Runebook.cs +++ b/Projects/UOContent/Items/Skill Items/Magical/Runebook.cs @@ -201,7 +201,7 @@ namespace Server.Items } case 2: { - m_Crafter = reader.ReadMobile(); + m_Crafter = reader.ReadEntity(); goto case 1; } case 1: @@ -476,7 +476,7 @@ namespace Server.Items { case 1: { - House = reader.ReadItem() as BaseHouse; + House = reader.ReadEntity(); goto case 0; } case 0: diff --git a/Projects/UOContent/Items/Skill Items/Magical/Spellbook.cs b/Projects/UOContent/Items/Skill Items/Magical/Spellbook.cs index fce7f0651..127971fd8 100644 --- a/Projects/UOContent/Items/Skill Items/Magical/Spellbook.cs +++ b/Projects/UOContent/Items/Skill Items/Magical/Spellbook.cs @@ -929,7 +929,7 @@ namespace Server.Items } case 3: { - m_Crafter = reader.ReadMobile(); + m_Crafter = reader.ReadEntity(); goto case 2; } case 2: diff --git a/Projects/UOContent/Items/Skill Items/Misc/RepairDeed.cs b/Projects/UOContent/Items/Skill Items/Misc/RepairDeed.cs index 9eaae4465..cf99c201c 100644 --- a/Projects/UOContent/Items/Skill Items/Misc/RepairDeed.cs +++ b/Projects/UOContent/Items/Skill Items/Misc/RepairDeed.cs @@ -218,7 +218,7 @@ namespace Server.Items { m_Skill = (RepairSkillType)reader.ReadInt(); m_SkillLevel = reader.ReadDouble(); - m_Crafter = reader.ReadMobile(); + m_Crafter = reader.ReadEntity(); break; } diff --git a/Projects/UOContent/Items/Skill Items/Musical Instruments/BaseInstrument.cs b/Projects/UOContent/Items/Skill Items/Musical Instruments/BaseInstrument.cs index 901d38c39..63e8c72c4 100644 --- a/Projects/UOContent/Items/Skill Items/Musical Instruments/BaseInstrument.cs +++ b/Projects/UOContent/Items/Skill Items/Musical Instruments/BaseInstrument.cs @@ -517,7 +517,7 @@ namespace Server.Items } case 2: { - m_Crafter = reader.ReadMobile(); + m_Crafter = reader.ReadEntity(); m_Quality = (InstrumentQuality)reader.ReadEncodedInt(); m_Slayer = (SlayerName)reader.ReadEncodedInt(); @@ -532,7 +532,7 @@ namespace Server.Items } case 1: { - m_Crafter = reader.ReadMobile(); + m_Crafter = reader.ReadEntity(); m_Quality = (InstrumentQuality)reader.ReadEncodedInt(); m_Slayer = (SlayerName)reader.ReadEncodedInt(); diff --git a/Projects/UOContent/Items/Skill Items/Thief/DisguisePersistance.cs b/Projects/UOContent/Items/Skill Items/Thief/DisguisePersistance.cs index f555a1fd4..9fa8f8b36 100644 --- a/Projects/UOContent/Items/Skill Items/Thief/DisguisePersistance.cs +++ b/Projects/UOContent/Items/Skill Items/Thief/DisguisePersistance.cs @@ -58,7 +58,7 @@ namespace Server.Items for (var i = 0; i < count; ++i) { - var m = reader.ReadMobile(); + var m = reader.ReadEntity(); DisguiseTimers.CreateTimer(m, reader.ReadTimeSpan()); m.NameMod = reader.ReadString(); } diff --git a/Projects/UOContent/Items/Skill Items/Tools/BaseTool.cs b/Projects/UOContent/Items/Skill Items/Tools/BaseTool.cs index fe5eabbff..271899878 100644 --- a/Projects/UOContent/Items/Skill Items/Tools/BaseTool.cs +++ b/Projects/UOContent/Items/Skill Items/Tools/BaseTool.cs @@ -204,7 +204,7 @@ namespace Server.Items { case 1: { - m_Crafter = reader.ReadMobile(); + m_Crafter = reader.ReadEntity(); m_Quality = (ToolQuality)reader.ReadInt(); goto case 0; } diff --git a/Projects/UOContent/Items/Special/Holiday/Christmas/HolidayTree.cs b/Projects/UOContent/Items/Special/Holiday/Christmas/HolidayTree.cs index bf58d7e48..5619af911 100644 --- a/Projects/UOContent/Items/Special/Holiday/Christmas/HolidayTree.cs +++ b/Projects/UOContent/Items/Special/Holiday/Christmas/HolidayTree.cs @@ -151,7 +151,7 @@ namespace Server.Items { case 1: { - Placer = reader.ReadMobile(); + Placer = reader.ReadEntity(); goto case 0; } @@ -163,7 +163,7 @@ namespace Server.Items for (var i = 0; i < count; ++i) { - var item = reader.ReadItem(); + var item = reader.ReadEntity(); if (item != null) { @@ -288,7 +288,7 @@ namespace Server.Items { case 0: { - m_Tree = reader.ReadItem() as HolidayTree; + m_Tree = reader.ReadEntity(); if (m_Tree == null) { diff --git a/Projects/UOContent/Items/Special/House Raffle/HouseRaffleDeed.cs b/Projects/UOContent/Items/Special/House Raffle/HouseRaffleDeed.cs index c69b1f665..49c51065d 100644 --- a/Projects/UOContent/Items/Special/House Raffle/HouseRaffleDeed.cs +++ b/Projects/UOContent/Items/Special/House Raffle/HouseRaffleDeed.cs @@ -148,7 +148,7 @@ namespace Server.Items { case 1: { - m_Stone = reader.ReadItem(); + m_Stone = reader.ReadEntity(); goto case 0; } @@ -156,7 +156,7 @@ namespace Server.Items { m_PlotLocation = reader.ReadPoint3D(); m_Facet = reader.ReadMap(); - m_AwardedTo = reader.ReadMobile(); + m_AwardedTo = reader.ReadEntity(); break; } diff --git a/Projects/UOContent/Items/Special/House Raffle/HouseRaffleStone.cs b/Projects/UOContent/Items/Special/House Raffle/HouseRaffleStone.cs index 9d60418fe..34be83a1b 100644 --- a/Projects/UOContent/Items/Special/House Raffle/HouseRaffleStone.cs +++ b/Projects/UOContent/Items/Special/House Raffle/HouseRaffleStone.cs @@ -30,7 +30,7 @@ namespace Server.Items case 1: case 0: { - From = reader.ReadMobile(); + From = reader.ReadEntity(); Address = Utility.Intern(reader.ReadIPAddress()); Date = reader.ReadDateTime(); @@ -640,7 +640,7 @@ namespace Server.Items } case 1: { - Deed = reader.ReadItem(); + Deed = reader.ReadEntity(); goto case 0; } @@ -651,7 +651,7 @@ namespace Server.Items m_Bounds = reader.ReadRect2D(); m_Facet = reader.ReadMap(); - m_Winner = reader.ReadMobile(); + m_Winner = reader.ReadEntity(); m_TicketPrice = reader.ReadInt(); m_Started = reader.ReadDateTime(); diff --git a/Projects/UOContent/Items/Special/Mutation Core/PlagueBeastInnard.cs b/Projects/UOContent/Items/Special/Mutation Core/PlagueBeastInnard.cs index 0e0e339e8..6cd588a99 100644 --- a/Projects/UOContent/Items/Special/Mutation Core/PlagueBeastInnard.cs +++ b/Projects/UOContent/Items/Special/Mutation Core/PlagueBeastInnard.cs @@ -151,7 +151,7 @@ namespace Server.Items writer.WriteEncodedInt(0); // version - writer.WriteItem(Organ); + writer.Write(Organ); } public override void Deserialize(IGenericReader reader) @@ -160,7 +160,7 @@ namespace Server.Items var version = reader.ReadEncodedInt(); - Organ = reader.ReadItem(); + Organ = reader.ReadEntity(); } } } diff --git a/Projects/UOContent/Items/Special/Mutation Core/PlagueBeastOrgans.cs b/Projects/UOContent/Items/Special/Mutation Core/PlagueBeastOrgans.cs index e4c1b3f72..e4f0bb8eb 100644 --- a/Projects/UOContent/Items/Special/Mutation Core/PlagueBeastOrgans.cs +++ b/Projects/UOContent/Items/Special/Mutation Core/PlagueBeastOrgans.cs @@ -90,7 +90,7 @@ namespace Server.Items writer.WriteEncodedInt(0); // version - writer.WriteItemList(Components); + writer.Write(Components); writer.Write(BrainHue); writer.Write(Opened); } @@ -101,7 +101,7 @@ namespace Server.Items var version = reader.ReadEncodedInt(); - Components = reader.ReadStrongItemList(); + Components = reader.ReadEntityList(); BrainHue = reader.ReadInt(); Opened = reader.ReadBool(); } @@ -466,7 +466,7 @@ namespace Server.Items var version = reader.ReadEncodedInt(); - m_Gland = reader.ReadItem(); + m_Gland = reader.ReadEntity(); } } diff --git a/Projects/UOContent/Items/Special/Solen Items/BallOfSummoning.cs b/Projects/UOContent/Items/Special/Solen Items/BallOfSummoning.cs index 85e82e57e..19f3e30a6 100644 --- a/Projects/UOContent/Items/Special/Solen Items/BallOfSummoning.cs +++ b/Projects/UOContent/Items/Special/Solen Items/BallOfSummoning.cs @@ -358,7 +358,7 @@ namespace Server.Items case 0: { m_Charges = Math.Min(reader.ReadEncodedInt(), MaxCharges); - Pet = (BaseCreature)reader.ReadMobile(); + Pet = (BaseCreature)reader.ReadEntity(); PetName = reader.ReadString(); break; } diff --git a/Projects/UOContent/Items/Special/Solen Items/BraceletOfBinding.cs b/Projects/UOContent/Items/Special/Solen Items/BraceletOfBinding.cs index 647925585..3fdf40e66 100644 --- a/Projects/UOContent/Items/Special/Solen Items/BraceletOfBinding.cs +++ b/Projects/UOContent/Items/Special/Solen Items/BraceletOfBinding.cs @@ -361,7 +361,7 @@ namespace Server.Items { m_Charges = Math.Min(reader.ReadEncodedInt(), MaxCharges); m_Inscription = reader.ReadString(); - Bound = (BraceletOfBinding)reader.ReadItem(); + Bound = (BraceletOfBinding)reader.ReadEntity(); break; } } diff --git a/Projects/UOContent/Items/Special/Veteran Rewards/Brazier.cs b/Projects/UOContent/Items/Special/Veteran Rewards/Brazier.cs index ebfe6b9c8..ad6232377 100644 --- a/Projects/UOContent/Items/Special/Veteran Rewards/Brazier.cs +++ b/Projects/UOContent/Items/Special/Veteran Rewards/Brazier.cs @@ -134,7 +134,7 @@ namespace Server.Items var version = reader.ReadEncodedInt(); m_IsRewardItem = reader.ReadBool(); - m_Fire = reader.ReadItem(); + m_Fire = reader.ReadEntity(); } } diff --git a/Projects/UOContent/Items/Talismans/BaseTalisman.cs b/Projects/UOContent/Items/Talismans/BaseTalisman.cs index 4fdb4696d..8a7ba7ea8 100644 --- a/Projects/UOContent/Items/Talismans/BaseTalisman.cs +++ b/Projects/UOContent/Items/Talismans/BaseTalisman.cs @@ -909,7 +909,7 @@ namespace Server.Items // Backward compatibility if (GetSaveFlag(flags, SaveFlag.Owner)) { - BlessedFor = reader.ReadMobile(); + BlessedFor = reader.ReadEntity(); } m_Protection = GetSaveFlag(flags, SaveFlag.Protection) diff --git a/Projects/UOContent/Items/Traps/FlameSpurtTrap.cs b/Projects/UOContent/Items/Traps/FlameSpurtTrap.cs index 202ac4bdc..fdc61ea71 100644 --- a/Projects/UOContent/Items/Traps/FlameSpurtTrap.cs +++ b/Projects/UOContent/Items/Traps/FlameSpurtTrap.cs @@ -162,7 +162,7 @@ namespace Server.Items { case 0: { - var item = reader.ReadItem(); + var item = reader.ReadEntity(); item?.Delete(); diff --git a/Projects/UOContent/Items/Weapons/BaseWeapon.cs b/Projects/UOContent/Items/Weapons/BaseWeapon.cs index aa5849f84..48eef5e94 100644 --- a/Projects/UOContent/Items/Weapons/BaseWeapon.cs +++ b/Projects/UOContent/Items/Weapons/BaseWeapon.cs @@ -3906,7 +3906,7 @@ namespace Server.Items if (GetSaveFlag(flags, SaveFlag.Crafter)) { - m_Crafter = reader.ReadMobile(); + m_Crafter = reader.ReadEntity(); } if (GetSaveFlag(flags, SaveFlag.Identified)) @@ -4165,7 +4165,7 @@ namespace Server.Items m_DurabilityLevel = (WeaponDurabilityLevel)reader.ReadInt(); m_Quality = (WeaponQuality)reader.ReadInt(); - m_Crafter = reader.ReadMobile(); + m_Crafter = reader.ReadEntity(); m_Poison = Poison.Deserialize(reader); m_PoisonCharges = reader.ReadInt(); diff --git a/Projects/UOContent/Misc/AutoSave.cs b/Projects/UOContent/Misc/AutoSave.cs index 206ba77ce..001397743 100644 --- a/Projects/UOContent/Misc/AutoSave.cs +++ b/Projects/UOContent/Misc/AutoSave.cs @@ -84,7 +84,7 @@ namespace Server.Misc public static void Save() { - if (AutoRestart.Restarting || !World.Running) + if (AutoRestart.Restarting || World.WorldState != WorldState.Running) { return; } diff --git a/Projects/UOContent/Misc/Guild.cs b/Projects/UOContent/Misc/Guild.cs index 4ecd10997..265d41bcf 100644 --- a/Projects/UOContent/Misc/Guild.cs +++ b/Projects/UOContent/Misc/Guild.cs @@ -105,10 +105,10 @@ namespace Server.Guilds case 0: { Name = reader.ReadString(); - m_Leader = reader.ReadGuild() as Guild; + m_Leader = reader.ReadEntity(); - m_Members = reader.ReadStrongGuildList(); - m_PendingMembers = reader.ReadStrongGuildList(); + m_Members = reader.ReadEntityList(); + m_PendingMembers = reader.ReadEntityList(); break; } @@ -160,25 +160,9 @@ namespace Server.Guilds } } - public bool IsPendingMember(Guild g) - { - if (g.Alliance != this) - { - return false; - } + public bool IsPendingMember(Guild g) => g.Alliance == this && m_PendingMembers.Contains(g); - return m_PendingMembers.Contains(g); - } - - public bool IsMember(Guild g) - { - if (g.Alliance != this) - { - return false; - } - - return m_Members.Contains(g); - } + public bool IsMember(Guild g) => g.Alliance == this && m_Members.Contains(g); public void Serialize(IGenericWriter writer) { @@ -187,8 +171,11 @@ namespace Server.Guilds writer.Write(Name); writer.Write(m_Leader); - writer.WriteGuildList(m_Members, true); - writer.WriteGuildList(m_PendingMembers, true); + Guild.Tidy(m_Members); + writer.Write(m_Members); + + Guild.Tidy(m_PendingMembers); + writer.Write(m_PendingMembers); Alliances.TryAdd(Name.ToLower(), this); } @@ -459,8 +446,8 @@ namespace Server.Guilds WarLength = reader.ReadTimeSpan(); WarBeginning = reader.ReadDateTime(); - Guild = reader.ReadGuild() as Guild; - Opponent = reader.ReadGuild() as Guild; + Guild = reader.ReadEntity(); + Opponent = reader.ReadEntity(); WarRequester = reader.ReadBool(); @@ -1150,6 +1137,20 @@ namespace Server.Guilds return guild.FindActiveWar(otherGuild) != null; } + public static void Tidy(List list) + { + for (int i = list.Count - 1; i >= 0; i--) + { + var entry = list[i]; + if (entry?.Disbanded != false) + { + list.RemoveAt(i); + } + } + + list.TrimExcess(); + } + public override void Serialize(IGenericWriter writer) { if (LastFealty + TimeSpan.FromDays(1.0) < DateTime.UtcNow) @@ -1191,8 +1192,10 @@ namespace Server.Guilds // - writer.WriteGuildList(AllyDeclarations, true); - writer.WriteGuildList(AllyInvitations, true); + Tidy(AllyDeclarations); + writer.Write(AllyDeclarations); + Tidy(AllyInvitations); + writer.Write(AllyInvitations); writer.Write(TypeLastChange); @@ -1204,14 +1207,21 @@ namespace Server.Guilds writer.Write(m_Name); writer.Write(m_Abbreviation); - writer.WriteGuildList(Allies, true); - writer.WriteGuildList(Enemies, true); - writer.WriteGuildList(WarDeclarations, true); - writer.WriteGuildList(WarInvitations, true); + Tidy(Allies); + writer.Write(Allies); + Tidy(Enemies); + writer.Write(Enemies); + Tidy(WarDeclarations); + writer.Write(WarDeclarations); + Tidy(WarInvitations); + writer.Write(WarInvitations); - writer.Write(Members, true); - writer.Write(Candidates, true); - writer.Write(Accepted, true); + Members.Tidy(); + writer.Write(Members); + Candidates.Tidy(); + writer.Write(Candidates); + Accepted.Tidy(); + writer.Write(Accepted); writer.Write(Guildstone); writer.Write(Teleporter); @@ -1256,15 +1266,15 @@ namespace Server.Guilds } else { - m_AllianceLeader = reader.ReadGuild() as Guild; + m_AllianceLeader = reader.ReadEntity();; } goto case 4; } case 4: { - AllyDeclarations = reader.ReadStrongGuildList(); - AllyInvitations = reader.ReadStrongGuildList(); + AllyDeclarations = reader.ReadEntityList(); + AllyInvitations = reader.ReadEntityList(); goto case 3; } @@ -1288,7 +1298,7 @@ namespace Server.Guilds } case 0: { - m_Leader = reader.ReadMobile(); + m_Leader = reader.ReadEntity(); if (m_Leader is PlayerMobile mobile) { @@ -1298,17 +1308,17 @@ namespace Server.Guilds m_Name = reader.ReadString(); m_Abbreviation = reader.ReadString(); - Allies = reader.ReadStrongGuildList(); - Enemies = reader.ReadStrongGuildList(); - WarDeclarations = reader.ReadStrongGuildList(); - WarInvitations = reader.ReadStrongGuildList(); + Allies = reader.ReadEntityList(); + Enemies = reader.ReadEntityList(); + WarDeclarations = reader.ReadEntityList(); + WarInvitations = reader.ReadEntityList(); - Members = reader.ReadStrongMobileList(); - Candidates = reader.ReadStrongMobileList(); - Accepted = reader.ReadStrongMobileList(); + Members = reader.ReadEntityList(); + Candidates = reader.ReadEntityList(); + Accepted = reader.ReadEntityList(); - Guildstone = reader.ReadItem(); - Teleporter = reader.ReadItem(); + Guildstone = reader.ReadEntity(); + Teleporter = reader.ReadEntity(); Charter = reader.ReadString(); Website = reader.ReadString(); diff --git a/Projects/UOContent/Mobiles/Animals/Mounts/BaseMount.cs b/Projects/UOContent/Mobiles/Animals/Mounts/BaseMount.cs index c62455e9c..3f2a12ff2 100644 --- a/Projects/UOContent/Mobiles/Animals/Mounts/BaseMount.cs +++ b/Projects/UOContent/Mobiles/Animals/Mounts/BaseMount.cs @@ -189,8 +189,8 @@ namespace Server.Mobiles } case 0: { - m_Rider = reader.ReadMobile(); - InternalItem = reader.ReadItem(); + m_Rider = reader.ReadEntity(); + InternalItem = reader.ReadEntity(); if (InternalItem == null) { @@ -382,7 +382,7 @@ namespace Server.Mobiles { case 0: { - m_Mount = reader.ReadMobile() as BaseMount; + m_Mount = reader.ReadEntity(); if (m_Mount == null) { diff --git a/Projects/UOContent/Mobiles/Animals/Mounts/Ethereals.cs b/Projects/UOContent/Mobiles/Animals/Mounts/Ethereals.cs index 6c18c6677..98f8be9b1 100644 --- a/Projects/UOContent/Mobiles/Animals/Mounts/Ethereals.cs +++ b/Projects/UOContent/Mobiles/Animals/Mounts/Ethereals.cs @@ -256,7 +256,7 @@ namespace Server.Mobiles { m_MountedID = reader.ReadInt(); m_RegularID = reader.ReadInt(); - m_Rider = reader.ReadMobile(); + m_Rider = reader.ReadEntity(); if (m_MountedID == 0x3EA2) { diff --git a/Projects/UOContent/Mobiles/Animals/Mounts/SwampDragon.cs b/Projects/UOContent/Mobiles/Animals/Mounts/SwampDragon.cs index 0a5af7690..00bf3c927 100644 --- a/Projects/UOContent/Mobiles/Animals/Mounts/SwampDragon.cs +++ b/Projects/UOContent/Mobiles/Animals/Mounts/SwampDragon.cs @@ -196,7 +196,7 @@ namespace Server.Mobiles case 1: { m_BardingExceptional = reader.ReadBool(); - m_BardingCrafter = reader.ReadMobile(); + m_BardingCrafter = reader.ReadEntity(); m_HasBarding = reader.ReadBool(); m_BardingHP = reader.ReadInt(); m_BardingResource = (CraftResource)reader.ReadInt(); diff --git a/Projects/UOContent/Mobiles/BaseCreature.cs b/Projects/UOContent/Mobiles/BaseCreature.cs index 25ae4f35a..51846f13a 100644 --- a/Projects/UOContent/Mobiles/BaseCreature.cs +++ b/Projects/UOContent/Mobiles/BaseCreature.cs @@ -1777,7 +1777,8 @@ namespace Server.Mobiles writer.Write(EnergyDamage); // Version 8 - writer.Write(Owners, true); + Owners.Tidy(); + writer.Write(Owners); // Version 10 writer.Write(IsDeadPet); @@ -1798,7 +1799,8 @@ namespace Server.Mobiles if (hasFriends) { - writer.Write(Friends, true); + Friends.Tidy(); + writer.Write(Friends); } // Version 14 @@ -1887,8 +1889,8 @@ namespace Server.Mobiles FightMode = (FightMode)reader.ReadInt(); m_Controlled = reader.ReadBool(); - m_ControlMaster = reader.ReadMobile(); - ControlTarget = reader.ReadMobile(); + m_ControlMaster = reader.ReadEntity(); + ControlTarget = reader.ReadEntity(); ControlDest = reader.ReadPoint3D(); m_ControlOrder = (OrderType)reader.ReadInt(); @@ -1931,12 +1933,12 @@ namespace Server.Mobiles if (version >= 4) { - CurrentWayPoint = reader.ReadItem() as WayPoint; + CurrentWayPoint = reader.ReadEntity(); } if (version >= 5) { - m_SummonMaster = reader.ReadMobile(); + m_SummonMaster = reader.ReadEntity(); } if (version >= 6) @@ -1968,7 +1970,7 @@ namespace Server.Mobiles if (version >= 8) { - Owners = reader.ReadStrongMobileList(); + Owners = reader.ReadEntityList(); } else { @@ -2003,7 +2005,7 @@ namespace Server.Mobiles if (version >= 13 && reader.ReadBool()) { - Friends = reader.ReadStrongMobileList(); + Friends = reader.ReadEntityList(); } else if (version < 13 && m_ControlOrder >= OrderType.Unfriend) { diff --git a/Projects/UOContent/Mobiles/Guards/ArcherGuard.cs b/Projects/UOContent/Mobiles/Guards/ArcherGuard.cs index ddcca3bae..0d22eec97 100644 --- a/Projects/UOContent/Mobiles/Guards/ArcherGuard.cs +++ b/Projects/UOContent/Mobiles/Guards/ArcherGuard.cs @@ -170,7 +170,7 @@ namespace Server.Mobiles { case 0: { - m_Focus = reader.ReadMobile(); + m_Focus = reader.ReadEntity(); if (m_Focus != null) { @@ -309,7 +309,7 @@ namespace Server.Mobiles else if (!m_Owner.CanSee( target )) { m_Shooting = false; - + if (!m_Owner.InRange( target, 2 )) { if (!m_Owner.Move( m_Owner.GetDirectionTo( target ) | Direction.Running ) && OutOfMaxDistance( target )) @@ -327,7 +327,7 @@ namespace Server.Mobiles m_Shooting = false; else if (!m_Shooting && InMinDistance( target )) m_Shooting = true; - + if (!m_Shooting) { if (m_Owner.InRange( target, 1 )) diff --git a/Projects/UOContent/Mobiles/Guards/WarriorGuard.cs b/Projects/UOContent/Mobiles/Guards/WarriorGuard.cs index 577da5588..962972044 100644 --- a/Projects/UOContent/Mobiles/Guards/WarriorGuard.cs +++ b/Projects/UOContent/Mobiles/Guards/WarriorGuard.cs @@ -188,7 +188,7 @@ namespace Server.Mobiles { case 0: { - m_Focus = reader.ReadMobile(); + m_Focus = reader.ReadEntity(); if (m_Focus != null) { diff --git a/Projects/UOContent/Mobiles/Monsters/Misc/Melee/PlagueBeastLord.cs b/Projects/UOContent/Mobiles/Monsters/Misc/Melee/PlagueBeastLord.cs index 658afdbf0..057c108d6 100644 --- a/Projects/UOContent/Mobiles/Monsters/Misc/Melee/PlagueBeastLord.cs +++ b/Projects/UOContent/Mobiles/Monsters/Misc/Melee/PlagueBeastLord.cs @@ -309,7 +309,7 @@ namespace Server.Mobiles var version = reader.ReadEncodedInt(); - OpenedBy = reader.ReadMobile(); + OpenedBy = reader.ReadEntity(); if (reader.ReadBool()) { diff --git a/Projects/UOContent/Mobiles/PlayerMobile.cs b/Projects/UOContent/Mobiles/PlayerMobile.cs index db77ddbfd..bc348cff4 100644 --- a/Projects/UOContent/Mobiles/PlayerMobile.cs +++ b/Projects/UOContent/Mobiles/PlayerMobile.cs @@ -3005,7 +3005,7 @@ namespace Server.Mobiles } case 26: { - AutoStabled = reader.ReadStrongMobileList(); + AutoStabled = reader.ReadEntityList(); goto case 25; } @@ -3139,7 +3139,7 @@ namespace Server.Mobiles { if (version < 13) { - var paid = reader.ReadStrongItemList(); + var paid = reader.ReadEntityList(); for (var i = 0; i < paid.Count; ++i) { @@ -3182,7 +3182,7 @@ namespace Server.Mobiles } case 7: { - PermaFlags = reader.ReadStrongMobileList(); + PermaFlags = reader.ReadEntityList(); goto case 6; } case 6: @@ -3198,7 +3198,7 @@ namespace Server.Mobiles case 4: { LastJusticeLoss = reader.ReadDeltaTime(); - JusticeProtectors = reader.ReadStrongMobileList(); + JusticeProtectors = reader.ReadEntityList(); goto case 3; } case 3: @@ -3318,7 +3318,8 @@ namespace Server.Mobiles writer.Write(PeacedUntil); writer.Write(AnkhNextUse); - writer.Write(AutoStabled, true); + AutoStabled.Tidy(); + writer.Write(AutoStabled); if (m_AcquiredRecipes == null) { @@ -3401,14 +3402,16 @@ namespace Server.Mobiles writer.Write(NpcGuildJoinTime); writer.Write(NpcGuildGameTime); - writer.Write(PermaFlags, true); + PermaFlags.Tidy(); + writer.Write(PermaFlags); writer.Write(NextTailorBulkOrder); writer.Write(NextSmithBulkOrder); writer.WriteDeltaTime(LastJusticeLoss); - writer.Write(JusticeProtectors, true); + JusticeProtectors.Tidy(); + writer.Write(JusticeProtectors); writer.WriteDeltaTime(LastSacrificeGain); writer.WriteDeltaTime(LastSacrificeLoss); diff --git a/Projects/UOContent/Mobiles/Special/Harrower.cs b/Projects/UOContent/Mobiles/Special/Harrower.cs index f32a62fe5..3f03f66b7 100644 --- a/Projects/UOContent/Mobiles/Special/Harrower.cs +++ b/Projects/UOContent/Mobiles/Special/Harrower.cs @@ -221,7 +221,7 @@ namespace Server.Mobiles writer.Write(m_TrueForm); writer.Write(m_GateItem); - writer.WriteMobileList(m_Tentacles); + writer.Write(m_Tentacles); } public override void Deserialize(IGenericReader reader) @@ -235,8 +235,8 @@ namespace Server.Mobiles case 0: { m_TrueForm = reader.ReadBool(); - m_GateItem = reader.ReadItem(); - m_Tentacles = reader.ReadStrongMobileList(); + m_GateItem = reader.ReadEntity(); + m_Tentacles = reader.ReadEntityList(); m_Timer = new TeleportTimer(this); m_Timer.Start(); diff --git a/Projects/UOContent/Mobiles/Special/HarrowerTentacles.cs b/Projects/UOContent/Mobiles/Special/HarrowerTentacles.cs index 8bfe3723b..72716f8da 100644 --- a/Projects/UOContent/Mobiles/Special/HarrowerTentacles.cs +++ b/Projects/UOContent/Mobiles/Special/HarrowerTentacles.cs @@ -107,7 +107,7 @@ namespace Server.Mobiles { case 0: { - Harrower = reader.ReadMobile(); + Harrower = reader.ReadEntity(); m_Timer = new DrainTimer(this); m_Timer.Start(); diff --git a/Projects/UOContent/Mobiles/Special/LordOaks.cs b/Projects/UOContent/Mobiles/Special/LordOaks.cs index 00fa0cdc4..4c914f959 100644 --- a/Projects/UOContent/Mobiles/Special/LordOaks.cs +++ b/Projects/UOContent/Mobiles/Special/LordOaks.cs @@ -203,7 +203,7 @@ namespace Server.Mobiles { case 0: { - m_Queen = reader.ReadMobile(); + m_Queen = reader.ReadEntity(); m_SpawnedQueen = reader.ReadBool(); break; diff --git a/Projects/UOContent/Mobiles/Special/Neira.cs b/Projects/UOContent/Mobiles/Special/Neira.cs index d93ba04c4..5ae41f26f 100644 --- a/Projects/UOContent/Mobiles/Special/Neira.cs +++ b/Projects/UOContent/Mobiles/Special/Neira.cs @@ -270,7 +270,7 @@ namespace Server.Mobiles var version = reader.ReadInt(); - Rider = reader.ReadMobile(); + Rider = reader.ReadEntity(); if (Rider == null) { diff --git a/Projects/UOContent/Mobiles/Vendors/GenericBuy.cs b/Projects/UOContent/Mobiles/Vendors/GenericBuy.cs index 850ebc8ff..5b5d628b2 100644 --- a/Projects/UOContent/Mobiles/Vendors/GenericBuy.cs +++ b/Projects/UOContent/Mobiles/Vendors/GenericBuy.cs @@ -282,7 +282,7 @@ namespace Server.Mobiles var version = reader.ReadInt(); - m_Mobiles = reader.ReadStrongMobileList(); + m_Mobiles = reader.ReadEntityList(); for (var i = 0; i < m_Mobiles.Count; ++i) { diff --git a/Projects/UOContent/Mobiles/Vendors/PlayerBarkeeper.cs b/Projects/UOContent/Mobiles/Vendors/PlayerBarkeeper.cs index 0fed15299..e8d0c1897 100644 --- a/Projects/UOContent/Mobiles/Vendors/PlayerBarkeeper.cs +++ b/Projects/UOContent/Mobiles/Vendors/PlayerBarkeeper.cs @@ -584,13 +584,13 @@ namespace Server.Mobiles { case 1: { - House = (BaseHouse)reader.ReadItem(); + House = (BaseHouse)reader.ReadEntity(); goto case 0; } case 0: { - Owner = reader.ReadMobile(); + Owner = reader.ReadEntity(); Rumors = new BarkeeperRumor[reader.ReadEncodedInt()]; diff --git a/Projects/UOContent/Mobiles/Vendors/PlayerVendor.cs b/Projects/UOContent/Mobiles/Vendors/PlayerVendor.cs index 222f4b0d9..91dba0404 100644 --- a/Projects/UOContent/Mobiles/Vendors/PlayerVendor.cs +++ b/Projects/UOContent/Mobiles/Vendors/PlayerVendor.cs @@ -428,13 +428,13 @@ namespace Server.Mobiles newVendorSystem = reader.ReadBool(); m_ShopName = reader.ReadString(); NextPayTime = reader.ReadDeltaTime(); - House = (BaseHouse)reader.ReadItem(); + House = (BaseHouse)reader.ReadEntity(); goto case 0; } case 0: { - Owner = reader.ReadMobile(); + Owner = reader.ReadEntity(); BankAccount = reader.ReadInt(); HoldGold = reader.ReadInt(); @@ -444,7 +444,7 @@ namespace Server.Mobiles for (var i = 0; i < count; i++) { - var item = reader.ReadItem(); + var item = reader.ReadEntity(); var price = reader.ReadInt(); if (price > 100000000) @@ -1714,7 +1714,7 @@ namespace Server.Mobiles var version = reader.ReadEncodedInt(); - Vendor = (PlayerVendor)reader.ReadMobile(); + Vendor = (PlayerVendor)reader.ReadEntity(); Timer.DelayCall(Delete); } diff --git a/Projects/UOContent/Mobiles/Vendors/VendorInventory.cs b/Projects/UOContent/Mobiles/Vendors/VendorInventory.cs index 320264b15..d1ca56fa9 100644 --- a/Projects/UOContent/Mobiles/Vendors/VendorInventory.cs +++ b/Projects/UOContent/Mobiles/Vendors/VendorInventory.cs @@ -30,11 +30,11 @@ namespace Server.Mobiles var version = reader.ReadEncodedInt(); - Owner = reader.ReadMobile(); + Owner = reader.ReadEntity(); VendorName = reader.ReadString(); ShopName = reader.ReadString(); - Items = reader.ReadStrongItemList(); + Items = reader.ReadEntityList(); Gold = reader.ReadInt(); ExpireTime = reader.ReadDeltaTime(); @@ -94,7 +94,8 @@ namespace Server.Mobiles writer.Write(VendorName); writer.Write(ShopName); - writer.Write(Items, true); + Items.Tidy(); + writer.Write(Items); writer.Write(Gold); writer.WriteDeltaTime(ExpireTime); diff --git a/Projects/UOContent/Multis/BaseHouse.cs b/Projects/UOContent/Multis/BaseHouse.cs index 07c29b08b..f65afca8b 100644 --- a/Projects/UOContent/Multis/BaseHouse.cs +++ b/Projects/UOContent/Multis/BaseHouse.cs @@ -2844,8 +2844,10 @@ namespace Server.Multis writer.Write(m_RelativeBanLocation); - writer.WriteItemList(VendorRentalContracts, true); - writer.WriteMobileList(InternalizedVendors, true); + VendorRentalContracts.Tidy(); + writer.Write(VendorRentalContracts); + InternalizedVendors.Tidy(); + writer.Write(InternalizedVendors); writer.WriteEncodedInt(RelocatedEntities.Count); foreach (var relEntity in RelocatedEntities) @@ -2876,12 +2878,13 @@ namespace Server.Multis writer.Write(Price); - writer.WriteMobileList(Access); + writer.Write(Access); writer.Write(BuiltOn); writer.Write(LastTraded); - writer.WriteItemList(Addons, true); + Addons.Tidy(); + writer.Write(Addons); writer.Write(Secures.Count); @@ -2897,21 +2900,20 @@ namespace Server.Multis writer.Write(m_Owner); // Version 5 no longer serializes region coords - /*writer.Write( (int)m_Region.Coords.Count ); - foreach( Rectangle2D rect in m_Region.Coords ) - { - writer.Write( rect ); - }*/ - - writer.WriteMobileList(CoOwners, true); - writer.WriteMobileList(Friends, true); - writer.WriteMobileList(Bans, true); + CoOwners.Tidy(); + writer.Write(CoOwners); + Friends.Tidy(); + writer.Write(Friends); + Bans.Tidy(); + writer.Write(Bans); writer.Write(Sign); writer.Write(m_Trash); - writer.WriteItemList(Doors, true); - writer.WriteItemList(LockDowns, true); + Doors.Tidy(); + writer.Write(Doors); + LockDowns.Tidy(); + writer.Write(LockDowns); // writer.WriteItemList( m_Secures, true ); writer.Write(MaxLockDowns); @@ -2971,8 +2973,8 @@ namespace Server.Multis case 13: // removed ban location serialization case 12: { - VendorRentalContracts = reader.ReadStrongItemList(); - InternalizedVendors = reader.ReadStrongMobileList(); + VendorRentalContracts = reader.ReadEntityList(); + InternalizedVendors = reader.ReadEntityList(); var relocatedCount = reader.ReadEncodedInt(); for (var i = 0; i < relocatedCount; i++) @@ -3014,7 +3016,7 @@ namespace Server.Multis } case 7: { - Access = reader.ReadStrongMobileList(); + Access = reader.ReadEntityList(); goto case 6; } case 6: @@ -3026,7 +3028,7 @@ namespace Server.Multis case 5: // just removed fields case 4: { - Addons = reader.ReadStrongItemList(); + Addons = reader.ReadEntityList(); goto case 3; } case 3: @@ -3089,7 +3091,7 @@ namespace Server.Multis Price = DefaultPrice; } - m_Owner = reader.ReadMobile(); + m_Owner = reader.ReadEntity(); if (version < 5) { @@ -3103,15 +3105,15 @@ namespace Server.Multis UpdateRegion(); - CoOwners = reader.ReadStrongMobileList(); - Friends = reader.ReadStrongMobileList(); - Bans = reader.ReadStrongMobileList(); + CoOwners = reader.ReadEntityList(); + Friends = reader.ReadEntityList(); + Bans = reader.ReadEntityList(); - Sign = reader.ReadItem() as HouseSign; - m_Trash = reader.ReadItem() as TrashBarrel; + Sign = reader.ReadEntity(); + m_Trash = reader.ReadEntity(); - Doors = reader.ReadStrongItemList(); - LockDowns = reader.ReadStrongItemList(); + Doors = reader.ReadEntityList(); + LockDowns = reader.ReadEntityList(); for (var i = 0; i < LockDowns.Count; ++i) { @@ -3125,7 +3127,7 @@ namespace Server.Multis if (version < 3) { - var items = reader.ReadStrongItemList(); + var items = reader.ReadEntityList(); Secures = new List(items.Count); for (var i = 0; i < items.Count; ++i) @@ -3849,7 +3851,7 @@ namespace Server.Multis public SecureInfo(IGenericReader reader) { - Item = reader.ReadItem() as Container; + Item = reader.ReadEntity(); Level = (SecureLevel)reader.ReadByte(); } diff --git a/Projects/UOContent/Multis/Boats/BaseBoat.cs b/Projects/UOContent/Multis/Boats/BaseBoat.cs index 21eebd2b8..066d0c5ee 100644 --- a/Projects/UOContent/Multis/Boats/BaseBoat.cs +++ b/Projects/UOContent/Multis/Boats/BaseBoat.cs @@ -329,7 +329,7 @@ namespace Server.Multis { case 3: { - MapItem = (MapItem)reader.ReadItem(); + MapItem = (MapItem)reader.ReadEntity(); NextNavPoint = reader.ReadInt(); goto case 2; @@ -373,11 +373,11 @@ namespace Server.Multis } } - Owner = reader.ReadMobile(); - PPlank = reader.ReadItem() as Plank; - SPlank = reader.ReadItem() as Plank; - TillerMan = reader.ReadItem() as TillerMan; - Hold = reader.ReadItem() as Hold; + Owner = reader.ReadEntity(); + PPlank = reader.ReadEntity(); + SPlank = reader.ReadEntity(); + TillerMan = reader.ReadEntity(); + Hold = reader.ReadEntity(); Anchored = reader.ReadBool(); m_ShipName = reader.ReadString(); diff --git a/Projects/UOContent/Multis/Boats/Hold.cs b/Projects/UOContent/Multis/Boats/Hold.cs index c7a5b3bf6..6b5090115 100644 --- a/Projects/UOContent/Multis/Boats/Hold.cs +++ b/Projects/UOContent/Multis/Boats/Hold.cs @@ -111,7 +111,7 @@ namespace Server.Items { case 0: { - m_Boat = reader.ReadItem() as BaseBoat; + m_Boat = reader.ReadEntity(); if (m_Boat == null || Parent != null) { diff --git a/Projects/UOContent/Multis/Boats/Plank.cs b/Projects/UOContent/Multis/Boats/Plank.cs index 01af7c5cf..01892c790 100644 --- a/Projects/UOContent/Multis/Boats/Plank.cs +++ b/Projects/UOContent/Multis/Boats/Plank.cs @@ -71,7 +71,7 @@ namespace Server.Items { case 0: { - Boat = reader.ReadItem() as BaseBoat; + Boat = reader.ReadEntity(); Side = (PlankSide)reader.ReadInt(); Locked = reader.ReadBool(); KeyValue = reader.ReadUInt(); diff --git a/Projects/UOContent/Multis/Boats/TillerMan.cs b/Projects/UOContent/Multis/Boats/TillerMan.cs index b7b48c3c2..be04517b2 100644 --- a/Projects/UOContent/Multis/Boats/TillerMan.cs +++ b/Projects/UOContent/Multis/Boats/TillerMan.cs @@ -116,7 +116,7 @@ namespace Server.Items { case 0: { - m_Boat = reader.ReadItem() as BaseBoat; + m_Boat = reader.ReadEntity(); if (m_Boat == null) { diff --git a/Projects/UOContent/Multis/Camps/BaseCamp.cs b/Projects/UOContent/Multis/Camps/BaseCamp.cs index 4e71a6e74..c0adb37e0 100644 --- a/Projects/UOContent/Multis/Camps/BaseCamp.cs +++ b/Projects/UOContent/Multis/Camps/BaseCamp.cs @@ -159,8 +159,10 @@ namespace Server.Multis writer.Write(0); // version - writer.Write(m_Items, true); - writer.Write(m_Mobiles, true); + m_Items.Tidy(); + writer.Write(m_Items); + m_Mobiles.Tidy(); + writer.Write(m_Mobiles); writer.WriteDeltaTime(m_DecayTime); } @@ -174,8 +176,8 @@ namespace Server.Multis { case 0: { - m_Items = reader.ReadStrongItemList(); - m_Mobiles = reader.ReadStrongMobileList(); + m_Items = reader.ReadEntityList(); + m_Mobiles = reader.ReadEntityList(); m_DecayTime = reader.ReadDeltaTime(); RefreshDecay(false); diff --git a/Projects/UOContent/Multis/Camps/BrigandCamp.cs b/Projects/UOContent/Multis/Camps/BrigandCamp.cs index a01b9df80..744aaf73f 100644 --- a/Projects/UOContent/Multis/Camps/BrigandCamp.cs +++ b/Projects/UOContent/Multis/Camps/BrigandCamp.cs @@ -176,7 +176,7 @@ namespace Server.Multis { case 0: { - m_Prisoner = reader.ReadMobile(); + m_Prisoner = reader.ReadEntity(); break; } } diff --git a/Projects/UOContent/Multis/Camps/LizardmenCamp.cs b/Projects/UOContent/Multis/Camps/LizardmenCamp.cs index a615512a8..b0812199a 100644 --- a/Projects/UOContent/Multis/Camps/LizardmenCamp.cs +++ b/Projects/UOContent/Multis/Camps/LizardmenCamp.cs @@ -190,7 +190,7 @@ namespace Server.Multis { case 0: { - m_Prisoner = reader.ReadMobile(); + m_Prisoner = reader.ReadEntity(); break; } } diff --git a/Projects/UOContent/Multis/Camps/OrcCamp.cs b/Projects/UOContent/Multis/Camps/OrcCamp.cs index 83f6e84b9..9504912e6 100644 --- a/Projects/UOContent/Multis/Camps/OrcCamp.cs +++ b/Projects/UOContent/Multis/Camps/OrcCamp.cs @@ -192,13 +192,13 @@ namespace Server.Multis { case 1: { - m_Prisoner = reader.ReadMobile(); + m_Prisoner = reader.ReadEntity(); break; } case 0: { - m_Prisoner = reader.ReadMobile(); - reader.ReadItem(); + m_Prisoner = reader.ReadEntity(); + reader.ReadEntity(); break; } } diff --git a/Projects/UOContent/Multis/Camps/RatCamp.cs b/Projects/UOContent/Multis/Camps/RatCamp.cs index 90d27b3f7..7c759b6a6 100644 --- a/Projects/UOContent/Multis/Camps/RatCamp.cs +++ b/Projects/UOContent/Multis/Camps/RatCamp.cs @@ -190,13 +190,13 @@ namespace Server.Multis { case 1: { - m_Prisoner = reader.ReadMobile(); + m_Prisoner = reader.ReadEntity(); break; } case 0: { - m_Prisoner = reader.ReadMobile(); - reader.ReadItem(); + m_Prisoner = reader.ReadEntity(); + reader.ReadEntity(); break; } } diff --git a/Projects/UOContent/Multis/ContestHouses.cs b/Projects/UOContent/Multis/ContestHouses.cs index b4dcee930..fe72cf5d3 100644 --- a/Projects/UOContent/Multis/ContestHouses.cs +++ b/Projects/UOContent/Multis/ContestHouses.cs @@ -221,7 +221,8 @@ namespace Server.Multis if (Fixtures != null) { - writer.WriteItemList(Fixtures, true); + Fixtures.Tidy(); + writer.Write(Fixtures); } else { @@ -240,7 +241,7 @@ namespace Server.Multis for (var i = 0; i < count; i++) { - AddFixture(reader.ReadItem()); + AddFixture(reader.ReadEntity()); } } } diff --git a/Projects/UOContent/Multis/HouseFoundation.cs b/Projects/UOContent/Multis/HouseFoundation.cs index 6c0763556..4869d67ab 100644 --- a/Projects/UOContent/Multis/HouseFoundation.cs +++ b/Projects/UOContent/Multis/HouseFoundation.cs @@ -908,7 +908,8 @@ namespace Server.Multis writer.Write(SignHanger); writer.Write(LastRevision); - writer.Write(Fixtures, true); + Fixtures.Tidy(); + writer.Write(Fixtures); CurrentState.Serialize(writer); DesignState.Serialize(writer); @@ -926,7 +927,7 @@ namespace Server.Multis case 5: case 4: { - Signpost = reader.ReadItem(); + Signpost = reader.ReadEntity(); SignpostGraphic = reader.ReadInt(); goto case 3; @@ -939,7 +940,7 @@ namespace Server.Multis } case 2: { - SignHanger = reader.ReadItem(); + SignHanger = reader.ReadEntity(); goto case 1; } @@ -965,7 +966,7 @@ namespace Server.Multis } LastRevision = reader.ReadInt(); - Fixtures = reader.ReadStrongItemList(); + Fixtures = reader.ReadEntityList(); m_Current = new DesignState(this, reader); m_Design = new DesignState(this, reader); diff --git a/Projects/UOContent/Multis/HouseSign.cs b/Projects/UOContent/Multis/HouseSign.cs index 9d0c252d0..66c084d1e 100644 --- a/Projects/UOContent/Multis/HouseSign.cs +++ b/Projects/UOContent/Multis/HouseSign.cs @@ -216,8 +216,8 @@ namespace Server.Multis { case 0: { - Owner = reader.ReadItem() as BaseHouse; - OriginalOwner = reader.ReadMobile(); + Owner = reader.ReadEntity(); + OriginalOwner = reader.ReadEntity(); break; } diff --git a/Projects/UOContent/Multis/HouseTeleporter.cs b/Projects/UOContent/Multis/HouseTeleporter.cs index 89ef29988..e1ba1320d 100644 --- a/Projects/UOContent/Multis/HouseTeleporter.cs +++ b/Projects/UOContent/Multis/HouseTeleporter.cs @@ -90,7 +90,7 @@ namespace Server.Items } case 0: { - Target = reader.ReadItem(); + Target = reader.ReadEntity(); if (version < 1) { diff --git a/Projects/UOContent/Multis/MovingCrate.cs b/Projects/UOContent/Multis/MovingCrate.cs index 6c090a0f8..819ea013b 100644 --- a/Projects/UOContent/Multis/MovingCrate.cs +++ b/Projects/UOContent/Multis/MovingCrate.cs @@ -40,7 +40,7 @@ namespace Server.Multis public override void AddNameProperties( ObjectPropertyList list ) { base.AddNameProperties( list ); - + if (House != null && House.InternalizedVendors.Count > 0) list.Add( 1061833, House.InternalizedVendors.Count.ToString() ); // This packing crate contains ~1_COUNT~ vendors/barkeepers. } @@ -248,7 +248,7 @@ namespace Server.Multis var version = reader.ReadEncodedInt(); - House = reader.ReadItem() as BaseHouse; + House = reader.ReadEntity(); if (House != null) { diff --git a/Projects/UOContent/Multis/PreviewHouse.cs b/Projects/UOContent/Multis/PreviewHouse.cs index 75db2c831..4d596ac36 100644 --- a/Projects/UOContent/Multis/PreviewHouse.cs +++ b/Projects/UOContent/Multis/PreviewHouse.cs @@ -120,7 +120,7 @@ namespace Server.Multis { case 0: { - m_Components = reader.ReadStrongItemList(); + m_Components = reader.ReadEntityList(); break; } diff --git a/Projects/UOContent/Spells/Fifth/PoisonField.cs b/Projects/UOContent/Spells/Fifth/PoisonField.cs index 5dfabbfd1..349be5cdb 100644 --- a/Projects/UOContent/Spells/Fifth/PoisonField.cs +++ b/Projects/UOContent/Spells/Fifth/PoisonField.cs @@ -142,7 +142,7 @@ namespace Server.Spells.Fifth { case 1: { - m_Caster = reader.ReadMobile(); + m_Caster = reader.ReadEntity(); goto case 0; } diff --git a/Projects/UOContent/Spells/Fourth/FireField.cs b/Projects/UOContent/Spells/Fourth/FireField.cs index 3b9b01b87..8f1353fda 100644 --- a/Projects/UOContent/Spells/Fourth/FireField.cs +++ b/Projects/UOContent/Spells/Fourth/FireField.cs @@ -163,7 +163,7 @@ namespace Server.Spells.Fourth } case 1: { - m_Caster = reader.ReadMobile(); + m_Caster = reader.ReadEntity(); goto case 0; } diff --git a/Projects/UOContent/Spells/Ninjitsu/MirrorImage.cs b/Projects/UOContent/Spells/Ninjitsu/MirrorImage.cs index 2cd5544e1..1fdac00c5 100644 --- a/Projects/UOContent/Spells/Ninjitsu/MirrorImage.cs +++ b/Projects/UOContent/Spells/Ninjitsu/MirrorImage.cs @@ -237,7 +237,7 @@ namespace Server.Mobiles var version = reader.ReadEncodedInt(); - m_Caster = reader.ReadMobile(); + m_Caster = reader.ReadEntity(); MirrorImage.AddClone(m_Caster); } diff --git a/Projects/UOContent/Spells/Sixth/ParalyzeField.cs b/Projects/UOContent/Spells/Sixth/ParalyzeField.cs index c3e51029a..0ece06125 100644 --- a/Projects/UOContent/Spells/Sixth/ParalyzeField.cs +++ b/Projects/UOContent/Spells/Sixth/ParalyzeField.cs @@ -167,7 +167,7 @@ namespace Server.Spells.Sixth { case 0: { - m_Caster = reader.ReadMobile(); + m_Caster = reader.ReadEntity(); m_End = reader.ReadDeltaTime(); m_Timer = new InternalTimer(this, m_End - DateTime.UtcNow);