diff --git a/.gitignore b/.gitignore index 02f0c8cf790..9a9bbe0aafd 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ data/ /_maps/map_files/backup/* /_maps/map_files/**/backup/* /_maps/map_files/**/*.dmm.backup +/_maps/quicksave/* /nano/debug.html *.db stddef.dm diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index b17cda4e560..e56ed3a4310 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -389,4 +389,41 @@ proc/checkhtml(var/t) /proc/macro2html(text) var/static/regex/text_macro = new("(\\xFF.)(.*)$") - return text_macro.Replace(text, /proc/replace_text_macro) \ No newline at end of file + return text_macro.Replace(text, /proc/replace_text_macro) + +/proc/dmm_encode(text) + // First, go through and nix out any of our escape sequences so we don't leave ourselves open to some escape sequence attack + // Some coder will probably despise me for this, years down the line + + var/list/repl_chars = list("#?qt;", "#?lbr;", "#?rbr;") + for(var/char in repl_chars) + var/index = findtext(text, char) + var/keylength = length(char) + while(index) + log_debug("Bad string given to dmm encoder! [text]") + // Replace w/ underscore to prevent "{4;" from cheesing the radar + // Should probably also use canon text replacing procs + text = copytext(text, 1, index) + "_" + copytext(text, index+keylength) + index = findtext(text, char) + + // Then, replace characters as normal + var/list/repl_chars_2 = list("\"" = "#?qt;", "{" = "#?lbr;", "}" = "#?rbr;") + for(var/char in repl_chars_2) + var/index = findtext(text, char) + var/keylength = length(char) + while(index) + text = copytext(text, 1, index) + repl_chars_2[char] + copytext(text, index+keylength) + index = findtext(text, char) + return text + + +/proc/dmm_decode(text) + // Replace what we extracted above + var/list/repl_chars = list("#?qt;" = "\"", "#?lbr;" = "{", "#?rbr;" = "}") + for(var/char in repl_chars) + var/index = findtext(text, char) + var/keylength = length(char) + while(index) + text = copytext(text, 1, index) + repl_chars[char] + copytext(text, index+keylength) + index = findtext(text, char) + return text diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 158ca06480b..0435ead41b2 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -13,6 +13,7 @@ var/germ_level = GERM_LEVEL_AMBIENT // The higher the germ level, the more germ on the atom. var/simulated = 1 //filter for actions - used by lighting overlays var/atom_say_verb = "says" + var/dont_save = 0 // For atoms that are temporary by necessity - like lighting overlays ///Chemistry. var/datum/reagents/reagents = null diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index a8a33784263..4224ad1aa5e 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -421,7 +421,7 @@ var/global/list/bad_blocks[0] reg_dna[unique_enzymes] = character.real_name // Hmm, I wonder how to go about this without a huge convention break -/datum/dna/proc/serialize() +/datum/dna/serialize() var/data = list() data["UE"] = unique_enzymes data["SE"] = SE.Copy() // This is probably too lazy for my own good @@ -432,7 +432,7 @@ var/global/list/bad_blocks[0] data["real_name"] = real_name return data -/datum/dna/proc/deserialize(data) +/datum/dna/deserialize(data) unique_enzymes = data["UE"] // The de-serializer is unlikely to tamper with the lists SE = data["SE"] @@ -441,4 +441,4 @@ var/global/list/bad_blocks[0] UpdateSE() species = data["species"] b_type = data["b_type"] - real_name = data["real_name"] \ No newline at end of file + real_name = data["real_name"] diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 5b6cfb5e73d..3d980e769e7 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -26,11 +26,13 @@ var/turf/T = loc hide(T.intact) - if(codes["patrol"]) + if(!codes || !codes.len) + log_debug("Empty codes datum at ([x],[y],[z])") + if("patrol" in codes) if(!navbeacons["[z]"]) navbeacons["[z]"] = list() navbeacons["[z]"] += src //Register with the patrol list! - if(codes["delivery"]) + if("delivery" in codes) deliverybeacons += src deliverybeacontags += location @@ -39,6 +41,15 @@ deliverybeacons -= src return ..() +/obj/machinery/navbeacon/serialize() + var/list/data = ..() + data["codes"] = codes + return data + +/obj/machinery/navbeacon/deserialize(list/data) + codes = data["codes"] + ..() + // set the transponder codes assoc list from codes_txt /obj/machinery/navbeacon/proc/set_codes() if(!codes_txt) @@ -201,4 +212,4 @@ Transponder Codes: