diff --git a/Server/Serialization.cs b/Server/Serialization.cs index 23626a287..6d8e16363 100644 --- a/Server/Serialization.cs +++ b/Server/Serialization.cs @@ -84,6 +84,15 @@ namespace Server public abstract List ReadStrongGuildList(); public abstract List ReadStrongGuildList() where T : BaseGuild; + public abstract HashSet ReadItemSet(); + public abstract HashSet ReadItemSet() where T: Item; + + public abstract HashSet ReadMobileSet(); + public abstract HashSet ReadMobileSet() where T : Mobile; + + public abstract HashSet ReadGuildSet(); + public abstract HashSet ReadGuildSet() where T : BaseGuild; + public abstract Race ReadRace(); public abstract bool End(); @@ -150,18 +159,36 @@ namespace Server public abstract void WriteItemList( List list ) where T : Item; public abstract void WriteItemList( List list, bool tidy ) where T : Item; + public abstract void Write( HashSet list ); + public abstract void Write( HashSet list, bool tidy ); + + public abstract void WriteItemSet( HashSet set ) where T : Item; + public abstract void WriteItemSet( HashSet set, bool tidy ) where T : Item; + public abstract void Write( List list ); public abstract void Write( List list, bool tidy ); public abstract void WriteMobileList( List list ) where T : Mobile; public abstract void WriteMobileList( List list, bool tidy ) where T : Mobile; + public abstract void Write( HashSet list ); + public abstract void Write( HashSet list, bool tidy ); + + public abstract void WriteMobileSet( HashSet set ) where T : Mobile; + public abstract void WriteMobileSet( HashSet set, bool tidy ) where T : Mobile; + public abstract void Write( List list ); public abstract void Write( List list, bool tidy ); public abstract void WriteGuildList( List list ) where T : BaseGuild; public abstract void WriteGuildList( List list, bool tidy ) where T : BaseGuild; + public abstract void Write( HashSet list ); + public abstract void Write( HashSet list, bool tidy ); + + public abstract void WriteGuildSet( HashSet set ) where T : BaseGuild; + public abstract void WriteGuildSet( HashSet set, bool tidy ) where T : BaseGuild; + //Stupid compiler won't notice there 'where' to differentiate the generic methods. } @@ -544,6 +571,14 @@ namespace Server Write( (byte)0xFF ); } + public override void Write( Race value ) + { + if( value != null ) + Write( (byte)value.RaceIndex ); + else + Write( (byte)0xFF ); + } + public override void Write( Item value ) { if( value == null || value.Deleted ) @@ -587,7 +622,6 @@ namespace Server { WriteMobileList( list, false ); } - public override void WriteMobileList( ArrayList list, bool tidy ) { if( tidy ) @@ -611,7 +645,6 @@ namespace Server { WriteItemList( list, false ); } - public override void WriteItemList( ArrayList list, bool tidy ) { if( tidy ) @@ -635,7 +668,6 @@ namespace Server { WriteGuildList( list, false ); } - public override void WriteGuildList( ArrayList list, bool tidy ) { if( tidy ) @@ -659,7 +691,6 @@ namespace Server { Write( list, false ); } - public override void Write( List list, bool tidy ) { if( tidy ) @@ -702,11 +733,48 @@ namespace Server Write( list[i] ); } + public override void Write( HashSet set ) + { + Write( set, false ); + } + public override void Write( HashSet set, bool tidy ) + { + if( tidy ) + { + set.RemoveWhere( item => item.Deleted ); + } + + Write( set.Count ); + + foreach( Item item in set ) + { + Write( item ); + } + } + + public override void WriteItemSet( HashSet set ) + { + WriteItemSet( set, false ); + } + public override void WriteItemSet( HashSet set, bool tidy ) + { + if( tidy ) + { + set.RemoveWhere( item => item.Deleted ); + } + + Write( set.Count ); + + foreach( Item item in set ) + { + Write( item ); + } + } + public override void Write( List list ) { Write( list, false ); } - public override void Write( List list, bool tidy ) { if( tidy ) @@ -730,7 +798,6 @@ namespace Server { WriteMobileList( list, false ); } - public override void WriteMobileList( List list, bool tidy ) { if( tidy ) @@ -749,12 +816,49 @@ namespace Server for( int i = 0; i < list.Count; ++i ) Write( list[i] ); } + + public override void Write( HashSet set ) + { + Write( set, false ); + } + public override void Write( HashSet set, bool tidy ) + { + if( tidy ) + { + set.RemoveWhere( mobile => mobile.Deleted ); + } + + Write( set.Count ); + + foreach( Mobile mob in set ) + { + Write( mob ); + } + } + + public override void WriteMobileSet( HashSet set ) + { + WriteMobileSet( set, false ); + } + public override void WriteMobileSet( HashSet set, bool tidy ) + { + if( tidy ) + { + set.RemoveWhere( mob => mob.Deleted ); + } + + Write( set.Count ); + + foreach( Mobile mob in set ) + { + Write( mob ); + } + } public override void Write( List list ) { Write( list, false ); } - public override void Write( List list, bool tidy ) { if( tidy ) @@ -778,7 +882,6 @@ namespace Server { WriteGuildList( list, false ); } - public override void WriteGuildList( List list, bool tidy ) { if( tidy ) @@ -798,12 +901,42 @@ namespace Server Write( list[i] ); } - public override void Write( Race value ) + public override void Write( HashSet set ) { - if( value != null ) - Write( (byte)value.RaceIndex ); - else - Write( (byte)0xFF ); + Write( set, false ); + } + public override void Write( HashSet set, bool tidy ) + { + if( tidy ) + { + set.RemoveWhere( guild => guild.Disbanded ); + } + + Write( set.Count ); + + foreach( BaseGuild guild in set ) + { + Write( guild ); + } + } + + public override void WriteGuildSet( HashSet set ) + { + WriteGuildSet( set, false ); + } + public override void WriteGuildSet( HashSet set, bool tidy ) + { + if( tidy ) + { + set.RemoveWhere( guild => guild.Disbanded ); + } + + Write( set.Count ); + + foreach( BaseGuild guild in set ) + { + Write( guild ); + } } } @@ -1100,6 +1233,37 @@ namespace Server } } + public override HashSet ReadItemSet() + { + return ReadItemSet(); + } + + public override HashSet ReadItemSet() + { + int count = ReadInt(); + + if( count > 0 ) + { + HashSet set = new HashSet(); + + for( int i = 0; i < count; ++i ) + { + T item = ReadItem() as T; + + if( item != null ) + { + set.Add( item ); + } + } + + return set; + } + else + { + return new HashSet(); + } + } + public override List ReadStrongMobileList() { return ReadStrongMobileList(); @@ -1126,6 +1290,37 @@ namespace Server } } + public override HashSet ReadMobileSet() + { + return ReadMobileSet(); + } + + public override HashSet ReadMobileSet() + { + int count = ReadInt(); + + if( count > 0 ) + { + HashSet set = new HashSet(); + + for( int i = 0; i < count; ++i ) + { + T item = ReadMobile() as T; + + if( item != null ) + { + set.Add( item ); + } + } + + return set; + } + else + { + return new HashSet(); + } + } + public override List ReadStrongGuildList() { return ReadStrongGuildList(); @@ -1152,15 +1347,46 @@ namespace Server } } - public override bool End() + public override HashSet ReadGuildSet() { - return m_File.PeekChar() == -1; + return ReadGuildSet(); + } + + public override HashSet ReadGuildSet() + { + int count = ReadInt(); + + if( count > 0 ) + { + HashSet set = new HashSet(); + + for( int i = 0; i < count; ++i ) + { + T item = ReadGuild() as T; + + if( item != null ) + { + set.Add( item ); + } + } + + return set; + } + else + { + return new HashSet(); + } } public override Race ReadRace() { return Race.Races[ReadByte()]; } + + public override bool End() + { + return m_File.PeekChar() == -1; + } } public sealed class AsyncWriter : GenericWriter @@ -1523,7 +1749,6 @@ namespace Server { WriteMobileList( list, false ); } - public override void WriteMobileList( ArrayList list, bool tidy ) { if( tidy ) @@ -1547,7 +1772,6 @@ namespace Server { WriteItemList( list, false ); } - public override void WriteItemList( ArrayList list, bool tidy ) { if( tidy ) @@ -1571,7 +1795,6 @@ namespace Server { WriteGuildList( list, false ); } - public override void WriteGuildList( ArrayList list, bool tidy ) { if( tidy ) @@ -1595,7 +1818,6 @@ namespace Server { Write( list, false ); } - public override void Write( List list, bool tidy ) { if( tidy ) @@ -1638,11 +1860,48 @@ namespace Server Write( list[i] ); } + public override void Write( HashSet set ) + { + Write( set, false ); + } + public override void Write( HashSet set, bool tidy ) + { + if( tidy ) + { + set.RemoveWhere( item => item.Deleted ); + } + + Write( set.Count ); + + foreach( Item item in set ) + { + Write( item ); + } + } + + public override void WriteItemSet( HashSet set ) + { + WriteItemSet( set, false ); + } + public override void WriteItemSet( HashSet set, bool tidy ) + { + if( tidy ) + { + set.RemoveWhere( item => item.Deleted ); + } + + Write( set.Count ); + + foreach( Item item in set ) + { + Write( item ); + } + } + public override void Write( List list ) { Write( list, false ); } - public override void Write( List list, bool tidy ) { if( tidy ) @@ -1666,7 +1925,6 @@ namespace Server { WriteMobileList( list, false ); } - public override void WriteMobileList( List list, bool tidy ) { if( tidy ) @@ -1686,11 +1944,48 @@ namespace Server Write( list[i] ); } + public override void Write( HashSet set ) + { + Write( set, false ); + } + public override void Write( HashSet set, bool tidy ) + { + if( tidy ) + { + set.RemoveWhere( mobile => mobile.Deleted ); + } + + Write( set.Count ); + + foreach( Mobile mob in set ) + { + Write( mob ); + } + } + + public override void WriteMobileSet( HashSet set ) + { + WriteMobileSet( set, false ); + } + public override void WriteMobileSet( HashSet set, bool tidy ) + { + if( tidy ) + { + set.RemoveWhere( mob => mob.Deleted ); + } + + Write( set.Count ); + + foreach( Mobile mob in set ) + { + Write( mob ); + } + } + public override void Write( List list ) { Write( list, false ); } - public override void Write( List list, bool tidy ) { if( tidy ) @@ -1714,7 +2009,6 @@ namespace Server { WriteGuildList( list, false ); } - public override void WriteGuildList( List list, bool tidy ) { if( tidy ) @@ -1733,6 +2027,44 @@ namespace Server for( int i = 0; i < list.Count; ++i ) Write( list[i] ); } + + public override void Write( HashSet set ) + { + Write( set, false ); + } + public override void Write( HashSet set, bool tidy ) + { + if( tidy ) + { + set.RemoveWhere( guild => guild.Disbanded ); + } + + Write( set.Count ); + + foreach( BaseGuild guild in set ) + { + Write( guild ); + } + } + + public override void WriteGuildSet( HashSet set ) + { + WriteGuildSet( set, false ); + } + public override void WriteGuildSet( HashSet set, bool tidy ) + { + if( tidy ) + { + set.RemoveWhere( guild => guild.Disbanded ); + } + + Write( set.Count ); + + foreach( BaseGuild guild in set ) + { + Write( guild ); + } + } } public interface ISerializable