public BaseItem(ProtoBuf.Item proto) { protobuf = proto; instanceData = new BaseInstanceData(proto.instanceData); conditionData = new BaseConditionData(proto.conditionData); owners = new List <BaseOwnerFraction>(); proto.owners.ForEach(item => owners.Add(new BaseOwnerFraction(item))); contents = new BaseItemContainer(proto.contents); }
private static object InstantiateType(Type type) { try { ProtoBuf.Item item = new ProtoBuf.Item(); var element = Activator.CreateInstance(type); IntPtr baseAddress = TypeDelegator.GetTypeHandle(element).Value; var fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance); foreach (var field in fields) { if (field.FieldType.IsEquivalentTo(typeof(String))) { field.SetValue(element, "RI"); } else if (field.FieldType.IsEquivalentTo(typeof(Byte[]))) { field.SetValue(element, new byte[0]); } else if (typeof(IList).IsAssignableFrom(field.FieldType)) { var itemType = field.FieldType.GetGenericArguments()[0]; object listItem = null; if (itemType.IsEquivalentTo(typeof(ProtoBuf.PlayerNameID))) { listItem = InstantiateType(typeof(ProtoBuf.PlayerNameID)); } else if (itemType.IsEquivalentTo(typeof(ProtoBuf.RespawnInformation.SpawnOptions))) { listItem = InstantiateType(typeof(ProtoBuf.RespawnInformation.SpawnOptions)); } else if (itemType.IsEquivalentTo(typeof(ProtoBuf.ClientReady.ClientInfo))) { listItem = InstantiateType(typeof(ProtoBuf.ClientReady.ClientInfo)); } else { listItem = Activator.CreateInstance(itemType); } var list = Activator.CreateInstance(field.FieldType); field.FieldType.GetMethod("Add").Invoke(list, new[] { listItem }); field.SetValue(element, list); } else if (typeof(IProto).IsAssignableFrom(field.FieldType)) { field.SetValue(element, InstantiateType(field.FieldType)); } else { field.SetValue(element, Activator.CreateInstance(field.FieldType)); } } return(element); } catch (Exception ex) { Console.WriteLine(ex); } return(null); }
public ProtoBuf.Item GetProtobufObject() { ProtoBuf.Item item = new ProtoBuf.Item { UID = this.UID, amount = (int)this.Amount, conditionData = new ProtoBuf.Item.ConditionData { condition = this.Condition, maxCondition = this.Information.MaxCondition }, itemid = (int)this.Information.ItemID, slot = this.PositionInContainer, contents = null, flags = (int)ItemFlags, heldEntity = HeldEnityUID, skinid = this.SkinID }; return(item); }