diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index 818e64940a1..9b83bc24a7f 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -86,12 +86,25 @@ var/datum/controller/subsystem/persistence/SSpersistence var/saved_messages = json_decode(saved_json) for(var/item in saved_messages) - var/turf/T = locate(item["x"], item["y"], ZLEVEL_STATION) + if(!islist(item)) + continue + + var/xvar = item["x"] + var/yvar = item["y"] + var/zvar = item["z"] + + if(!xvar || !yvar || !zvar) + continue + + var/turf/T = locate(xvar, yvar, zvar) if(!isturf(T)) continue + if(locate(/obj/structure/chisel_message) in T) continue + var/obj/structure/chisel_message/M = new(T) + M.unpack(item) if(!M.loc) M.persists = FALSE diff --git a/code/modules/library/soapstone.dm b/code/modules/library/soapstone.dm index ba81f65344d..424f3756c0c 100644 --- a/code/modules/library/soapstone.dm +++ b/code/modules/library/soapstone.dm @@ -192,10 +192,14 @@ var/turf/T = get_turf(src) data["x"] = T.x data["y"] = T.y + data["z"] = T.z data["like_keys"] = like_keys data["dislike_keys"] = dislike_keys /obj/structure/chisel_message/proc/unpack(list/data) + if(!islist(data)) + return + hidden_message = data["hidden_message"] creator_name = data["creator_name"] creator_key = data["creator_key"] @@ -209,8 +213,10 @@ var/x = data["x"] var/y = data["y"] - var/turf/newloc = locate(x, y, ZLEVEL_STATION) - forceMove(newloc) + var/z = data["z"] + var/turf/newloc = locate(x, y, z) + if(isturf(newloc)) + forceMove(newloc) update_icon() /obj/structure/chisel_message/examine(mob/user)