diff --git a/code/_helpers/type2type.dm b/code/_helpers/type2type.dm index 908618128c..c9dffc7c2b 100644 --- a/code/_helpers/type2type.dm +++ b/code/_helpers/type2type.dm @@ -574,3 +574,22 @@ continue 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/modules/client/preference_setup/general/02_language.dm b/code/modules/client/preference_setup/general/02_language.dm index 4c7f408239..eee2513420 100644 --- a/code/modules/client/preference_setup/general/02_language.dm +++ b/code/modules/client/preference_setup/general/02_language.dm @@ -8,18 +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"] 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)) diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index 4e2a44a046..bb685f62fa 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -113,16 +113,16 @@ 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"]) 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"]) pref.ear_style = save_data["ear_style"] pref.r_ears = save_data["r_ears"] pref.g_ears = save_data["g_ears"] @@ -178,16 +178,16 @@ 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) + save_data["body_markings"] = check_list_copy(pref.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) save_data["ear_style"] = pref.ear_style save_data["r_ears"] = pref.r_ears save_data["g_ears"] = pref.g_ears diff --git a/code/modules/client/preference_setup/general/04_equipment.dm b/code/modules/client/preference_setup/general/04_equipment.dm index 57146e5832..2ed5cfc71a 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] = check_list_copy(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] = pref.all_underwear_metadata[i].Copy() + 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 fd92052458..8793eb2d35 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -46,17 +46,37 @@ 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]"]) + if(!length(entries)) + entries = check_list_copy(all_gear[i]) + for(var/j in entries) + entries["[j]"] = check_list_copy(path2text_list(entries["[j]"])) + var/index = i + if(!isnum(i)) + index = text2num(i) + pref.gear_list["[index]"] = 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 4557e0c5f5..3b5ec68c25 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"]) /datum/category_item/player_setup_item/occupation/save_character(list/save_data) save_data["alternate_option"] = pref.alternate_option @@ -36,7 +36,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) /datum/category_item/player_setup_item/occupation/sanitize_character() pref.alternate_option = sanitize_integer(pref.alternate_option, 0, 2, initial(pref.alternate_option)) 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 da08d2b14e..5714c6eee4 100644 --- a/code/modules/client/preference_setup/vore/07_traits.dm +++ b/code/modules/client/preference_setup/vore/07_traits.dm @@ -110,9 +110,9 @@ var/global/list/valid_bloodreagents = list("default","iron","copper","phoron","s /datum/category_item/player_setup_item/vore/traits/load_character(list/save_data) pref.custom_species = save_data["custom_species"] pref.custom_base = save_data["custom_base"] - pref.pos_traits = text2path_list(save_data["pos_traits"]) - pref.neu_traits = text2path_list(save_data["neu_traits"]) - pref.neg_traits = text2path_list(save_data["neg_traits"]) + pref.pos_traits = text2path_list(check_list_copy(save_data["pos_traits"])) + pref.neu_traits = text2path_list(check_list_copy(save_data["neu_traits"])) + pref.neg_traits = text2path_list(check_list_copy(save_data["neg_traits"])) pref.blood_color = save_data["blood_color"] pref.blood_reagents = save_data["blood_reagents"] @@ -125,15 +125,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 @@ -146,8 +146,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()