diff --git a/WolvenKit.CLI/Program.cs b/WolvenKit.CLI/Program.cs index 29359414..36e797b9 100644 --- a/WolvenKit.CLI/Program.cs +++ b/WolvenKit.CLI/Program.cs @@ -37,6 +37,9 @@ public class Options [Option("bytes_as_list", Required = false, HelpText = "Output byte array vars as int list (by default as base64 string)")] public bool BytesAsIntList { get; set; } = false; + [Option("guids_as_strings", Required = false, HelpText = "Output CGUID vars as string values (by default as bytearray)")] + public bool GuidAsString { get; set; } = false; + [Option("ignore_embedded_cr2w", Required = false, HelpText = "Do NOT serialize embedded cr2w bytearrays - flatCompiledData, etc (serialized by default if possible)")] public bool IgnoreEmbeddedCR2W { get; set; } = false; @@ -99,7 +102,7 @@ static void RunCLIOptions(Options opts) } Stopwatch watch = new Stopwatch(); watch.Start(); - var ToolOptions = new CR2WJsonToolOptions(opts.Verbose, opts.BytesAsIntList, opts.IgnoreEmbeddedCR2W); + var ToolOptions = new CR2WJsonToolOptions(opts.Verbose, opts.BytesAsIntList, opts.IgnoreEmbeddedCR2W, opts.GuidAsString); if (opts.ExportJSON) { if (string.IsNullOrEmpty(opts.OutputPath)) diff --git a/WolvenKit.CR2W/JSON/CR2WJsonTool.cs b/WolvenKit.CR2W/JSON/CR2WJsonTool.cs index 7620663c..eb530d3b 100644 --- a/WolvenKit.CR2W/JSON/CR2WJsonTool.cs +++ b/WolvenKit.CR2W/JSON/CR2WJsonTool.cs @@ -16,15 +16,17 @@ namespace WolvenKit.CR2W.JSON public class CR2WJsonToolOptions { public CR2WJsonToolOptions() { } - public CR2WJsonToolOptions(bool verbose, bool bytesAsIntList, bool ignoreEmbeddedCR2W) + public CR2WJsonToolOptions(bool verbose, bool bytesAsIntList, bool ignoreEmbeddedCR2W, bool guidAsString) { Verbose = verbose; BytesAsIntList = bytesAsIntList; + GuidAsString = guidAsString; IgnoreEmbeddedCR2W = ignoreEmbeddedCR2W; } public bool Verbose { get; set; } = false; public bool BytesAsIntList { get; set; } = false; + public bool GuidAsString { get; set; } = false; public bool IgnoreEmbeddedCR2W { get; set; } = false; } @@ -342,9 +344,13 @@ protected static void DewalkNode(CVariable cvar, CR2WJsonObject node, Dictionary { cba.InternalType = scalar.type; } - if (scalar.value is string base64str) + if (scalar.value is string str) { - cvar.SetValue(Convert.FromBase64String(base64str)); + if (cvar is CGUID && options.GuidAsString) + { + cvar.SetValue(str); + } + cvar.SetValue(Convert.FromBase64String(str)); } else if (scalar.value is byte[] byteArray) { @@ -729,7 +735,16 @@ protected static CR2WJsonObject WalkNode(IEditableVariable node, string extensio return WalkCR2W(extraCR2W, $"{extension}{node.REDName}::", logLevel + 1, options); } } - var primitiveValue = primitive.GetValueObject(); + object primitiveValue = null; + if (options.GuidAsString && primitive is CGUID guid) + { + primitiveValue = guid.GuidString; + } + else + { + primitiveValue = primitive.GetValueObject(); + } + if (options.Verbose) { Print($"{LogIndent(logLevel)}{node.REDName} ({node.REDType}) -> PRIMITIVE = {primitiveValue}"); diff --git a/WolvenKit.CR2W/Types/Primitive/NetPrimitive/CGUID.cs b/WolvenKit.CR2W/Types/Primitive/NetPrimitive/CGUID.cs index 36ecf8ef..05882e99 100644 --- a/WolvenKit.CR2W/Types/Primitive/NetPrimitive/CGUID.cs +++ b/WolvenKit.CR2W/Types/Primitive/NetPrimitive/CGUID.cs @@ -27,6 +27,7 @@ public string GuidString if (Guid.TryParse(value, out g)) { guid = g.ToByteArray(); + SetIsSerialized(); } } } @@ -54,6 +55,10 @@ public override CVariable SetValue(object val) this.guid = cvar.guid; SetIsSerialized(); break; + case string str: + GuidString = str; + // ^ SetIsSerialized in setter on success + break; } return this; @@ -70,13 +75,11 @@ public override CVariable Copy(CR2WCopyAction context) public override string ToString() { - if (guid != null && guid.Length > 0) - return new Guid(guid).ToString(); - else + if (guid == null || guid.Length == 0) { guid = new byte[16]; - return ToString(); } + return new Guid(guid).ToString(); } } } \ No newline at end of file