예제 #1
0
		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;
		}
예제 #2
0
        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);
        }
예제 #3
0
        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;
        }
예제 #4
0
        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 );
                }
            }
        }
예제 #5
0
		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
		}
예제 #6
0
		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();
		}
예제 #7
0
		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 );
				}
			}
		}