From f37f844f5a1cadc6667025dc354ddd3122bb0cad Mon Sep 17 00:00:00 2001 From: CHOMPStation2 <58959929+CHOMPStation2@users.noreply.github.com> Date: Fri, 27 Sep 2024 20:05:23 -0700 Subject: [PATCH] [MIRROR] de-reference save_data lists (#9067) Co-authored-by: Heroman3003 <31296024+Heroman3003@users.noreply.github.com> Co-authored-by: Kashargul --- code/_helpers/type2type.dm | 18 +++++++++++++ code/datums/looping_sounds/_looping_sound.dm | 2 +- .../preference_setup/general/02_language.dm | 10 ++++---- .../preference_setup/general/03_body.dm | 25 +++++++++++++------ .../preference_setup/general/04_equipment.dm | 11 +++++--- .../preference_setup/loadout/loadout.dm | 21 +++++++++++++--- .../preference_setup/occupation/occupation.dm | 4 +-- .../client/preference_setup/skills/skills.dm | 4 +-- .../client/preference_setup/vore/07_traits.dm | 14 +++++------ .../client/preference_setup/vore/08_nif.dm | 4 +-- 10 files changed, 80 insertions(+), 33 deletions(-) diff --git a/code/_helpers/type2type.dm b/code/_helpers/type2type.dm index 69632d1cfd..f01c1263f4 100644 --- a/code/_helpers/type2type.dm +++ b/code/_helpers/type2type.dm @@ -607,3 +607,21 @@ if(!isnull(path)) . += path +/proc/path2text_list(list/L) + . = list() + for(var/key in L) + var/text = "[key]" + if(!isnull(L[text])) + .[text] = L[text] + continue + if(!isnull(L[key])) + .[text] = L[key] + continue + if(!isnull(text)) + .[text] = "" + +/proc/check_list_copy(var/i) + if(islist(i)) + var/list/l = i + return l.Copy() + return i diff --git a/code/datums/looping_sounds/_looping_sound.dm b/code/datums/looping_sounds/_looping_sound.dm index 91a28a713a..6da6ea8803 100644 --- a/code/datums/looping_sounds/_looping_sound.dm +++ b/code/datums/looping_sounds/_looping_sound.dm @@ -105,7 +105,7 @@ if(direct) if(ismob(thing)) var/mob/M = thing - if(M.check_sound_preference(pref_check)) + if(!M.check_sound_preference(pref_check)) continue SEND_SOUND(thing, S) else diff --git a/code/modules/client/preference_setup/general/02_language.dm b/code/modules/client/preference_setup/general/02_language.dm index 44abf32a24..30d2657bdc 100644 --- a/code/modules/client/preference_setup/general/02_language.dm +++ b/code/modules/client/preference_setup/general/02_language.dm @@ -8,19 +8,19 @@ var/static/list/forbidden_prefixes = list(";", ":", ".", "!", "*", "^", "-") /datum/category_item/player_setup_item/general/language/load_character(list/save_data) - pref.alternate_languages = save_data["language"] + pref.alternate_languages = check_list_copy(save_data["language"]) pref.extra_languages = save_data["extra_languages"] pref.language_prefixes = save_data["language_prefixes"] - pref.species = save_data["species"] //CHOMPAdd + pref.species = save_data["species"] pref.preferred_language = save_data["preflang"] - pref.language_custom_keys = save_data["language_custom_keys"] + pref.language_custom_keys = check_list_copy(save_data["language_custom_keys"]) /datum/category_item/player_setup_item/general/language/save_character(list/save_data) - save_data["language"] = pref.alternate_languages + save_data["language"] = check_list_copy(pref.alternate_languages) save_data["extra_languages"] = pref.extra_languages save_data["language_prefixes"] = pref.language_prefixes save_data["language_custom_keys"] = pref.language_custom_keys - save_data["preflang"] = pref.preferred_language + save_data["preflang"] = check_list_copy(pref.preferred_language) /datum/category_item/player_setup_item/general/language/sanitize_character() if(!islist(pref.alternate_languages)) pref.alternate_languages = list() diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index 0358f4cddb..4ba30a0fd1 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -113,16 +113,20 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.b_eyes = save_data["eyes_blue"] pref.b_type = save_data["b_type"] pref.disabilities = save_data["disabilities"] - pref.organ_data = save_data["organ_data"] - pref.rlimb_data = save_data["rlimb_data"] - pref.body_markings = save_data["body_markings"] + pref.organ_data = check_list_copy(save_data["organ_data"]) + pref.rlimb_data = check_list_copy(save_data["rlimb_data"]) + pref.body_markings = check_list_copy(save_data["body_markings"]) + for(var/i in pref.body_markings) + pref.body_markings[i] = check_list_copy(pref.body_markings[i]) + for(var/j in pref.body_markings[i]) + pref.body_markings[i][j] = check_list_copy(pref.body_markings[i][j]) pref.synth_color = save_data["synth_color"] pref.r_synth = save_data["synth_red"] pref.g_synth = save_data["synth_green"] pref.b_synth = save_data["synth_blue"] pref.synth_markings = save_data["synth_markings"] pref.bgstate = save_data["bgstate"] - pref.body_descriptors = save_data["body_descriptors"] + pref.body_descriptors = check_list_copy(save_data["body_descriptors"]) //YWadd start pref.wingdings = save_data["Wingdings"] pref.colorblind_mono = save_data["colorblind_mono"] @@ -185,16 +189,21 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O save_data["eyes_blue"] = pref.b_eyes save_data["b_type"] = pref.b_type save_data["disabilities"] = pref.disabilities - save_data["organ_data"] = pref.organ_data - save_data["rlimb_data"] = pref.rlimb_data - save_data["body_markings"] = pref.body_markings + save_data["organ_data"] = check_list_copy(pref.organ_data) + save_data["rlimb_data"] = check_list_copy(pref.rlimb_data) + var/list/body_markings = check_list_copy(pref.body_markings) + for(var/i in pref.body_markings) + body_markings[i] = check_list_copy(body_markings[i]) + for(var/j in body_markings[i]) + body_markings[i][j] = check_list_copy(body_markings[i][j]) + save_data["body_markings"] = body_markings save_data["synth_color"] = pref.synth_color save_data["synth_red"] = pref.r_synth save_data["synth_green"] = pref.g_synth save_data["synth_blue"] = pref.b_synth save_data["synth_markings"] = pref.synth_markings save_data["bgstate"] = pref.bgstate - save_data["body_descriptors"] = pref.body_descriptors + save_data["body_descriptors"] = check_list_copy(pref.body_descriptors) //YWadd start save_data["Wingdings"] = pref.wingdings save_data["colorblind_mono"] = pref.colorblind_mono diff --git a/code/modules/client/preference_setup/general/04_equipment.dm b/code/modules/client/preference_setup/general/04_equipment.dm index 9746bcc81a..1a0cb7363b 100644 --- a/code/modules/client/preference_setup/general/04_equipment.dm +++ b/code/modules/client/preference_setup/general/04_equipment.dm @@ -7,8 +7,10 @@ sort_order = 4 /datum/category_item/player_setup_item/general/equipment/load_character(list/save_data) - pref.all_underwear = save_data["all_underwear"] - pref.all_underwear_metadata = save_data["all_underwear_metadata"] + pref.all_underwear = check_list_copy(save_data["all_underwear"]) + pref.all_underwear_metadata = check_list_copy(save_data["all_underwear_metadata"]) + for(var/i in pref.all_underwear_metadata) + pref.all_underwear_metadata[i] = path2text_list(pref.all_underwear_metadata[i]) pref.backbag = save_data["backbag"] pref.pdachoice = save_data["pdachoice"] pref.communicator_visibility = save_data["communicator_visibility"] @@ -17,7 +19,10 @@ /datum/category_item/player_setup_item/general/equipment/save_character(list/save_data) save_data["all_underwear"] = pref.all_underwear - save_data["all_underwear_metadata"] = pref.all_underwear_metadata + var/list/underwear = list() + for(var/i in pref.all_underwear_metadata) + underwear[i] = check_list_copy(pref.all_underwear_metadata[i]) + save_data["all_underwear_metadata"] = underwear save_data["backbag"] = pref.backbag save_data["pdachoice"] = pref.pdachoice save_data["communicator_visibility"] = pref.communicator_visibility diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index a5c6fd1fdb..72fbc2b607 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -46,17 +46,32 @@ var/list/gear_datums = list() var/current_tab = "General" /datum/category_item/player_setup_item/loadout/load_character(list/save_data) - pref.gear_list = save_data["gear_list"] + pref.gear_list = list() + var/all_gear = check_list_copy(save_data["gear_list"]) + for(var/i in all_gear) + var/list/entries = check_list_copy(all_gear["[i]"]) + for(var/j in entries) + entries["[j]"] = path2text_list(entries["[j]"]) + pref.gear_list["[i]"] = entries pref.gear_slot = save_data["gear_slot"] if(pref.gear_list!=null && pref.gear_slot!=null) pref.gear = pref.gear_list["[pref.gear_slot]"] else - pref.gear = save_data["gear"] + pref.gear = check_list_copy(save_data["gear"]) pref.gear_slot = 1 /datum/category_item/player_setup_item/loadout/save_character(list/save_data) pref.gear_list["[pref.gear_slot]"] = pref.gear - save_data["gear_list"] = pref.gear_list + var/list/all_gear = list() + var/worn_gear = check_list_copy(pref.gear_list) + for(var/i in worn_gear) + var/list/entries = check_list_copy(worn_gear["[i]"]) + if(!length(entries)) + entries = check_list_copy(worn_gear[i]) + for(var/j in entries) + entries["[j]"] = check_list_copy(entries["[j]"]) + all_gear["[i]"] = entries + save_data["gear_list"] = all_gear save_data["gear_slot"] = pref.gear_slot /datum/category_item/player_setup_item/loadout/proc/valid_gear_choices(var/max_cost) diff --git a/code/modules/client/preference_setup/occupation/occupation.dm b/code/modules/client/preference_setup/occupation/occupation.dm index 2fe2b1c96f..48d1a7dae7 100644 --- a/code/modules/client/preference_setup/occupation/occupation.dm +++ b/code/modules/client/preference_setup/occupation/occupation.dm @@ -18,7 +18,7 @@ pref.job_talon_med = save_data["job_talon_med"] pref.job_talon_high = save_data["job_talon_high"] //VOREStation Add End - pref.player_alt_titles = save_data["player_alt_titles"] + pref.player_alt_titles = check_list_copy(save_data["player_alt_titles"]) //CHOMPStation Add pref.job_other_low = save_data["job_other_low"] pref.job_other_med = save_data["job_other_med"] @@ -41,7 +41,7 @@ save_data["job_talon_med"] = pref.job_talon_med save_data["job_talon_high"] = pref.job_talon_high //VOREStation Add End - save_data["player_alt_titles"] = pref.player_alt_titles + save_data["player_alt_titles"] = check_list_copy(pref.player_alt_titles) //CHOMPStation Add save_data["job_other_low"] = pref.job_other_low save_data["job_other_med"] = pref.job_other_med diff --git a/code/modules/client/preference_setup/skills/skills.dm b/code/modules/client/preference_setup/skills/skills.dm index eef0512acc..60e916241f 100644 --- a/code/modules/client/preference_setup/skills/skills.dm +++ b/code/modules/client/preference_setup/skills/skills.dm @@ -3,12 +3,12 @@ sort_order = 1 /datum/category_item/player_setup_item/skills/load_character(list/save_data) - pref.skills = save_data["skills"] + pref.skills = check_list_copy(save_data["skills"]) pref.used_skillpoints = save_data["used_skillpoints"] pref.skill_specialization = save_data["skill_specialization"] /datum/category_item/player_setup_item/skills/save_character(list/save_data) - save_data["skills"] = pref.skills + save_data["skills"] = check_list_copy(pref.skills) save_data["used_skillpoints"] = pref.used_skillpoints save_data["skill_specialization"] = pref.skill_specialization diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm index 3e9d2afefc..456da831b7 100644 --- a/code/modules/client/preference_setup/vore/07_traits.dm +++ b/code/modules/client/preference_setup/vore/07_traits.dm @@ -131,15 +131,15 @@ var/global/list/valid_bloodreagents = list("default","iron","copper","phoron","s pref.custom_ask = save_data["custom_ask"] pref.custom_exclaim = save_data["custom_exclaim"] - pref.custom_heat = save_data["custom_heat"] - pref.custom_cold = save_data["custom_cold"] + pref.custom_heat = check_list_copy(save_data["custom_heat"]) + pref.custom_cold = check_list_copy(save_data["custom_cold"]) /datum/category_item/player_setup_item/vore/traits/save_character(list/save_data) save_data["custom_species"] = pref.custom_species save_data["custom_base"] = pref.custom_base - save_data["pos_traits"] = pref.pos_traits - save_data["neu_traits"] = pref.neu_traits - save_data["neg_traits"] = pref.neg_traits + save_data["pos_traits"] = check_list_copy(pref.pos_traits) + save_data["neu_traits"] = check_list_copy(pref.neu_traits) + save_data["neg_traits"] = check_list_copy(pref.neg_traits) save_data["blood_color"] = pref.blood_color save_data["blood_reagents"] = pref.blood_reagents @@ -152,8 +152,8 @@ var/global/list/valid_bloodreagents = list("default","iron","copper","phoron","s save_data["custom_ask"] = pref.custom_ask save_data["custom_exclaim"] = pref.custom_exclaim - save_data["custom_heat"] = pref.custom_heat - save_data["custom_cold"] = pref.custom_cold + save_data["custom_heat"] = check_list_copy(pref.custom_heat) + save_data["custom_cold"] = check_list_copy(pref.custom_cold) /datum/category_item/player_setup_item/vore/traits/sanitize_character() if(!pref.pos_traits) pref.pos_traits = list() diff --git a/code/modules/client/preference_setup/vore/08_nif.dm b/code/modules/client/preference_setup/vore/08_nif.dm index e4a760be83..57a04413c7 100644 --- a/code/modules/client/preference_setup/vore/08_nif.dm +++ b/code/modules/client/preference_setup/vore/08_nif.dm @@ -21,7 +21,7 @@ pref.nif_path = save_data_file["nif_path"] pref.nif_durability = save_data_file["nif_durability"] - pref.nif_savedata = save_data_file["nif_savedata"] + pref.nif_savedata = check_list_copy(save_data_file["nif_savedata"]) /datum/category_item/player_setup_item/vore/nif/save_character() var/datum/json_savefile/savefile = new /datum/json_savefile(nif_savefile_path(pref.client_ckey)) @@ -29,7 +29,7 @@ save_data_file["nif_path"] = pref.nif_path save_data_file["nif_durability"] = pref.nif_durability - save_data_file["nif_savedata"] = pref.nif_savedata + save_data_file["nif_savedata"] = check_list_copy(pref.nif_savedata) savefile.set_entry("character[pref.default_slot]", save_data_file) savefile.save()