コード例 #1
0
        protected FieldData[] ProcessJSONFields(uint instanceChecksum, bool overrideThinger = false)    // what no
        {
            if (!InstanceJSON.ContainsKey(instanceChecksum))
            {
                return(null);
            }
            FieldData[] output = new FieldData[InstanceJSON[instanceChecksum].GetFields().Length];

            uint fieldIndex = 0;

            foreach (STUInstanceJSON.STUFieldJSON field in InstanceJSON[instanceChecksum].GetFields())
            {
                output[fieldIndex] = new FieldData(field);
                if (output[fieldIndex].TypeInstanceChecksum != 0)
                {
                    if (!InternalInstances.ContainsKey(output[fieldIndex].TypeInstanceChecksum))
                    {
                        InternalInstances[output[fieldIndex].TypeInstanceChecksum] = null; // prevent stackoverflow
                        InternalInstances[output[fieldIndex].TypeInstanceChecksum] =
                            GetInstanceData(output[fieldIndex].TypeInstanceChecksum, null);
                    }
                }
                fieldIndex++;
            }
            return(output);
        }
コード例 #2
0
        public InstanceData GetInstanceData(uint instanceChecksum)
        {
            if (!InstanceJSON.ContainsKey(instanceChecksum))
            {
                Debugger.Log(0, "STULib",
                             $"[Version1HashComparer]: Instance {instanceChecksum:X} does not exist in the dataset\n");
                return(null);
            }
            STUInstanceJSON json = InstanceJSON[instanceChecksum];

            if (json.Parent != null && !InternalInstances.ContainsKey(json.ParentChecksum))
            {
                InternalInstances[json.ParentChecksum] = GetInstanceData(json.ParentChecksum);
            }

            // get all children
            // WARNING: NOT THREAD SAFE
            if (GetAllChildren)
            {
                foreach (KeyValuePair <uint, STUInstanceJSON> instanceJSON in InstanceJSON)
                {
                    if (instanceJSON.Value.ParentChecksum != json.Hash ||
                        InternalInstances.ContainsKey(instanceJSON.Value.Hash))
                    {
                        continue;
                    }
                    InternalInstances[instanceJSON.Value.Hash] = null;
                    InternalInstances[instanceJSON.Value.Hash] = GetInstanceData(instanceJSON.Value.Hash);
                }
            }

            FieldData[] jsonFields = ProcessJSONFields(instanceChecksum, true);
            return(new InstanceData {
                WrittenFields = null,
                Fields = jsonFields,
                Checksum = instanceChecksum,
                ParentType = json.Parent,
                ParentChecksum = json.ParentChecksum
            });
        }