Ejemplo n.º 1
0
            public FieldCode(STUInstanceJSON.STUFieldJSON field)
            {
                FieldData wrappedField = new FieldData(field);

                ClassBuilder.WriteField(out string headerLine, out string contentLine, "    ", "STULib.Types.Dump", wrappedField, InstanceNames, FieldNames, EnumNames, true);

                InitFromLines(headerLine, contentLine);
            }
Ejemplo n.º 2
0
 public FieldData(STUInstanceJSON.STUFieldJSON jsonField)
 {
     Checksum          = jsonField.Hash;
     Name              = jsonField.Name;
     Type              = jsonField.Type;
     SerializationType = jsonField.SerializationType;
     Size              = jsonField.Size;
 }
Ejemplo n.º 3
0
        protected WrittenFieldData[] ReadFields(STUInstanceField[] definedFields, BinaryReader reader, uint instanceChecksum)
        {
            if (InstanceJSON == null)
            {
                return(null);
            }
            if (!InstanceJSON.ContainsKey(instanceChecksum))
            {
                Debugger.Log(0, "STULib", $"[Version2HashComparer]: Instance {instanceChecksum:X} does not exist in the dataset\n");
                return(new WrittenFieldData[0]);
            }

            WrittenFieldData[] output = new WrittenFieldData[definedFields.Length];

            for (int i = 0; i < definedFields.Length; i++)
            {
                STUInstanceField             field     = definedFields[i];
                STUInstanceJSON.STUFieldJSON jsonField = InstanceJSON[instanceChecksum].GetField(field.FieldChecksum);

                if (jsonField == null)
                {
                    Debugger.Log(0, "STULib",
                                 $"[Version2HashComparer]: Field {instanceChecksum:X}:{field.FieldChecksum:X} does not exist in the dataset\n");
                    continue;
                }

                WrittenFieldData outputField = new WrittenFieldData(jsonField);
                using (SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider()) {
                    /*switch (jsonField.SerializationType) {
                     *  case 2:
                     *  case 3:
                     *      reader.BaseStream.Position += field.FieldSize;
                     *      break;
                     *  case 4:
                     *  case 5:
                     *      reader.BaseStream.Position += reader.ReadUInt32();
                     *      // outputField.SHA1 = sha1.ComputeHash(BitConverter.GetBytes(jsonField.Size));
                     *      break;
                     *  case 8:
                     *  case 0:
                     *      outputField.SHA1 = sha1.ComputeHash(reader.ReadBytes((int) field.FieldSize));
                     *      break;
                     *  case 9:
                     *  case 1:
                     *      int offset = reader.ReadInt32();
                     *      metadata.Position = offset;
                     *      STUArrayInfo array = metadataReader.Read<STUArrayInfo>();
                     *      outputField.ArraySHA1 = new FieldSHA1[array.Count];
                     *      int arrayItemSize = 0; // todo
                     *      if (arrayItemSize == 0) {
                     *          break;
                     *      }
                     *      for (int j = 0; j < array.Count; j++) {
                     *          outputField.ArraySHA1[i] = sha1.ComputeHash(metadataReader.ReadBytes(arrayItemSize));
                     *      }
                     *      break;
                     *  case 7: // todo hashmap
                     *      Debugger.Break();
                     *      break;
                     *  case 10:
                     *  case 12:
                     *      Common.STUGUID f = new Common.STUGUID(reader.ReadUInt64());
                     *      DemangleInstance(f, field.FieldChecksum);
                     *      outputField.SHA1Demangle = sha1.ComputeHash(BitConverter.GetBytes(f));
                     *      break;
                     *  case 11:
                     *  case 13:
                     *      int offset2 = reader.ReadInt32();
                     *      metadata.Position = offset2;
                     *      STUArrayInfo array2 = metadataReader.Read<STUArrayInfo>();
                     *      outputField.ArraySHA1 = new FieldSHA1[array2.Count];
                     *      for (int j = 0; j < array2.Count; j++) {
                     *          FakeArrayGUID fakeArrayGUID = metadataReader.Read<FakeArrayGUID>();
                     *          Common.STUGUID f2 = new Common.STUGUID(fakeArrayGUID.Key, fakeArrayGUID.Padding);
                     *          DemangleInstance(f2, field.FieldChecksum);
                     *          outputField.ArraySHA1[j] = sha1.ComputeHash(BitConverter.GetBytes(f2));
                     *      }
                     *      break;
                     *  // case 10: // todo guid
                     *  // case 11: // todo guid array
                     *  //     break;
                     *
                     *  // case 0: Primitive
                     *  // case 1: STUArray<STU{stuField.Type}Primitive>
                     *  // case 2: STUEmbed<{stuField.Type}>    // ex chained
                     *  // case 3: STUArray<STUEmbed<{stuField.Type}>>
                     *  // case 4: STUInline<{stuField.Type}>  // ex nested
                     *  // case 5: STUArray<STUInline<{stuField.Type}>>
                     *  // case 7: STUHashMap<{stuField.Type}>
                     *  // case 8: Enums.{stuField.Type}?
                     *  // case 9: STUArray<Enums.{stuField.Type}?>
                     *  // case 10: STUAssetRef<ulong>
                     *  // case 11: STUArray<STUAssetRef<ulong>>
                     *  // case 12: STUAssetRef<{stuField.Type}>
                     *  // case 13: STUArray<STUAssetRef<{stuField.Type}>>
                     * }*/
                }
                output[i] = outputField;
            }

            return(output);
        }
Ejemplo n.º 4
0
 public WrittenFieldData(STUInstanceJSON.STUFieldJSON jsonField) : base(jsonField)
 {
 }