Пример #1
0
/*
 *              private IEntity ReadEntity( GenericReader reader )
 *              {
 *                      return World.FindEntity( reader.ReadInt() );
 *              }
 */
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            switch (version)
            {
            case 1:
            {
                m_FlashType = (FlashType)reader.ReadEncodedInt();
                goto case 0;
            }

            case 0:
            {
                m_EffectDelay  = reader.ReadTimeSpan();
                m_TriggerDelay = reader.ReadTimeSpan();
                m_SoundDelay   = reader.ReadTimeSpan();

                m_Source  = reader.ReadEntity();
                m_Target  = reader.ReadEntity();
                m_Trigger = reader.ReadItem() as EffectController;

                m_FixedDirection     = reader.ReadBool();
                m_Explodes           = reader.ReadBool();
                m_PlaySoundAtTrigger = reader.ReadBool();

                m_EffectType  = (ECEffectType)reader.ReadEncodedInt();
                m_EffectLayer = (EffectLayer)reader.ReadEncodedInt();
                m_TriggerType = (EffectTriggerType)reader.ReadEncodedInt();

                m_ItemID                = reader.ReadEncodedInt();
                m_Hue                   = reader.ReadEncodedInt();
                m_RenderMode            = reader.ReadEncodedInt();
                m_Speed                 = reader.ReadEncodedInt();
                m_Duration              = reader.ReadEncodedInt();
                m_ParticleEffect        = reader.ReadEncodedInt();
                m_ExplodeParticleEffect = reader.ReadEncodedInt();
                m_ExplodeSound          = reader.ReadEncodedInt();
                m_Unknown               = reader.ReadEncodedInt();
                m_SoundID               = reader.ReadEncodedInt();
                m_TriggerRange          = reader.ReadEncodedInt();

                break;
            }
            }
        }
Пример #2
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 ArrayList();
                    }

                    m_RemoveList.Add(entity);
                }
            }

            reader.ReadBool();             // m_Running

            if (reader.ReadBool())
            {
                reader.ReadDeltaTime();                 // m_NextSpawn
            }
        }
Пример #3
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.Now;
                    m_SpawnTimer = Timer.DelayCall(delay > TimeSpan.Zero ? delay : TimeSpan.Zero, new TimerCallback(TimerCallback));
                }
            }

            CheckTimer();
        }
Пример #4
0
        public override void Deserialize(GenericReader reader)
        {
            DateTime time;

            base.Deserialize(reader);

            int version = reader.ReadInt();

            if (version < 3)
            {
                Old_Deserialize(reader, version);
                return;
            }

            switch (version)
            {
            case 3:
            {
                TimeSpan.TryParse(reader.ReadString(), out m_Decay);
                m_Level = (AccessLevel)reader.ReadInt();
                goto case 2;
            }

            case 2:
            {
                //case 2
                m_Sound = reader.ReadInt();
                //case 1
                m_Chance = reader.ReadDouble();
                //case 0
                m_Active    = reader.ReadBool();
                m_Creature  = reader.ReadString();
                m_Message   = reader.ReadString();
                m_Location  = reader.ReadPoint3D();
                m_HomeRange = reader.ReadInt();
                m_Team      = reader.ReadInt();
                m_Limit     = reader.ReadInt();
                DateTime.TryParse(reader.ReadString(), out m_NextSpawn);
                m_Delay = reader.ReadTimeSpan();

                int size = reader.ReadInt();
                m_Spawned = new ArrayList(size);

                for (int i = 0; i < size; ++i)
                {
                    //IEntity e = World.FindEntity(reader.ReadInt());
                    IEntity e = reader.ReadEntity();
                    DateTime.TryParse(reader.ReadString(), out time);

                    if (e != null)
                    {
                        m_Object = new SpawnedObject(e, time);
                        m_Spawned.Add(m_Object);
                    }
                }

                break;
            }
            }
        }
