Пример #1
0
        public static bool TryGetDef <T>(int id, out T def) where T : BaseVobDef
        {
            BaseVobInstance instance;

            if (BaseVobInstance.TryGet(id, out instance) && instance.ScriptObject is T)
            {
                def = (T)instance.ScriptObject;
                return(true);
            }
            def = default(T);
            return(false);
        }
Пример #2
0
            public static void WriteDynamics(GameClient client)
            {
                if (dynamics == null)
                {
                    if (BaseVobInstance.GetCountDynamics() > 0 && ModelInstance.CountDynamics > 0)
                    {
                        PacketWriter strm = new PacketWriter();

                        // MODELS
                        if (strm.Write(ModelInstance.CountDynamics > 0))
                        {
                            strm.Write((ushort)ModelInstance.CountDynamics);
                            ModelInstance.ForEachDynamic(model =>
                            {
                                model.WriteStream(strm);
                            });
                        }

                        // INSTANCES
                        if (strm.Write(BaseVobInstance.GetCountDynamics() > 0))
                        {
                            strm.Write((ushort)BaseVobInstance.GetCountDynamics());
                            BaseVobInstance.ForEachDynamic(v =>
                            {
                                strm.Write((byte)v.ScriptObject.GetVobType());
                                v.WriteStream(strm);
                            });
                        }

                        byte[] arr    = strm.CopyData();
                        int    decomp = arr.Length;
                        using (var ms = new System.IO.MemoryStream(decomp))
                        {
                            using (var ds = new System.IO.Compression.DeflateStream(ms, System.IO.Compression.CompressionMode.Compress))
                            {
                                ds.Write(arr, 0, decomp);
                            }
                            arr = ms.ToArray();
                        }

                        strm.Reset();
                        strm.Write((byte)ServerMessages.DynamicsMessage);
                        strm.Write(decomp);
                        strm.Write(arr, 0, arr.Length);
                        dynamics = strm.CopyData();
                    }
                    else
                    {
                        return;
                    }
                }
                client.Send(dynamics, dynamics.Length, NetPriority.Low, NetReliability.Reliable, '\0');
            }
Пример #3
0
        public void ReadInventoryProperties(PacketReader stream)
        {
            ushort       instanceid = stream.ReadUShort();
            ItemInstance inst;

            if (!BaseVobInstance.TryGet(instanceid, out inst))
            {
                throw new Exception("Instance-ID not found! " + instanceid);
            }
            SetInstance(inst);

            this.amount = stream.ReadUShort();

            this.ScriptObject.ReadInventoryProperties(stream);
        }
Пример #4
0
        public void ReadEquipProperties(PacketReader stream)
        {
            this.ID = stream.ReadByte();

            ushort       instanceID = stream.ReadUShort();
            ItemInstance inst;

            if (!BaseVobInstance.TryGet(instanceID, out inst))
            {
                throw new Exception("ItemInstance-ID not found! " + instanceID);
            }
            SetInstance(inst);

            this.ScriptObject.ReadEquipProperties(stream);
        }
Пример #5
0
        protected override void ReadProperties(PacketReader stream)
        {
            base.ReadProperties(stream);

            int             instanceID = stream.ReadUShort();
            BaseVobInstance inst;

            if (!BaseVobInstance.TryGet(instanceID, out inst))
            {
                throw new Exception("Instance ID not found! " + instanceID);
            }
            SetInstance(inst);

            this.pos = stream.ReadVec3f();
            this.ang = stream.ReadAngles();
        }
Пример #6
0
        protected void SetInstance(BaseVobInstance instance)
        {
            CanChangeNow();

            if (instance == null)
            {
                throw new ArgumentNullException("Instance is null!");
            }

            if (instance.GetType() != InstanceType)
            {
                throw new ArgumentException(string.Format("Instance must be of type {0}! Is {1}.", InstanceType, instance.GetType()));
            }

            if (!instance.IsCreated)
            {
                throw new ArgumentException("Instance is not created!");
            }

            this.instance = instance;
        }
Пример #7
0
            public static void ReadDynamics(PacketReader stream)
            {
                Logger.Log("Read dynamic instances: {0} Bytes.", stream.Length);

                int decomp = stream.ReadInt();

                byte[] data = new byte[decomp];
                using (var ms = new System.IO.MemoryStream(stream.GetRemainingData()))
                    using (var ds = new System.IO.Compression.DeflateStream(ms, System.IO.Compression.CompressionMode.Decompress))
                    {
                        ds.Read(data, 0, decomp);
                    }
                stream.Load(data, decomp);

                // Read models
                if (stream.ReadBit())
                {
                    int count = stream.ReadUShort();
                    for (int i = 0; i < count; i++)
                    {
                        ModelInstance model = ScriptManager.Interface.CreateModelInstance();
                        model.ReadStream(stream);
                        model.ScriptObject.Create();
                    }
                }

                // Read vob instances
                if (stream.ReadBit())
                {
                    int count = stream.ReadUShort();
                    for (int i = 0; i < count; i++)
                    {
                        byte            type = stream.ReadByte();
                        BaseVobInstance inst = ScriptManager.Interface.CreateInstance(type);
                        inst.ReadStream(stream);
                        inst.ScriptObject.Create();
                    }
                }
            }
Пример #8
0
 public static void ForEachOfType(GUCVobTypes type, Action <BaseVobDef> action)
 {
     BaseVobInstance.ForEachOfType(type, v => action((BaseVobDef)v.ScriptObject));
 }
Пример #9
0
 public static void ForEach(Action <ItemDef> action)
 {
     BaseVobInstance.ForEachOfType(GUCVobTypes.Item, i => action((ItemDef)i.ScriptObject));
 }