diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 69080fa8001..843f1108c9f 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -248,7 +248,7 @@ var/global/datum/controller/occupations/job_master for(var/mob/new_player/player in player_list) if(player.ready && player.mind && !player.mind.assigned_role) unassigned += player - + if(player.client.prefs.randomslot) player.client.prefs.random_character() Debug("DO, Len: [unassigned.len]") if(unassigned.len == 0) return 0 diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 7f195f01f4c..0de42a51dd5 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -114,6 +114,9 @@ datum/preferences var/metadata = "" var/slot_name = "" + // Whether or not to use randomized character slots + var/randomslot = 0 + /datum/preferences/New(client/C) b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") if(istype(C)) @@ -246,7 +249,6 @@ datum/preferences dat += "\[...\]

" else dat += "

" - if(gender == MALE) dat += "Underwear: [underwear_m[underwear]]
" else @@ -293,6 +295,7 @@ datum/preferences dat += "-Alpha(transparence): [UI_style_alpha]
" dat += "Play admin midis: [(toggles & SOUND_MIDI) ? "Yes" : "No"]
" dat += "Play lobby music: [(toggles & SOUND_LOBBY) ? "Yes" : "No"]
" + dat += "Randomized Character Slot: [randomslot ? "Yes" : "No"]
" dat += "Ghost ears: [(toggles & CHAT_GHOSTEARS) ? "Nearest Creatures" : "All Speech"]
" dat += "Ghost sight: [(toggles & CHAT_GHOSTSIGHT) ? "Nearest Creatures" : "All Emotes"]
" @@ -1197,6 +1200,9 @@ datum/preferences if("name") be_random_name = !be_random_name + if("randomslot") + randomslot = !randomslot + if("hear_midis") toggles ^= SOUND_MIDI diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 0fe785c72c7..1f33848115e 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -56,7 +56,7 @@ S["toggles"] >> toggles S["UI_style_color"] >> UI_style_color S["UI_style_alpha"] >> UI_style_alpha - + S["randomslot"] >> randomslot //Sanitize ooccolor = sanitize_hexcolor(ooccolor, initial(ooccolor)) @@ -67,8 +67,7 @@ toggles = sanitize_integer(toggles, 0, 65535, initial(toggles)) UI_style_color = sanitize_hexcolor(UI_style_color, initial(UI_style_color)) UI_style_alpha = sanitize_integer(UI_style_alpha, 0, 255, initial(UI_style_alpha)) - - + randomslot = sanitize_integer(randomslot, 0, 1, initial(randomslot)) return 1 /datum/preferences/proc/save_preferences() @@ -88,22 +87,13 @@ S["toggles"] << toggles S["UI_style_color"] << UI_style_color S["UI_style_alpha"] << UI_style_alpha - - + S["randomslot"] << randomslot return 1 -/datum/preferences/proc/load_character(slot) - if(!path) return 0 - if(!fexists(path)) return 0 +/datum/preferences/proc/load_save(dir) var/savefile/S = new /savefile(path) - if(!S) return 0 - S.cd = "/" - if(!slot) slot = default_slot - slot = sanitize_integer(slot, 1, MAX_SAVE_SLOTS, initial(default_slot)) - if(slot != default_slot) - default_slot = slot - S["default_slot"] << slot - S.cd = "/character[slot]" + if(!S) return 0 + S.cd = dir //Character S["OOC_Notes"] >> metadata @@ -198,6 +188,133 @@ if(!organ_data) src.organ_data = list() //if(!skin_style) skin_style = "Default" +/datum/preferences/proc/random_character() + if(!path) return 0 + if(!fexists(path)) return 0 + var/savefile/S = new /savefile(path) + if(!S) return 0 + var/list/saves = list() + var/name + for(var/i=1, i<=MAX_SAVE_SLOTS, i++) + S.cd = "/character[i]" + S["real_name"] >> name + if(!name) continue + saves.Add(S.cd) + + if(!saves.len) + load_character() + return 0 + S.cd = pick(saves) + load_save(S.cd) + return 1 + +/datum/preferences/proc/load_character(slot) + if(!path) return 0 + if(!fexists(path)) return 0 + var/savefile/S = new /savefile(path) + if(!S) return 0 + S.cd = "/" + if(!slot) slot = default_slot + slot = sanitize_integer(slot, 1, MAX_SAVE_SLOTS, initial(default_slot)) + if(slot != default_slot) + default_slot = slot + S["default_slot"] << slot + S.cd = "/character[slot]" + load_save(S.cd) +/* Now loaded by proc load_save(S.cd) + //Character + S["OOC_Notes"] >> metadata + S["real_name"] >> real_name + S["name_is_always_random"] >> be_random_name + S["gender"] >> gender + S["age"] >> age + S["species"] >> species + S["language"] >> language + + //colors to be consolidated into hex strings (requires some work with dna code) + S["hair_red"] >> r_hair + S["hair_green"] >> g_hair + S["hair_blue"] >> b_hair + S["facial_red"] >> r_facial + S["facial_green"] >> g_facial + S["facial_blue"] >> b_facial + S["skin_tone"] >> s_tone + S["hair_style_name"] >> h_style + S["facial_style_name"] >> f_style + S["eyes_red"] >> r_eyes + S["eyes_green"] >> g_eyes + S["eyes_blue"] >> b_eyes + S["underwear"] >> underwear + S["backbag"] >> backbag + S["b_type"] >> b_type + + //Jobs + S["alternate_option"] >> alternate_option + S["job_civilian_high"] >> job_civilian_high + S["job_civilian_med"] >> job_civilian_med + S["job_civilian_low"] >> job_civilian_low + S["job_medsci_high"] >> job_medsci_high + S["job_medsci_med"] >> job_medsci_med + S["job_medsci_low"] >> job_medsci_low + S["job_engsec_high"] >> job_engsec_high + S["job_engsec_med"] >> job_engsec_med + S["job_engsec_low"] >> job_engsec_low + + //Miscellaneous + S["flavor_text"] >> flavor_text + S["med_record"] >> med_record + S["sec_record"] >> sec_record + S["gen_record"] >> gen_record + S["be_special"] >> be_special + S["disabilities"] >> disabilities + S["player_alt_titles"] >> player_alt_titles + S["organ_data"] >> organ_data + + S["nanotrasen_relation"] >> nanotrasen_relation + //S["skin_style"] >> skin_style + + //Sanitize + metadata = sanitize_text(metadata, initial(metadata)) + real_name = reject_bad_name(real_name) + if(isnull(species)) species = "Human" + if(isnull(language)) language = "None" + if(isnull(nanotrasen_relation)) nanotrasen_relation = initial(nanotrasen_relation) + if(!real_name) real_name = random_name(gender) + be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name)) + gender = sanitize_gender(gender) + age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age)) + r_hair = sanitize_integer(r_hair, 0, 255, initial(r_hair)) + g_hair = sanitize_integer(g_hair, 0, 255, initial(g_hair)) + b_hair = sanitize_integer(b_hair, 0, 255, initial(b_hair)) + r_facial = sanitize_integer(r_facial, 0, 255, initial(r_facial)) + g_facial = sanitize_integer(g_facial, 0, 255, initial(g_facial)) + b_facial = sanitize_integer(b_facial, 0, 255, initial(b_facial)) + s_tone = sanitize_integer(s_tone, -185, 34, initial(s_tone)) + h_style = sanitize_inlist(h_style, hair_styles_list, initial(h_style)) + f_style = sanitize_inlist(f_style, facial_hair_styles_list, initial(f_style)) + r_eyes = sanitize_integer(r_eyes, 0, 255, initial(r_eyes)) + g_eyes = sanitize_integer(g_eyes, 0, 255, initial(g_eyes)) + b_eyes = sanitize_integer(b_eyes, 0, 255, initial(b_eyes)) + underwear = sanitize_integer(underwear, 1, underwear_m.len, initial(underwear)) + backbag = sanitize_integer(backbag, 1, backbaglist.len, initial(backbag)) + b_type = sanitize_text(b_type, initial(b_type)) + + alternate_option = sanitize_integer(alternate_option, 0, 2, initial(alternate_option)) + job_civilian_high = sanitize_integer(job_civilian_high, 0, 65535, initial(job_civilian_high)) + job_civilian_med = sanitize_integer(job_civilian_med, 0, 65535, initial(job_civilian_med)) + job_civilian_low = sanitize_integer(job_civilian_low, 0, 65535, initial(job_civilian_low)) + job_medsci_high = sanitize_integer(job_medsci_high, 0, 65535, initial(job_medsci_high)) + job_medsci_med = sanitize_integer(job_medsci_med, 0, 65535, initial(job_medsci_med)) + job_medsci_low = sanitize_integer(job_medsci_low, 0, 65535, initial(job_medsci_low)) + job_engsec_high = sanitize_integer(job_engsec_high, 0, 65535, initial(job_engsec_high)) + job_engsec_med = sanitize_integer(job_engsec_med, 0, 65535, initial(job_engsec_med)) + job_engsec_low = sanitize_integer(job_engsec_low, 0, 65535, initial(job_engsec_low)) + + if(isnull(disabilities)) disabilities = 0 + if(!player_alt_titles) player_alt_titles = new() + if(!organ_data) src.organ_data = list() + //if(!skin_style) skin_style = "Default" +*/ return 1 /datum/preferences/proc/save_character()