From 2c9475e983d7123ec9a5393a6cb7a1f23583169d Mon Sep 17 00:00:00 2001 From: htt-py <95628489+phoriah@users.noreply.github.com> Date: Thu, 21 Mar 2024 22:22:58 +0200 Subject: [PATCH] Fixed specialproperties Edge Case The script should work on Codex and other executors again! --- saveinstance.lua | 22 ++++++++++++++-------- saveinstance.luau | 22 ++++++++++++++-------- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/saveinstance.lua b/saveinstance.lua index 68bb58b..9122eb7 100644 --- a/saveinstance.lua +++ b/saveinstance.lua @@ -389,18 +389,24 @@ for _, StaysRaw in ipairs({ end end +if globalcontainer.getspecialinfo then + local old_getspecialinfo = globalcontainer.getspecialinfo + + globalcontainer.getspecialinfo = function(instance) + local ok, result = pcall(old_getspecialinfo, instance) -- * Some executors only allow certain Classes for this method (like UnionOperation, MeshPart, Terrain), for example Electron, Codex + return ok and result or {} + end +end + if getproperties then if globalcontainer.getspecialinfo then - local getreal = globalcontainer.getspecialinfo + local old_getspecialinfo = globalcontainer.getspecialinfo globalcontainer.getspecialinfo = function(instance) local specialinfo = getproperties(instance) - local ok, result = pcall(getreal, instance) -- * Some executors only allow certain Classes for this method (like UnionOperation, MeshPart, Terrain), for example Electron - if ok then - for Property, Value in next, result do - specialinfo[Property] = Value - end + for Property, Value in next, old_getspecialinfo(instance) do + specialinfo[Property] = Value end return specialinfo @@ -1004,7 +1010,7 @@ local function synsaveinstance(CustomOptions) total = total .. savestr writefile(placename, total) if StatusTextClone then - StatusTextClone.Text = "Saving " .. getsizeformat() + StatusTextClone.Text = "Saving.. Size: " .. getsizeformat() end savebuffer = {} rwait() @@ -1402,7 +1408,7 @@ local function synsaveinstance(CustomOptions) task.wait(Log10 * 2 + 3) else StatusTextClone.Text = "Failed! Check F9 console for more info" - warn("Error encountered while saving") + warn("Error found while saving") warn("Information about error:") warn(err) task.wait(Log10 + 3) diff --git a/saveinstance.luau b/saveinstance.luau index 73cbbe7..630928b 100644 --- a/saveinstance.luau +++ b/saveinstance.luau @@ -391,18 +391,24 @@ do end end +if globalcontainer.getspecialinfo then + local old_getspecialinfo = globalcontainer.getspecialinfo + + globalcontainer.getspecialinfo = function(instance) + local ok, result = pcall(old_getspecialinfo, instance) -- * Some executors only allow certain Classes for this method (like UnionOperation, MeshPart, Terrain), for example Electron, Codex + return ok and result or {} + end +end + if getproperties then if globalcontainer.getspecialinfo then - local getreal = globalcontainer.getspecialinfo + local old_getspecialinfo = globalcontainer.getspecialinfo globalcontainer.getspecialinfo = function(instance) local specialinfo = getproperties(instance) - local ok, result = pcall(getreal, instance) -- * Some executors only allow certain Classes for this method (like UnionOperation, MeshPart, Terrain), for example Electron - if ok then - for Property, Value in result do - specialinfo[Property] = Value - end + for Property, Value in old_getspecialinfo(instance) do + specialinfo[Property] = Value end return specialinfo @@ -1006,7 +1012,7 @@ local function synsaveinstance(CustomOptions) total ..= savestr writefile(placename, total) if StatusTextClone then - StatusTextClone.Text = "Saving " .. getsizeformat() + StatusTextClone.Text = "Saving.. Size: " .. getsizeformat() end savebuffer = {} rwait() @@ -1396,7 +1402,7 @@ local function synsaveinstance(CustomOptions) task.wait(Log10 * 2 + 3) else StatusTextClone.Text = "Failed! Check F9 console for more info" - warn("Error encountered while saving") + warn("Error found while saving") warn("Information about error:") warn(err) task.wait(Log10 + 3)