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