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); }
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'); }
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); }
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); }
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(); }
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; }
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(); } } }
public static void ForEachOfType(GUCVobTypes type, Action <BaseVobDef> action) { BaseVobInstance.ForEachOfType(type, v => action((BaseVobDef)v.ScriptObject)); }
public static void ForEach(Action <ItemDef> action) { BaseVobInstance.ForEachOfType(GUCVobTypes.Item, i => action((ItemDef)i.ScriptObject)); }