diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index 46539d51ed3..239c3e88017 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -30,10 +30,11 @@ /proc/Centcomm_announce(var/msg, var/mob/Sender, var/iamessage) var/msg_cciaa = "[uppertext(boss_short)][iamessage ? " IA" : ""]:[key_name(Sender, 1)] (RPLY): [msg]" - var/msg_admin = "[uppertext(boss_short)][iamessage ? " IA" : ""]:[key_name(Sender, 1)] (PP) (VV) (SM) ([admin_jump_link(Sender, src)]) (CA) (BSA) (RPLY): [msg]" + var/cciaa_present = 0 var/cciaa_afk = 0 + for(var/client/C in admins) if(R_ADMIN & C.holder.rights) C << msg_admin diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index b2374ea7cbf..236e5804eff 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -349,8 +349,6 @@ . = ..() //calls mob.Login() - prefs.sanitize_preferences() - if(holder) add_admin_verbs() diff --git a/code/modules/client/preference_setup/antagonism/01_candidacy.dm b/code/modules/client/preference_setup/antagonism/01_candidacy.dm index 8b8819731bb..f171a20a0c4 100644 --- a/code/modules/client/preference_setup/antagonism/01_candidacy.dm +++ b/code/modules/client/preference_setup/antagonism/01_candidacy.dm @@ -26,7 +26,7 @@ /datum/category_item/player_setup_item/antagonism/candidacy/sanitize_character(var/sql_load = 0) if (sql_load) - if (pref.be_special_role) + if (istext(pref.be_special_role)) pref.be_special_role = params2list(pref.be_special_role) if (!istype(pref.be_special_role)) diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm index c2bf024732f..570e54ea2b8 100644 --- a/code/modules/client/preference_setup/general/01_basic.dm +++ b/code/modules/client/preference_setup/general/01_basic.dm @@ -7,6 +7,7 @@ S["real_name"] >> pref.real_name S["gender"] >> pref.gender S["age"] >> pref.age + S["species"] >> pref.species S["spawnpoint"] >> pref.spawnpoint S["OOC_Notes"] >> pref.metadata @@ -14,6 +15,7 @@ S["real_name"] << pref.real_name S["gender"] << pref.gender S["age"] << pref.age + S["species"] << pref.species S["spawnpoint"] << pref.spawnpoint S["OOC_Notes"] << pref.metadata @@ -22,7 +24,8 @@ "gender", "age", "metadata", - "spawnpoint",), + "spawnpoint", + "species"), "args" = list("id"))) /datum/category_item/player_setup_item/general/basic/gather_load_parameters() @@ -34,6 +37,7 @@ "age", "metadata", "spawnpoint", + "species", "id" = 1, "ckey" = 1)) @@ -43,6 +47,7 @@ "age" = pref.age, "metadata" = pref.metadata, "spawnpoint" = pref.spawnpoint, + "species" = pref.species, "id" = pref.current_character, "ckey" = pref.client.ckey) @@ -66,6 +71,9 @@ log_debug("SQL CHARACTER LOAD: Logic error, general/basic/load_special() didn't return any rows when it should have. Character ID: [pref.current_character].") /datum/category_item/player_setup_item/general/basic/sanitize_character() + if(!pref.species || !(pref.species in playable_species)) + pref.species = "Human" + pref.age = sanitize_integer(text2num(pref.age), pref.getMinAge(), pref.getMaxAge(), initial(pref.age)) pref.gender = sanitize_inlist(pref.gender, valid_player_genders, pick(valid_player_genders)) pref.real_name = sanitize_name(pref.real_name, pref.species) diff --git a/code/modules/client/preference_setup/general/02_language.dm b/code/modules/client/preference_setup/general/02_language.dm index a34fd30f3ef..388547b4539 100644 --- a/code/modules/client/preference_setup/general/02_language.dm +++ b/code/modules/client/preference_setup/general/02_language.dm @@ -48,12 +48,15 @@ var/list/bad_langs = pref.alternate_languages - langs if (bad_langs.len) - to_chat(pref.client, "[bad_langs.len] invalid languages were found in your character setup!") + to_chat(pref.client, "[bad_langs.len] invalid language\s were found in your character setup! Please save your character again to stop this error from repeating!") for (var/L in bad_langs) to_chat(pref.client, "Removing the language \"[L]\" from your character.") pref.alternate_languages -= L + var/datum/category_group/player_setup_category/cat = category + cat.modified = TRUE + /datum/category_item/player_setup_item/general/language/content() . += "Languages
" var/datum/species/S = all_species[pref.species] diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index 8569c1707a4..4eedd68509c 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -5,7 +5,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O sort_order = 3 /datum/category_item/player_setup_item/general/body/load_character(var/savefile/S) - S["species"] >> pref.species S["hair_red"] >> pref.r_hair S["hair_green"] >> pref.g_hair S["hair_blue"] >> pref.b_hair @@ -29,7 +28,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.preview_icon = null /datum/category_item/player_setup_item/general/body/save_character(var/savefile/S) - S["species"] << pref.species S["hair_red"] << pref.r_hair S["hair_green"] << pref.g_hair S["hair_blue"] << pref.b_hair @@ -52,27 +50,25 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O S["body_markings"] << pref.body_markings /datum/category_item/player_setup_item/general/body/gather_load_query() - return list("ss13_characters" = list("vars" = list("species", - "hair_colour", - "facial_colour", - "skin_tone" = "s_tone", - "skin_colour", - "hair_style" = "h_style", - "facial_style" = "f_style", - "eyes_colour", - "b_type", - "disabilities", - "organs_data" = "organ_data", - "organs_robotic" = "rlimb_data", - "body_markings"), + return list("ss13_characters" = list("vars" = list("hair_colour", + "facial_colour", + "skin_tone" = "s_tone", + "skin_colour", + "hair_style" = "h_style", + "facial_style" = "f_style", + "eyes_colour", + "b_type", + "disabilities", + "organs_data" = "organ_data", + "organs_robotic" = "rlimb_data", + "body_markings"), "args" = list("id"))) /datum/category_item/player_setup_item/general/body/gather_load_parameters() return list("id" = pref.current_character) /datum/category_item/player_setup_item/general/body/gather_save_query() - return list("ss13_characters" = list("species", - "hair_colour", + return list("ss13_characters" = list("hair_colour", "facial_colour", "skin_tone", "skin_colour", @@ -88,8 +84,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O "ckey" = 1)) /datum/category_item/player_setup_item/general/body/gather_save_parameters() - return list("species" = pref.species, - "hair_colour" = "#" + num2hex(pref.r_hair, 2) + num2hex(pref.g_hair, 2) + num2hex(pref.b_hair, 2), + return list("hair_colour" = "#" + num2hex(pref.r_hair, 2) + num2hex(pref.g_hair, 2) + num2hex(pref.b_hair, 2), "facial_colour" = "#" + num2hex(pref.r_facial, 2) + num2hex(pref.g_facial, 2) + num2hex(pref.b_facial, 2), "skin_tone" = pref.s_tone, "skin_colour" = "#" + num2hex(pref.r_skin, 2) + num2hex(pref.g_skin, 2) + num2hex(pref.b_skin, 2), @@ -105,9 +100,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O "ckey" = pref.client.ckey) /datum/category_item/player_setup_item/general/body/sanitize_character(var/sql_load = 0) - if(!pref.species || !(pref.species in playable_species)) - pref.species = "Human" - if (sql_load) pref.hair_colour = sanitize_hexcolor(pref.hair_colour) pref.r_hair = GetRedPart(pref.hair_colour) @@ -133,11 +125,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.disabilities = text2num(pref.disabilities) - if (pref.organ_data) + if (istext(pref.organ_data)) pref.organ_data = params2list(pref.organ_data) - if (pref.rlimb_data) + if (istext(pref.rlimb_data)) pref.rlimb_data = params2list(pref.rlimb_data) - if (pref.body_markings) + if (istext(pref.body_markings)) var/before = pref.body_markings try pref.body_markings = json_decode(pref.body_markings) @@ -530,6 +522,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O if("Head") limb = "head" carries_organs = 1 + else + to_chat(user, "Cancelled.") + return TOPIC_NOACTION var/list/available_states = list("Normal","Amputated","Prosthesis") if(carries_organs) diff --git a/code/modules/client/preference_setup/general/05_background.dm b/code/modules/client/preference_setup/general/05_background.dm index dfbdf60561b..00d5d1aef1a 100644 --- a/code/modules/client/preference_setup/general/05_background.dm +++ b/code/modules/client/preference_setup/general/05_background.dm @@ -28,7 +28,7 @@ "records_security" = "sec_record", "records_ccia" = "ccia_record"), "args" = list("char_id")), - "ss13_characters" = list("vars" = list("home_system", "citizenship", "faction", "religion"), "args" = list("id"))) + "ss13_characters" = list("vars" = list("nt_relation" = "nanotrasen_relation" ,"home_system", "citizenship", "faction", "religion"), "args" = list("id"))) /datum/category_item/player_setup_item/general/background/gather_load_parameters() return list("id" = pref.current_character, "char_id" = pref.current_character) @@ -38,13 +38,14 @@ "records_medical", "records_security", "char_id" = 1), - "ss13_characters" = list("home_system", "citizenship", "faction", "religion", "id" = 1, "ckey" = 1)) + "ss13_characters" = list("nt_relation", "home_system", "citizenship", "faction", "religion", "id" = 1, "ckey" = 1)) /datum/category_item/player_setup_item/general/background/gather_save_parameters() return list("records_employment" = pref.gen_record, "records_medical" = pref.med_record, "records_security" = pref.sec_record, "char_id" = pref.current_character, + "nt_relation" = pref.nanotrasen_relation, "home_system" = pref.home_system, "citizenship" = pref.citizenship, "faction" = pref.faction, diff --git a/code/modules/client/preference_setup/general/06_flavor.dm b/code/modules/client/preference_setup/general/06_flavor.dm index 3661dfc4cab..d5d1103b090 100644 --- a/code/modules/client/preference_setup/general/06_flavor.dm +++ b/code/modules/client/preference_setup/general/06_flavor.dm @@ -49,7 +49,7 @@ "flavour_hands" = "flavor_texts/hands", "flavour_legs" = "flavor_texts/legs", "flavour_feet" = "flavor_texts/feet", - "robot_default" = "flavour_texts_robot/default", + "robot_default" = "flavour_texts_robot/Default", "signature" = "signature", "signature_font" = "signfont") @@ -92,7 +92,7 @@ "flavour_hands" = pref.flavor_texts["hands"], "flavour_legs" = pref.flavor_texts["legs"], "flavour_feet" = pref.flavor_texts["feet"], - "robot_default" = pref.flavour_texts_robot["default"], + "robot_default" = pref.flavour_texts_robot["Default"], "signature" = pref.signature, "signature_font" = pref.signfont) diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index 34262a1d7ef..68d94e221f2 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -70,7 +70,7 @@ var/list/gear_datums = list() /datum/category_item/player_setup_item/loadout/sanitize_character(var/sql_load = 0) if (sql_load) gear_reset = FALSE - if (pref.gear && istext(pref.gear)) + if (istext(pref.gear)) try pref.gear = json_decode(pref.gear) catch @@ -78,9 +78,6 @@ var/list/gear_datums = list() pref.gear = list() gear_reset = TRUE - else - pref.gear = list() - gear_reset = TRUE var/mob/preference_mob = preference_mob() if(!islist(pref.gear)) diff --git a/code/modules/client/preference_setup/preference_setup.dm b/code/modules/client/preference_setup/preference_setup.dm index b04284df81d..724b348e64a 100644 --- a/code/modules/client/preference_setup/preference_setup.dm +++ b/code/modules/client/preference_setup/preference_setup.dm @@ -34,13 +34,13 @@ /datum/category_group/player_setup_category/global_preferences name = "Global" - sort_order = 5 + sort_order = 6 category_item_type = /datum/category_item/player_setup_item/player_global sql_role = SQL_PREFERENCES /datum/category_group/player_setup_category/other_preferences name = "Other" - sort_order = 6 + sort_order = 7 category_item_type = /datum/category_item/player_setup_item/other /**************************** @@ -61,9 +61,9 @@ selected_category = null return ..() -/datum/category_collection/player_setup_collection/proc/sanitize_setup() +/datum/category_collection/player_setup_collection/proc/sanitize_setup(sql_load = FALSE) for(var/datum/category_group/player_setup_category/PS in categories) - PS.sanitize_setup() + PS.sanitize_setup(sql_load) /datum/category_collection/player_setup_collection/proc/load_character(var/savefile/S) for(var/datum/category_group/player_setup_category/PS in categories) @@ -122,11 +122,11 @@ var/sql_role = SQL_CHARACTER var/modified = 0 -/datum/category_group/player_setup_category/proc/sanitize_setup() +/datum/category_group/player_setup_category/proc/sanitize_setup(sql_load = FALSE) for(var/datum/category_item/player_setup_item/PI in items) - PI.sanitize_preferences() + PI.sanitize_preferences(sql_load) for(var/datum/category_item/player_setup_item/PI in items) - PI.sanitize_character() + PI.sanitize_character(sql_load) /datum/category_group/player_setup_category/proc/load_character(var/savefile/S) // Load all data, then sanitize it. @@ -150,11 +150,10 @@ if (!config.sql_saves || !establish_db_connection(dbcon)) for (var/datum/category_item/player_setup_item/PI in items) PI.save_character(S) - else - if (modified) - // No save here, because this is only called from the menu and needs to save /everything/. - handle_sql_saving(SQL_CHARACTER) - modified = 0 + else if (modified) + // No save here, because this is only called from the menu and needs to save /everything/. + handle_sql_saving(SQL_CHARACTER) + modified = 0 /datum/category_group/player_setup_category/proc/load_preferences(var/savefile/S) if (!config.sql_saves || !establish_db_connection(dbcon)) diff --git a/code/modules/client/preference_setup/preferences_sql.dm b/code/modules/client/preference_setup/preferences_sql.dm index 429faaf5097..12177f40a46 100644 --- a/code/modules/client/preference_setup/preferences_sql.dm +++ b/code/modules/client/preference_setup/preferences_sql.dm @@ -235,8 +235,8 @@ query.Execute() if (query.NextRow()) - arg_list[":id"] = text2num(query.item[1]) - arg_list[":char_id"] = text2num(query.item[1]) + arg_list["id"] = text2num(query.item[1]) + arg_list["char_id"] = text2num(query.item[1]) cc.preferences.current_character = text2num(query.item[1]) #ifdef SQL_PREF_DEBUG diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index f529b7e3da7..cdf77d6fa22 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -64,9 +64,8 @@ default_slot = slot S["default_slot"] << slot S.cd = "/character[slot]" - else - if (slot) - current_character = slot + else if (slot) + current_character = slot player_setup.load_character(S) @@ -97,7 +96,7 @@ return S /datum/preferences/proc/sanitize_preferences() - player_setup.sanitize_setup() + player_setup.sanitize_setup(config.sql_saves) return 1 /datum/preferences/proc/update_setup(var/savefile/preferences, var/savefile/character) diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm index 7ba7f2228c2..024ea6716de 100644 --- a/code/modules/multiz/movement.dm +++ b/code/modules/multiz/movement.dm @@ -72,7 +72,7 @@ // Actually move. Move(destination) return TRUE - + /mob/living/zMove(direction) if (is_ventcrawling) var/obj/machinery/atmospherics/pipe/zpipe/P = loc @@ -189,6 +189,9 @@ * this cycle. */ /atom/movable/proc/can_fall(turf/below, turf/simulated/open/dest = src.loc) + if (!istype(dest)) + return FALSE + // Anchored things don't fall. if(anchored) return FALSE diff --git a/code/world.dm b/code/world.dm index 51a2c5bcbe7..10a658a1165 100644 --- a/code/world.dm +++ b/code/world.dm @@ -196,7 +196,7 @@ var/list/world_api_rate_limit = list() // They don't provide any useful information, and as such, are being suppressed. #ifdef UNIT_TEST - if (findtextEx(e.name, "Invalid Timer:")) + if (findtextEx(e.name, "Invalid timer:") || findtextEx(e.desc, "Invalid timer:")) inerror = 0 return diff --git a/html/changelogs/skull132-preferences_fixes.yml b/html/changelogs/skull132-preferences_fixes.yml new file mode 100644 index 00000000000..08ce905c019 --- /dev/null +++ b/html/changelogs/skull132-preferences_fixes.yml @@ -0,0 +1,8 @@ +author: Skull132 +delete-after: true + +changes: + - bugfix: "Fixes custom loadouts and role preferences not loading properly on initial character load." + - bugfix: "NanoTrasen relation is now properly saved and loaded." + - bugfix: "You can now cancel out of adjusting amputated/proshetic limbs properly." + - bugfix: "Default cyborg module flavour text now saves properly."