static void Postfix(PostLoadIniter __instance, IExposable s) { if (Scribe.mode != LoadSaveMode.LoadingVars || PersistentWorldManager.GetInstance().PersistentWorldNotNullAndLoadStatusIs(PersistentWorldLoadSaver.PersistentWorldLoadStatus.Converting)) { return; } if (!PersistentWorldManager.GetInstance().HasPersistentWorld) { return; } var persistentWorld = PersistentWorldManager.GetInstance().PersistentWorld; if (s == null || !(s is ILoadReferenceable referenceable)) { return; } // Decreases load times. if (referenceable is Thing && !(referenceable is Pawn) && Scribe.loader.curXmlParent.HasChildNodes && Scribe.loader.curXmlParent.ChildNodes[0].Name == "thing") { return; } var path = FindParent(Scribe.loader.curXmlParent); FileLog.Log("Path: " + path); var pathToLoad = ""; var label = ""; if (Scribe.loader.curXmlParent.HasChildNodes) { label = Scribe.loader.curXmlParent.ChildNodes[0].Name; var currentListIndex = Regex.Matches(path + "/", "\\/li\\[(\\d+)\\]\\/").Count; if (Scribe.loader.curXmlParent.ChildNodes[0].Name == "li") { ++currentListIndex; } if (Scribe.loader.curXmlParent.ChildNodes[0].Name == "li") { if (listIndexes.ContainsKey(currentListIndex)) { listIndexes[currentListIndex] += 1; } else { listIndexes.Add(currentListIndex, 0); } pathToLoad = path + "/" + Scribe.loader.curXmlParent.ChildNodes[0].Name + "[" + listIndexes[currentListIndex] + "]"; FileLog.Log("Path LI: " + pathToLoad); } else if (Scribe.loader.curXmlParent.ChildNodes[0].Name == "thing") { pathToLoad = path + "/" + Scribe.loader.curXmlParent.ChildNodes[0].Name + "[" + ++currentThingIndex + "]"; FileLog.Log("Path THING: " + pathToLoad); } else { FileLog.Log("CurPathRelToParent Child Nodes: " + pathToLoad + "/" + Scribe.loader.curXmlParent.ChildNodes[0].Name); } } else { FileLog.Log("CurPathRelToParent: " + path); } FileLog.Log("Adding reference: " + pathToLoad); FileLog.Log("Ref ID: " + referenceable.GetUniqueLoadID()); if (!persistentWorld.LoadSaver.ReferenceTable.ContainsReferenceWithLoadId(referenceable.GetUniqueLoadID())) { persistentWorld.LoadSaver.ReferenceTable.LoadReferenceIntoMemory(referenceable, pathToLoad); } }
static bool Prefix(ScribeSaver __instance, string nodeName) { if (!PersistentWorldManager.GetInstance().PersistentWorldNotNull()) { return(true); } var writer = WriterField.GetValue(__instance); if (writer == null) { return(true); } var curPath = (string)CurPathField.GetValue(__instance); curPath = curPath + "/" + nodeName; var currentListIndex = Regex.Matches(curPath + "/", "\\/li\\[(\\d+)\\]\\/").Count; if (nodeName == "li") { ++currentListIndex; } FileLog.Log("Current list index before: " + currentListIndex); FileLog.Log("Curpath before: " + curPath); if (nodeName == "li" || nodeName == "thing") { if (nodeName == "li") { if (ListIndexes.ContainsKey(currentListIndex)) { ListIndexes[currentListIndex] += 1; } else { ListIndexes.Add(currentListIndex, 0); } FileLog.Log("CurPath b4 set: " + curPath); curPath = curPath + "[" + ListIndexes[currentListIndex] + "]"; FileLog.Log("CurPath after set: " + curPath); } else { curPath = curPath + "[" + currentThingIndex++ + "]"; } } else { if (currentListIndex < ListIndexes.Count) { ListIndexes.RemoveAll(set => set.Key > currentListIndex); } } FileLog.Log("Current list index after: " + currentListIndex); FileLog.Log("Curpath after: " + curPath); CurPathField.SetValue(__instance, curPath); return(true); }