void OnGUI() { if (!IsReady()) { EditorGUILayout.HelpBox("DaggerfallUnity instance not ready. Have you set your Arena2 path?", MessageType.Info); return; } if (selectedSave != lastSelectedSave || currentSaveTree == null) { currentSaveTree = saveTrees[selectedSave]; currentSaveVars = saveVars[selectedSave]; if (currentSaveTree == null || currentSaveVars == null) return; currentItems = currentSaveTree.FindRecords(RecordTypes.Item).ToArray(); // Merge savetree faction data factionDict = factionFile.Merge(currentSaveVars); lastSelectedSave = selectedSave; } if (saveTrees != null && saveTrees.Length > 0) { DisplaySaveSelectGUI(); DisplaySaveImageGUI(); DisplaySaveStatsGUI(); DisplaySaveCharacterGUI(); scrollPos = GUILayoutHelper.ScrollView(scrollPos, () => { EditorGUILayout.Space(); showFactionsFoldout = GUILayoutHelper.Foldout(showFactionsFoldout, new GUIContent("Factions"), () => { GUILayoutHelper.Indent(() => { DisplayFactionsFoldout(); }); }); EditorGUILayout.Space(); showItemsFoldout = GUILayoutHelper.Foldout(showItemsFoldout, new GUIContent("Items"), () => { GUILayoutHelper.Indent(() => { DisplayItemsFoldout(); }); }); EditorGUILayout.Space(); showSaveTreeFoldout = GUILayoutHelper.Foldout(showSaveTreeFoldout, new GUIContent("SaveTree"), () => { EditorGUILayout.HelpBox("Temporarily Filtering out records of type UnknownTownLink and UnknownItemRecord to keep list manageable.", MessageType.Info); DisplaySaveTree(currentSaveTree.RootRecord); }); }); } }
/// <summary> /// Assigns character items from classic save tree. /// </summary> public void AssignItems(SaveTree saveTree) { // Find character record, should always be a singleton CharacterRecord characterRecord = (CharacterRecord)saveTree.FindRecord(RecordTypes.Character); if (characterRecord == null) return; // Find all character-owned items List<SaveTreeBaseRecord> itemRecords = saveTree.FindRecords(RecordTypes.Item, characterRecord); // Filter for container-based inventory items List<SaveTreeBaseRecord> filteredRecords = saveTree.FilterRecordsByParentType(itemRecords, RecordTypes.Container); // Add interim Daggerfall Unity items foreach (var record in filteredRecords) { // Get container parent ContainerRecord containerRecord = (ContainerRecord)record.Parent; // Add to local inventory or wagon DaggerfallUnityItem newItem = new DaggerfallUnityItem((ItemRecord)record); if (containerRecord.IsWagon) wagonItems.AddItem(newItem); else items.AddItem(newItem); // Equip to player if equipped in save for (int i = 0; i < characterRecord.ParsedData.equippedItems.Length; i++) { if (characterRecord.ParsedData.equippedItems[i] == (record.RecordRoot.RecordID >> 8)) equipTable.EquipItem(newItem); } } }