From c0ef28ee7939bd187ac65fbbd0442be45f16a258 Mon Sep 17 00:00:00 2001 From: LetterN <24603524+LetterN@users.noreply.github.com> Date: Sat, 23 Dec 2023 23:37:38 +0800 Subject: [PATCH] reimplement this .0 thingy --- .../Objects/Types/DreamObjectSavefile.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/OpenDreamRuntime/Objects/Types/DreamObjectSavefile.cs b/OpenDreamRuntime/Objects/Types/DreamObjectSavefile.cs index 43e9772aad..1d6dc28a96 100644 --- a/OpenDreamRuntime/Objects/Types/DreamObjectSavefile.cs +++ b/OpenDreamRuntime/Objects/Types/DreamObjectSavefile.cs @@ -302,14 +302,18 @@ public DreamValue RealizeJsonValue(IDreamJsonValue value) { // TODO stub break; case DreamObjectValue dreamObjectValue: - if (dreamObjectValue.TryGetValue("type", out var unserialType) && unserialType is DreamPrimitive primtype) { + // todo DOV should store WHERE is the actual path for data (normaly its .0) + if (!dreamObjectValue.TryGetValue(".0", out var saveData)) + break; + + if (saveData.TryGetValue("type", out var unserialType) && unserialType is DreamPrimitive primtype) { primtype.Value.MustGetValueAsType(); var newObj = GetProc("New").Spawn(this, new DreamProcArguments(primtype.Value)); var dObj = newObj.MustGetValueAsDreamObject()!; foreach (var key in dObj.ObjectDefinition.Variables.Keys) { DreamValue val = DreamValue.Null; - if (dreamObjectValue.TryGetValue(key, out var dreamObjVal)) { + if (saveData.TryGetValue(key, out var dreamObjVal)) { val = (dreamObjVal is DreamPathValue) ? newObj : RealizeJsonValue(dreamObjVal); } dObj.SetVariable(key, val); @@ -348,7 +352,9 @@ public IDreamJsonValue SerializeDreamValue(DreamValue val) { }; } return new DreamObjectValue { - ["type"] = new DreamPrimitive { Value = val.MustGetValueAsDreamObject()!.GetVariable("type") } + [".0"] = new DreamJsonValue { + ["type"] = new DreamPrimitive { Value = val.MustGetValueAsDreamObject()!.GetVariable("type") } + } }; // noop