From d96ca9c64bcd4b53ae3cbc910cc03085a3373a21 Mon Sep 17 00:00:00 2001 From: ririchiyo Date: Mon, 22 Sep 2014 16:24:15 -0400 Subject: [PATCH] Adding a clean database file, including the sql needed to create sqlite database. Outstanding issues should have been fixed and so it should be ready for testing now. --- SQL/players2.sql | 97 ++++++++ code/modules/client/preferences.dm | 204 ++++------------- code/modules/client/preferences_savefile.dm | 235 ++++++++++++++------ players2.sqlite | Bin 0 -> 19456 bytes 4 files changed, 307 insertions(+), 229 deletions(-) create mode 100644 SQL/players2.sql create mode 100644 players2.sqlite diff --git a/SQL/players2.sql b/SQL/players2.sql new file mode 100644 index 00000000000..cff8f2d1056 --- /dev/null +++ b/SQL/players2.sql @@ -0,0 +1,97 @@ +CREATE TABLE `body` ( + `ID` INTEGER PRIMARY KEY AUTOINCREMENT, + `player_ckey` TEXT NOT NULL, + `player_slot` INTEGER NOT NULL, + `hair_red` INTEGER, + `hair_green` INTEGER, + `hair_blue` INTEGER, + `facial_red` INTEGER, + `facial_green` INTEGER, + `facial_blue` INTEGER, + `skin_tone` INTEGER, + `hair_style_name` TEXT, + `facial_style_name` TEXT, + `eyes_red` INTEGER, + `eyes_green` INTEGER, + `eyes_blue` INTEGER, + `underwear` INTEGER, + `backbag` INTEGER, + `b_type` TEXT, + FOREIGN KEY(player_ckey, player_slot) REFERENCES players(player_ckey, player_slot) ON DELETE CASCADE, + UNIQUE(player_ckey, player_slot) +); + +CREATE TABLE `jobs` ( + `ID` INTEGER PRIMARY KEY AUTOINCREMENT, + `player_ckey` TEXT NOT NULL, + `player_slot` INTEGER NOT NULL, + `alternate_option` INTEGER, + `job_civilian_high` INTEGER, + `job_civilian_med` INTEGER, + `job_civilian_low` INTEGER, + `job_medsci_high` INTEGER, + `job_medsci_med` INTEGER, + `job_medsci_low` INTEGER, + `job_engsec_high` INTEGER, + `job_engsec_med` INTEGER, + `job_engsec_low` INTEGER, + FOREIGN KEY(player_ckey, player_slot) REFERENCES players(player_ckey, player_slot) ON DELETE CASCADE, + UNIQUE(player_ckey, player_slot) +); + +CREATE TABLE `limbs` ( + `ID` INTEGER PRIMARY KEY AUTOINCREMENT, + `player_ckey` TEXT NOT NULL, + `player_slot` INTEGER NOT NULL, + `l_arm` TEXT, + `r_arm` TEXT, + `l_leg` TEXT, + `r_leg` TEXT, + `l_foot` TEXT, + `r_foot` TEXT, + `l_hand` TEXT, + `r_hand` TEXT, + `heart` TEXT, + `eyes` TEXT, + FOREIGN KEY(player_ckey, player_slot) REFERENCES players(player_ckey, player_slot) ON DELETE CASCADE, + UNIQUE(player_ckey, player_slot) +); + +CREATE TABLE `players` ( + `ID` INTEGER PRIMARY KEY AUTOINCREMENT, + `player_ckey` TEXT NOT NULL, + `player_slot` INTEGER NOT NULL, + `ooc_notes` TEXT, + `real_name` TEXT, + `random_name` INTEGER, + `gender` TEXT, + `age` INTEGER, + `species` TEXT, + `language` TEXT, + `flavor_text` TEXT, + `med_record` TEXT, + `sec_record` TEXT, + `gen_record` TEXT, + `player_alt_titles` TEXT, + `be_special` TEXT, + `disabilities` INTEGER, + `nanotrasen_relation` TEXT, + UNIQUE(player_ckey, player_slot) +); + +CREATE TABLE `client` ( + `ID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + `ckey` INTEGER UNIQUE, + `ooc_color` TEXT, + `lastchangelog` TEXT, + `UI_style` TEXT, + `default_slot` INTEGER, + `toggles` INTEGER, + `UI_style_color`TEXT, + `UI_style_alpha`INTEGER, + `randomslot` INTEGER, + `volume` INTEGER, + `special` INTEGER, + `warns` INTEGER, + `warnbans` INTEGER +); \ No newline at end of file diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index e6e1eb8aa95..66ffca0eec1 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -129,118 +129,17 @@ datum/preferences b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") if(istype(C)) if(!IsGuestKey(C.key)) - if(!load_preferences_sqlite(C.ckey)) - if(!load_save_sqlite(C, C.ckey, default_slot)) + var/load_pref = load_preferences_sqlite(C.ckey) + if(load_pref) + if(load_save_sqlite(C.ckey, src, default_slot)) return - gender = pick(MALE, FEMALE) + else + save_preferences_sqlite(src, C.ckey) + randomize_appearance_for() real_name = random_name(gender) + save_character_sqlite(src, C.ckey, default_slot) /datum/preferences - proc/ZeroSkills(var/forced = 0) - for(var/V in SKILLS) for(var/datum/skill/S in SKILLS[V]) - if(!skills.Find(S.ID) || forced) - skills[S.ID] = SKILL_NONE - proc/CalculateSkillPoints() - used_skillpoints = 0 - for(var/V in SKILLS) for(var/datum/skill/S in SKILLS[V]) - var/multiplier = 1 - switch(skills[S.ID]) - if(SKILL_NONE) - used_skillpoints += 0 * multiplier - if(SKILL_BASIC) - used_skillpoints += 1 * multiplier - if(SKILL_ADEPT) - // secondary skills cost less - if(S.secondary) - used_skillpoints += 1 * multiplier - else - used_skillpoints += 3 * multiplier - if(SKILL_EXPERT) - // secondary skills cost less - if(S.secondary) - used_skillpoints += 3 * multiplier - else - used_skillpoints += 6 * multiplier - - proc/GetSkillClass(points) - // skill classes describe how your character compares in total points - var/original_points = points - points -= min(round((age - 20) / 2.5), 4) // every 2.5 years after 20, one extra skillpoint - if(age > 30) - points -= round((age - 30) / 5) // every 5 years after 30, one extra skillpoint - if(original_points > 0 && points <= 0) points = 1 - switch(points) - if(0) - return "Unconfigured" - if(1 to 3) - return "Terrifying" - if(4 to 6) - return "Below Average" - if(7 to 10) - return "Average" - if(11 to 14) - return "Above Average" - if(15 to 18) - return "Exceptional" - if(19 to 24) - return "Genius" - if(24 to 1000) - return "God" - - proc/SetSkills(mob/user) - if(SKILLS == null) - setup_skills() - - if(skills.len == 0) - ZeroSkills() - - - var/HTML = "" - - // AUTOFIXED BY fix_string_idiocy.py - // C:\Users\Rob\Documents\Projects\vgstation13\code\modules\client\preferences.dm:185: HTML += "Select your Skills
" - HTML += {"Select your Skills
- Current skill level: [GetSkillClass(used_skillpoints)] ([used_skillpoints])
- Use preconfigured skillset
- "} - // END AUTOFIX - for(var/V in SKILLS) - - // AUTOFIXED BY fix_string_idiocy.py - // C:\Users\Rob\Documents\Projects\vgstation13\code\modules\client\preferences.dm:190: HTML += ""} - // END AUTOFIX - for(var/datum/skill/S in SKILLS[V]) - var/level = skills[S.ID] - - // AUTOFIXED BY fix_string_idiocy.py - // C:\Users\Rob\Documents\Projects\vgstation13\code\modules\client\preferences.dm:194: HTML += "" - HTML += {" - - "} - // END AUTOFIX - // secondary skills don't have an amateur level - if(S.secondary) - HTML += "" - else - HTML += "" - - // AUTOFIXED BY fix_string_idiocy.py - // C:\Users\Rob\Documents\Projects\vgstation13\code\modules\client\preferences.dm:202: HTML += "" - HTML += {" - - "} - // END AUTOFIX - - // AUTOFIXED BY fix_string_idiocy.py - // C:\Users\Rob\Documents\Projects\vgstation13\code\modules\client\preferences.dm:205: HTML += "
[V]" - HTML += {"
[V] -
[S.name]\[Untrained\]\[Amateur\]\[Trained\]\[Trained\]\[Professional\]
" - HTML += {" - \[Done\]"} - // END AUTOFIX - user << browse(null, "window=preferences") - user << browse(HTML, "window=show_skills;size=600x800") - return proc/ShowChoices(mob/user) if(!user || !user.client) return @@ -249,8 +148,7 @@ datum/preferences user << browse_rsc(preview_icon_side, "previewicon2.png") var/dat = "
" - if(load_preferences_sqlite(user.ckey)) - + if(!IsGuestKey(user.key)) // AUTOFIXED BY fix_string_idiocy.py // C:\Users\Rob\Documents\Projects\vgstation13\code\modules\client\preferences.dm:220: dat += "
" dat += {"
@@ -407,8 +305,7 @@ datum/preferences // AUTOFIXED BY fix_string_idiocy.py // C:\Users\Rob\Documents\Projects\vgstation13\code\modules\client\preferences.dm:325: dat += "\tSet Skills ([GetSkillClass(used_skillpoints)][used_skillpoints > 0 ? " [used_skillpoints]" : "0"])
" - dat += {"\tSet Skills ([GetSkillClass(used_skillpoints)][used_skillpoints > 0 ? " [used_skillpoints]" : "0"])
- Set Flavor Text
"} + dat += {"Set Flavor Text
"} // END AUTOFIX if(lentext(flavor_text) <= 40) if(!lentext(flavor_text)) @@ -821,40 +718,6 @@ datum/preferences else SetDisabilities(user) return 1 - else if(href_list["preference"] == "skills") - if(href_list["cancel"]) - user << browse(null, "window=show_skills") - ShowChoices(user) - else if(href_list["skillinfo"]) - var/datum/skill/S = locate(href_list["skillinfo"]) - var/HTML = "[S.name]
[S.desc]" - user << browse(HTML, "window=\ref[user]skillinfo") - else if(href_list["setskill"]) - var/datum/skill/S = locate(href_list["setskill"]) - var/value = text2num(href_list["newvalue"]) - skills[S.ID] = value - CalculateSkillPoints() - SetSkills(user) - else if(href_list["preconfigured"]) - var/selected = input(user, "Select a skillset", "Skillset") as null|anything in SKILL_PRE - if(!selected) return - - ZeroSkills(1) - for(var/V in SKILL_PRE[selected]) - if(V == "field") - skill_specialization = SKILL_PRE[selected]["field"] - continue - skills[V] = SKILL_PRE[selected][V] - CalculateSkillPoints() - - SetSkills(user) - else if(href_list["setspecialization"]) - skill_specialization = href_list["setspecialization"] - CalculateSkillPoints() - SetSkills(user) - else - SetSkills(user) - return 1 else if(href_list["preference"] == "records") if(text2num(href_list["record"]) >= 1) @@ -1283,12 +1146,12 @@ datum/preferences if("save") save_preferences_sqlite(user, user.ckey) - save_character_sqlite(user.ckey, user, slot) + save_character_sqlite(user.ckey, user, default_slot) //random_character_sqlite(user, user.ckey) if("reload") - //load_preferences_sqlite(user.ckey) - //load_save_sqlite(user.ckey, user, default_slot) + load_preferences_sqlite(user, user.ckey) + load_save_sqlite(user.ckey, user, default_slot) if("open_load_dialog") if(!IsGuestKey(user.key)) @@ -1298,9 +1161,9 @@ datum/preferences close_load_dialog(user) if("changeslot") - load_save_sqlite(user.ckey, user, text2num(href_list["num"])) - //user << "You have no character created here, change your preferences and save." - slot = text2num(href_list["num"]) + var/num = text2num(href_list["num"]) + load_save_sqlite(user.ckey, user, num) + default_slot = num close_load_dialog(user) ShowChoices(user) @@ -1403,23 +1266,32 @@ datum/preferences proc/open_load_dialog(mob/user) + var/database/query/q = new + var/list/name_list[MAX_SAVE_SLOTS] + + q.Add("select real_name, player_slot from players where player_ckey=?", user.ckey) + if(q.Execute(db)) + while(q.NextRow()) + name_list[q.GetColumn(2)] = q.GetColumn(1) + else + message_admins("Error #: [q.Error()] - [q.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") + return 0 // AUTOFIXED BY fix_string_idiocy.py // C:\Users\Rob\Documents\Projects\vgstation13\code\modules\client\preferences.dm:1283: var/dat = "" - var/dat = {" -
"} + var/dat = {"
"} // END AUTOFIX - var/savefile/S = new /savefile(path) - if(S) - dat += "Select a character slot to load
" - var/name - for(var/i=1, i<=MAX_SAVE_SLOTS, i++) - S.cd = "/character[i]" - S["real_name"] >> name - if(!name) name = "Character[i]" - if(i==default_slot) - name = "[name]" - dat += "[name]
" - + dat += "Select a character slot to load
" + var/counter = 1 + while(counter <= MAX_SAVE_SLOTS) + if(counter==default_slot) + dat += "[name_list[counter]]
" + else + if(!name_list[counter]) + dat += "Character[counter]
" + else + dat += "[name_list[counter]]
" + counter++ // AUTOFIXED BY fix_string_idiocy.py // C:\Users\Rob\Documents\Projects\vgstation13\code\modules\client\preferences.dm:1228: dat += "
" diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 8efaccc2bc3..fc2e46628c8 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -42,21 +42,20 @@ check.Add("select ckey from client") if(check.Execute(db)) if(!check.NextRow()) - if(!save_preferences_sqlite(ckey)) - world << " An error has occured." - return 0 + return 0 else message_admins("Error #: [check.Error()] - [check.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 - q.Add("SELECT * FROM client where ckey = ?", ckey) + q.Add("SELECT * FROM client WHERE ckey = ?", ckey) if(q.Execute(db)) while(q.NextRow()) var/list/row = q.GetRowData() for(var/a in row) - //world << "[a] = [row[a]]" preference_list_client[a] = row[a] else message_admins("Error #: [q.Error()] - [q.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 ooccolor = preference_list_client["ooc_color"] @@ -142,15 +141,18 @@ ckey, ooccolor, lastchangelog, UI_style, default_slot, toggles, UI_style_color, UI_style_alpha, warns, warnbans, randomslot, volume, special_popup) if(!q.Execute(db)) message_admins("Error #: [q.Error()] - [q.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 else q.Add("UPDATE client SET ooc_color=?,lastchangelog=?,UI_style=?,default_slot=?,toggles=?,UI_style_color=?,UI_style_alpha=?,warns=?,warnbans=?,randomslot=?,volume=?,special=? WHERE ckey = ?",\ ooccolor, lastchangelog, UI_style, default_slot, toggles, UI_style_color, UI_style_alpha, warns, warnbans, randomslot, volume, special_popup, ckey) if(!q.Execute(db)) message_admins("Error #: [q.Error()] - [q.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 else message_admins("Error #: [check.Error()] - [check.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 user << "Preferences Updated." return 1 @@ -193,77 +195,168 @@ var/database/query/q = new var/database/query/check = new - check.Add("select ckey from players where ckey = ? and slot = ?", ckey, slot) + check.Add("SELECT player_ckey FROM players WHERE player_ckey = ? AND player_slot = ?", ckey, slot) if(check.Execute(db)) if(!check.NextRow()) user << "You have no character file to load, please save one first." return 0 else - message_admins("Error #: [check.Error()] - [check.ErrorMsg()]") + message_admins("load_save_sqlite Check Error #: [check.Error()] - [check.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 - q.Add("select * from players, body, limbs, jobs WHERE players.ckey = ? AND players.slot = ?", ckey, slot) + q.Add({" +SELECT + limbs.player_ckey, + limbs.player_slot, + limbs.l_arm, + limbs.r_arm, + limbs.l_leg, + limbs.r_leg, + limbs.l_foot, + limbs.r_foot, + limbs.l_hand, + limbs.r_hand, + limbs.heart, + limbs.eyes, + players.player_ckey, + players.player_slot, + players.ooc_notes, + players.real_name, + players.random_name, + players.gender, + players.age, + players.species, + players.language, + players.flavor_text, + players.med_record, + players.sec_record, + players.gen_record, + players.player_alt_titles, + players.be_special, + players.disabilities, + players.nanotrasen_relation, + jobs.player_ckey, + jobs.player_slot, + jobs.alternate_option, + jobs.job_civilian_high, + jobs.job_civilian_med, + jobs.job_civilian_low, + jobs.job_medsci_high, + jobs.job_medsci_med, + jobs.job_medsci_low, + jobs.job_engsec_high, + jobs.job_engsec_med, + jobs.job_engsec_low, + body.player_ckey, + body.player_slot, + body.hair_red, + body.hair_green, + body.hair_blue, + body.facial_red, + body.facial_green, + body.facial_blue, + body.skin_tone, + body.hair_style_name, + body.facial_style_name, + body.eyes_red, + body.eyes_green, + body.eyes_blue, + body.underwear, + body.backbag, + body.b_type +FROM + players +INNER JOIN + limbs +ON + ( + players.player_ckey = limbs.player_ckey) +AND ( + players.player_slot = limbs.player_slot) +INNER JOIN + jobs +ON + ( + limbs.player_ckey = jobs.player_ckey) +AND ( + limbs.player_slot = jobs.player_slot) +INNER JOIN + body +ON + ( + jobs.player_ckey = body.player_ckey) +AND ( + jobs.player_slot = body.player_slot) +WHERE + players.player_ckey = ? +AND players.player_slot = ? ;"}, ckey, slot) if(q.Execute(db)) while(q.NextRow()) var/list/row = q.GetRowData() for(var/a in row) - //world << "[a] = [row[a]]" preference_list[a] = row[a] else - message_admins("Error #: [q.Error()] - [q.ErrorMsg()]") + message_admins("load_save_sqlite Error #: [q.Error()] - [q.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 - metadata = preference_list["ooc_notes"] - real_name = preference_list["real_name"] - be_random_name = preference_list["random_name"] - gender = preference_list["gender"] - age = preference_list["age"] - species = preference_list["species"] - language = preference_list["language"] - flavor_text = preference_list["flavor_text"] - med_record = preference_list["med_record"] - sec_record = preference_list["sec_record"] - gen_record = preference_list["gen_record"] - player_alt_titles = preference_list["player_alt_titles"] - be_special = preference_list["be_special"] - disabilities = preference_list["disabilities"] - nanotrasen_relation = preference_list["nanotrasen_relation"] + metadata = preference_list["ooc_notes"] + real_name = preference_list["real_name"] + be_random_name = preference_list["random_name"] + gender = preference_list["gender"] + age = preference_list["age"] + species = preference_list["species"] + language = preference_list["language"] + flavor_text = preference_list["flavor_text"] + med_record = preference_list["med_record"] + sec_record = preference_list["sec_record"] + gen_record = preference_list["gen_record"] + player_alt_titles = preference_list["player_alt_titles"] + be_special = preference_list["be_special"] + disabilities = preference_list["disabilities"] + nanotrasen_relation = preference_list["nanotrasen_relation"] - r_hair = preference_list["hair_red"] - g_hair = preference_list["hair_green"] - b_hair = preference_list["hair_blue"] - r_facial = preference_list["facial_red"] - g_facial = preference_list["facial_green"] - b_facial = preference_list["facial_blue"] - underwear = preference_list["underwear"] - backbag = preference_list["backbag"] - b_type = preference_list["b_type"] + r_hair = preference_list["hair_red"] + g_hair = preference_list["hair_green"] + b_hair = preference_list["hair_blue"] + h_style = preference_list["hair_style_name"] + + r_facial = preference_list["facial_red"] + g_facial = preference_list["facial_green"] + b_facial = preference_list["facial_blue"] + f_style = preference_list["facial_style_name"] + + underwear = preference_list["underwear"] + backbag = preference_list["backbag"] + b_type = preference_list["b_type"] organ_data["l_arm"] = preference_list["l_arm"] organ_data["r_arm"] = preference_list["r_arm"] organ_data["l_leg"] = preference_list["l_leg"] organ_data["r_leg"] = preference_list["r_leg"] - organ_data["l_foot"] = preference_list["l_foot"] - organ_data["r_foot"] = preference_list["r_foot"] - organ_data["l_hand"] = preference_list["l_hand"] - organ_data["r_hand"] = preference_list["r_hand"] + organ_data["l_foot"]= preference_list["l_foot"] + organ_data["r_foot"]= preference_list["r_foot"] + organ_data["l_hand"]= preference_list["l_hand"] + organ_data["r_hand"]= preference_list["r_hand"] organ_data["heart"] = preference_list["heart"] - organ_data["eyes"] = preference_list["eyes"] + organ_data["eyes"] = preference_list["eyes"] - alternate_option = preference_list["alternate_option"] - job_civilian_high = preference_list["job_civilian_high"] - job_civilian_med = preference_list["job_civilian_med"] - job_civilian_low = preference_list["job_civilian_low"] - job_medsci_high = preference_list["job_medsci_high"] - job_medsci_med = preference_list["job_medsci_med"] - job_medsci_low = preference_list["job_medsci_low"] - job_engsec_high = preference_list["job_engsec_high"] - job_engsec_med = preference_list["job_engsec_med"] - job_engsec_low = preference_list["job_engsec_low"] + alternate_option = preference_list["alternate_option"] + job_civilian_high = preference_list["job_civilian_high"] + job_civilian_med = preference_list["job_civilian_med"] + job_civilian_low = preference_list["job_civilian_low"] + job_medsci_high = preference_list["job_medsci_high"] + job_medsci_med = preference_list["job_medsci_med"] + job_medsci_low = preference_list["job_medsci_low"] + job_engsec_high = preference_list["job_engsec_high"] + job_engsec_med = preference_list["job_engsec_med"] + job_engsec_low = preference_list["job_engsec_low"] - metadata = sanitize_text(metadata, initial(metadata)) - real_name = reject_bad_name(real_name) + 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) @@ -271,16 +364,20 @@ 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)) @@ -305,6 +402,8 @@ if(!player_alt_titles) player_alt_titles = new() if(!organ_data) src.organ_data = list() + user << "Sucessfully loaded [real_name]." + return 1 @@ -414,17 +513,17 @@ /datum/preferences/proc/random_character_sqlite(var/user, var/ckey) var/database/query/q = new - var/i = 0 - q.Add("SELECT slot FROM players WHERE ckey=?", ckey) + var/list/slot_list = new + q.Add("SELECT player_slot FROM players WHERE player_ckey=?", ckey) if(q.Execute(db)) while(q.NextRow()) - i++ + slot_list.Add(q.GetColumn(1)) else message_admins("Error #: [q.Error()] - [q.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 - var/random_slot = rand(1,i) - world << "This is random_slot : [random_slot]" - load_save_sqlite(user, ckey, random_slot) + var/random_slot = pick(slot_list) + load_save_sqlite(ckey, user, random_slot) return 1 /datum/preferences/proc/random_character() @@ -474,36 +573,37 @@ var/database/query/q = new var/database/query/check = new - check.Add("select ckey from players where ckey = ? and slot = ?", ckey, slot) + check.Add("select player_ckey from players where player_ckey = ? and player_slot = ?", ckey, slot) if(check.Execute(db)) if(!check.NextRow()) //1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 - q.Add("INSERT INTO players (ckey,slot,ooc_notes,real_name,random_name,gender,age,species,language,flavor_text,med_record,sec_record,gen_record,player_alt_titles,be_special,disabilities,nanotrasen_relation) \ + q.Add("INSERT INTO players (player_ckey,player_slot,ooc_notes,real_name,random_name,gender,age,species,language,flavor_text,med_record,sec_record,gen_record,player_alt_titles,be_special,disabilities,nanotrasen_relation) \ VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", ckey, slot, metadata, real_name, be_random_name, gender, age, species, language, flavor_text, med_record, sec_record, gen_record, player_alt_titles, be_special, disabilities, nanotrasen_relation) if(!q.Execute(db)) message_admins("Error #:[q.Error()] - [q.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 user << "Created Character" else - q.Add("UPDATE players SET ooc_notes=?,real_name=?,random_name=?,gender=?,age=?,species=?,language=?,flavor_text=?,med_record=?,sec_record=?,gen_record=?,player_alt_titles=?,be_special=?,disabilities=?,nanotrasen_relation=? WHERE ckey = ? AND slot = ?",\ + q.Add("UPDATE players SET ooc_notes=?,real_name=?,random_name=?,gender=?,age=?,species=?,language=?,flavor_text=?,med_record=?,sec_record=?,gen_record=?,player_alt_titles=?,be_special=?,disabilities=?,nanotrasen_relation=? WHERE player_ckey = ? AND player_slot = ?",\ metadata, real_name, be_random_name, gender, age, species, language, flavor_text, med_record, sec_record, gen_record, player_alt_titles, be_special, disabilities, nanotrasen_relation, ckey, slot) - world << "Players Query : [q]" if(!q.Execute(db)) message_admins("Error #:[q.Error()] - [q.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 user << "Updated Character" else message_admins("Error #:[check.Error()] - [check.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 check.Add("select player_ckey from body where player_ckey = ? and player_slot = ?", ckey, slot) - world << "Check Query : [check]" if(check.Execute(db)) if(!check.NextRow()) q.Add("INSERT INTO body (player_ckey,player_slot,hair_red,hair_green,hair_blue,facial_red,facial_green,facial_blue,skin_tone,hair_style_name,facial_style_name,eyes_red,eyes_green,eyes_blue,underwear,backbag,b_type) \ VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", ckey, slot, r_hair, g_hair, b_hair, r_facial, g_facial, b_facial, s_tone, h_style, f_style, r_eyes, g_eyes, b_eyes, underwear, backbag, b_type) - world << "Body Query : [q]" if(!q.Execute(db)) message_admins("Error #:[q.Error()] - [q.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 user << "Created Body" else @@ -511,10 +611,12 @@ r_hair, g_hair, b_hair, r_facial, g_facial, b_facial, s_tone, h_style, f_style, r_eyes, g_eyes, b_eyes, underwear, backbag, b_type, ckey, slot) if(!q.Execute(db)) message_admins("Error #:[q.Error()] - [q.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 user << "Updated Body" else message_admins("Error #: [check.Error()] - [check.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 check.Add("select player_ckey from jobs where player_ckey = ? and player_slot = ?", ckey, slot) @@ -524,6 +626,7 @@ VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", ckey, slot, 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) if(!q.Execute(db)) message_admins("Error #: [q.Error()] - [q.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 user << "Created Job list" else @@ -531,10 +634,12 @@ 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, ckey, slot) if(!q.Execute(db)) message_admins("Error #: [q.Error()] - [q.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 user << "Updated Job List" else message_admins("Error #: [check.Error()] - [check.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 check.Add("select player_ckey from limbs where player_ckey = ? and player_slot = ?", ckey, slot) @@ -543,11 +648,13 @@ q.Add("INSERT INTO limbs (player_ckey, player_slot) VALUES (?,?)", ckey, slot) if(!q.Execute(db)) message_admins("Error #: [q.Error()] - [q.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 for(var/stuff in organ_data) q.Add("UPDATE limbs SET [stuff]=? WHERE player_ckey = ? AND player_slot = ?", organ_data[stuff], ckey, slot) if(!q.Execute(db)) message_admins("Error #; [q.Error()] - [q.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 user << "Created Limbs" else @@ -555,10 +662,12 @@ q.Add("UPDATE limbs SET [stuff] = ? WHERE player_ckey = ? AND player_slot = ?", organ_data[stuff], ckey, slot) if(!q.Execute(db)) message_admins("Error #: [q.Error()] - [q.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 user << "Updated Limbs" else message_admins("Error #: [check.Error()] - [check.ErrorMsg()]") + warning("Error #:[q.Error()] - [q.ErrorMsg()]") return 0 return 1 diff --git a/players2.sqlite b/players2.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..b6a542776ada4a3cdf8731cf446770b362aa0244 GIT binary patch literal 19456 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 J=i2b}{1