Skip to content

Commit

Permalink
v0.20 - Fixed #84, #88, #89, #90, #91
Browse files Browse the repository at this point in the history
Fix AppearanceHelper.
  • Loading branch information
Deweh committed May 7, 2022
1 parent bd10c76 commit 90c9ba6
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 22 deletions.
4 changes: 2 additions & 2 deletions CP2077SaveEditor/Utils/AppearanceHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,15 @@ public AppearanceGender BodyGender
playerPuppet.Gender = "Female";
if (!SuppressBodyGenderPrompt)
{
SetAllValues(JsonConvert.DeserializeObject<CharacterCustomizationAppearances>(CP2077SaveEditor.Properties.Resources.FemaleDefaultPreset));
SetAllValues(JsonConvert.DeserializeObject<CharacterCustomizationAppearances>(CP2077SaveEditor.Properties.Resources.FemaleDefaultPreset, new Utils.JsonConverters.AppearanceResourceConverter()));
}
}
else
{
playerPuppet.Gender = "Male";
if (!SuppressBodyGenderPrompt)
{
SetAllValues(JsonConvert.DeserializeObject<CharacterCustomizationAppearances>(CP2077SaveEditor.Properties.Resources.MaleDefaultPreset));
SetAllValues(JsonConvert.DeserializeObject<CharacterCustomizationAppearances>(CP2077SaveEditor.Properties.Resources.MaleDefaultPreset, new Utils.JsonConverters.AppearanceResourceConverter()));
}
}

Expand Down
39 changes: 39 additions & 0 deletions CP2077SaveEditor/Utils/JsonConverters.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;
using WolvenKit.RED4.Types;

namespace CP2077SaveEditor.Utils
{
public static class JsonConverters
{
public class AppearanceResourceConverter : JsonConverter<CResourceReference<appearanceAppearanceResource>>
{
public override void WriteJson(JsonWriter writer, CResourceReference<appearanceAppearanceResource> value, JsonSerializer serializer)
{
writer.WriteValue((ulong)value.DepotPath);
}

public override CResourceReference<appearanceAppearanceResource> ReadJson(JsonReader reader, Type objectType, CResourceReference<appearanceAppearanceResource> existingValue, bool hasExistingValue, JsonSerializer serializer)
{
object value = reader.Value;
ulong final;

if (value is BigInteger bigVal)
{
final = (ulong)bigVal;
}
else
{
final = Convert.ToUInt64(value);
}

return new CResourceReference<appearanceAppearanceResource>() { DepotPath = final };
}
}
}
}
2 changes: 1 addition & 1 deletion CP2077SaveEditor/Views/Form1.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

39 changes: 20 additions & 19 deletions CP2077SaveEditor/Views/Form1.cs
Original file line number Diff line number Diff line change
Expand Up @@ -676,6 +676,7 @@ await Task.Run(() =>
}

activeSaveFile = new SaveFileHelper() { SaveFile = bufferFile };
activeSaveFile.Appearance.SetMainSections();

GC.Collect();

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

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

// if (newValues.UnknownFirstBytes.Length > 6)
// {
// newValues.UnknownFirstBytes = newValues.UnknownFirstBytes.Skip(newValues.UnknownFirstBytes.Length - 6).ToArray();
// }
if (newValues.UnknownFirstBytes.Length > 6)
{
newValues.UnknownFirstBytes = newValues.UnknownFirstBytes.Skip(newValues.UnknownFirstBytes.Length - 6).ToArray();
}

// if (newValues.UnknownFirstBytes[4] != activeSaveFile.GetAppearanceContainer().UnknownFirstBytes[4])
// {
// activeSaveFile.Appearance.SuppressBodyGenderPrompt = true;
// activeSaveFile.Appearance.BodyGender = (AppearanceGender)newValues.UnknownFirstBytes[4];
// }
// activeSaveFile.Appearance.SetAllValues(newValues);
// RefreshAppearanceValues();
// statusLabel.Text = "Appearance preset loaded.";
//}
if (newValues.UnknownFirstBytes[4] != activeSaveFile.GetAppearanceContainer().UnknownFirstBytes[4])
{
activeSaveFile.Appearance.SuppressBodyGenderPrompt = true;
activeSaveFile.Appearance.BodyGender = (AppearanceGender)newValues.UnknownFirstBytes[4];
}
activeSaveFile.Appearance.SetAllValues(newValues);
RefreshAppearanceValues();
statusLabel.Text = "Appearance preset loaded.";
}
}

private void factsButton_Click(object sender, EventArgs e)
Expand Down

0 comments on commit 90c9ba6

Please sign in to comment.