Ejemplo n.º 1
0
        public static void LoadFromJson(string modName, Catalog.Category category)
        {
            if (String.IsNullOrEmpty(modName) || modName == "Default")
            {
                return;
            }
            var           dirList    = Directory.GetDirectories(ModConfiguration.streamingAssetsPath + "/" + ModConfiguration.current.modName + "/", "*", SearchOption.TopDirectoryOnly);
            List <string> dirStrList = new List <string>();

            dirStrList.AddRange(dirList);
            dirStrList.Add(ModConfiguration.streamingAssetsPath + "/" + ModConfiguration.current.modName);
            foreach (string text2 in dirStrList)
            {
                if (text2.Contains("Default"))
                {
                    return;
                }
                string fileName = Path.GetFileName(text2);

                foreach (FileInfo fileInfo in new DirectoryInfo(text2 + "/").GetFiles(category.ToString() + "_*.json", SearchOption.AllDirectories))
                {
                    Debug.Log("JSON loader - Found file: " + fileInfo.Name);
                    string value = File.ReadAllText(fileInfo.FullName);
                    value = value.Replace("$type", "type");
                    var sub = Regex.Match(value, "\\\"type\\\":\\s+\\\"(\\w+\\.[\\w\\d]+, [\\w\\d-]+)\\\"", RegexOptions.IgnoreCase | RegexOptions.Singleline);

                    string typeStr = sub.Groups[1].Value;

                    Type type = Type.GetType(typeStr);

                    if (type == null)
                    {
                        Debug.Log("Type is null, loading all DLL's inside mod directory ---");
                        var asm = LoadDLL();
                        foreach (var atype in asm.GetTypes())
                        {
                            if (atype.FullName.Contains("+"))
                            {
                                continue;
                            }
                            var r = typeStr.Split('.')[1].Split(',')[0]; // F*****G YOLO
                            if (atype.Name.Contains(r))
                            {
                                type = TypeHelper.GenerateMissingType(atype);
                                Debug.Log("Type " + r + " was found in " + asm.FullName + " successful");
                                break;
                            }
                        }
                        if (type == null)
                        {
                            Debug.LogWarning("Failed to find type... type is null, skipping...");
                            continue;
                        }
                    }
                    TypeHelper.GenerateMissingType(type);

                    var usedType = ModConfiguration.generatedTypes.Find(x => x.Name == "CatalogData");
                    try
                    {
                        CatalogData catalogData = Activator.CreateInstance(ModConfiguration.generatedTypes.Find(x => x.Name == type.Name)) as CatalogData;

                        catalogData = JsonConvert.DeserializeObject(value, usedType) as CatalogData;

                        if (catalogData != null)
                        {
                            ModConfiguration.data[(int)category].Add(catalogData);
                        }
                    }
                    catch (Exception e)
                    {
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public static void LoadFromJson(Catalog.Category category)
        {
            ModConfiguration.data[(int)category] = new List <dynamic>();

            if (ModConfiguration.streamingAssetsPath == null)
            {
                return;
            }
            GetDefaultJsonSettings();
            foreach (string text2 in Directory.GetDirectories(ModConfiguration.streamingAssetsPath + "/" + "Default"))
            {
                string fileName = Path.GetFileName(text2);
                foreach (FileInfo fileInfo in new DirectoryInfo(text2 + "/").GetFiles(category.ToString() + "_*.json", SearchOption.AllDirectories))
                {
                    Debug.Log("JSON loader - Found file: " + fileInfo.Name);
                    string value = File.ReadAllText(fileInfo.FullName);
                    value = value.Replace("$type", "type");
                    var sub = Regex.Match(value, "\\\"type\\\":\\s+\\\"(\\w+\\.[\\w\\d]+, [\\w\\d-]+)\\\"", RegexOptions.IgnoreCase | RegexOptions.Singleline);

                    string typeStr      = sub.Groups[1].Value;
                    Type   type         = Type.GetType(typeStr);
                    var    internalType = TypeHelper.GenerateMissingType(type);

                    var usedType = internalType;
                    try
                    {
                        dynamic catalogData = Activator.CreateInstance(internalType);

                        catalogData = JsonConvert.DeserializeObject(value, usedType) as CatalogData;

                        catalogData.type = typeStr;

                        if (catalogData != null)
                        {
                            ModConfiguration.data[(int)category].Add(catalogData);
                        }
                    }
                    catch (Exception e)
                    {
                    }
                }
            }
        }