/// <summary> /// in FastTravelScreen - Searchs for custom SceneID, sets the the currentShelter to null to avoid nullref and stores it in a static var /// </summary> private static Menu.MenuScene.SceneID FastTravelScreen_TitleSceneID(On.Menu.FastTravelScreen.orig_TitleSceneID orig, Menu.FastTravelScreen self, string regionName) { // Debug CustomWorldMod.Log($"Accesible regions count [{self.accessibleRegions.Count}] out of [{FastTravelScreen.GetRegionOrder().Count}]"); //CustomWorldMod.sceneCustomID = string.Empty; MenuScene.SceneID ID = MenuScene.SceneID.Empty; CustomWorldMod.Log($"Custom Regions: TitleSceneID {regionName}"); try { ID = (MenuScene.SceneID)Enum.Parse(typeof(MenuScene.SceneID), $"Landscape_{regionName}"); } catch (Exception e) { CustomWorldMod.Log($"Enum not found [{e}]"); } if (orig(self, regionName) == Menu.MenuScene.SceneID.Empty && ID != MenuScene.SceneID.Empty) { CustomWorldMod.Log($"Custom Regions: TitleSceneID. Using custom SceneID [{ID}]"); // removing the current shelter to avoid Array index out of range in Fastravelscreen ctor. temporalShelter = self.currentShelter; self.currentShelter = null; return(ID); } return(orig(self, regionName)); }
private static void FastTravelScreen_InitiateRegionSwitch(On.Menu.FastTravelScreen.orig_InitiateRegionSwitch orig, FastTravelScreen self, int switchToRegion) { if (switchToRegion == 0 && self.currentRegion == 0) { if (temporalShelter != null) { self.currentShelter = temporalShelter; temporalShelter = null; } string shelter = self.currentShelter ?? string.Empty; CustomWorldMod.Log($"Initiate Region switch, called from Fast Travel ctor... [{shelter}]"); int num = 0; //string pathToVanillaRegions = Custom.RootFolderDirectory() + @"World\Regions\regions.txt"; string pathToVanillaRegions = CRExtras.BuildPath(null, CRExtras.CustomFolder.Regions, file: "regions.txt"); string[] array = File.ReadAllLines(pathToVanillaRegions); array = CustomWorldMod.AddModdedRegions(array); self.allRegions = new Region[array.Length]; for (int num2 = 0; num2 < self.allRegions.Length; num2++) { self.allRegions[num2] = new Region(array[num2], num, num2); num += self.allRegions[num2].numberOfRooms; } self.loadedWorlds = new World[self.accessibleRegions.Count]; self.loadedMapData = new HUD.Map.MapData[self.accessibleRegions.Count]; if (self.currentShelter != null) { for (int num3 = 0; num3 < self.accessibleRegions.Count; num3++) { if (self.allRegions[self.accessibleRegions[num3]].name == self.currentShelter.Substring(0, 2)) { CustomWorldMod.Log(self.currentShelter); CustomWorldMod.Log(string.Concat(new object[] { "found start region: ", num3, " ", self.allRegions[self.accessibleRegions[num3]].name })); self.currentRegion = num3; break; } } } switchToRegion = self.currentRegion; } orig(self, switchToRegion); }