Skip to content

Commit 5b58cc3

Browse files
committed
Added config option to disable PSData parser.
1 parent d0b68ba commit 5b58cc3

3 files changed

Lines changed: 60 additions & 38 deletions

File tree

CP2077SaveEditor/Utils/AppearanceHelper.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ public AppearanceGender BodyGender
3636
}
3737
set
3838
{
39+
if (!Form1.psDataEnabled)
40+
{
41+
MessageBox.Show("PSData is disabled. Body Gender cannot be changed.", "Notice");
42+
return;
43+
}
44+
3945
if (value != BodyGender)
4046
{
4147
if (!SuppressBodyGenderPrompt)

CP2077SaveEditor/Views/Form1.cs

Lines changed: 52 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public partial class Form1 : Form
3232
private bool cancelLoad = false;
3333
private int saveType = 0;
3434
private Random globalRand = new Random();
35-
private WrongDefaultValueEventArgs wrongDefaultInfo = null;
35+
public static bool psDataEnabled = true;
3636

3737
//GUI
3838
private ModernButton activeTabButton = new ModernButton();
@@ -172,6 +172,11 @@ public Form1()
172172
{
173173
saveChangesButton.Location = new Point(saveChangesButton.Location.X, saveChangesButton.Location.Y - config["SaveButtonPosition"]);
174174
}
175+
176+
if (config["EnablePSData"] == 0)
177+
{
178+
psDataEnabled = false;
179+
}
175180
}
176181
catch (Exception)
177182
{
@@ -492,10 +497,13 @@ private void openSaveButton_Click(object sender, EventArgs e)
492497
parsers.AddRange(new INodeParser[] {
493498
new CharacterCustomizationAppearancesParser(), new InventoryParser(), new ItemDataParser(), new FactsDBParser(),
494499
new FactsTableParser(), new GameSessionConfigParser(), new ItemDropStorageManagerParser(), new ItemDropStorageParser(),
495-
new StatsSystemParser(), new ScriptableSystemsContainerParser(), new PSDataParser()
500+
new StatsSystemParser(), new ScriptableSystemsContainerParser()
496501
});
497502

498-
wrongDefaultInfo = null;
503+
if (psDataEnabled)
504+
{
505+
parsers.Add(new PSDataParser());
506+
}
499507

500508
var newSave = new SaveFileHelper(parsers);
501509
editorPanel.Enabled = false;
@@ -536,14 +544,6 @@ private void openSaveButton_Click(object sender, EventArgs e)
536544
return;
537545
}
538546

539-
if (wrongDefaultInfo != null)
540-
{
541-
if (new WrongDefaultDialog(wrongDefaultInfo.ClassName, wrongDefaultInfo.PropertyName, wrongDefaultInfo.Value).ShowDialog() != DialogResult.OK)
542-
{
543-
cancelLoad = true;
544-
}
545-
}
546-
547547
if (cancelLoad)
548548
{
549549
cancelLoad = false;
@@ -630,37 +630,47 @@ private void openSaveButton_Click(object sender, EventArgs e)
630630
attrPointsUpDown.SetValue(points[Array.FindIndex(points, x => x.Type == null)].Unspent);
631631

632632
//PSData parsing
633-
var ps = activeSaveFile.GetPSDataContainer();
634-
var vehiclePS = (CyberCAT.Core.Classes.DumpedClasses.VehicleGarageComponentPS)ps.ClassList.Where(x => x is CyberCAT.Core.Classes.DumpedClasses.VehicleGarageComponentPS).FirstOrDefault();
635-
var unlockedVehicles = new List<string>();
636633

637-
var vehicles = itemResolver.TdbIdIndex.Values.Where(x => x.Name.StartsWith("Vehicle.") && x.Name.EndsWith("_player")).Select(x => x.Name);
638634
var listItems = new List<ListViewItem>();
639635

640-
if (vehiclePS != null)
636+
if (!psDataEnabled)
637+
{
638+
vehiclesListView.Enabled = false;
639+
listItems.Add(new ListViewItem("PSData disabled."));
640+
}
641+
else
641642
{
642-
vehiclesListView.Enabled = true;
643-
if (vehiclePS.UnlockedVehicleArray == null)
643+
var ps = activeSaveFile.GetPSDataContainer();
644+
var vehiclePS = (CyberCAT.Core.Classes.DumpedClasses.VehicleGarageComponentPS)ps.ClassList.Where(x => x is CyberCAT.Core.Classes.DumpedClasses.VehicleGarageComponentPS).FirstOrDefault();
645+
var unlockedVehicles = new List<string>();
646+
647+
var vehicles = itemResolver.TdbIdIndex.Values.Where(x => x.Name.StartsWith("Vehicle.") && x.Name.EndsWith("_player")).Select(x => x.Name);
648+
649+
if (vehiclePS != null)
644650
{
645-
vehiclePS.UnlockedVehicleArray = new CyberCAT.Core.Classes.DumpedClasses.VehicleUnlockedVehicle[0];
651+
vehiclesListView.Enabled = true;
652+
if (vehiclePS.UnlockedVehicleArray == null)
653+
{
654+
vehiclePS.UnlockedVehicleArray = new CyberCAT.Core.Classes.DumpedClasses.VehicleUnlockedVehicle[0];
655+
}
656+
else
657+
{
658+
unlockedVehicles = vehiclePS.UnlockedVehicleArray.Select(x => x.VehicleID.RecordID.Name).ToList();
659+
}
660+
661+
foreach (var info in vehicles)
662+
{
663+
var newItem = new ListViewItem(info);
664+
newItem.Checked = true;
665+
newItem.Checked = unlockedVehicles.Contains(info);
666+
listItems.Add(newItem);
667+
}
646668
}
647669
else
648670
{
649-
unlockedVehicles = vehiclePS.UnlockedVehicleArray.Select(x => x.VehicleID.RecordID.Name).ToList();
671+
vehiclesListView.Enabled = false;
672+
listItems.Add(new ListViewItem("No vehicle data found. Try unlocking at least 1 vehicle in-game first."));
650673
}
651-
652-
foreach (var info in vehicles)
653-
{
654-
var newItem = new ListViewItem(info);
655-
newItem.Checked = true;
656-
newItem.Checked = unlockedVehicles.Contains(info);
657-
listItems.Add(newItem);
658-
}
659-
}
660-
else
661-
{
662-
vehiclesListView.Enabled = false;
663-
listItems.Add(new ListViewItem("No vehicle data found. Try unlocking at least 1 vehicle in-game first."));
664674
}
665675

666676
vehiclesListView.SetVirtualItems(listItems);
@@ -722,10 +732,15 @@ private void saveChangesButton_Click(object sender, EventArgs e)
722732

723733
var parsers = new List<INodeParser>();
724734
parsers.AddRange(new INodeParser[] {
725-
new CharacterCustomizationAppearancesParser(), new InventoryParser(), new ItemDataParser(), new FactsDBParser(),
726-
new FactsTableParser(), new GameSessionConfigParser(), new ItemDropStorageManagerParser(), new ItemDropStorageParser(),
727-
new StatsSystemParser(), new ScriptableSystemsContainerParser(), new PSDataParser()
728-
});
735+
new CharacterCustomizationAppearancesParser(), new InventoryParser(), new ItemDataParser(), new FactsDBParser(),
736+
new FactsTableParser(), new GameSessionConfigParser(), new ItemDropStorageManagerParser(), new ItemDropStorageParser(),
737+
new StatsSystemParser(), new ScriptableSystemsContainerParser()
738+
});
739+
740+
if (psDataEnabled)
741+
{
742+
parsers.Add(new PSDataParser());
743+
}
729744

730745
var testFile = new SaveFileHelper(parsers);
731746
try

config.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
{
2-
"SaveButtonPosition":0
2+
"SaveButtonPosition":0,
3+
"EnablePSData":1
34
}

0 commit comments

Comments
 (0)