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); }
public FieldData(STUInstanceJSON.STUFieldJSON jsonField) { Checksum = jsonField.Hash; Name = jsonField.Name; Type = jsonField.Type; SerializationType = jsonField.SerializationType; Size = jsonField.Size; }
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); }
public WrittenFieldData(STUInstanceJSON.STUFieldJSON jsonField) : base(jsonField) { }