Skip to content

Commit 4ef8ff3

Browse files
committed
- added an ItemXmlNodeIdx property to Item, so that it always selects the correct xmlnode when writing item changes.
1 parent 5de27ad commit 4ef8ff3

File tree

5 files changed

+16
-24
lines changed

5 files changed

+16
-24
lines changed

D-OS Save Editor/MainWindow.xaml.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -474,11 +474,12 @@ private async void LoadButton_OnClick(object sender, RoutedEventArgs e)
474474
while (_getMetaBackgroundWorker.IsBusy)
475475
await Task.Delay(5);
476476

477+
// TODO DNSA (Do Not Show Again) message box
477478
// version check
478479
if (MainWindowData.Meta.IsOutdatedVersion)
479480
{
480481
var dlgResult = MessageBox.Show(this,
481-
$"It appears that the version of your game is different from what this SE is purposely created for (ver. {DataTable.SupportedGameVersion}). As a result, changes made to your savegame may corrupt the savegame. Make sure you make a backup before continuing.",
482+
$"It appears that the version of your game is different from what this SE is purposely created for (ver. {DataTable.SupportedGameVersion}). As a result, changes made to your savegame may corrupt the savegame.\n\nMake sure you make a backup before continuing.",
482483
"Game version incompatible", MessageBoxButton.OKCancel, MessageBoxImage.Warning);
483484
if (dlgResult == MessageBoxResult.Cancel)
484485
{
@@ -491,7 +492,7 @@ private async void LoadButton_OnClick(object sender, RoutedEventArgs e)
491492
if (MainWindowData.Meta.IsModWarning)
492493
{
493494
var dlgResult = MessageBox.Show(this,
494-
"It appears that you have used mods. As a result, changes made to your savegame may corrupt the savegame. Make sure you make a backup before continuing.",
495+
"It appears that you have used mods. As a result, changes made to your savegame may corrupt the savegame.\n\nMake sure you make a backup before continuing.",
495496
"Mods found", MessageBoxButton.OKCancel, MessageBoxImage.Warning);
496497
if (dlgResult == MessageBoxResult.Cancel)
497498
{

D-OS Save Editor/SE/InventoryTab.xaml.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using System.Collections.Generic;
33
using System.IO;
44
using System.Linq;
5-
using System.Text.RegularExpressions;
65
using System.Threading.Tasks;
76
using System.Windows;
87
using System.Windows.Controls;
@@ -299,13 +298,12 @@ private void ApplyChangesButton_OnClick(object sender, RoutedEventArgs e)
299298
// add changes
300299
if (Player.ItemChanges.ContainsKey(item.Slot))
301300
{
302-
Player.ItemChanges[item.Slot] = new ItemChange(item, Player.ItemChanges[item.Slot].ChangeType,
303-
ItemsListBox.SelectedIndex);
301+
Player.ItemChanges[item.Slot] = new ItemChange(item, Player.ItemChanges[item.Slot].ChangeType);
304302
}
305303
else
306304
{
307305
Player.ItemChanges.Add(item.Slot,
308-
new ItemChange(item, ChangeType.Modify, ItemsListBox.SelectedIndex));
306+
new ItemChange(item, ChangeType.Modify));
309307
}
310308

311309
// apply changes to the original item

D-OS Save Editor/savegame/Item.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ public enum ItemRarityType { Common = 0, Uncommon, Rare, Epic, Legendary, Divine
3838
/// </summary>
3939
public string Xml { get; set; }
4040

41+
/// <summary>
42+
/// The index of the item in xml inventory node list.
43+
/// </summary>
44+
public int ItemXmlNodeIdx { get; set; }
45+
4146
/// <summary>
4247
/// Item category
4348
/// </summary>
@@ -499,15 +504,13 @@ public class ItemChange
499504
{
500505
public Item Item { get; }
501506
public ChangeType ChangeType { get;}
502-
public int ItemIndex { get; set; }
503507

504508
public ItemChange() { }
505509

506-
public ItemChange(Item item, ChangeType changeType, int itemIndex)
510+
public ItemChange(Item item, ChangeType changeType)
507511
{
508512
Item = item.DeepClone();
509513
ChangeType = changeType;
510-
ItemIndex = itemIndex;
511514
}
512515
}
513516

D-OS Save Editor/savegame/LsxParser.cs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public static Player[] ParsePlayer(XmlDocument doc)
5454
try
5555
{
5656
item = ParseItem(inventoryData[j].ParentNode);
57+
item.ItemXmlNodeIdx = j;
5758
}
5859
catch (ObjectNullException)
5960
{
@@ -65,12 +66,6 @@ public static Player[] ParsePlayer(XmlDocument doc)
6566
throw new ItemParserException(e, inventoryData[j].ParentNode);
6667
}
6768

68-
if (item == null)
69-
{
70-
notAnItemIdx.Enqueue(j);
71-
return;
72-
}
73-
7469
players[i].Items[j] = item;
7570
players[i].SlotsOccupation[int.Parse(item.Slot)] = true;
7671
});
@@ -411,7 +406,7 @@ public static XmlDocument WriteItemChanges(XmlDocument doc, Player player)
411406
// find item data
412407
var inventoryData = doc.DocumentElement.SelectNodes($"//attribute [@id='Parent'] [@value='{player.InventoryId}']");
413408

414-
foreach(var ic in player.ItemChanges)
409+
foreach (var ic in player.ItemChanges)
415410
{
416411
try
417412
{
@@ -425,7 +420,7 @@ public static XmlDocument WriteItemChanges(XmlDocument doc, Player player)
425420
}
426421
else if (ic.Value.ChangeType == ChangeType.Modify)
427422
{
428-
var itemNode = inventoryData[ic.Value.ItemIndex].ParentNode;
423+
var itemNode = inventoryData[ic.Value.Item.ItemXmlNodeIdx].ParentNode;
429424

430425
var allowedChanges = ic.Value.Item.GetAllowedChangeType();
431426
if (allowedChanges.Contains(nameof(ic.Value.Item.Amount)))

D-OS Save Editor/savegame/Savegame.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,11 @@ public async Task ParseLsxAsync(IProgress<string> progress)
4343
var doc = new XmlDocument();
4444
var metaDoc = new XmlDocument();
4545
doc.Load(UnpackDirectory + Path.DirectorySeparatorChar + "globals.lsx");
46-
metaDoc.Load(UnpackDirectory + Path.DirectorySeparatorChar + "meta.lsx");
4746
// update progress
4847
progress.Report("Analysing savegame.");
4948
await Task.Delay(1);
5049
// parse xlml
5150
Players = LsxParser.ParsePlayer(doc);
52-
Meta = LsxParser.ParseMeta(metaDoc);
5351
// update progress
5452
progress.Report("Loading data.");
5553
await Task.Delay(1);
@@ -98,10 +96,6 @@ public async Task UnpackSavegameAsync(IProgress<string> progress, bool metaOnly
9896
ResourceUtils.SaveResource(
9997
ResourceUtils.LoadResource(UnpackDirectory + Path.DirectorySeparatorChar + "globals.lsf"),
10098
UnpackDirectory + Path.DirectorySeparatorChar + "globals.lsx", ResourceFormat.LSX, outputVersion);
101-
// uncompress and save meta.lsf
102-
ResourceUtils.SaveResource(
103-
ResourceUtils.LoadResource(UnpackDirectory + Path.DirectorySeparatorChar + "meta.lsf"),
104-
UnpackDirectory + Path.DirectorySeparatorChar + "meta.lsx", ResourceFormat.LSX, outputVersion);
10599
}
106100

107101
/// <summary>
@@ -124,7 +118,8 @@ public async Task PackSavegameAsync(IProgress<string> progress)
124118

125119
// delete .lsx
126120
File.Delete(UnpackDirectory + Path.DirectorySeparatorChar + "globals.lsx");
127-
File.Delete(UnpackDirectory + Path.DirectorySeparatorChar + "meta.lsx");
121+
if (File.Exists(UnpackDirectory + Path.DirectorySeparatorChar + "meta.lsx"))
122+
File.Delete(UnpackDirectory + Path.DirectorySeparatorChar + "meta.lsx");
128123

129124
// update progress
130125
progress.Report("Packing savegame.");

0 commit comments

Comments
 (0)