diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index 5702e68cefc..86331b0e28b 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -261,7 +261,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()
+ if(player.client.prefs.randomslot) player.client.prefs.random_character(player.client)
Debug("DO, Len: [unassigned.len]")
if(unassigned.len == 0) return 0
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 6c680c1334e..7cd2c68823b 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -450,7 +450,7 @@ var/list/admin_verbs_mentor = list(
var/new_ooccolor = input(src, "Please select your OOC colour.", "OOC colour") as color|null
if(new_ooccolor)
prefs.ooccolor = new_ooccolor
- prefs.save_preferences()
+ prefs.save_preferences(src)
feedback_add_details("admin_verb","OC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
@@ -559,22 +559,22 @@ var/list/admin_verbs_mentor = list(
feedback_add_details("admin_verb","GD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] gave [key_name(T)] the disease [D].")
message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] the disease [D].", 1)
-
+
/client/proc/give_disease2(mob/T as mob in mob_list) // -- Giacom
set category = "Fun"
set name = "Give Disease"
set desc = "Gives a Disease to a mob."
-
+
var/datum/disease2/disease/D = new /datum/disease2/disease()
-
+
var/greater = ((input("Is this a lesser or greater disease?", "Give Disease") in list("Lesser", "Greater")) == "Greater")
-
+
D.makerandom(greater)
if (!greater)
D.infectionchance = 1
-
+
D.infectionchance = input("How virulent is this disease? (1-100)", "Give Disease", D.infectionchance) as num
-
+
if(istype(T,/mob/living/carbon/human))
var/mob/living/carbon/human/H = T
if (H.species)
@@ -583,7 +583,7 @@ var/list/admin_verbs_mentor = list(
var/mob/living/carbon/monkey/M = T
D.affected_species = list(M.greaterform)
infect_virus2(T,D,1)
-
+
feedback_add_details("admin_verb","GD2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] gave [key_name(T)] a [(greater)? "greater":"lesser"] disease2 with infection chance [D.infectionchance].")
message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] a [(greater)? "greater":"lesser"] disease2 with infection chance [D.infectionchance].", 1)
diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index b96f806c32c..3be89252bb3 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -218,9 +218,10 @@
send_resources()
+/*
if(prefs.lastchangelog != changelog_hash) //bolds the changelog button on the interface so we know there are updates.
winset(src, "rpane.changelog", "background-color=#eaeaea;font-style=bold")
-
+*/
//////////////
//DISCONNECT//
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 8a0dee2abc7..c666b1390a7 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -30,9 +30,9 @@ var/const/MAX_SAVE_SLOTS = 10
datum/preferences
//doohickeys for savefiles
- var/path
+// var/path
var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used
- var/savefile_version = 0
+// var/savefile_version = 0
//non-preference stuff
var/warns = 0
@@ -41,7 +41,7 @@ datum/preferences
var/last_id
//game-preferences
- var/lastchangelog = "" //Saved changlog filesize to detect if there was a change
+// var/lastchangelog = "" //Saved changlog filesize to detect if there was a change
var/ooccolor = "#b82e00"
var/be_special = 0 //Special role selection
var/UI_style = "Midnight"
@@ -108,10 +108,10 @@ datum/preferences
var/list/organ_data = list()
var/list/player_alt_titles = new() // the default name of a job like "Medical Doctor"
- var/accent = "en-us"
- var/voice = "m1"
- var/pitch = 50
- var/talkspeed = 175
+// var/accent = "en-us"
+// var/voice = "m1"
+// var/pitch = 50
+// var/talkspeed = 175
var/flavor_text = ""
var/med_record = ""
var/sec_record = ""
@@ -137,8 +137,8 @@ datum/preferences
if(istype(C))
if(!IsGuestKey(C.key))
// load_path(C.ckey)
- if(load_preferences())
- if(load_character())
+ if(load_preferences(C))
+ if(load_character(C))
return
gender = pick(MALE, FEMALE)
real_name = random_name(gender)
@@ -153,21 +153,17 @@ datum/preferences
dat += "Character Settings"
dat += "Game Preferences"
- if(!path)
- dat += "Please create an account to save your preferences."
-
dat += ""
dat += "
"
switch(current_tab)
if (0) // Character Settings#
- if(path)
- dat += ""
- dat += "Slot [slot_name] - "
- dat += "Load slot - "
- dat += "Save slot - "
- dat += "Reload slot"
- dat += ""
+ dat += ""
+ dat += "Slot [slot_name] - "
+ dat += "Load slot - "
+ dat += "Save slot - "
+ dat += "Reload slot"
+ dat += ""
dat += "Occupation Choices
"
dat += "Set Occupation Preferences
"
dat += "Identity
"
@@ -1308,12 +1304,12 @@ datum/preferences
toggles ^= CHAT_GHOSTRADIO
if("save")
- save_preferences()
- save_character()
+ save_preferences(user)
+ save_character(user)
if("reload")
- load_preferences()
- load_character()
+ load_preferences(user)
+ load_character(user)
if("open_load_dialog")
if(!IsGuestKey(user.key))
@@ -1323,7 +1319,7 @@ datum/preferences
close_load_dialog(user)
if("changeslot")
- load_character(text2num(href_list["num"]))
+ load_character(user,text2num(href_list["num"]))
close_load_dialog(user)
if("tab")
@@ -1432,7 +1428,8 @@ datum/preferences
character.gender = MALE
proc/open_load_dialog(mob/user)
- var/DBQuery/query = dbcon.NewQuery("SELECT slot,real_name FROM character WHERE ckey='[user.key]' ORDER BY slot")
+
+ var/DBQuery/query = dbcon.NewQuery("SELECT slot,real_name FROM characters WHERE ckey='[user.ckey]' ORDER BY slot")
if(!query.Execute())
var/err = query.ErrorMsg()
log_game("SQL ERROR during character slot loading. Error : \[[err]\]\n")
@@ -1445,18 +1442,21 @@ datum/preferences
var/name
for(var/i=1, i<=MAX_SAVE_SLOTS, i++)
- if(i==query.item[1])
- name = query.item[2]
- query.NextRow()
+ while(query.NextRow())
+ if(i==text2num(query.item[1]))
+ name = query.item[2]
if(!name) name = "Character[i]"
if(i==default_slot)
name = "[name]"
dat += "[name]
"
+ name = null
dat += "
"
dat += "Close
"
dat += ""
- user << browse(dat, "window=saves;size=300x390")
-
+// user << browse(dat, "window=saves;size=300x390")
+ var/datum/browser/popup = new(user, "saves", "Character Saves
", 300, 390)
+ popup.set_content(dat)
+ popup.open(0)
proc/close_load_dialog(mob/user)
- user << browse(null, "window=saves")
+ user << browse(null, "window=saves")
\ No newline at end of file
diff --git a/code/modules/client/preferences_mysql.dm b/code/modules/client/preferences_mysql.dm
index ba8c4072d81..5e42466621f 100644
--- a/code/modules/client/preferences_mysql.dm
+++ b/code/modules/client/preferences_mysql.dm
@@ -1,6 +1,6 @@
-/datum/preferences/proc/load_preferences()
+/datum/preferences/proc/load_preferences(client/C)
- var/DBQuery/query = dbcon.NewQuery("SELECT ooccolor,UI_style,UI_style_color,UI_style_alpha,be_special,default_slot,toggles,sound,randomslot,volume FROM erro_player WHERE ckey='[usr.key]'")
+ var/DBQuery/query = dbcon.NewQuery("SELECT ooccolor,UI_style,UI_style_color,UI_style_alpha,be_special,default_slot,toggles,sound,randomslot,volume FROM erro_player WHERE ckey='[C.ckey]'")
if(!query.Execute())
var/err = query.ErrorMsg()
log_game("SQL ERROR during loading player preferences. Error : \[[err]\]\n")
@@ -9,20 +9,21 @@
//general preferences
- ooccolor = query.item[1]
- UI_style = query.item[2]
- UI_style_color = query.item[3]
- UI_style_alpha = query.item[4]
- be_special = query.item[5]
- default_slot = query.item[6]
- toggles = query.item[7]
- sound = query.item[8]
- randomslot = query.item[9]
- volume = query.item[10]
+ while(query.NextRow())
+ ooccolor = query.item[1]
+ UI_style = query.item[2]
+ UI_style_color = query.item[3]
+ UI_style_alpha = query.item[4]
+ be_special = query.item[5]
+ default_slot = query.item[6]
+ toggles = query.item[7]
+ sound = query.item[8]
+ randomslot = query.item[9]
+ volume = query.item[10]
//Sanitize
ooccolor = sanitize_hexcolor(ooccolor, initial(ooccolor))
- lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog))
+// lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog))
UI_style = sanitize_inlist(UI_style, list("White", "Midnight"), initial(UI_style))
be_special = sanitize_integer(be_special, 0, 65535, initial(be_special))
default_slot = sanitize_integer(default_slot, 1, MAX_SAVE_SLOTS, initial(default_slot))
@@ -34,9 +35,9 @@
volume = sanitize_integer(volume, 0, 100, initial(volume))
return 1
-/datum/preferences/proc/save_preferences()
+/datum/preferences/proc/save_preferences(client/C)
- var/DBQuery/query = dbcon.NewQuery("UPDATE error_player (ooccolor,UI_style,UI_style_color,UI_style_alpha,be_special,default_slot,toggles,sound,randomslot,volume) VALUES ('[ooccolor]','[UI_style]','[UI_style_color]','[UI_style_alpha]','[be_special]','[default_slot]','[toggles]','[sound]','[randomslot]','[volume]') WHERE ckey='[usr.key]'")
+ var/DBQuery/query = dbcon.NewQuery("UPDATE erro_player SET ooccolor='[ooccolor]',UI_style='[UI_style]',UI_style_color='[UI_style_color]',UI_style_alpha='[UI_style_alpha]',be_special='[be_special]',default_slot='[default_slot]',toggles='[toggles]',sound='[sound]',randomslot='[randomslot]',volume='[volume]' WHERE ckey='[C.ckey]'")
if(!query.Execute())
var/err = query.ErrorMsg()
log_game("SQL ERROR during saving player preferences. Error : \[[err]\]\n")
@@ -44,79 +45,80 @@
return
return 1
-/datum/preferences/proc/load_character(slot)
+/datum/preferences/proc/load_character(client/C,slot)
if(!slot) slot = default_slot
slot = sanitize_integer(slot, 1, MAX_SAVE_SLOTS, initial(default_slot))
if(slot != default_slot)
default_slot = slot
- var/DBQuery/firstquery = dbcon.NewQuery("UPDATE error_player (default_slot) VALUES ('[slot]') WHERE ckey='[usr.key]'")
+ var/DBQuery/firstquery = dbcon.NewQuery("UPDATE erro_player SET default_slot=[slot] WHERE ckey='[C.ckey]'")
firstquery.Execute()
- var/DBQuery/query = dbcon.NewQuery("SELECT * FROM character WHERE ckey='[usr.key]' AND slot='[slot]'")
+ var/DBQuery/query = dbcon.NewQuery("SELECT * FROM characters WHERE ckey='[C.ckey]' AND slot='[slot]'")
if(!query.Execute())
var/err = query.ErrorMsg()
log_game("SQL ERROR during character slot loading. Error : \[[err]\]\n")
message_admins("SQL ERROR during character slot loading. Error : \[[err]\]\n")
return
- //Character
- metadata = query.item[4]
- real_name = query.item[5]
- be_random_name = query.item[6]
- gender = query.item[7]
- age = query.item[8]
- species = query.item[9]
- language = query.item[10]
+ while(query.NextRow())
+ //Character
+ metadata = query.item[4]
+ real_name = query.item[5]
+ be_random_name = query.item[6]
+ gender = query.item[7]
+ age = query.item[8]
+ species = query.item[9]
+ language = query.item[10]
- //colors to be consolidated into hex strings (requires some work with dna code)
- r_hair = query.item[11]
- g_hair = query.item[12]
- b_hair = query.item[13]
- r_facial = query.item[14]
- g_facial = query.item[15]
- b_facial = query.item[16]
- s_tone = query.item[17]
- r_skin = query.item[18]
- g_skin = query.item[19]
- b_skin = query.item[20]
- h_style = query.item[21]
- f_style = query.item[22]
- r_eyes = query.item[23]
- g_eyes = query.item[24]
- b_eyes = query.item[25]
- underwear = query.item[26]
- undershirt = query.item[27]
- backbag = query.item[28]
- b_type = query.item[29]
+ //colors to be consolidated into hex strings (requires some work with dna code)
+ r_hair = query.item[11]
+ g_hair = query.item[12]
+ b_hair = query.item[13]
+ r_facial = query.item[14]
+ g_facial = query.item[15]
+ b_facial = query.item[16]
+ s_tone = query.item[17]
+ r_skin = query.item[18]
+ g_skin = query.item[19]
+ b_skin = query.item[20]
+ h_style = query.item[21]
+ f_style = query.item[22]
+ r_eyes = query.item[23]
+ g_eyes = query.item[24]
+ b_eyes = query.item[25]
+ underwear = query.item[26]
+ undershirt = query.item[27]
+ backbag = query.item[28]
+ b_type = query.item[29]
- //Jobs
- alternate_option = query.item[30]
- job_civilian_high = query.item[31]
- job_civilian_med = query.item[32]
- job_civilian_low = query.item[33]
- job_medsci_high = query.item[34]
- job_medsci_med = query.item[35]
- job_medsci_low = query.item[36]
- job_engsec_high = query.item[37]
- job_engsec_med = query.item[38]
- job_engsec_low = query.item[39]
- job_karma_high = query.item[40]
- job_karma_med = query.item[41]
- job_karma_low = query.item[42]
+ //Jobs
+ alternate_option = query.item[30]
+ job_civilian_high = query.item[31]
+ job_civilian_med = query.item[32]
+ job_civilian_low = query.item[33]
+ job_medsci_high = query.item[34]
+ job_medsci_med = query.item[35]
+ job_medsci_low = query.item[36]
+ job_engsec_high = query.item[37]
+ job_engsec_med = query.item[38]
+ job_engsec_low = query.item[39]
+ job_karma_high = query.item[40]
+ job_karma_med = query.item[41]
+ job_karma_low = query.item[42]
- //Miscellaneous
- flavor_text = query.item[43]
- med_record = query.item[44]
- sec_record = query.item[45]
- gen_record = query.item[46]
- be_special = query.item[47]
- disabilities = query.item[48]
- player_alt_titles = query.item[49]
- organ_data = query.item[50]
+ //Miscellaneous
+ flavor_text = query.item[43]
+ med_record = query.item[44]
+ sec_record = query.item[45]
+ gen_record = query.item[46]
+ be_special = query.item[47]
+ disabilities = query.item[48]
+ player_alt_titles = text2list(query.item[49],",")
+ organ_data = text2list(query.item[50],",")
- nanotrasen_relation = query.item[51]
+ nanotrasen_relation = query.item[51]
//Sanitize
metadata = sanitize_text(metadata, initial(metadata))
@@ -161,30 +163,35 @@
job_karma_high = sanitize_integer(job_karma_high, 0, 65535, initial(job_karma_high))
job_karma_med = sanitize_integer(job_karma_med, 0, 65535, initial(job_karma_med))
job_karma_low = sanitize_integer(job_karma_low, 0, 65535, initial(job_karma_low))
+ disabilities = sanitize_integer(disabilities, 0, 65535, initial(disabilities))
+ be_special = sanitize_integer(be_special, 0, 65535, initial(be_special))
- if(isnull(disabilities)) disabilities = 0
+// if(isnull(disabilities)) disabilities = 0
if(!player_alt_titles) player_alt_titles = new()
if(!organ_data) src.organ_data = list()
return 1
-/datum/preferences/proc/save_character()
- var/DBQuery/firstquery = dbcon.NewQuery("SELECT slot FROM character WHERE ckey='[usr.key]' ORDER BY slot")
+/datum/preferences/proc/save_character(client/C)
+ var/organlist
+ var/playertitlelist
+ if(!isemptylist(organ_data))
+ organlist = tg_list2text(organ_data)
+ if(!isemptylist(player_alt_titles))
+ playertitlelist = tg_list2text(player_alt_titles)
+
+ var/DBQuery/firstquery = dbcon.NewQuery("SELECT slot FROM characters WHERE ckey='[C.ckey]' ORDER BY slot")
firstquery.Execute()
- var/numRow = firstquery.RowsAffected()
- if(numRow)
- for(var/i = 1,i <= numRow, i++)
- if(default_slot != firstquery.item[1])
- firstquery.NextRow()
- else
- var/DBQuery/query = dbcon.NewQuery("UPDATE character (OOC_Notes,real_name,name_is_always_random,gender,age,species,language,hair_red,hair_green,hair_blue,facial_red,facial_green,facial_blue,skin_tone,skin_red,skin_green,skin_blue,hair_style_name,facial_style_name,eyes_red,eyes_green,eyes_blue,underwear,undershirt,backbag,b_type,alternate_option,job_civ_high,job_civ_med,job_civ_low,job_medsci_high,job_medsci_med,job_medsci_low,job_engsec_high,job_engsec_med,job_engsec_low,job_karma_high,job_karma_med,job_karma_low,flavor_text,med_record,sec_record,gen_record,player_alt_titles,be_special,disabilities,organ_data,nanotrasen_relation) VALUES ('[metadata]','[real_name]','[be_random_name]','[gender]','[age]','[species]','[language]','[r_hair]','[g_hair]','[b_hair]','[r_facial]','[g_facial]','[b_facial]','[s_tone]',[r_skin]','[g_skin]','[b_skin]','[h_style]','[f_style]','[r_eyes]','[g_eyes]','[b_eyes]','[underwear]','[undershirt]','[backbag]','[b_type]','[alternate_option]','[job_civilian_high]','[job_civilian_med]','[job_civilian_low]','[job_medsci_high]','[job_medsci_med]','[job_medsci_low]','[job_engsec_high]','[job_engsec_med]','[job_engsec_low]','[job_karma_high]','[job_karma_med]','[job_karma_low]','[flavor_text]','[med_record]','[sec_record]','[gen_record]','[player_alt_titles]','[be_special]','[disabilities]','[organ_data]','[nanotrasen_relation]') WHERE ckey='[usr.key]' AND slot='[default_slot]'")
- if(!query.Execute())
- var/err = query.ErrorMsg()
- log_game("SQL ERROR during character slot saving. Error : \[[err]\]\n")
- message_admins("SQL ERROR during character slot saving. Error : \[[err]\]\n")
- return
- return 1
- var/DBQuery/query = dbcon.NewQuery("INSERT INTO character (ckey,slot,OOC_Notes,real_name,name_is_always_random,gender,age,species,language,hair_red,hair_green,hair_blue,facial_red,facial_green,facial_blue,skin_tone,skin_red,skin_green,skin_blue,hair_style_name,facial_style_name,eyes_red,eyes_green,eyes_blue,underwear,undershirt,backbag,b_type,alternate_option,job_civ_high,job_civ_med,job_civ_low,job_medsci_high,job_medsci_med,job_medsci_low,job_engsec_high,job_engsec_med,job_engsec_low,job_karma_high,job_karma_med,job_karma_low,flavor_text,med_record,sec_record,gen_record,player_alt_titles,be_special,disabilities,organ_data,nanotrasen_relation) VALUES ('[usr.key],'[default_slot]','[metadata]','[real_name]','[be_random_name]','[gender]','[age]','[species]','[language]','[r_hair]','[g_hair]','[b_hair]','[r_facial]','[g_facial]','[b_facial]','[s_tone]',[r_skin]','[g_skin]','[b_skin]','[h_style]','[f_style]','[r_eyes]','[g_eyes]','[b_eyes]','[underwear]','[undershirt]','[backbag]','[b_type]','[alternate_option]','[job_civilian_high]','[job_civilian_med]','[job_civilian_low]','[job_medsci_high]','[job_medsci_med]','[job_medsci_low]','[job_engsec_high]','[job_engsec_med]','[job_engsec_low]','[job_karma_high]','[job_karma_med]','[job_karma_low]','[flavor_text]','[med_record]','[sec_record]','[gen_record]','[player_alt_titles]','[be_special]','[disabilities]','[organ_data]','[nanotrasen_relation]')")
+ while(firstquery.NextRow())
+ if(firstquery.item[1] == default_slot)
+ var/DBQuery/query = dbcon.NewQuery("UPDATE characters SET OOC_Notes='[metadata]',real_name='[real_name]',name_is_always_random='[be_random_name]',gender='[gender]',age='[age]',species='[species]',language='[language]',hair_red='[r_hair]',hair_green='[g_hair]',hair_blue='[b_hair]',facial_red='[r_facial]',facial_green='[g_facial]',facial_blue='[b_facial]',skin_tone='[s_tone]',skin_red='[r_skin]',skin_green='[g_skin]',skin_blue='[b_skin]',hair_style_name='[h_style]',facial_style_name='[f_style]',eyes_red='[r_eyes]',eyes_green='[g_eyes]',eyes_blue='[b_eyes]',underwear='[underwear]',undershirt='[undershirt]',backbag='[backbag]',b_type='[b_type]',alternate_option='[alternate_option]',job_civilian_high='[job_civilian_high]',job_civilian_med='[job_civilian_med]',job_civilian_low='[job_civilian_low]',job_medsci_high='[job_medsci_high]',job_medsci_med='[job_medsci_med]',job_medsci_low='[job_medsci_low]',job_engsec_high='[job_engsec_high]',job_engsec_med='[job_engsec_med]',job_engsec_low='[job_engsec_low]',job_karma_high='[job_karma_high]',job_karma_med='[job_karma_med]',job_karma_low='[job_karma_low]',flavor_text='[flavor_text]',med_record='[med_record]',sec_record='[sec_record]',gen_record='[gen_record]',player_alt_titles='[playertitlelist]',be_special='[be_special]',disabilities='[disabilities]',organ_data='[organlist]',nanotrasen_relation='[nanotrasen_relation]' WHERE ckey='[C.ckey]' AND slot='[default_slot]'")
+ if(!query.Execute())
+ var/err = query.ErrorMsg()
+ log_game("SQL ERROR during character slot saving. Error : \[[err]\]\n")
+ message_admins("SQL ERROR during character slot saving. Error : \[[err]\]\n")
+ return
+ return 1
+ var/DBQuery/query = dbcon.NewQuery("INSERT INTO characters (ckey,slot,OOC_Notes,real_name,name_is_always_random,gender,age,species,language,hair_red,hair_green,hair_blue,facial_red,facial_green,facial_blue,skin_tone,skin_red,skin_green,skin_blue,hair_style_name,facial_style_name,eyes_red,eyes_green,eyes_blue,underwear,undershirt,backbag,b_type,alternate_option,job_civilian_high,job_civilian_med,job_civilian_low,job_medsci_high,job_medsci_med,job_medsci_low,job_engsec_high,job_engsec_med,job_engsec_low,job_karma_high,job_karma_med,job_karma_low,flavor_text,med_record,sec_record,gen_record,player_alt_titles,be_special,disabilities,organ_data,nanotrasen_relation) VALUES ('[C.ckey]','[default_slot]','[metadata]','[real_name]','[be_random_name]','[gender]','[age]','[species]','[language]','[r_hair]','[g_hair]','[b_hair]','[r_facial]','[g_facial]','[b_facial]','[s_tone]','[r_skin]','[g_skin]','[b_skin]','[h_style]','[f_style]','[r_eyes]','[g_eyes]','[b_eyes]','[underwear]','[undershirt]','[backbag]','[b_type]','[alternate_option]','[job_civilian_high]','[job_civilian_med]','[job_civilian_low]','[job_medsci_high]','[job_medsci_med]','[job_medsci_low]','[job_engsec_high]','[job_engsec_med]','[job_engsec_low]','[job_karma_high]','[job_karma_med]','[job_karma_low]','[flavor_text]','[med_record]','[sec_record]','[gen_record]','[playertitlelist]','[be_special]','[disabilities]','[organlist]','[nanotrasen_relation]')")
if(!query.Execute())
var/err = query.ErrorMsg()
log_game("SQL ERROR during character slot saving. Error : \[[err]\]\n")
@@ -192,16 +199,17 @@
return
return 1
-/datum/preferences/proc/random_character()
- var/DBQuery/query = dbcon.NewQuery("SELECT slot FROM character WHERE ckey='[usr.key]' ORDER BY slot")
+/datum/preferences/proc/random_character(client/C)
+ var/DBQuery/query = dbcon.NewQuery("SELECT slot FROM characters WHERE ckey='[C.ckey]' ORDER BY slot")
+ while(query.NextRow())
var/list/saves = list()
for(var/i=1, i<=MAX_SAVE_SLOTS, i++)
if(i==query.item[1])
saves += i
- query.NextRow()
+
if(!saves.len)
- load_character()
+ load_character(C)
return 0
- load_character(pick(saves))
+ load_character(C,pick(saves))
return 1
\ No newline at end of file
diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm
index 91694e4fc47..3ce6dd47a9d 100644
--- a/code/modules/client/preferences_toggles.dm
+++ b/code/modules/client/preferences_toggles.dm
@@ -5,7 +5,7 @@
set desc = ".Toggle Between seeing all mob speech, and only speech of nearby mobs"
prefs.toggles ^= CHAT_GHOSTEARS
src << "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTEARS) ? "see all speech in the world" : "only see speech from nearby mobs"]."
- prefs.save_preferences()
+ prefs.save_preferences(src)
feedback_add_details("admin_verb","TGE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/toggle_ghost_sight()
@@ -14,7 +14,7 @@
set desc = ".Toggle Between seeing all mob emotes, and only emotes of nearby mobs"
prefs.toggles ^= CHAT_GHOSTSIGHT
src << "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTSIGHT) ? "see all emotes in the world" : "only see emotes from nearby mobs"]."
- prefs.save_preferences()
+ prefs.save_preferences(src)
feedback_add_details("admin_verb","TGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/toggle_ghost_radio()
@@ -23,7 +23,7 @@
set desc = ".Toggle between hearing all radio chatter, or only from nearby speakers"
prefs.toggles ^= CHAT_GHOSTRADIO
src << "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTRADIO) ? "hear all radio chat in the world" : "only hear from nearby speakers"]."
- prefs.save_preferences()
+ prefs.save_preferences(src)
feedback_add_details("admin_verb","TGR")
/client/proc/toggle_hear_radio()
@@ -32,7 +32,7 @@
set desc = "Toggle seeing radiochatter from radios and speakers"
if(!holder) return
prefs.toggles ^= CHAT_RADIO
- prefs.save_preferences()
+ prefs.save_preferences(src)
usr << "You will [(prefs.toggles & CHAT_RADIO) ? "now" : "no longer"] see radio chatter from radios or speakers"
feedback_add_details("admin_verb","THR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -42,7 +42,7 @@
set desc = "Toggle hearing a notification when admin PMs are recieved"
if(!holder) return
prefs.sound ^= SOUND_ADMINHELP
- prefs.save_preferences()
+ prefs.save_preferences(src)
usr << "You will [(prefs.toggles & SOUND_ADMINHELP) ? "now" : "no longer"] hear a sound when adminhelps arrive."
feedback_add_details("admin_verb","AHS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -51,7 +51,7 @@
set category = "Preferences"
set desc ="Toggles seeing deadchat"
prefs.toggles ^= CHAT_DEAD
- prefs.save_preferences()
+ prefs.save_preferences(src)
if(src.holder)
src << "You will [(prefs.toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat."
@@ -65,7 +65,7 @@
set category = "Preferences"
set desc = "Toggles seeing prayers"
prefs.toggles ^= CHAT_PRAYER
- prefs.save_preferences()
+ prefs.save_preferences(src)
src << "You will [(prefs.toggles & CHAT_PRAYER) ? "now" : "no longer"] see prayerchat."
feedback_add_details("admin_verb","TP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -74,7 +74,7 @@
set category = "Preferences"
set desc = "Toggles hearing the GameLobby music"
prefs.sound ^= SOUND_LOBBY
- prefs.save_preferences()
+ prefs.save_preferences(src)
if(prefs.sound & SOUND_LOBBY)
src << "You will now hear music in the game lobby."
if(istype(mob, /mob/new_player))
@@ -101,7 +101,7 @@
set category = "Preferences"
set desc = "Toggles hearing sounds uploaded by admins"
prefs.sound ^= SOUND_MIDI
- prefs.save_preferences()
+ prefs.save_preferences(src)
if(prefs.sound & SOUND_MIDI)
src << "You will now hear any sounds uploaded by admins."
else
@@ -116,7 +116,7 @@
set category = "Preferences"
set desc = "Toggles seeing OutOfCharacter chat"
prefs.toggles ^= CHAT_OOC
- prefs.save_preferences()
+ prefs.save_preferences(src)
src << "You will [(prefs.toggles & CHAT_OOC) ? "now" : "no longer"] see messages on the OOC channel."
feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -126,7 +126,7 @@
set category = "Preferences"
set desc = "Toggles seeing Local OutOfCharacter chat"
prefs.toggles ^= CHAT_LOOC
- prefs.save_preferences()
+ prefs.save_preferences(src)
src << "You will [(prefs.toggles & CHAT_LOOC) ? "now" : "no longer"] see messages on the LOOC channel."
feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -136,7 +136,7 @@
set category = "Preferences"
set desc = "Toggles hearing ambient sound effects"
prefs.sound ^= SOUND_AMBIENCE
- prefs.save_preferences()
+ prefs.save_preferences(src)
if(prefs.sound & SOUND_AMBIENCE)
src << "You will now hear ambient sounds."
else
@@ -153,7 +153,7 @@
var/role_flag = be_special_flags[role]
if(!role_flag) return
prefs.be_special ^= role_flag
- prefs.save_preferences()
+ prefs.save_preferences(src)
src << "You will [(prefs.be_special & role_flag) ? "now" : "no longer"] be considered for [role] events (where possible)."
feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -189,7 +189,7 @@
prefs.UI_style = UI_style_new
prefs.UI_style_alpha = UI_style_alpha_new
prefs.UI_style_color = UI_style_color_new
- prefs.save_preferences()
+ prefs.save_preferences(src)
usr << "UI was saved"
/client/verb/toggle_media()
@@ -198,7 +198,7 @@
set desc = "Toggle hearing streaming media (radios, jukeboxes, etc)"
prefs.sound ^= SOUND_STREAMING
- prefs.save_preferences()
+ prefs.save_preferences(src)
usr << "You will [(prefs.toggles & SOUND_STREAMING) ? "now" : "no longer"] hear streamed media."
// Restart.
media.stop_music()
diff --git a/code/modules/media/mediamanager.dm b/code/modules/media/mediamanager.dm
index b2bdfb20d7c..46103722c68 100644
--- a/code/modules/media/mediamanager.dm
+++ b/code/modules/media/mediamanager.dm
@@ -135,4 +135,4 @@ function SetMusic(url, time, volume) {
media.update_volume(value)
if(prefs)
prefs.volume = value
- prefs.save_preferences()
+ prefs.save_preferences(src)