Пример #5
0
        public void Old_Deserialize(GenericReader reader, int version)
        {
            switch (version)
            {
            case 2:
            {
                m_Sound = reader.ReadInt();
                goto case 1;
            }

            case 1:
            {
                m_Chance = reader.ReadDouble();
                goto case 0;
            }

            case 0:
            {
                m_Active    = reader.ReadBool();
                m_Creature  = reader.ReadString();
                m_Message   = reader.ReadString();
                m_Location  = reader.ReadPoint3D();
                m_HomeRange = reader.ReadInt();
                m_Team      = reader.ReadInt();
                m_Limit     = reader.ReadInt();
                DateTime.TryParse(reader.ReadString(), out m_NextSpawn);
                m_Delay = reader.ReadTimeSpan();

                int size = reader.ReadInt();
                m_Spawned = new ArrayList(size);

                for (int i = 0; i < size; ++i)
                {
                    //IEntity e = World.FindEntity(reader.ReadInt());
                    IEntity e = reader.ReadEntity();

                    if (e != null)
                    {
                        m_Object = new SpawnedObject(e);
                        m_Spawned.Add(m_Object);
                    }
                }

                break;
            }
            }

            if (version == 0)
            {
                m_Chance = 1;
            }
        }
Пример #6
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);
                    }
                }
            }
        }
Пример #7
0
        public UberSpawnerEntry(UberSpawner 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);
                    }
                }
            }
        }
Пример #8
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            m_Spawned = new Dictionary <ISpawnable, 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].SpawnedMaxCount = 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].SpawnedProbability = 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.UtcNow;
                }

                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].SpawnedName = 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)
                    {
                        ISpawnable e = reader.ReadEntity() as ISpawnable;

                        if (e != null)
                        {
                            if (e is BaseCreature)
                            {
                                ((BaseCreature)e).RemoveIfUntamed = true;
                            }

                            e.Spawner = this;

                            for (int j = 0; j < m_Entries.Count; j++)
                            {
                                if (SpawnerType.GetType(m_Entries[j].SpawnedName) == e.GetType())
                                {
                                    m_Entries[j].Spawned.Add(e);
                                    m_Spawned.Add(e, m_Entries[j]);
                                    break;
                                }
                            }
                        }
                    }
                }

                DoTimer(ts);

                break;
            }
            }

            if (version < 4)
            {
                m_WalkingRange = m_HomeRange;
            }
        }
        /*
        private IEntity ReadEntity( GenericReader reader )
        {
            return World.FindEntity( reader.ReadInt() );
        }
        */
        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );

            int version = reader.ReadInt();

            switch ( version )
            {
                case 0:
                {
                    m_EffectDelay = reader.ReadTimeSpan();
                    m_TriggerDelay = reader.ReadTimeSpan();
                    m_SoundDelay = reader.ReadTimeSpan();

                    m_Source = reader.ReadEntity();
                    m_Target = reader.ReadEntity();
                    m_Trigger = reader.ReadItem() as EffectController;

                    m_FixedDirection = reader.ReadBool();
                    m_Explodes = reader.ReadBool();
                    m_PlaySoundAtTrigger = reader.ReadBool();

                    m_EffectType = (ECEffectType)reader.ReadEncodedInt();
                    m_EffectLayer = (EffectLayer)reader.ReadEncodedInt();
                    m_TriggerType = (EffectTriggerType)reader.ReadEncodedInt();

                    m_ItemID = reader.ReadEncodedInt();
                    m_Hue = reader.ReadEncodedInt();
                    m_RenderMode = reader.ReadEncodedInt();
                    m_Speed = reader.ReadEncodedInt();
                    m_Duration = reader.ReadEncodedInt();
                    m_ParticleEffect = reader.ReadEncodedInt();
                    m_ExplodeParticleEffect = reader.ReadEncodedInt();
                    m_ExplodeSound = reader.ReadEncodedInt();
                    m_Unknown = reader.ReadEncodedInt();
                    m_SoundID = reader.ReadEncodedInt();
                    m_TriggerRange = reader.ReadEncodedInt();

                    break;
                }
            }
        }
Пример #10
0
        public UberSpawnerEntry(UberSpawner 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);
                }
            }
        }