Skip to content

Commit 90c9ba6

Browse files
committed
v0.20 - Fixed #84, #88, #89, #90, #91
Fix AppearanceHelper.
1 parent bd10c76 commit 90c9ba6

File tree

4 files changed

+62
-22
lines changed

4 files changed

+62
-22
lines changed

CP2077SaveEditor/Utils/AppearanceHelper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,15 @@ public AppearanceGender BodyGender
6565
playerPuppet.Gender = "Female";
6666
if (!SuppressBodyGenderPrompt)
6767
{
68-
SetAllValues(JsonConvert.DeserializeObject<CharacterCustomizationAppearances>(CP2077SaveEditor.Properties.Resources.FemaleDefaultPreset));
68+
SetAllValues(JsonConvert.DeserializeObject<CharacterCustomizationAppearances>(CP2077SaveEditor.Properties.Resources.FemaleDefaultPreset, new Utils.JsonConverters.AppearanceResourceConverter()));
6969
}
7070
}
7171
else
7272
{
7373
playerPuppet.Gender = "Male";
7474
if (!SuppressBodyGenderPrompt)
7575
{
76-
SetAllValues(JsonConvert.DeserializeObject<CharacterCustomizationAppearances>(CP2077SaveEditor.Properties.Resources.MaleDefaultPreset));
76+
SetAllValues(JsonConvert.DeserializeObject<CharacterCustomizationAppearances>(CP2077SaveEditor.Properties.Resources.MaleDefaultPreset, new Utils.JsonConverters.AppearanceResourceConverter()));
7777
}
7878
}
7979

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using Newtonsoft.Json;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Numerics;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
using WolvenKit.RED4.Types;
9+
10+
namespace CP2077SaveEditor.Utils
11+
{
12+
public static class JsonConverters
13+
{
14+
public class AppearanceResourceConverter : JsonConverter<CResourceReference<appearanceAppearanceResource>>
15+
{
16+
public override void WriteJson(JsonWriter writer, CResourceReference<appearanceAppearanceResource> value, JsonSerializer serializer)
17+
{
18+
writer.WriteValue((ulong)value.DepotPath);
19+
}
20+
21+
public override CResourceReference<appearanceAppearanceResource> ReadJson(JsonReader reader, Type objectType, CResourceReference<appearanceAppearanceResource> existingValue, bool hasExistingValue, JsonSerializer serializer)
22+
{
23+
object value = reader.Value;
24+
ulong final;
25+
26+
if (value is BigInteger bigVal)
27+
{
28+
final = (ulong)bigVal;
29+
}
30+
else
31+
{
32+
final = Convert.ToUInt64(value);
33+
}
34+
35+
return new CResourceReference<appearanceAppearanceResource>() { DepotPath = final };
36+
}
37+
}
38+
}
39+
}

CP2077SaveEditor/Views/Form1.Designer.cs

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

CP2077SaveEditor/Views/Form1.cs

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -676,6 +676,7 @@ await Task.Run(() =>
676676
}
677677

678678
activeSaveFile = new SaveFileHelper() { SaveFile = bufferFile };
679+
activeSaveFile.Appearance.SetMainSections();
679680

680681
GC.Collect();
681682

@@ -921,33 +922,33 @@ private void saveAppearButton_Click(object sender, EventArgs e)
921922
saveWindow.Filter = "Cyberpunk 2077 Character Preset|*.preset";
922923
if (saveWindow.ShowDialog() == DialogResult.OK)
923924
{
924-
File.WriteAllText(saveWindow.FileName, JsonConvert.SerializeObject(activeSaveFile.GetAppearanceContainer()));
925+
File.WriteAllText(saveWindow.FileName, JsonConvert.SerializeObject(activeSaveFile.GetAppearanceContainer(), new Utils.JsonConverters.AppearanceResourceConverter()));
925926
statusLabel.Text = "Appearance preset saved.";
926927
}
927928
}
928929

929930
private void loadAppearButton_Click(object sender, EventArgs e)
930931
{
931-
//var fileWindow = new OpenFileDialog();
932-
//fileWindow.Filter = "Cyberpunk 2077 Character Preset|*.preset";
933-
//if (fileWindow.ShowDialog() == DialogResult.OK)
934-
//{
935-
// var newValues = JsonConvert.DeserializeObject<CharacterCustomizationAppearances>(File.ReadAllText(fileWindow.FileName));
932+
var fileWindow = new OpenFileDialog();
933+
fileWindow.Filter = "Cyberpunk 2077 Character Preset|*.preset";
934+
if (fileWindow.ShowDialog() == DialogResult.OK)
935+
{
936+
var newValues = JsonConvert.DeserializeObject<CharacterCustomizationAppearances>(File.ReadAllText(fileWindow.FileName), new Utils.JsonConverters.AppearanceResourceConverter());
936937

937-
// if (newValues.UnknownFirstBytes.Length > 6)
938-
// {
939-
// newValues.UnknownFirstBytes = newValues.UnknownFirstBytes.Skip(newValues.UnknownFirstBytes.Length - 6).ToArray();
940-
// }
938+
if (newValues.UnknownFirstBytes.Length > 6)
939+
{
940+
newValues.UnknownFirstBytes = newValues.UnknownFirstBytes.Skip(newValues.UnknownFirstBytes.Length - 6).ToArray();
941+
}
941942

942-
// if (newValues.UnknownFirstBytes[4] != activeSaveFile.GetAppearanceContainer().UnknownFirstBytes[4])
943-
// {
944-
// activeSaveFile.Appearance.SuppressBodyGenderPrompt = true;
945-
// activeSaveFile.Appearance.BodyGender = (AppearanceGender)newValues.UnknownFirstBytes[4];
946-
// }
947-
// activeSaveFile.Appearance.SetAllValues(newValues);
948-
// RefreshAppearanceValues();
949-
// statusLabel.Text = "Appearance preset loaded.";
950-
//}
943+
if (newValues.UnknownFirstBytes[4] != activeSaveFile.GetAppearanceContainer().UnknownFirstBytes[4])
944+
{
945+
activeSaveFile.Appearance.SuppressBodyGenderPrompt = true;
946+
activeSaveFile.Appearance.BodyGender = (AppearanceGender)newValues.UnknownFirstBytes[4];
947+
}
948+
activeSaveFile.Appearance.SetAllValues(newValues);
949+
RefreshAppearanceValues();
950+
statusLabel.Text = "Appearance preset loaded.";
951+
}
951952
}
952953

953954
private void factsButton_Click(object sender, EventArgs e)

0 commit comments

Comments
 (0)