From b71dc95f041cbe69c79e8fb44e8203eb6061010d Mon Sep 17 00:00:00 2001 From: ShadowLarkens Date: Sun, 8 Sep 2024 00:28:33 -0700 Subject: [PATCH] Fix some bugs with prefs --- code/_helpers/type2type.dm | 8 ++++++++ .../client/preference_setup/general/03_body.dm | 14 ++++++++++---- .../client/preference_setup/vore/07_traits.dm | 9 ++++++--- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/code/_helpers/type2type.dm b/code/_helpers/type2type.dm index 40be3d403a..8ed4f48222 100644 --- a/code/_helpers/type2type.dm +++ b/code/_helpers/type2type.dm @@ -558,3 +558,11 @@ /// for use inside of browse() calls to html assets that might be loaded on a cdn. /proc/url2htmlloader(url) return {""} + +/// Returns a list with all keys turned into paths +/proc/text2path_list(list/L) + . = list() + for(var/key in L) + var/path = text2path(key) + if(!isnull(path)) + . += path diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index 735b4990b8..4e2a44a046 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -506,11 +506,17 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O ++ind if(ind > 1) . += ", " - var/datum/robolimb/R - if(pref.rlimb_data[name] && all_robolimbs[pref.rlimb_data[name]]) - R = all_robolimbs[pref.rlimb_data[name]] + + var/datum/robolimb/R = basic_robolimb + var/key = pref.rlimb_data[name] + if(!istext(key)) + log_debug("Bad rlimb_data for [key_name(pref.client)], [name] was set to [key]") + to_chat(usr, span_warning("Error loading robot limb data for `[name]`, clearing pref.")) + pref.rlimb_data -= name else - R = basic_robolimb + R = LAZYACCESS(all_robolimbs, key) + if(!istype(R)) + R = basic_robolimb . += "\t[R.company] [organ_name] prosthesis" else if(status == "amputated") ++ind diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm index 58c0642263..da08d2b14e 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 = save_data["pos_traits"] - pref.neu_traits = save_data["neu_traits"] - pref.neg_traits = save_data["neg_traits"] + 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.blood_color = save_data["blood_color"] pref.blood_reagents = save_data["blood_reagents"] @@ -186,13 +186,16 @@ var/global/list/valid_bloodreagents = list("default","iron","copper","phoron","s //Neutral traits for(var/datum/trait/path as anything in pref.neu_traits) if(!(path in neutral_traits)) + to_world_log("removing [path] for not being in neutral_traits") pref.neu_traits -= path continue if(!(pref.species == SPECIES_CUSTOM) && !(path in everyone_traits_neutral)) + to_world_log("removing [path] for not being a custom species") pref.neu_traits -= path continue var/take_flags = initial(path.can_take) if((pref.dirty_synth && !(take_flags & SYNTHETICS)) || (pref.gross_meatbag && !(take_flags & ORGANICS))) + to_world_log("removing [path] for being a dirty synth") pref.neu_traits -= path //Negative traits for(var/datum/trait/path as anything in pref.neg_traits)