Beispiel #1
0
 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);
 }
Beispiel #2
0
 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);
 }
Beispiel #3
0
 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);
 }