public void Write(StringBuilder output) { int fieldIndex = 0; STUInstanceJSON instanceData = Version2Comparer.InstanceJSON[Hash]; const string indent = " "; foreach (STUInstanceJSON.STUFieldJSON field in instanceData.Fields) { FieldCode fieldCode = Fields.First(x => x.Hash == field.Hash); output.AppendLine(indent + fieldCode.HeaderLine); output.AppendLine(indent + fieldCode.ContentLine); if (fieldIndex != Fields.Count - 1) { output.AppendLine(); } fieldIndex++; } if (ExtraLines.Count > 0) { output.AppendLine(); } foreach (string extraLine in ExtraLines) { output.AppendLine(extraLine); } }
public static InstanceData GetData(uint checksum) { if (!InstanceJSON.ContainsKey(checksum)) { Debugger.Log(0, "STULib", $"[Version2HashComparer]: Instance {checksum:X} does not exist in the dataset\n"); return(null); } STUInstanceJSON json = InstanceJSON[checksum]; FieldData[] fields = new FieldData[InstanceJSON[checksum].GetFields().Length]; uint fieldIndex = 0; foreach (STUInstanceJSON.STUFieldJSON field in InstanceJSON[checksum].GetFields()) { fields[fieldIndex] = new FieldData(field); fieldIndex++; } return(new InstanceData { WrittenFields = null, Fields = fields, Checksum = checksum, ParentType = json.Parent, ParentChecksum = json.ParentChecksum }); }
public static uint[] GetParentTree(StructuredDataInfo info, STUInstanceJSON instanceJSON) { if (info.BrokenInstances.Contains(instanceJSON.Hash)) { return(new uint[0]); } if (instanceJSON.Parent == 0) { return(new uint[0]); } uint[] parents = new[] { instanceJSON.Parent }.Concat(GetParentTree(info, info.Instances[instanceJSON.Parent])).ToArray(); return(parents); }
public InstanceData GetInstanceData(uint instanceChecksum, BinaryReader reader, uint?instanceSize = null, int?fieldListIndex = null) { if (!InstanceJSON.ContainsKey(instanceChecksum)) { Debugger.Log(0, "STULib", $"[Version2HashComparer]: Instance {instanceChecksum:X} does not exist in the dataset\n"); return(null); } STUInstanceJSON json = InstanceJSON[instanceChecksum]; WrittenFieldData[] fields = null; if (json.Parent != null && !InternalInstances.ContainsKey(json.ParentChecksum)) { bool beforeGetAll = GetAllChildren; GetAllChildren = false; // we do not need parent's children InternalInstances[json.ParentChecksum] = GetInstanceData(json.ParentChecksum, reader); GetAllChildren = beforeGetAll; } // get all children // WARNING: NOT THREAD SAFE // if (GetAllChildren) { // foreach (KeyValuePair<uint,STUInstanceJSON> instanceJSON in InstanceJSON.Where(x => x.Value.ParentChecksum != 0 && x.Value.ParentChecksum == instanceChecksum)) { // if (instanceJSON.Value.ParentChecksum != instanceChecksum) continue; // wat // if (InternalInstances.ContainsKey(instanceJSON.Value.Hash)) continue; // InternalInstances[instanceJSON.Value.Hash] = null; // InternalInstances[instanceJSON.Value.Hash] = GetInstanceData(instanceJSON.Value.Hash, reader); // } // } if (instanceSize != null && fieldListIndex != null && reader != null) { fields = FakeReadInstance(InstanceFields[(int)fieldListIndex], reader, (int)instanceSize - 4, instanceChecksum); } FieldData[] jsonFields = ProcessJSONFields(instanceChecksum); return(new InstanceData { WrittenFields = fields, Fields = jsonFields, Checksum = instanceChecksum, ParentType = json.Parent, ParentChecksum = json.ParentChecksum }); }