diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index f98cef052ca..740b38ec3ce 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -163,14 +163,38 @@ //slower then list2text, but correctly processes associative lists. -proc/tg_list2text(list/list, glue=",") +proc/tg_list2text(list/list, glue=",", assocglue=";") if(!istype(list) || !list.len) return var/output for(var/i=1 to list.len) - output += (i!=1? glue : null)+(!isnull(list["[list[i]]"])?"[list["[list[i]]"]]":"[list[i]]") + if(!isnull(list["[list[i]]"])) + output += (i!=1? glue : null)+ "[list[i]]"+(i!=1? assocglue : null)+"[list["[list[i]]"]]" + else + output += (i!=1? glue : null)+ "[list[i]]" return output +proc/tg_text2list(text, glue=",", assocglue=";") + var/length = length(glue) + if(length < 1) return list(text) + . = list() + var/lastglue_found = 1 + var/foundglue + var/foundassocglue + var/searchtext + do + foundglue = findtext(text, glue, lastglue_found, 0) + searchtext = copytext(text, lastglue_found, foundglue) + foundassocglue = findtext(searchtext, assocglue, 1, 0) + if(foundassocglue) + var/sublist = copytext(searchtext, 1, foundassocglue) + sublist[1] = copytext(searchtext, foundassocglue, 0) + . += sublist + else + . += copytext(text, lastglue_found, foundglue) + lastglue_found = foundglue + length + while(foundglue) + //Converts a string into a list by splitting the string at each delimiter found. (discarding the seperator) /proc/text2list(text, delimiter="\n") diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index c666b1390a7..0955b2bd8b7 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1430,11 +1430,6 @@ datum/preferences proc/open_load_dialog(mob/user) 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") - message_admins("SQL ERROR during character slot loading. Error : \[[err]\]\n") - return var/dat = "" dat += "
" @@ -1442,6 +1437,11 @@ datum/preferences var/name for(var/i=1, i<=MAX_SAVE_SLOTS, i++) + 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 while(query.NextRow()) if(i==text2num(query.item[1])) name = query.item[2] diff --git a/code/modules/client/preferences_mysql.dm b/code/modules/client/preferences_mysql.dm index 5e42466621f..e96d6128c88 100644 --- a/code/modules/client/preferences_mysql.dm +++ b/code/modules/client/preferences_mysql.dm @@ -115,8 +115,8 @@ 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],",") + player_alt_titles = params2list(query.item[49]) + organ_data = params2list(query.item[50]) nanotrasen_relation = query.item[51] @@ -176,14 +176,14 @@ var/organlist var/playertitlelist if(!isemptylist(organ_data)) - organlist = tg_list2text(organ_data) + organlist = list2params(organ_data) if(!isemptylist(player_alt_titles)) - playertitlelist = tg_list2text(player_alt_titles) + playertitlelist = list2params(player_alt_titles) var/DBQuery/firstquery = dbcon.NewQuery("SELECT slot FROM characters WHERE ckey='[C.ckey]' ORDER BY slot") firstquery.Execute() while(firstquery.NextRow()) - if(firstquery.item[1] == default_slot) + if(text2num(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() @@ -205,7 +205,7 @@ while(query.NextRow()) var/list/saves = list() for(var/i=1, i<=MAX_SAVE_SLOTS, i++) - if(i==query.item[1]) + if(i==text2num(query.item[1])) saves += i if(!saves.len)