private static bool DeserializePlayerScores(GenericReader reader) { reader.GetVersion(); reader.ReadBlockDictionary( () => { IEntity e = reader.ReadEntity(); Dictionary<Mobile, double> list = reader.ReadBlockDictionary( () => { Mobile k = reader.ReadMobile(); double v = reader.ReadDouble(); return new KeyValuePair<Mobile, double>(k, v); }); return new KeyValuePair<IEntity, Dictionary<Mobile, double>>(e, list); }, Registry); return true; }
private static bool DeserializePlayerScores(GenericReader reader) { reader.GetVersion(); reader.ReadBlockDictionary( () => { IEntity e = reader.ReadEntity(); Dictionary <Mobile, double> list = reader.ReadBlockDictionary( () => { Mobile k = reader.ReadMobile(); double v = reader.ReadDouble(); return(new KeyValuePair <Mobile, double>(k, v)); }); return(new KeyValuePair <IEntity, Dictionary <Mobile, double> >(e, list)); }, Registry); return(true); }
public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); m_Creatures = new Dictionary<IEntity, SpawnerEntry>(); if ( version < 7 ) m_Entries = new List<SpawnerEntry>(); switch ( version ) { case 7: { int size = reader.ReadInt(); m_Entries = new List<SpawnerEntry>( size ); for ( int i = 0; i < size; ++i ) m_Entries.Add( new SpawnerEntry( this, reader ) ); goto case 4; //Skip the other crap } case 6: { int size = reader.ReadInt(); bool addentries = m_Entries.Count == 0; for ( int i = 0; i < size; ++i ) if ( addentries ) m_Entries.Add( new SpawnerEntry( String.Empty, 100, reader.ReadInt() ) ); else m_Entries[i].CreaturesMaxCount = reader.ReadInt(); goto case 5; } case 5: { int size = reader.ReadInt(); bool addentries = m_Entries.Count == 0; for ( int i = 0; i < size; ++i ) if ( addentries ) m_Entries.Add( new SpawnerEntry( String.Empty, reader.ReadInt(), 1 ) ); else m_Entries[i].CreaturesProbability = reader.ReadInt(); goto case 4; } case 4: { m_WalkingRange = reader.ReadInt(); goto case 3; } case 3: case 2: { m_WayPoint = reader.ReadItem() as WayPoint; goto case 1; } case 1: { m_Group = reader.ReadBool(); goto case 0; } case 0: { m_MinDelay = reader.ReadTimeSpan(); m_MaxDelay = reader.ReadTimeSpan(); m_Count = reader.ReadInt(); m_Team = reader.ReadInt(); m_HomeRange = reader.ReadInt(); m_Running = reader.ReadBool(); TimeSpan ts = TimeSpan.Zero; if ( m_Running ) ts = reader.ReadDeltaTime() - DateTime.Now; if ( version < 7 ) { int size = reader.ReadInt(); bool addentries = m_Entries.Count == 0; for ( int i = 0; i < size; ++i ) { string typeName = reader.ReadString(); if ( addentries ) m_Entries.Add( new SpawnerEntry( typeName, 100, 1 ) ); else m_Entries[i].CreaturesName = typeName; if ( SpawnerType.GetType( typeName ) == null ) { if ( m_WarnTimer == null ) m_WarnTimer = new WarnTimer(); m_WarnTimer.Add( Location, Map, typeName ); } } int count = reader.ReadInt(); for ( int i = 0; i < count; ++i ) { IEntity e = reader.ReadEntity(); if ( e != null ) { if ( e is BaseCreature ) ((BaseCreature)e).RemoveIfUntamed = true; if ( e is Item ) ((Item)e).Spawner = this; else if ( e is Mobile ) ((Mobile)e).Spawner = this; for ( int j = 0;j < m_Entries.Count; j++ ) { if ( SpawnerType.GetType( m_Entries[j].CreaturesName ) == e.GetType() ) { m_Entries[j].Creatures.Add( e ); m_Creatures.Add( e, m_Entries[j] ); break; } } } } } DoTimer( ts ); break; } } if ( version < 4 ) m_WalkingRange = m_HomeRange; }
public SpawnerEntry( Spawner parent, GenericReader reader ) { int version = reader.ReadInt(); m_CreaturesName = reader.ReadString(); m_CreaturesProbability = reader.ReadInt(); m_CreaturesMaxCount = reader.ReadInt(); m_Properties = reader.ReadString(); m_Parameters = reader.ReadString(); int count = reader.ReadInt(); m_Creatures = new List<IEntity>( count ); for ( int i = 0; i < count; ++i ) { //IEntity e = World.FindEntity( reader.ReadInt() ); IEntity e = reader.ReadEntity(); if ( e != null ) { if ( e is Item ) ((Item)e).Spawner = parent; else if ( e is Mobile ) { ((Mobile)e).Spawner = parent; if ( e is BaseCreature ) ((BaseCreature)e).RemoveIfUntamed = true; } m_Creatures.Add( e ); if ( !parent.Creatures.ContainsKey( e ) ) parent.Creatures.Add( e, this ); } } }
public static void Remove( GenericReader reader, int version ) { int count = reader.ReadInt(); for ( int i = 0; i < count; i++ ) { //int serial = reader.ReadInt(); //IEntity entity = World.FindEntity( serial ); IEntity entity = reader.ReadEntity(); if ( entity != null ) { if ( m_RemoveList == null ) m_RemoveList = new List<IEntity>(); m_RemoveList.Add( entity ); } } reader.ReadBool(); // m_Running if ( reader.ReadBool() ) reader.ReadDeltaTime(); // m_NextSpawn }
public void Deserialize( GenericReader reader, int version ) { int count = reader.ReadInt(); for ( int i = 0; i < count; i++ ) { ISpawnable spawnableEntity = reader.ReadEntity() as ISpawnable; if (spawnableEntity != null) Add(spawnableEntity); } m_Running = reader.ReadBool(); if ( reader.ReadBool() ) { m_NextSpawn = reader.ReadDeltaTime(); if ( this.Spawning ) { if ( m_SpawnTimer != null ) m_SpawnTimer.Stop(); TimeSpan delay = m_NextSpawn - DateTime.UtcNow; m_SpawnTimer = Timer.DelayCall( delay > TimeSpan.Zero ? delay : TimeSpan.Zero, new TimerCallback( TimerCallback ) ); } } CheckTimer(); }
public SpawnerEntry( Spawner parent, GenericReader reader ) { int version = reader.ReadInt(); m_SpawnedName = reader.ReadString(); m_SpawnedProbability = reader.ReadInt(); m_SpawnedMaxCount = reader.ReadInt(); m_Properties = reader.ReadString(); m_Parameters = reader.ReadString(); int count = reader.ReadInt(); m_Spawned = new List<ISpawnable>( count ); for ( int i = 0; i < count; ++i ) { //IEntity e = World.FindEntity( reader.ReadInt() ); ISpawnable e = reader.ReadEntity() as ISpawnable; if ( e != null ) { e.Spawner = parent; if ( e is BaseCreature ) ((BaseCreature)e).RemoveIfUntamed = true; m_Spawned.Add( e ); if ( !parent.Spawned.ContainsKey( e ) ) parent.Spawned.Add( e, this ); } } }