static void Skill_Data_IsExecStage(YotogiStage.Data stageData, ref bool __result, Skill.Data __instance) { for (int i = 0; i < stageData.prefabName.Length; i++) { string key = stageData.prefabName[i].ToString().Trim().ToLower(); //Initialize if (YotogiAnywhere.defaultAvailableSkills == null) { YotogiAnywhere.defaultAvailableSkills = new Dictionary <string, List <int> >(); } //Add Stage to dictionary if (!YotogiAnywhere.defaultAvailableSkills.ContainsKey(key)) { YotogiAnywhere.defaultAvailableSkills[key] = new List <int>(); } //Add skill id to stage's list if (__result && !YotogiAnywhere.defaultAvailableSkills[key].Contains(__instance.id)) { YotogiAnywhere.defaultAvailableSkills[key].Add(__instance.id); } UnityEngine.Debug.Log("YotogiAnywhere: Skill_Data_IsExecStage Postfix: " + key); } __result = __result || YotogiAnywhere.newStageIds.Contains(stageData.id) || YotogiAnywhere.enableAllSkillsAllLocations; }
static void YotogiStage_CreateData() { //Get the Dictionary Dictionary <int, YotogiStage.Data> basicsData = (Dictionary <int, YotogiStage.Data>) typeof(YotogiStage).GetField("basicDatas", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null); //Create folders if they dont exist string mainPath = UTY.gameProjectPath + "\\Mod\\[YotogiAnywhere]\\[NewStages]"; if (!Directory.Exists(mainPath)) { Directory.CreateDirectory(mainPath); } if (YotogiAnywhere.newStageIds == null) { YotogiAnywhere.newStageIds = new List <int>(); } //Get the data in folders string[] newStagesDirs = Directory.GetDirectories(mainPath); for (int i = 0; i < newStagesDirs.Length; i++) { DirectoryInfo di = new DirectoryInfo(newStagesDirs[i]); string stageName = di.Name; //Wow this is bad I should have done something better than a bunch of if statements if (Directory.Exists(mainPath + "\\" + stageName + "\\[Day]")) { if (Directory.Exists(mainPath + "\\" + stageName + "\\[Night]")) { int maxId = -1; YotogiStage.Data stageData = null; //Try to find stage in existing data foreach (KeyValuePair <int, YotogiStage.Data> kvp in basicsData) { if (kvp.Value.uniqueName.Equals(stageName)) { stageData = kvp.Value; break; } //Also get the max Id maxId = System.Math.Max(maxId, kvp.Value.id); } //Create new if it does not exist if (stageData == null) { //Increment from max Id maxId += 10; //Add to list of new ones if (!YotogiAnywhere.newStageIds.Contains(maxId)) { YotogiAnywhere.newStageIds.Add(maxId); CsvCommonIdManager commonIdManager = (CsvCommonIdManager)typeof(YotogiStage).GetField("commonIdManager", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null); commonIdManager.idMap.Add(maxId, new KeyValuePair <string, string>(stageName, "")); commonIdManager.nameMap.Add(stageName, maxId); typeof(YotogiStage).GetField("commonIdManager", BindingFlags.Static | BindingFlags.NonPublic).SetValue(null, commonIdManager); } //CsvParser is a pain, and the YotogiStage.Data constructor is a pain, so reuse yotogi_stage_list //It wont find the id so it will be ok string f_strFileName = "yotogi_stage_list.nei"; AFileBase afileBase = GameUty.FileSystem.FileOpen(f_strFileName); CsvParser csvParser = new CsvParser(); csvParser.Open(afileBase); stageData = new YotogiStage.Data(-1, csvParser); //Set id, only field we really need right now typeof(YotogiStage.Data).GetField("id", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, maxId); //Cleanup csvParser.Dispose(); } //Get BG and Thumbnail from folders string prefab_bg = null; string prefab_bg_night = null; //Day if (Directory.GetFiles(mainPath + "\\" + stageName + "\\[Day]").Where(f => f.EndsWith(".asset_bg")).ToList().Count != 0) { prefab_bg = Path.GetFileNameWithoutExtension(new FileInfo(Directory.GetFiles(mainPath + "\\" + stageName + "\\[Day]").Where(f => f.EndsWith(".asset_bg")).ToList()[0]).Name); } else if (Directory.GetFiles(mainPath + "\\" + stageName + "\\[Day]").Where(f => f.EndsWith(".room")).ToList().Count != 0) { prefab_bg = Path.GetFileNameWithoutExtension(new FileInfo(Directory.GetFiles(mainPath + "\\" + stageName + "\\[Day]").Where(f => f.EndsWith(".room")).ToList()[0]).Name); } else { UnityEngine.Debug.Log("No.asset_bg or .room [Day] file found for " + stageName); } //Night if (Directory.GetFiles(mainPath + "\\" + stageName + "\\[Night]").Where(f => f.EndsWith(".asset_bg")).ToList().Count != 0) { prefab_bg_night = Path.GetFileNameWithoutExtension(new FileInfo(Directory.GetFiles(mainPath + "\\" + stageName + "\\[Night]").Where(f => f.EndsWith(".asset_bg")).ToList()[0]).Name); } else if (Directory.GetFiles(mainPath + "\\" + stageName + "\\[Night]").Where(f => f.EndsWith(".room")).ToList().Count != 0) { prefab_bg_night = Path.GetFileNameWithoutExtension(new FileInfo(Directory.GetFiles(mainPath + "\\" + stageName + "\\[Night]").Where(f => f.EndsWith(".room")).ToList()[0]).Name); } else { UnityEngine.Debug.Log("No.asset_bg or .room [Night] file found for " + stageName); } string thumbnail = null; string thumbnail_night = null; //Day if (Directory.GetFiles(mainPath + "\\" + stageName + "\\[Day]").Where(f => f.EndsWith(".tex")).ToList().Count != 0) { thumbnail = new FileInfo(Directory.GetFiles(mainPath + "\\" + stageName + "\\[Day]").Where(f => f.EndsWith(".tex")).ToList()[0]).Name; } else { UnityEngine.Debug.Log("No .tex [Day] thumbnail file found for " + stageName); } //Night if (Directory.GetFiles(mainPath + "\\" + stageName + "\\[Night]").Where(f => f.EndsWith(".tex")).ToList().Count != 0) { thumbnail_night = new FileInfo(Directory.GetFiles(mainPath + "\\" + stageName + "\\[Night]").Where(f => f.EndsWith(".tex")).ToList()[0]).Name; } else { UnityEngine.Debug.Log("No .tex [Night] thumbnail file found for " + stageName); } if (prefab_bg == null || prefab_bg_night == null || thumbnail == null || thumbnail_night == null) { UnityEngine.Debug.Log("YotogiAnywhere failed to create Location found for " + stageName); break; } //Create a settings json if it doesnt exist if (!File.Exists(mainPath + "\\" + stageName + "/settings.json")) { YotogiStage_Data_Json newSetting = new YotogiStage_Data_Json(); File.WriteAllText(mainPath + "\\" + stageName + "/settings.json", Newtonsoft.Json.JsonConvert.SerializeObject(newSetting)); } //Settings from Directory typeof(YotogiStage.Data).GetField("uniqueName", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, stageName); typeof(YotogiStage.Data).GetField("drawName", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, stageName); typeof(YotogiStage.Data).GetField("prefabName", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, new string[] { prefab_bg, prefab_bg_night }); typeof(YotogiStage.Data).GetField("thumbnailName", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, new string[] { thumbnail, thumbnail_night }); //Some Generic settings we do not worry about typeof(YotogiStage.Data).GetField("sortId", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, stageData.id); typeof(YotogiStage.Data).GetField("drawClubGrade", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, 1); typeof(YotogiStage.Data).GetField("requestClubGrade", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, 1); typeof(YotogiStage.Data).GetField("requestFacilityIds", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, new int[] { }); //Settings file YotogiStage_Data_Json settings = Newtonsoft.Json.JsonConvert.DeserializeObject <YotogiStage_Data_Json>(File.ReadAllText(mainPath + "\\" + stageName + "/settings.json")); typeof(YotogiStage.Data).GetField("bgmFileName", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, settings.bgm); typeof(YotogiStage.Data).GetField("stageSelectCameraData", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, new YotogiStage.Data.Camera(new UnityEngine.Vector3(settings.camera_pos_x, settings.camera_pos_y, settings.camera_pos_z), new UnityEngine.Vector2(settings.camera_rot_x, settings.camera_rot_y), settings.camera_radius)); typeof(YotogiStage.Data).GetField("skillSelectcharacterData", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, new YotogiStage.Data.Character(new UnityEngine.Vector3(settings.kasuko_x, settings.kasuko_y, settings.kasuko_z), new UnityEngine.Vector3(settings.kasuko_rot_x, settings.kasuko_rot_y, settings.kasuko_rot_z), new UnityEngine.Vector2(settings.skill_x, settings.skill_y))); typeof(YotogiStage.Data).GetField("skillSelectLightData", BindingFlags.Instance | BindingFlags.Public).SetValue(stageData, new YotogiStage.Data.Light(new UnityEngine.Vector3(settings.light_x, settings.light_y, settings.light_z), settings.light_intensity)); //Update the entry basicsData[stageData.id] = stageData; } else { UnityEngine.Debug.Log("YotogiAnywhere: YotogiStage_CreateData Missing: " + mainPath + "\\" + stageName + "\\[Night]"); } } else { UnityEngine.Debug.Log("YotogiAnywhere: YotogiStage_CreateData Missing: " + mainPath + "\\" + stageName + "\\[Day]"); } } //Update entire dictionary as precaution typeof(YotogiStage).GetField("basicDatas", BindingFlags.Static | BindingFlags.NonPublic).SetValue(null, basicsData); }