mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-18 18:46:24 +01:00
Whitespace Standardization [MDB IGNORE] (#15748)
* Update settings * Whitespace changes * Comment out merger hooks in gitattributes Corrupt maps would have to be resolved in repo before hooks could be updated * Revert "Whitespace changes" This reverts commitafbdd1d844. * Whitespace again minus example * Gitignore example changelog * Restore changelog merge setting * Keep older dmi hook attribute until hooks can be updated * update vscode settings too * Renormalize remaining * Revert "Gitignore example changelog" This reverts commitde22ad375d. * Attempt to normalize example.yml (and another file I guess) * Try again
This commit is contained in:
@@ -1,72 +1,72 @@
|
||||
var/global/list/uplink_locations = list("PDA", "Headset", "None")
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/basic
|
||||
name = "Basic"
|
||||
sort_order = 1
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/basic/load_character(var/savefile/S)
|
||||
S["uplinklocation"] >> pref.uplinklocation
|
||||
S["exploit_record"] >> pref.exploit_record
|
||||
S["antag_faction"] >> pref.antag_faction
|
||||
S["antag_vis"] >> pref.antag_vis
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/basic/save_character(var/savefile/S)
|
||||
S["uplinklocation"] << pref.uplinklocation
|
||||
S["exploit_record"] << pref.exploit_record
|
||||
S["antag_faction"] << pref.antag_faction
|
||||
S["antag_vis"] << pref.antag_vis
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/basic/sanitize_character()
|
||||
pref.uplinklocation = sanitize_inlist(pref.uplinklocation, uplink_locations, initial(pref.uplinklocation))
|
||||
if(!pref.antag_faction) pref.antag_faction = "None"
|
||||
if(!pref.antag_vis) pref.antag_vis = "Hidden"
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/antagonism/basic/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.exploit_record = pref.exploit_record
|
||||
character.antag_faction = pref.antag_faction
|
||||
character.antag_vis = pref.antag_vis
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/basic/content(var/mob/user)
|
||||
. += "Faction: <a href='?src=\ref[src];antagfaction=1'>[pref.antag_faction]</a><br/>"
|
||||
. += "Visibility: <a href='?src=\ref[src];antagvis=1'>[pref.antag_vis]</a><br/>"
|
||||
. +="<b>Uplink Type : <a href='?src=\ref[src];antagtask=1'>[pref.uplinklocation]</a></b>"
|
||||
. +="<br>"
|
||||
. +="<b>Exploitable information:</b><br>"
|
||||
if(jobban_isbanned(user, "Records"))
|
||||
. += "<b>You are banned from using character records.</b><br>"
|
||||
else
|
||||
. +="<a href='?src=\ref[src];exploitable_record=1'>[TextPreview(pref.exploit_record,40)]</a><br>"
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/basic/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
if (href_list["antagtask"])
|
||||
pref.uplinklocation = next_in_list(pref.uplinklocation, uplink_locations)
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if(href_list["exploitable_record"])
|
||||
var/exploitmsg = sanitize(tgui_input_text(user,"Set exploitable information about you here.","Exploitable Information", html_decode(pref.exploit_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH, extra = 0)
|
||||
if(!isnull(exploitmsg) && !jobban_isbanned(user, "Records") && CanUseTopic(user))
|
||||
pref.exploit_record = exploitmsg
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if(href_list["antagfaction"])
|
||||
var/choice = tgui_input_list(user, "Please choose an antagonistic faction to work for.", "Character Preference", antag_faction_choices + list("None","Other"), pref.antag_faction)
|
||||
if(!choice || !CanUseTopic(user))
|
||||
return TOPIC_NOACTION
|
||||
if(choice == "Other")
|
||||
var/raw_choice = sanitize(tgui_input_text(user, "Please enter a faction.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
|
||||
if(raw_choice)
|
||||
pref.antag_faction = raw_choice
|
||||
else
|
||||
pref.antag_faction = choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if(href_list["antagvis"])
|
||||
var/choice = tgui_input_list(user, "Please choose an antagonistic visibility level.", "Character Preference", antag_visiblity_choices, pref.antag_vis)
|
||||
if(!choice || !CanUseTopic(user))
|
||||
return TOPIC_NOACTION
|
||||
else
|
||||
pref.antag_vis = choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
return ..()
|
||||
var/global/list/uplink_locations = list("PDA", "Headset", "None")
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/basic
|
||||
name = "Basic"
|
||||
sort_order = 1
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/basic/load_character(var/savefile/S)
|
||||
S["uplinklocation"] >> pref.uplinklocation
|
||||
S["exploit_record"] >> pref.exploit_record
|
||||
S["antag_faction"] >> pref.antag_faction
|
||||
S["antag_vis"] >> pref.antag_vis
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/basic/save_character(var/savefile/S)
|
||||
S["uplinklocation"] << pref.uplinklocation
|
||||
S["exploit_record"] << pref.exploit_record
|
||||
S["antag_faction"] << pref.antag_faction
|
||||
S["antag_vis"] << pref.antag_vis
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/basic/sanitize_character()
|
||||
pref.uplinklocation = sanitize_inlist(pref.uplinklocation, uplink_locations, initial(pref.uplinklocation))
|
||||
if(!pref.antag_faction) pref.antag_faction = "None"
|
||||
if(!pref.antag_vis) pref.antag_vis = "Hidden"
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/antagonism/basic/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.exploit_record = pref.exploit_record
|
||||
character.antag_faction = pref.antag_faction
|
||||
character.antag_vis = pref.antag_vis
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/basic/content(var/mob/user)
|
||||
. += "Faction: <a href='?src=\ref[src];antagfaction=1'>[pref.antag_faction]</a><br/>"
|
||||
. += "Visibility: <a href='?src=\ref[src];antagvis=1'>[pref.antag_vis]</a><br/>"
|
||||
. +="<b>Uplink Type : <a href='?src=\ref[src];antagtask=1'>[pref.uplinklocation]</a></b>"
|
||||
. +="<br>"
|
||||
. +="<b>Exploitable information:</b><br>"
|
||||
if(jobban_isbanned(user, "Records"))
|
||||
. += "<b>You are banned from using character records.</b><br>"
|
||||
else
|
||||
. +="<a href='?src=\ref[src];exploitable_record=1'>[TextPreview(pref.exploit_record,40)]</a><br>"
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/basic/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
if (href_list["antagtask"])
|
||||
pref.uplinklocation = next_in_list(pref.uplinklocation, uplink_locations)
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if(href_list["exploitable_record"])
|
||||
var/exploitmsg = sanitize(tgui_input_text(user,"Set exploitable information about you here.","Exploitable Information", html_decode(pref.exploit_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH, extra = 0)
|
||||
if(!isnull(exploitmsg) && !jobban_isbanned(user, "Records") && CanUseTopic(user))
|
||||
pref.exploit_record = exploitmsg
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if(href_list["antagfaction"])
|
||||
var/choice = tgui_input_list(user, "Please choose an antagonistic faction to work for.", "Character Preference", antag_faction_choices + list("None","Other"), pref.antag_faction)
|
||||
if(!choice || !CanUseTopic(user))
|
||||
return TOPIC_NOACTION
|
||||
if(choice == "Other")
|
||||
var/raw_choice = sanitize(tgui_input_text(user, "Please enter a faction.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
|
||||
if(raw_choice)
|
||||
pref.antag_faction = raw_choice
|
||||
else
|
||||
pref.antag_faction = choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if(href_list["antagvis"])
|
||||
var/choice = tgui_input_list(user, "Please choose an antagonistic visibility level.", "Character Preference", antag_visiblity_choices, pref.antag_vis)
|
||||
if(!choice || !CanUseTopic(user))
|
||||
return TOPIC_NOACTION
|
||||
else
|
||||
pref.antag_vis = choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
return ..()
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,192 +1,192 @@
|
||||
/datum/preferences
|
||||
var/list/all_underwear
|
||||
var/list/all_underwear_metadata
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment
|
||||
name = "Clothing"
|
||||
sort_order = 4
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/load_character(var/savefile/S)
|
||||
S["all_underwear"] >> pref.all_underwear
|
||||
S["all_underwear_metadata"] >> pref.all_underwear_metadata
|
||||
S["backbag"] >> pref.backbag
|
||||
S["pdachoice"] >> pref.pdachoice
|
||||
S["communicator_visibility"] >> pref.communicator_visibility
|
||||
S["ringtone"] >> pref.ringtone
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/save_character(var/savefile/S)
|
||||
S["all_underwear"] << pref.all_underwear
|
||||
S["all_underwear_metadata"] << pref.all_underwear_metadata
|
||||
S["backbag"] << pref.backbag
|
||||
S["pdachoice"] << pref.pdachoice
|
||||
S["communicator_visibility"] << pref.communicator_visibility
|
||||
S["ringtone"] << pref.ringtone
|
||||
|
||||
var/global/list/valid_ringtones = list(
|
||||
"beep",
|
||||
"boom",
|
||||
"slip",
|
||||
"honk",
|
||||
"SKREE",
|
||||
"xeno",
|
||||
"spark",
|
||||
"rad",
|
||||
"servo",
|
||||
"buh-boop",
|
||||
"trombone",
|
||||
"whistle",
|
||||
"chirp",
|
||||
"slurp",
|
||||
"pwing",
|
||||
"clack",
|
||||
"bzzt",
|
||||
"chimes",
|
||||
"prbt",
|
||||
"bark",
|
||||
"bork",
|
||||
"roark",
|
||||
"chitter",
|
||||
"squish"
|
||||
)
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/equipment/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.all_underwear.Cut()
|
||||
character.all_underwear_metadata.Cut()
|
||||
|
||||
for(var/underwear_category_name in pref.all_underwear)
|
||||
var/datum/category_group/underwear/underwear_category = global_underwear.categories_by_name[underwear_category_name]
|
||||
if(underwear_category)
|
||||
var/underwear_item_name = pref.all_underwear[underwear_category_name]
|
||||
character.all_underwear[underwear_category_name] = underwear_category.items_by_name[underwear_item_name]
|
||||
if(pref.all_underwear_metadata[underwear_category_name])
|
||||
character.all_underwear_metadata[underwear_category_name] = pref.all_underwear_metadata[underwear_category_name]
|
||||
else
|
||||
pref.all_underwear -= underwear_category_name
|
||||
|
||||
// TODO - Looks like this is duplicating the work of sanitize_character() if so, remove
|
||||
if(pref.backbag > backbaglist.len || pref.backbag < 1)
|
||||
pref.backbag = 2 //Same as above
|
||||
character.backbag = pref.backbag
|
||||
|
||||
if(pref.pdachoice > 8 || pref.pdachoice < 1)
|
||||
pref.pdachoice = 1
|
||||
character.pdachoice = pref.pdachoice
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/sanitize_character()
|
||||
if(!islist(pref.gear)) pref.gear = list()
|
||||
|
||||
if(!istype(pref.all_underwear))
|
||||
pref.all_underwear = list()
|
||||
|
||||
for(var/datum/category_group/underwear/WRC in global_underwear.categories)
|
||||
for(var/datum/category_item/underwear/WRI in WRC.items)
|
||||
if(WRI.is_default(pref.identifying_gender ? pref.identifying_gender : MALE))
|
||||
pref.all_underwear[WRC.name] = WRI.name
|
||||
break
|
||||
|
||||
if(!istype(pref.all_underwear_metadata))
|
||||
pref.all_underwear_metadata = list()
|
||||
|
||||
for(var/underwear_category in pref.all_underwear)
|
||||
var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[underwear_category]
|
||||
if(!UWC)
|
||||
pref.all_underwear -= underwear_category
|
||||
else
|
||||
var/datum/category_item/underwear/UWI = UWC.items_by_name[pref.all_underwear[underwear_category]]
|
||||
if(!UWI)
|
||||
pref.all_underwear -= underwear_category
|
||||
|
||||
for(var/underwear_metadata in pref.all_underwear_metadata)
|
||||
if(!(underwear_metadata in pref.all_underwear))
|
||||
pref.all_underwear_metadata -= underwear_metadata
|
||||
pref.backbag = sanitize_integer(pref.backbag, 1, backbaglist.len, initial(pref.backbag))
|
||||
pref.pdachoice = sanitize_integer(pref.pdachoice, 1, pdachoicelist.len, initial(pref.pdachoice))
|
||||
pref.ringtone = sanitize(pref.ringtone, 20)
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/content()
|
||||
. = list()
|
||||
. += "<b>Equipment:</b><br>"
|
||||
for(var/datum/category_group/underwear/UWC in global_underwear.categories)
|
||||
var/item_name = pref.all_underwear[UWC.name] ? pref.all_underwear[UWC.name] : "None"
|
||||
. += "[UWC.name]: <a href='?src=\ref[src];change_underwear=[UWC.name]'><b>[item_name]</b></a>"
|
||||
var/datum/category_item/underwear/UWI = UWC.items_by_name[item_name]
|
||||
if(UWI)
|
||||
for(var/datum/gear_tweak/gt in UWI.tweaks)
|
||||
. += " <a href='?src=\ref[src];underwear=[UWC.name];tweak=\ref[gt]'>[gt.get_contents(get_metadata(UWC.name, gt))]</a>"
|
||||
|
||||
. += "<br>"
|
||||
. += "Backpack Type: <a href='?src=\ref[src];change_backpack=1'><b>[backbaglist[pref.backbag]]</b></a><br>"
|
||||
. += "PDA Type: <a href='?src=\ref[src];change_pda=1'><b>[pdachoicelist[pref.pdachoice]]</b></a><br>"
|
||||
. += "Communicator Visibility: <a href='?src=\ref[src];toggle_comm_visibility=1'><b>[(pref.communicator_visibility) ? "Yes" : "No"]</b></a><br>"
|
||||
. += "Ringtone (leave blank for job default): <a href='?src=\ref[src];set_ringtone=1'><b>[pref.ringtone]</b></a><br>"
|
||||
|
||||
return jointext(.,null)
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/proc/get_metadata(var/underwear_category, var/datum/gear_tweak/gt)
|
||||
var/metadata = pref.all_underwear_metadata[underwear_category]
|
||||
if(!metadata)
|
||||
metadata = list()
|
||||
pref.all_underwear_metadata[underwear_category] = metadata
|
||||
|
||||
var/tweak_data = metadata["[gt]"]
|
||||
if(!tweak_data)
|
||||
tweak_data = gt.get_default()
|
||||
metadata["[gt]"] = tweak_data
|
||||
return tweak_data
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/proc/set_metadata(var/underwear_category, var/datum/gear_tweak/gt, var/new_metadata)
|
||||
var/list/metadata = pref.all_underwear_metadata[underwear_category]
|
||||
metadata["[gt]"] = new_metadata
|
||||
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
if(href_list["change_backpack"])
|
||||
var/new_backbag = tgui_input_list(user, "Choose your character's style of bag:", "Character Preference", backbaglist, backbaglist[pref.backbag])
|
||||
if(!isnull(new_backbag) && CanUseTopic(user))
|
||||
pref.backbag = backbaglist.Find(new_backbag)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["change_pda"])
|
||||
var/new_pdachoice = tgui_input_list(user, "Choose your character's style of PDA:", "Character Preference", pdachoicelist, pdachoicelist[pref.pdachoice])
|
||||
if(!isnull(new_pdachoice) && CanUseTopic(user))
|
||||
pref.pdachoice = pdachoicelist.Find(new_pdachoice)
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["change_underwear"])
|
||||
var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[href_list["change_underwear"]]
|
||||
if(!UWC)
|
||||
return
|
||||
var/datum/category_item/underwear/selected_underwear = tgui_input_list(user, "Choose underwear:", "Character Preference", UWC.items, pref.all_underwear[UWC.name])
|
||||
if(selected_underwear && CanUseTopic(user))
|
||||
pref.all_underwear[UWC.name] = selected_underwear.name
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["underwear"] && href_list["tweak"])
|
||||
var/underwear = href_list["underwear"]
|
||||
if(!(underwear in pref.all_underwear))
|
||||
return TOPIC_NOACTION
|
||||
var/datum/gear_tweak/gt = locate(href_list["tweak"])
|
||||
if(!gt)
|
||||
return TOPIC_NOACTION
|
||||
var/new_metadata = gt.get_metadata(usr, get_metadata(underwear, gt))
|
||||
if(new_metadata)
|
||||
set_metadata(underwear, gt, new_metadata)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
else if(href_list["toggle_comm_visibility"])
|
||||
if(CanUseTopic(user))
|
||||
pref.communicator_visibility = !pref.communicator_visibility
|
||||
return TOPIC_REFRESH
|
||||
else if(href_list["set_ringtone"])
|
||||
var/choice = tgui_input_list(user, "Please select a ringtone. All of these choices come with an associated preset sound. Alternately, select \"Other\" to specify manually.", "Character Preference", valid_ringtones + "Other", pref.ringtone)
|
||||
if(!choice || !CanUseTopic(user))
|
||||
return TOPIC_NOACTION
|
||||
if(choice == "Other")
|
||||
var/raw_choice = sanitize(tgui_input_text(user, "Please enter a custom ringtone. If this doesn't match any of the other listed choices, your PDA will use the default (\"beep\") sound.", "Character Preference", null, 20), 20)
|
||||
if(raw_choice && CanUseTopic(user))
|
||||
pref.ringtone = raw_choice
|
||||
else
|
||||
pref.ringtone = choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
return ..()
|
||||
/datum/preferences
|
||||
var/list/all_underwear
|
||||
var/list/all_underwear_metadata
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment
|
||||
name = "Clothing"
|
||||
sort_order = 4
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/load_character(var/savefile/S)
|
||||
S["all_underwear"] >> pref.all_underwear
|
||||
S["all_underwear_metadata"] >> pref.all_underwear_metadata
|
||||
S["backbag"] >> pref.backbag
|
||||
S["pdachoice"] >> pref.pdachoice
|
||||
S["communicator_visibility"] >> pref.communicator_visibility
|
||||
S["ringtone"] >> pref.ringtone
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/save_character(var/savefile/S)
|
||||
S["all_underwear"] << pref.all_underwear
|
||||
S["all_underwear_metadata"] << pref.all_underwear_metadata
|
||||
S["backbag"] << pref.backbag
|
||||
S["pdachoice"] << pref.pdachoice
|
||||
S["communicator_visibility"] << pref.communicator_visibility
|
||||
S["ringtone"] << pref.ringtone
|
||||
|
||||
var/global/list/valid_ringtones = list(
|
||||
"beep",
|
||||
"boom",
|
||||
"slip",
|
||||
"honk",
|
||||
"SKREE",
|
||||
"xeno",
|
||||
"spark",
|
||||
"rad",
|
||||
"servo",
|
||||
"buh-boop",
|
||||
"trombone",
|
||||
"whistle",
|
||||
"chirp",
|
||||
"slurp",
|
||||
"pwing",
|
||||
"clack",
|
||||
"bzzt",
|
||||
"chimes",
|
||||
"prbt",
|
||||
"bark",
|
||||
"bork",
|
||||
"roark",
|
||||
"chitter",
|
||||
"squish"
|
||||
)
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/equipment/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.all_underwear.Cut()
|
||||
character.all_underwear_metadata.Cut()
|
||||
|
||||
for(var/underwear_category_name in pref.all_underwear)
|
||||
var/datum/category_group/underwear/underwear_category = global_underwear.categories_by_name[underwear_category_name]
|
||||
if(underwear_category)
|
||||
var/underwear_item_name = pref.all_underwear[underwear_category_name]
|
||||
character.all_underwear[underwear_category_name] = underwear_category.items_by_name[underwear_item_name]
|
||||
if(pref.all_underwear_metadata[underwear_category_name])
|
||||
character.all_underwear_metadata[underwear_category_name] = pref.all_underwear_metadata[underwear_category_name]
|
||||
else
|
||||
pref.all_underwear -= underwear_category_name
|
||||
|
||||
// TODO - Looks like this is duplicating the work of sanitize_character() if so, remove
|
||||
if(pref.backbag > backbaglist.len || pref.backbag < 1)
|
||||
pref.backbag = 2 //Same as above
|
||||
character.backbag = pref.backbag
|
||||
|
||||
if(pref.pdachoice > 8 || pref.pdachoice < 1)
|
||||
pref.pdachoice = 1
|
||||
character.pdachoice = pref.pdachoice
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/sanitize_character()
|
||||
if(!islist(pref.gear)) pref.gear = list()
|
||||
|
||||
if(!istype(pref.all_underwear))
|
||||
pref.all_underwear = list()
|
||||
|
||||
for(var/datum/category_group/underwear/WRC in global_underwear.categories)
|
||||
for(var/datum/category_item/underwear/WRI in WRC.items)
|
||||
if(WRI.is_default(pref.identifying_gender ? pref.identifying_gender : MALE))
|
||||
pref.all_underwear[WRC.name] = WRI.name
|
||||
break
|
||||
|
||||
if(!istype(pref.all_underwear_metadata))
|
||||
pref.all_underwear_metadata = list()
|
||||
|
||||
for(var/underwear_category in pref.all_underwear)
|
||||
var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[underwear_category]
|
||||
if(!UWC)
|
||||
pref.all_underwear -= underwear_category
|
||||
else
|
||||
var/datum/category_item/underwear/UWI = UWC.items_by_name[pref.all_underwear[underwear_category]]
|
||||
if(!UWI)
|
||||
pref.all_underwear -= underwear_category
|
||||
|
||||
for(var/underwear_metadata in pref.all_underwear_metadata)
|
||||
if(!(underwear_metadata in pref.all_underwear))
|
||||
pref.all_underwear_metadata -= underwear_metadata
|
||||
pref.backbag = sanitize_integer(pref.backbag, 1, backbaglist.len, initial(pref.backbag))
|
||||
pref.pdachoice = sanitize_integer(pref.pdachoice, 1, pdachoicelist.len, initial(pref.pdachoice))
|
||||
pref.ringtone = sanitize(pref.ringtone, 20)
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/content()
|
||||
. = list()
|
||||
. += "<b>Equipment:</b><br>"
|
||||
for(var/datum/category_group/underwear/UWC in global_underwear.categories)
|
||||
var/item_name = pref.all_underwear[UWC.name] ? pref.all_underwear[UWC.name] : "None"
|
||||
. += "[UWC.name]: <a href='?src=\ref[src];change_underwear=[UWC.name]'><b>[item_name]</b></a>"
|
||||
var/datum/category_item/underwear/UWI = UWC.items_by_name[item_name]
|
||||
if(UWI)
|
||||
for(var/datum/gear_tweak/gt in UWI.tweaks)
|
||||
. += " <a href='?src=\ref[src];underwear=[UWC.name];tweak=\ref[gt]'>[gt.get_contents(get_metadata(UWC.name, gt))]</a>"
|
||||
|
||||
. += "<br>"
|
||||
. += "Backpack Type: <a href='?src=\ref[src];change_backpack=1'><b>[backbaglist[pref.backbag]]</b></a><br>"
|
||||
. += "PDA Type: <a href='?src=\ref[src];change_pda=1'><b>[pdachoicelist[pref.pdachoice]]</b></a><br>"
|
||||
. += "Communicator Visibility: <a href='?src=\ref[src];toggle_comm_visibility=1'><b>[(pref.communicator_visibility) ? "Yes" : "No"]</b></a><br>"
|
||||
. += "Ringtone (leave blank for job default): <a href='?src=\ref[src];set_ringtone=1'><b>[pref.ringtone]</b></a><br>"
|
||||
|
||||
return jointext(.,null)
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/proc/get_metadata(var/underwear_category, var/datum/gear_tweak/gt)
|
||||
var/metadata = pref.all_underwear_metadata[underwear_category]
|
||||
if(!metadata)
|
||||
metadata = list()
|
||||
pref.all_underwear_metadata[underwear_category] = metadata
|
||||
|
||||
var/tweak_data = metadata["[gt]"]
|
||||
if(!tweak_data)
|
||||
tweak_data = gt.get_default()
|
||||
metadata["[gt]"] = tweak_data
|
||||
return tweak_data
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/proc/set_metadata(var/underwear_category, var/datum/gear_tweak/gt, var/new_metadata)
|
||||
var/list/metadata = pref.all_underwear_metadata[underwear_category]
|
||||
metadata["[gt]"] = new_metadata
|
||||
|
||||
|
||||
/datum/category_item/player_setup_item/general/equipment/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
if(href_list["change_backpack"])
|
||||
var/new_backbag = tgui_input_list(user, "Choose your character's style of bag:", "Character Preference", backbaglist, backbaglist[pref.backbag])
|
||||
if(!isnull(new_backbag) && CanUseTopic(user))
|
||||
pref.backbag = backbaglist.Find(new_backbag)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["change_pda"])
|
||||
var/new_pdachoice = tgui_input_list(user, "Choose your character's style of PDA:", "Character Preference", pdachoicelist, pdachoicelist[pref.pdachoice])
|
||||
if(!isnull(new_pdachoice) && CanUseTopic(user))
|
||||
pref.pdachoice = pdachoicelist.Find(new_pdachoice)
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["change_underwear"])
|
||||
var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[href_list["change_underwear"]]
|
||||
if(!UWC)
|
||||
return
|
||||
var/datum/category_item/underwear/selected_underwear = tgui_input_list(user, "Choose underwear:", "Character Preference", UWC.items, pref.all_underwear[UWC.name])
|
||||
if(selected_underwear && CanUseTopic(user))
|
||||
pref.all_underwear[UWC.name] = selected_underwear.name
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["underwear"] && href_list["tweak"])
|
||||
var/underwear = href_list["underwear"]
|
||||
if(!(underwear in pref.all_underwear))
|
||||
return TOPIC_NOACTION
|
||||
var/datum/gear_tweak/gt = locate(href_list["tweak"])
|
||||
if(!gt)
|
||||
return TOPIC_NOACTION
|
||||
var/new_metadata = gt.get_metadata(usr, get_metadata(underwear, gt))
|
||||
if(new_metadata)
|
||||
set_metadata(underwear, gt, new_metadata)
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
else if(href_list["toggle_comm_visibility"])
|
||||
if(CanUseTopic(user))
|
||||
pref.communicator_visibility = !pref.communicator_visibility
|
||||
return TOPIC_REFRESH
|
||||
else if(href_list["set_ringtone"])
|
||||
var/choice = tgui_input_list(user, "Please select a ringtone. All of these choices come with an associated preset sound. Alternately, select \"Other\" to specify manually.", "Character Preference", valid_ringtones + "Other", pref.ringtone)
|
||||
if(!choice || !CanUseTopic(user))
|
||||
return TOPIC_NOACTION
|
||||
if(choice == "Other")
|
||||
var/raw_choice = sanitize(tgui_input_text(user, "Please enter a custom ringtone. If this doesn't match any of the other listed choices, your PDA will use the default (\"beep\") sound.", "Character Preference", null, 20), 20)
|
||||
if(raw_choice && CanUseTopic(user))
|
||||
pref.ringtone = raw_choice
|
||||
else
|
||||
pref.ringtone = choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
return ..()
|
||||
|
||||
@@ -1,173 +1,173 @@
|
||||
/datum/category_item/player_setup_item/general/background
|
||||
name = "Background"
|
||||
sort_order = 5
|
||||
|
||||
/datum/category_item/player_setup_item/general/background/load_character(var/savefile/S)
|
||||
S["med_record"] >> pref.med_record
|
||||
S["sec_record"] >> pref.sec_record
|
||||
S["gen_record"] >> pref.gen_record
|
||||
S["home_system"] >> pref.home_system
|
||||
S["birthplace"] >> pref.birthplace
|
||||
S["citizenship"] >> pref.citizenship
|
||||
S["faction"] >> pref.faction
|
||||
S["religion"] >> pref.religion
|
||||
S["economic_status"] >> pref.economic_status
|
||||
|
||||
/datum/category_item/player_setup_item/general/background/save_character(var/savefile/S)
|
||||
S["med_record"] << pref.med_record
|
||||
S["sec_record"] << pref.sec_record
|
||||
S["gen_record"] << pref.gen_record
|
||||
S["home_system"] << pref.home_system
|
||||
S["birthplace"] << pref.birthplace
|
||||
S["citizenship"] << pref.citizenship
|
||||
S["faction"] << pref.faction
|
||||
S["religion"] << pref.religion
|
||||
S["economic_status"] << pref.economic_status
|
||||
|
||||
/datum/category_item/player_setup_item/general/background/sanitize_character()
|
||||
if(!pref.home_system) pref.home_system = "Unset"
|
||||
if(!pref.birthplace) pref.birthplace = "Unset"
|
||||
if(!pref.citizenship) pref.citizenship = "None"
|
||||
if(!pref.faction) pref.faction = "None"
|
||||
if(!pref.religion) pref.religion = "None"
|
||||
|
||||
pref.economic_status = sanitize_inlist(pref.economic_status, ECONOMIC_CLASS, initial(pref.economic_status))
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/background/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.med_record = pref.med_record
|
||||
character.sec_record = pref.sec_record
|
||||
character.gen_record = pref.gen_record
|
||||
character.home_system = pref.home_system
|
||||
character.birthplace = pref.birthplace
|
||||
character.citizenship = pref.citizenship
|
||||
character.personal_faction = pref.faction
|
||||
character.religion = pref.religion
|
||||
|
||||
/datum/category_item/player_setup_item/general/background/content(var/mob/user)
|
||||
. += "<b>Background Information</b><br>"
|
||||
. += "Economic Status: <a href='?src=\ref[src];econ_status=1'>[pref.economic_status]</a><br/>"
|
||||
. += "Home: <a href='?src=\ref[src];home_system=1'>[pref.home_system]</a><br/>"
|
||||
. += "Birthplace: <a href='?src=\ref[src];birthplace=1'>[pref.birthplace]</a><br/>"
|
||||
. += "Citizenship: <a href='?src=\ref[src];citizenship=1'>[pref.citizenship]</a><br/>"
|
||||
. += "Faction: <a href='?src=\ref[src];faction=1'>[pref.faction]</a><br/>"
|
||||
. += "Religion: <a href='?src=\ref[src];religion=1'>[pref.religion]</a><br/>"
|
||||
|
||||
. += "<br/><b>Records</b>:<br/>"
|
||||
if(jobban_isbanned(user, "Records"))
|
||||
. += "<span class='danger'>You are banned from using character records.</span><br>"
|
||||
else
|
||||
. += "Medical Records:<br>"
|
||||
. += "<a href='?src=\ref[src];set_medical_records=1'>[TextPreview(pref.med_record,40)]</a><br>"
|
||||
. += " (<a href='?src=\ref[src];reset_medrecord=1'>Reset</A>)<br><br>"
|
||||
. += "Employment Records:<br>"
|
||||
. += "<a href='?src=\ref[src];set_general_records=1'>[TextPreview(pref.gen_record,40)]</a><br>"
|
||||
. += "(<a href='?src=\ref[src];reset_emprecord=1'>Reset</A>)<br><br>"
|
||||
. += "Security Records:<br>"
|
||||
. += "<a href='?src=\ref[src];set_security_records=1'>[TextPreview(pref.sec_record,40)]</a><br>"
|
||||
. += "(<a href='?src=\ref[src];reset_secrecord=1'>Reset</A>)"
|
||||
|
||||
/datum/category_item/player_setup_item/general/background/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
if(href_list["econ_status"])
|
||||
var/new_class = tgui_input_list(user, "Choose your economic status. This will affect the amount of money you will start with.", "Character Preference", ECONOMIC_CLASS, pref.economic_status)
|
||||
if(new_class && CanUseTopic(user))
|
||||
pref.economic_status = new_class
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["home_system"])
|
||||
var/choice = tgui_input_list(user, "Please choose your home planet and/or system. This should be your current primary residence. Select \"Other\" to specify manually.", "Character Preference", home_system_choices + list("Unset","Other"), pref.home_system)
|
||||
if(!choice || !CanUseTopic(user))
|
||||
return TOPIC_NOACTION
|
||||
if(choice == "Other")
|
||||
var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a home system.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
|
||||
if(raw_choice && CanUseTopic(user))
|
||||
pref.home_system = raw_choice
|
||||
else
|
||||
pref.home_system = choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["birthplace"])
|
||||
var/choice = tgui_input_list(user, "Please choose the planet and/or system or other appropriate location that you were born/created. Select \"Other\" to specify manually.", "Character Preference", home_system_choices + list("Unset","Other"), pref.birthplace)
|
||||
if(!choice || !CanUseTopic(user))
|
||||
return TOPIC_NOACTION
|
||||
if(choice == "Other")
|
||||
var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a birthplace.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
|
||||
if(raw_choice && CanUseTopic(user))
|
||||
pref.birthplace = raw_choice
|
||||
else
|
||||
pref.birthplace = choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["citizenship"])
|
||||
var/choice = tgui_input_list(user, "Please select the faction or political entity with which you currently hold citizenship. Select \"Other\" to specify manually.", "Character Preference", citizenship_choices + list("None","Other"), pref.citizenship)
|
||||
if(!choice || !CanUseTopic(user))
|
||||
return TOPIC_NOACTION
|
||||
if(choice == "Other")
|
||||
var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter your current citizenship.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
|
||||
if(raw_choice && CanUseTopic(user))
|
||||
pref.citizenship = raw_choice
|
||||
else
|
||||
pref.citizenship = choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["faction"])
|
||||
var/choice = tgui_input_list(user, "Please choose the faction you primarily work for, if you are not under the direct employ of NanoTrasen. Select \"Other\" to specify manually.", "Character Preference", faction_choices + list("None","Other"), pref.faction)
|
||||
if(!choice || !CanUseTopic(user))
|
||||
return TOPIC_NOACTION
|
||||
if(choice == "Other")
|
||||
var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a faction.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
|
||||
if(raw_choice)
|
||||
pref.faction = raw_choice
|
||||
else
|
||||
pref.faction = choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["religion"])
|
||||
var/choice = tgui_input_list(user, "Please choose a religion. Select \"Other\" to specify manually.", "Character Preference", religion_choices + list("None","Other"), pref.religion)
|
||||
if(!choice || !CanUseTopic(user))
|
||||
return TOPIC_NOACTION
|
||||
if(choice == "Other")
|
||||
var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a religon.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
|
||||
if(raw_choice)
|
||||
pref.religion = sanitize(raw_choice)
|
||||
else
|
||||
pref.religion = choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["set_medical_records"])
|
||||
var/new_medical = strip_html_simple(tgui_input_text(user,"Enter medical information here.","Character Preference", html_decode(pref.med_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH)
|
||||
if(new_medical && !jobban_isbanned(user, "Records") && CanUseTopic(user))
|
||||
pref.med_record = new_medical
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["set_general_records"])
|
||||
var/new_general = strip_html_simple(tgui_input_text(user,"Enter employment information here.","Character Preference", html_decode(pref.gen_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH)
|
||||
if(new_general && !jobban_isbanned(user, "Records") && CanUseTopic(user))
|
||||
pref.gen_record = new_general
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["set_security_records"])
|
||||
var/sec_medical = strip_html_simple(tgui_input_text(user,"Enter security information here.","Character Preference", html_decode(pref.sec_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH)
|
||||
if(sec_medical && !jobban_isbanned(user, "Records") && CanUseTopic(user))
|
||||
pref.sec_record = sec_medical
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["reset_medrecord"])
|
||||
var/resetmed_choice = tgui_alert(usr, "Wipe your Medical Records? This cannot be reverted if you have not saved your character recently! You may wish to make a backup first.","Reset Records",list("Yes","No"))
|
||||
if(resetmed_choice == "Yes")
|
||||
pref.med_record = null
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["reset_emprecord"])
|
||||
var/resetemp_choice = tgui_alert(usr, "Wipe your Employment Records? This cannot be reverted if you have not saved your character recently! You may wish to make a backup first.","Reset Records",list("Yes","No"))
|
||||
if(resetemp_choice == "Yes")
|
||||
pref.gen_record = null
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["reset_secrecord"])
|
||||
var/resetsec_choice = tgui_alert(usr, "Wipe your Security Records? This cannot be reverted if you have not saved your character recently! You may wish to make a backup first.","Reset Records",list("Yes","No"))
|
||||
if(resetsec_choice == "Yes")
|
||||
pref.sec_record = null
|
||||
return TOPIC_REFRESH
|
||||
|
||||
return ..()
|
||||
/datum/category_item/player_setup_item/general/background
|
||||
name = "Background"
|
||||
sort_order = 5
|
||||
|
||||
/datum/category_item/player_setup_item/general/background/load_character(var/savefile/S)
|
||||
S["med_record"] >> pref.med_record
|
||||
S["sec_record"] >> pref.sec_record
|
||||
S["gen_record"] >> pref.gen_record
|
||||
S["home_system"] >> pref.home_system
|
||||
S["birthplace"] >> pref.birthplace
|
||||
S["citizenship"] >> pref.citizenship
|
||||
S["faction"] >> pref.faction
|
||||
S["religion"] >> pref.religion
|
||||
S["economic_status"] >> pref.economic_status
|
||||
|
||||
/datum/category_item/player_setup_item/general/background/save_character(var/savefile/S)
|
||||
S["med_record"] << pref.med_record
|
||||
S["sec_record"] << pref.sec_record
|
||||
S["gen_record"] << pref.gen_record
|
||||
S["home_system"] << pref.home_system
|
||||
S["birthplace"] << pref.birthplace
|
||||
S["citizenship"] << pref.citizenship
|
||||
S["faction"] << pref.faction
|
||||
S["religion"] << pref.religion
|
||||
S["economic_status"] << pref.economic_status
|
||||
|
||||
/datum/category_item/player_setup_item/general/background/sanitize_character()
|
||||
if(!pref.home_system) pref.home_system = "Unset"
|
||||
if(!pref.birthplace) pref.birthplace = "Unset"
|
||||
if(!pref.citizenship) pref.citizenship = "None"
|
||||
if(!pref.faction) pref.faction = "None"
|
||||
if(!pref.religion) pref.religion = "None"
|
||||
|
||||
pref.economic_status = sanitize_inlist(pref.economic_status, ECONOMIC_CLASS, initial(pref.economic_status))
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/background/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.med_record = pref.med_record
|
||||
character.sec_record = pref.sec_record
|
||||
character.gen_record = pref.gen_record
|
||||
character.home_system = pref.home_system
|
||||
character.birthplace = pref.birthplace
|
||||
character.citizenship = pref.citizenship
|
||||
character.personal_faction = pref.faction
|
||||
character.religion = pref.religion
|
||||
|
||||
/datum/category_item/player_setup_item/general/background/content(var/mob/user)
|
||||
. += "<b>Background Information</b><br>"
|
||||
. += "Economic Status: <a href='?src=\ref[src];econ_status=1'>[pref.economic_status]</a><br/>"
|
||||
. += "Home: <a href='?src=\ref[src];home_system=1'>[pref.home_system]</a><br/>"
|
||||
. += "Birthplace: <a href='?src=\ref[src];birthplace=1'>[pref.birthplace]</a><br/>"
|
||||
. += "Citizenship: <a href='?src=\ref[src];citizenship=1'>[pref.citizenship]</a><br/>"
|
||||
. += "Faction: <a href='?src=\ref[src];faction=1'>[pref.faction]</a><br/>"
|
||||
. += "Religion: <a href='?src=\ref[src];religion=1'>[pref.religion]</a><br/>"
|
||||
|
||||
. += "<br/><b>Records</b>:<br/>"
|
||||
if(jobban_isbanned(user, "Records"))
|
||||
. += "<span class='danger'>You are banned from using character records.</span><br>"
|
||||
else
|
||||
. += "Medical Records:<br>"
|
||||
. += "<a href='?src=\ref[src];set_medical_records=1'>[TextPreview(pref.med_record,40)]</a><br>"
|
||||
. += " (<a href='?src=\ref[src];reset_medrecord=1'>Reset</A>)<br><br>"
|
||||
. += "Employment Records:<br>"
|
||||
. += "<a href='?src=\ref[src];set_general_records=1'>[TextPreview(pref.gen_record,40)]</a><br>"
|
||||
. += "(<a href='?src=\ref[src];reset_emprecord=1'>Reset</A>)<br><br>"
|
||||
. += "Security Records:<br>"
|
||||
. += "<a href='?src=\ref[src];set_security_records=1'>[TextPreview(pref.sec_record,40)]</a><br>"
|
||||
. += "(<a href='?src=\ref[src];reset_secrecord=1'>Reset</A>)"
|
||||
|
||||
/datum/category_item/player_setup_item/general/background/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
if(href_list["econ_status"])
|
||||
var/new_class = tgui_input_list(user, "Choose your economic status. This will affect the amount of money you will start with.", "Character Preference", ECONOMIC_CLASS, pref.economic_status)
|
||||
if(new_class && CanUseTopic(user))
|
||||
pref.economic_status = new_class
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["home_system"])
|
||||
var/choice = tgui_input_list(user, "Please choose your home planet and/or system. This should be your current primary residence. Select \"Other\" to specify manually.", "Character Preference", home_system_choices + list("Unset","Other"), pref.home_system)
|
||||
if(!choice || !CanUseTopic(user))
|
||||
return TOPIC_NOACTION
|
||||
if(choice == "Other")
|
||||
var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a home system.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
|
||||
if(raw_choice && CanUseTopic(user))
|
||||
pref.home_system = raw_choice
|
||||
else
|
||||
pref.home_system = choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["birthplace"])
|
||||
var/choice = tgui_input_list(user, "Please choose the planet and/or system or other appropriate location that you were born/created. Select \"Other\" to specify manually.", "Character Preference", home_system_choices + list("Unset","Other"), pref.birthplace)
|
||||
if(!choice || !CanUseTopic(user))
|
||||
return TOPIC_NOACTION
|
||||
if(choice == "Other")
|
||||
var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a birthplace.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
|
||||
if(raw_choice && CanUseTopic(user))
|
||||
pref.birthplace = raw_choice
|
||||
else
|
||||
pref.birthplace = choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["citizenship"])
|
||||
var/choice = tgui_input_list(user, "Please select the faction or political entity with which you currently hold citizenship. Select \"Other\" to specify manually.", "Character Preference", citizenship_choices + list("None","Other"), pref.citizenship)
|
||||
if(!choice || !CanUseTopic(user))
|
||||
return TOPIC_NOACTION
|
||||
if(choice == "Other")
|
||||
var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter your current citizenship.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
|
||||
if(raw_choice && CanUseTopic(user))
|
||||
pref.citizenship = raw_choice
|
||||
else
|
||||
pref.citizenship = choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["faction"])
|
||||
var/choice = tgui_input_list(user, "Please choose the faction you primarily work for, if you are not under the direct employ of NanoTrasen. Select \"Other\" to specify manually.", "Character Preference", faction_choices + list("None","Other"), pref.faction)
|
||||
if(!choice || !CanUseTopic(user))
|
||||
return TOPIC_NOACTION
|
||||
if(choice == "Other")
|
||||
var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a faction.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
|
||||
if(raw_choice)
|
||||
pref.faction = raw_choice
|
||||
else
|
||||
pref.faction = choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["religion"])
|
||||
var/choice = tgui_input_list(user, "Please choose a religion. Select \"Other\" to specify manually.", "Character Preference", religion_choices + list("None","Other"), pref.religion)
|
||||
if(!choice || !CanUseTopic(user))
|
||||
return TOPIC_NOACTION
|
||||
if(choice == "Other")
|
||||
var/raw_choice = strip_html_simple(tgui_input_text(user, "Please enter a religon.", "Character Preference", null, MAX_NAME_LEN), MAX_NAME_LEN)
|
||||
if(raw_choice)
|
||||
pref.religion = sanitize(raw_choice)
|
||||
else
|
||||
pref.religion = choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["set_medical_records"])
|
||||
var/new_medical = strip_html_simple(tgui_input_text(user,"Enter medical information here.","Character Preference", html_decode(pref.med_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH)
|
||||
if(new_medical && !jobban_isbanned(user, "Records") && CanUseTopic(user))
|
||||
pref.med_record = new_medical
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["set_general_records"])
|
||||
var/new_general = strip_html_simple(tgui_input_text(user,"Enter employment information here.","Character Preference", html_decode(pref.gen_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH)
|
||||
if(new_general && !jobban_isbanned(user, "Records") && CanUseTopic(user))
|
||||
pref.gen_record = new_general
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["set_security_records"])
|
||||
var/sec_medical = strip_html_simple(tgui_input_text(user,"Enter security information here.","Character Preference", html_decode(pref.sec_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH)
|
||||
if(sec_medical && !jobban_isbanned(user, "Records") && CanUseTopic(user))
|
||||
pref.sec_record = sec_medical
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["reset_medrecord"])
|
||||
var/resetmed_choice = tgui_alert(usr, "Wipe your Medical Records? This cannot be reverted if you have not saved your character recently! You may wish to make a backup first.","Reset Records",list("Yes","No"))
|
||||
if(resetmed_choice == "Yes")
|
||||
pref.med_record = null
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["reset_emprecord"])
|
||||
var/resetemp_choice = tgui_alert(usr, "Wipe your Employment Records? This cannot be reverted if you have not saved your character recently! You may wish to make a backup first.","Reset Records",list("Yes","No"))
|
||||
if(resetemp_choice == "Yes")
|
||||
pref.gen_record = null
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["reset_secrecord"])
|
||||
var/resetsec_choice = tgui_alert(usr, "Wipe your Security Records? This cannot be reverted if you have not saved your character recently! You may wish to make a backup first.","Reset Records",list("Yes","No"))
|
||||
if(resetsec_choice == "Yes")
|
||||
pref.sec_record = null
|
||||
return TOPIC_REFRESH
|
||||
|
||||
return ..()
|
||||
|
||||
@@ -1,154 +1,154 @@
|
||||
/datum/category_item/player_setup_item/general/flavor
|
||||
name = "Flavor"
|
||||
sort_order = 6
|
||||
|
||||
/datum/category_item/player_setup_item/general/flavor/load_character(var/savefile/S)
|
||||
S["flavor_texts_general"] >> pref.flavor_texts["general"]
|
||||
S["flavor_texts_head"] >> pref.flavor_texts["head"]
|
||||
S["flavor_texts_face"] >> pref.flavor_texts["face"]
|
||||
S["flavor_texts_eyes"] >> pref.flavor_texts["eyes"]
|
||||
S["flavor_texts_torso"] >> pref.flavor_texts["torso"]
|
||||
S["flavor_texts_arms"] >> pref.flavor_texts["arms"]
|
||||
S["flavor_texts_hands"] >> pref.flavor_texts["hands"]
|
||||
S["flavor_texts_legs"] >> pref.flavor_texts["legs"]
|
||||
S["flavor_texts_feet"] >> pref.flavor_texts["feet"]
|
||||
S["custom_link"] >> pref.custom_link
|
||||
//Flavour text for robots.
|
||||
S["flavour_texts_robot_Default"] >> pref.flavour_texts_robot["Default"]
|
||||
for(var/module in robot_module_types)
|
||||
S["flavour_texts_robot_[module]"] >> pref.flavour_texts_robot[module]
|
||||
|
||||
/datum/category_item/player_setup_item/general/flavor/save_character(var/savefile/S)
|
||||
S["flavor_texts_general"] << pref.flavor_texts["general"]
|
||||
S["flavor_texts_head"] << pref.flavor_texts["head"]
|
||||
S["flavor_texts_face"] << pref.flavor_texts["face"]
|
||||
S["flavor_texts_eyes"] << pref.flavor_texts["eyes"]
|
||||
S["flavor_texts_torso"] << pref.flavor_texts["torso"]
|
||||
S["flavor_texts_arms"] << pref.flavor_texts["arms"]
|
||||
S["flavor_texts_hands"] << pref.flavor_texts["hands"]
|
||||
S["flavor_texts_legs"] << pref.flavor_texts["legs"]
|
||||
S["flavor_texts_feet"] << pref.flavor_texts["feet"]
|
||||
S["custom_link"] << pref.custom_link
|
||||
|
||||
S["flavour_texts_robot_Default"] << pref.flavour_texts_robot["Default"]
|
||||
for(var/module in robot_module_types)
|
||||
S["flavour_texts_robot_[module]"] << pref.flavour_texts_robot[module]
|
||||
|
||||
/datum/category_item/player_setup_item/general/flavor/sanitize_character()
|
||||
return
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/flavor/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.flavor_texts["general"] = pref.flavor_texts["general"]
|
||||
character.flavor_texts["head"] = pref.flavor_texts["head"]
|
||||
character.flavor_texts["face"] = pref.flavor_texts["face"]
|
||||
character.flavor_texts["eyes"] = pref.flavor_texts["eyes"]
|
||||
character.flavor_texts["torso"] = pref.flavor_texts["torso"]
|
||||
character.flavor_texts["arms"] = pref.flavor_texts["arms"]
|
||||
character.flavor_texts["hands"] = pref.flavor_texts["hands"]
|
||||
character.flavor_texts["legs"] = pref.flavor_texts["legs"]
|
||||
character.flavor_texts["feet"] = pref.flavor_texts["feet"]
|
||||
character.ooc_notes = pref.metadata //VOREStation Add
|
||||
character.ooc_notes_likes = pref.metadata_likes
|
||||
character.ooc_notes_dislikes = pref.metadata_dislikes
|
||||
character.custom_link = pref.custom_link
|
||||
|
||||
/datum/category_item/player_setup_item/general/flavor/content(var/mob/user)
|
||||
. += "<b>Flavor:</b><br>"
|
||||
. += "<a href='?src=\ref[src];flavor_text=open'>Set Flavor Text</a><br/>"
|
||||
. += "<a href='?src=\ref[src];flavour_text_robot=open'>Set Robot Flavor Text</a><br/>"
|
||||
. += "<a href='?src=\ref[src];custom_link=1'>Set Custom Link</a><br/>"
|
||||
|
||||
/datum/category_item/player_setup_item/general/flavor/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
if(href_list["flavor_text"])
|
||||
switch(href_list["flavor_text"])
|
||||
if("open")
|
||||
if("general")
|
||||
var/msg = strip_html_simple(tgui_input_text(usr,"Give a general description of your character. This will be shown regardless of clothings. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE)) //VOREStation Edit: separating out OOC notes
|
||||
if(CanUseTopic(user) && msg)
|
||||
pref.flavor_texts[href_list["flavor_text"]] = msg
|
||||
else
|
||||
var/msg = strip_html_simple(tgui_input_text(usr,"Set the flavor text for your [href_list["flavor_text"]]. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE))
|
||||
if(CanUseTopic(user) && msg)
|
||||
pref.flavor_texts[href_list["flavor_text"]] = msg
|
||||
SetFlavorText(user)
|
||||
return TOPIC_HANDLED
|
||||
|
||||
else if(href_list["flavour_text_robot"])
|
||||
switch(href_list["flavour_text_robot"])
|
||||
if("open")
|
||||
if("Default")
|
||||
var/msg = strip_html_simple(tgui_input_text(usr,"Set the default flavour text for your robot. It will be used for any module without individual setting. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot["Default"]), multiline = TRUE, prevent_enter = TRUE))
|
||||
if(CanUseTopic(user) && msg)
|
||||
pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg
|
||||
else
|
||||
var/msg = strip_html_simple(tgui_input_text(usr,"Set the flavour text for your robot with [href_list["flavour_text_robot"]] module. If you leave this blank, default flavour text will be used for this module. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot[href_list["flavour_text_robot"]]), multiline = TRUE, prevent_enter = TRUE))
|
||||
if(CanUseTopic(user) && msg)
|
||||
pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg
|
||||
SetFlavourTextRobot(user)
|
||||
return TOPIC_HANDLED
|
||||
else if(href_list["custom_link"])
|
||||
var/new_link = strip_html_simple(tgui_input_text(usr, "Enter a link to add on to your examine text! This should be a related image link/gallery, or things like your F-list. This is not the place for memes.", "Custom Link" , html_decode(pref.custom_link), max_length = 100, encode = TRUE, prevent_enter = TRUE))
|
||||
if(new_link && CanUseTopic(usr))
|
||||
if(length(new_link) > 100)
|
||||
to_chat(usr, "<span class = 'warning'>Your entry is too long, it must be 100 characters or less.</span>")
|
||||
return
|
||||
pref.custom_link = new_link
|
||||
log_admin("[usr]/[usr.ckey] set their custom link to [pref.custom_link]")
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/category_item/player_setup_item/general/flavor/proc/SetFlavorText(mob/user)
|
||||
var/HTML = "<body>"
|
||||
HTML += "<tt><center>"
|
||||
HTML += "<b>Set Flavor Text</b> <hr />"
|
||||
HTML += "Note: This is not *literal* flavor of your character. This is visual description of what they look like. <hr />"
|
||||
HTML += "<br></center>"
|
||||
HTML += "<a href='?src=\ref[src];flavor_text=general'>General:</a> "
|
||||
HTML += TextPreview(pref.flavor_texts["general"])
|
||||
HTML += "<br>"
|
||||
HTML += "<a href='?src=\ref[src];flavor_text=head'>Head:</a> "
|
||||
HTML += TextPreview(pref.flavor_texts["head"])
|
||||
HTML += "<br>"
|
||||
HTML += "<a href='?src=\ref[src];flavor_text=face'>Face:</a> "
|
||||
HTML += TextPreview(pref.flavor_texts["face"])
|
||||
HTML += "<br>"
|
||||
HTML += "<a href='?src=\ref[src];flavor_text=eyes'>Eyes:</a> "
|
||||
HTML += TextPreview(pref.flavor_texts["eyes"])
|
||||
HTML += "<br>"
|
||||
HTML += "<a href='?src=\ref[src];flavor_text=torso'>Body:</a> "
|
||||
HTML += TextPreview(pref.flavor_texts["torso"])
|
||||
HTML += "<br>"
|
||||
HTML += "<a href='?src=\ref[src];flavor_text=arms'>Arms:</a> "
|
||||
HTML += TextPreview(pref.flavor_texts["arms"])
|
||||
HTML += "<br>"
|
||||
HTML += "<a href='?src=\ref[src];flavor_text=hands'>Hands:</a> "
|
||||
HTML += TextPreview(pref.flavor_texts["hands"])
|
||||
HTML += "<br>"
|
||||
HTML += "<a href='?src=\ref[src];flavor_text=legs'>Legs:</a> "
|
||||
HTML += TextPreview(pref.flavor_texts["legs"])
|
||||
HTML += "<br>"
|
||||
HTML += "<a href='?src=\ref[src];flavor_text=feet'>Feet:</a> "
|
||||
HTML += TextPreview(pref.flavor_texts["feet"])
|
||||
HTML += "<br>"
|
||||
HTML += "<hr />"
|
||||
HTML += "<tt>"
|
||||
user << browse(HTML, "window=flavor_text;size=430x300")
|
||||
return
|
||||
|
||||
/datum/category_item/player_setup_item/general/flavor/proc/SetFlavourTextRobot(mob/user)
|
||||
var/HTML = "<body>"
|
||||
HTML += "<tt><center>"
|
||||
HTML += "<b>Set Robot Flavour Text</b> <hr />"
|
||||
HTML += "<br></center>"
|
||||
HTML += "<a href='?src=\ref[src];flavour_text_robot=Default'>Default:</a> "
|
||||
HTML += TextPreview(pref.flavour_texts_robot["Default"])
|
||||
HTML += "<hr />"
|
||||
for(var/module in robot_module_types)
|
||||
HTML += "<a href='?src=\ref[src];flavour_text_robot=[module]'>[module]:</a> "
|
||||
HTML += TextPreview(pref.flavour_texts_robot[module])
|
||||
HTML += "<br>"
|
||||
HTML += "<hr />"
|
||||
HTML += "<tt>"
|
||||
user << browse(HTML, "window=flavour_text_robot;size=430x300")
|
||||
return
|
||||
/datum/category_item/player_setup_item/general/flavor
|
||||
name = "Flavor"
|
||||
sort_order = 6
|
||||
|
||||
/datum/category_item/player_setup_item/general/flavor/load_character(var/savefile/S)
|
||||
S["flavor_texts_general"] >> pref.flavor_texts["general"]
|
||||
S["flavor_texts_head"] >> pref.flavor_texts["head"]
|
||||
S["flavor_texts_face"] >> pref.flavor_texts["face"]
|
||||
S["flavor_texts_eyes"] >> pref.flavor_texts["eyes"]
|
||||
S["flavor_texts_torso"] >> pref.flavor_texts["torso"]
|
||||
S["flavor_texts_arms"] >> pref.flavor_texts["arms"]
|
||||
S["flavor_texts_hands"] >> pref.flavor_texts["hands"]
|
||||
S["flavor_texts_legs"] >> pref.flavor_texts["legs"]
|
||||
S["flavor_texts_feet"] >> pref.flavor_texts["feet"]
|
||||
S["custom_link"] >> pref.custom_link
|
||||
//Flavour text for robots.
|
||||
S["flavour_texts_robot_Default"] >> pref.flavour_texts_robot["Default"]
|
||||
for(var/module in robot_module_types)
|
||||
S["flavour_texts_robot_[module]"] >> pref.flavour_texts_robot[module]
|
||||
|
||||
/datum/category_item/player_setup_item/general/flavor/save_character(var/savefile/S)
|
||||
S["flavor_texts_general"] << pref.flavor_texts["general"]
|
||||
S["flavor_texts_head"] << pref.flavor_texts["head"]
|
||||
S["flavor_texts_face"] << pref.flavor_texts["face"]
|
||||
S["flavor_texts_eyes"] << pref.flavor_texts["eyes"]
|
||||
S["flavor_texts_torso"] << pref.flavor_texts["torso"]
|
||||
S["flavor_texts_arms"] << pref.flavor_texts["arms"]
|
||||
S["flavor_texts_hands"] << pref.flavor_texts["hands"]
|
||||
S["flavor_texts_legs"] << pref.flavor_texts["legs"]
|
||||
S["flavor_texts_feet"] << pref.flavor_texts["feet"]
|
||||
S["custom_link"] << pref.custom_link
|
||||
|
||||
S["flavour_texts_robot_Default"] << pref.flavour_texts_robot["Default"]
|
||||
for(var/module in robot_module_types)
|
||||
S["flavour_texts_robot_[module]"] << pref.flavour_texts_robot[module]
|
||||
|
||||
/datum/category_item/player_setup_item/general/flavor/sanitize_character()
|
||||
return
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/general/flavor/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.flavor_texts["general"] = pref.flavor_texts["general"]
|
||||
character.flavor_texts["head"] = pref.flavor_texts["head"]
|
||||
character.flavor_texts["face"] = pref.flavor_texts["face"]
|
||||
character.flavor_texts["eyes"] = pref.flavor_texts["eyes"]
|
||||
character.flavor_texts["torso"] = pref.flavor_texts["torso"]
|
||||
character.flavor_texts["arms"] = pref.flavor_texts["arms"]
|
||||
character.flavor_texts["hands"] = pref.flavor_texts["hands"]
|
||||
character.flavor_texts["legs"] = pref.flavor_texts["legs"]
|
||||
character.flavor_texts["feet"] = pref.flavor_texts["feet"]
|
||||
character.ooc_notes = pref.metadata //VOREStation Add
|
||||
character.ooc_notes_likes = pref.metadata_likes
|
||||
character.ooc_notes_dislikes = pref.metadata_dislikes
|
||||
character.custom_link = pref.custom_link
|
||||
|
||||
/datum/category_item/player_setup_item/general/flavor/content(var/mob/user)
|
||||
. += "<b>Flavor:</b><br>"
|
||||
. += "<a href='?src=\ref[src];flavor_text=open'>Set Flavor Text</a><br/>"
|
||||
. += "<a href='?src=\ref[src];flavour_text_robot=open'>Set Robot Flavor Text</a><br/>"
|
||||
. += "<a href='?src=\ref[src];custom_link=1'>Set Custom Link</a><br/>"
|
||||
|
||||
/datum/category_item/player_setup_item/general/flavor/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
if(href_list["flavor_text"])
|
||||
switch(href_list["flavor_text"])
|
||||
if("open")
|
||||
if("general")
|
||||
var/msg = strip_html_simple(tgui_input_text(usr,"Give a general description of your character. This will be shown regardless of clothings. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE)) //VOREStation Edit: separating out OOC notes
|
||||
if(CanUseTopic(user) && msg)
|
||||
pref.flavor_texts[href_list["flavor_text"]] = msg
|
||||
else
|
||||
var/msg = strip_html_simple(tgui_input_text(usr,"Set the flavor text for your [href_list["flavor_text"]]. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE))
|
||||
if(CanUseTopic(user) && msg)
|
||||
pref.flavor_texts[href_list["flavor_text"]] = msg
|
||||
SetFlavorText(user)
|
||||
return TOPIC_HANDLED
|
||||
|
||||
else if(href_list["flavour_text_robot"])
|
||||
switch(href_list["flavour_text_robot"])
|
||||
if("open")
|
||||
if("Default")
|
||||
var/msg = strip_html_simple(tgui_input_text(usr,"Set the default flavour text for your robot. It will be used for any module without individual setting. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot["Default"]), multiline = TRUE, prevent_enter = TRUE))
|
||||
if(CanUseTopic(user) && msg)
|
||||
pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg
|
||||
else
|
||||
var/msg = strip_html_simple(tgui_input_text(usr,"Set the flavour text for your robot with [href_list["flavour_text_robot"]] module. If you leave this blank, default flavour text will be used for this module. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot[href_list["flavour_text_robot"]]), multiline = TRUE, prevent_enter = TRUE))
|
||||
if(CanUseTopic(user) && msg)
|
||||
pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg
|
||||
SetFlavourTextRobot(user)
|
||||
return TOPIC_HANDLED
|
||||
else if(href_list["custom_link"])
|
||||
var/new_link = strip_html_simple(tgui_input_text(usr, "Enter a link to add on to your examine text! This should be a related image link/gallery, or things like your F-list. This is not the place for memes.", "Custom Link" , html_decode(pref.custom_link), max_length = 100, encode = TRUE, prevent_enter = TRUE))
|
||||
if(new_link && CanUseTopic(usr))
|
||||
if(length(new_link) > 100)
|
||||
to_chat(usr, "<span class = 'warning'>Your entry is too long, it must be 100 characters or less.</span>")
|
||||
return
|
||||
pref.custom_link = new_link
|
||||
log_admin("[usr]/[usr.ckey] set their custom link to [pref.custom_link]")
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/category_item/player_setup_item/general/flavor/proc/SetFlavorText(mob/user)
|
||||
var/HTML = "<body>"
|
||||
HTML += "<tt><center>"
|
||||
HTML += "<b>Set Flavor Text</b> <hr />"
|
||||
HTML += "Note: This is not *literal* flavor of your character. This is visual description of what they look like. <hr />"
|
||||
HTML += "<br></center>"
|
||||
HTML += "<a href='?src=\ref[src];flavor_text=general'>General:</a> "
|
||||
HTML += TextPreview(pref.flavor_texts["general"])
|
||||
HTML += "<br>"
|
||||
HTML += "<a href='?src=\ref[src];flavor_text=head'>Head:</a> "
|
||||
HTML += TextPreview(pref.flavor_texts["head"])
|
||||
HTML += "<br>"
|
||||
HTML += "<a href='?src=\ref[src];flavor_text=face'>Face:</a> "
|
||||
HTML += TextPreview(pref.flavor_texts["face"])
|
||||
HTML += "<br>"
|
||||
HTML += "<a href='?src=\ref[src];flavor_text=eyes'>Eyes:</a> "
|
||||
HTML += TextPreview(pref.flavor_texts["eyes"])
|
||||
HTML += "<br>"
|
||||
HTML += "<a href='?src=\ref[src];flavor_text=torso'>Body:</a> "
|
||||
HTML += TextPreview(pref.flavor_texts["torso"])
|
||||
HTML += "<br>"
|
||||
HTML += "<a href='?src=\ref[src];flavor_text=arms'>Arms:</a> "
|
||||
HTML += TextPreview(pref.flavor_texts["arms"])
|
||||
HTML += "<br>"
|
||||
HTML += "<a href='?src=\ref[src];flavor_text=hands'>Hands:</a> "
|
||||
HTML += TextPreview(pref.flavor_texts["hands"])
|
||||
HTML += "<br>"
|
||||
HTML += "<a href='?src=\ref[src];flavor_text=legs'>Legs:</a> "
|
||||
HTML += TextPreview(pref.flavor_texts["legs"])
|
||||
HTML += "<br>"
|
||||
HTML += "<a href='?src=\ref[src];flavor_text=feet'>Feet:</a> "
|
||||
HTML += TextPreview(pref.flavor_texts["feet"])
|
||||
HTML += "<br>"
|
||||
HTML += "<hr />"
|
||||
HTML += "<tt>"
|
||||
user << browse(HTML, "window=flavor_text;size=430x300")
|
||||
return
|
||||
|
||||
/datum/category_item/player_setup_item/general/flavor/proc/SetFlavourTextRobot(mob/user)
|
||||
var/HTML = "<body>"
|
||||
HTML += "<tt><center>"
|
||||
HTML += "<b>Set Robot Flavour Text</b> <hr />"
|
||||
HTML += "<br></center>"
|
||||
HTML += "<a href='?src=\ref[src];flavour_text_robot=Default'>Default:</a> "
|
||||
HTML += TextPreview(pref.flavour_texts_robot["Default"])
|
||||
HTML += "<hr />"
|
||||
for(var/module in robot_module_types)
|
||||
HTML += "<a href='?src=\ref[src];flavour_text_robot=[module]'>[module]:</a> "
|
||||
HTML += TextPreview(pref.flavour_texts_robot[module])
|
||||
HTML += "<br>"
|
||||
HTML += "<hr />"
|
||||
HTML += "<tt>"
|
||||
user << browse(HTML, "window=flavour_text_robot;size=430x300")
|
||||
return
|
||||
|
||||
@@ -1,89 +1,89 @@
|
||||
/datum/category_item/player_setup_item/skills
|
||||
name = "Skills"
|
||||
sort_order = 1
|
||||
|
||||
/datum/category_item/player_setup_item/skills/load_character(var/savefile/S)
|
||||
S["skills"] >> pref.skills
|
||||
S["used_skillpoints"] >> pref.used_skillpoints
|
||||
S["skill_specialization"] >> pref.skill_specialization
|
||||
|
||||
/datum/category_item/player_setup_item/skills/save_character(var/savefile/S)
|
||||
S["skills"] << pref.skills
|
||||
S["used_skillpoints"] << pref.used_skillpoints
|
||||
S["skill_specialization"] << pref.skill_specialization
|
||||
|
||||
/datum/category_item/player_setup_item/skills/sanitize_character()
|
||||
if(SKILLS == null) setup_skills()
|
||||
if(!pref.skills) pref.skills = list()
|
||||
if(!pref.skills.len) pref.ZeroSkills()
|
||||
if(pref.used_skillpoints < 0) pref.used_skillpoints = 0
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/skills/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.skills = pref.skills
|
||||
character.used_skillpoints = pref.used_skillpoints
|
||||
|
||||
/datum/category_item/player_setup_item/skills/content()
|
||||
. = list()
|
||||
. += "<b>Select your Skills</b><br>"
|
||||
. += "Current skill level: <b>[pref.GetSkillClass(pref.used_skillpoints)]</b> ([pref.used_skillpoints])<br>"
|
||||
. += "<a href='?src=\ref[src];preconfigured=1'>Use preconfigured skillset</a><br>"
|
||||
. += "<table>"
|
||||
for(var/V in SKILLS)
|
||||
. += "<tr><th colspan = 5><b>[V]</b>"
|
||||
. += "</th></tr>"
|
||||
for(var/datum/skill/S in SKILLS[V])
|
||||
var/level = pref.skills[S.ID]
|
||||
. += "<tr style='text-align:left;'>"
|
||||
. += "<th><a href='?src=\ref[src];skillinfo=\ref[S]'>[S.name]</a></th>"
|
||||
. += skill_to_button(S, "Untrained", level, SKILL_NONE)
|
||||
// secondary skills don't have an amateur level
|
||||
if(S.secondary)
|
||||
. += "<th></th>"
|
||||
else
|
||||
. += skill_to_button(S, "Amateur", level, SKILL_BASIC)
|
||||
. += skill_to_button(S, "Trained", level, SKILL_ADEPT)
|
||||
. += skill_to_button(S, "Professional", level, SKILL_EXPERT)
|
||||
. += "</tr>"
|
||||
. += "</table>"
|
||||
. = jointext(.,null)
|
||||
|
||||
/datum/category_item/player_setup_item/proc/skill_to_button(var/skill, var/level_name, var/current_level, var/selection_level)
|
||||
if(current_level == selection_level)
|
||||
return "<th><span class='linkOn'>[level_name]</span></th>"
|
||||
return "<th><a href='?src=\ref[src];setskill=\ref[skill];newvalue=[selection_level]'>[level_name]</a></th>"
|
||||
|
||||
/datum/category_item/player_setup_item/skills/OnTopic(href, href_list, user)
|
||||
if(href_list["skillinfo"])
|
||||
var/datum/skill/S = locate(href_list["skillinfo"])
|
||||
var/HTML = "<b>[S.name]</b><br>[S.desc]"
|
||||
user << browse(HTML, "window=\ref[user]skillinfo")
|
||||
return TOPIC_HANDLED
|
||||
|
||||
else if(href_list["setskill"])
|
||||
var/datum/skill/S = locate(href_list["setskill"])
|
||||
var/value = text2num(href_list["newvalue"])
|
||||
pref.skills[S.ID] = value
|
||||
pref.CalculateSkillPoints()
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["preconfigured"])
|
||||
var/selected = tgui_input_list(user, "Select a skillset", "Skillset", SKILL_PRE)
|
||||
if(!selected || !CanUseTopic(user)) return
|
||||
|
||||
pref.ZeroSkills(1)
|
||||
for(var/V in SKILL_PRE[selected])
|
||||
if(V == "field")
|
||||
pref.skill_specialization = SKILL_PRE[selected]["field"]
|
||||
continue
|
||||
pref.skills[V] = SKILL_PRE[selected][V]
|
||||
pref.CalculateSkillPoints()
|
||||
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["setspecialization"])
|
||||
pref.skill_specialization = href_list["setspecialization"]
|
||||
pref.CalculateSkillPoints()
|
||||
return TOPIC_REFRESH
|
||||
|
||||
return ..()
|
||||
/datum/category_item/player_setup_item/skills
|
||||
name = "Skills"
|
||||
sort_order = 1
|
||||
|
||||
/datum/category_item/player_setup_item/skills/load_character(var/savefile/S)
|
||||
S["skills"] >> pref.skills
|
||||
S["used_skillpoints"] >> pref.used_skillpoints
|
||||
S["skill_specialization"] >> pref.skill_specialization
|
||||
|
||||
/datum/category_item/player_setup_item/skills/save_character(var/savefile/S)
|
||||
S["skills"] << pref.skills
|
||||
S["used_skillpoints"] << pref.used_skillpoints
|
||||
S["skill_specialization"] << pref.skill_specialization
|
||||
|
||||
/datum/category_item/player_setup_item/skills/sanitize_character()
|
||||
if(SKILLS == null) setup_skills()
|
||||
if(!pref.skills) pref.skills = list()
|
||||
if(!pref.skills.len) pref.ZeroSkills()
|
||||
if(pref.used_skillpoints < 0) pref.used_skillpoints = 0
|
||||
|
||||
// Moved from /datum/preferences/proc/copy_to()
|
||||
/datum/category_item/player_setup_item/skills/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.skills = pref.skills
|
||||
character.used_skillpoints = pref.used_skillpoints
|
||||
|
||||
/datum/category_item/player_setup_item/skills/content()
|
||||
. = list()
|
||||
. += "<b>Select your Skills</b><br>"
|
||||
. += "Current skill level: <b>[pref.GetSkillClass(pref.used_skillpoints)]</b> ([pref.used_skillpoints])<br>"
|
||||
. += "<a href='?src=\ref[src];preconfigured=1'>Use preconfigured skillset</a><br>"
|
||||
. += "<table>"
|
||||
for(var/V in SKILLS)
|
||||
. += "<tr><th colspan = 5><b>[V]</b>"
|
||||
. += "</th></tr>"
|
||||
for(var/datum/skill/S in SKILLS[V])
|
||||
var/level = pref.skills[S.ID]
|
||||
. += "<tr style='text-align:left;'>"
|
||||
. += "<th><a href='?src=\ref[src];skillinfo=\ref[S]'>[S.name]</a></th>"
|
||||
. += skill_to_button(S, "Untrained", level, SKILL_NONE)
|
||||
// secondary skills don't have an amateur level
|
||||
if(S.secondary)
|
||||
. += "<th></th>"
|
||||
else
|
||||
. += skill_to_button(S, "Amateur", level, SKILL_BASIC)
|
||||
. += skill_to_button(S, "Trained", level, SKILL_ADEPT)
|
||||
. += skill_to_button(S, "Professional", level, SKILL_EXPERT)
|
||||
. += "</tr>"
|
||||
. += "</table>"
|
||||
. = jointext(.,null)
|
||||
|
||||
/datum/category_item/player_setup_item/proc/skill_to_button(var/skill, var/level_name, var/current_level, var/selection_level)
|
||||
if(current_level == selection_level)
|
||||
return "<th><span class='linkOn'>[level_name]</span></th>"
|
||||
return "<th><a href='?src=\ref[src];setskill=\ref[skill];newvalue=[selection_level]'>[level_name]</a></th>"
|
||||
|
||||
/datum/category_item/player_setup_item/skills/OnTopic(href, href_list, user)
|
||||
if(href_list["skillinfo"])
|
||||
var/datum/skill/S = locate(href_list["skillinfo"])
|
||||
var/HTML = "<b>[S.name]</b><br>[S.desc]"
|
||||
user << browse(HTML, "window=\ref[user]skillinfo")
|
||||
return TOPIC_HANDLED
|
||||
|
||||
else if(href_list["setskill"])
|
||||
var/datum/skill/S = locate(href_list["setskill"])
|
||||
var/value = text2num(href_list["newvalue"])
|
||||
pref.skills[S.ID] = value
|
||||
pref.CalculateSkillPoints()
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["preconfigured"])
|
||||
var/selected = tgui_input_list(user, "Select a skillset", "Skillset", SKILL_PRE)
|
||||
if(!selected || !CanUseTopic(user)) return
|
||||
|
||||
pref.ZeroSkills(1)
|
||||
for(var/V in SKILL_PRE[selected])
|
||||
if(V == "field")
|
||||
pref.skill_specialization = SKILL_PRE[selected]["field"]
|
||||
continue
|
||||
pref.skills[V] = SKILL_PRE[selected][V]
|
||||
pref.CalculateSkillPoints()
|
||||
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["setspecialization"])
|
||||
pref.skill_specialization = href_list["setspecialization"]
|
||||
pref.CalculateSkillPoints()
|
||||
return TOPIC_REFRESH
|
||||
|
||||
return ..()
|
||||
|
||||
+498
-498
@@ -1,498 +1,498 @@
|
||||
#define SAVE_RESET -1
|
||||
|
||||
var/list/preferences_datums = list()
|
||||
|
||||
/datum/preferences
|
||||
//doohickeys for savefiles
|
||||
var/path
|
||||
var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used
|
||||
var/savefile_version = 0
|
||||
|
||||
//non-preference stuff
|
||||
var/warns = 0
|
||||
var/muted = 0
|
||||
var/last_ip
|
||||
var/last_id
|
||||
|
||||
//game-preferences
|
||||
var/lastchangelog = "" //Saved changlog filesize to detect if there was a change
|
||||
var/ooccolor = "#010000" //Whatever this is set to acts as 'reset' color and is thus unusable as an actual custom color
|
||||
var/be_special = 0 //Special role selection
|
||||
var/UI_style = "Midnight"
|
||||
var/UI_style_color = "#ffffff"
|
||||
var/UI_style_alpha = 255
|
||||
var/tooltipstyle = "Midnight" //Style for popup tooltips
|
||||
var/client_fps = 40
|
||||
var/ambience_freq = 5 // How often we're playing repeating ambience to a client.
|
||||
var/ambience_chance = 35 // What's the % chance we'll play ambience (in conjunction with the above frequency)
|
||||
|
||||
var/tgui_fancy = TRUE
|
||||
var/tgui_lock = FALSE
|
||||
var/tgui_input_mode = FALSE // All the Input Boxes (Text,Number,List,Alert)
|
||||
var/tgui_large_buttons = TRUE
|
||||
var/tgui_swapped_buttons = FALSE
|
||||
var/obfuscate_key = FALSE
|
||||
var/obfuscate_job = FALSE
|
||||
var/chat_timestamp = FALSE
|
||||
var/throwmode_loud = FALSE
|
||||
|
||||
//character preferences
|
||||
var/real_name //our character's name
|
||||
var/be_random_name = 0 //whether we are a random name every round
|
||||
var/nickname //our character's nickname
|
||||
var/age = 30 //age of character
|
||||
var/bday_month = 0 //Birthday month
|
||||
var/bday_day = 0 //Birthday day
|
||||
var/last_birthday_notification = 0 //The last year we were notified about our birthday
|
||||
var/bday_announce = FALSE //Public announcement for birthdays
|
||||
var/spawnpoint = "Arrivals Shuttle" //where this character will spawn (0-2).
|
||||
var/b_type = "A+" //blood type (not-chooseable)
|
||||
var/blood_reagents = "default" //blood restoration reagents
|
||||
var/backbag = 2 //backpack type
|
||||
var/pdachoice = 1 //PDA type
|
||||
var/h_style = "Bald" //Hair type
|
||||
var/r_hair = 0 //Hair color
|
||||
var/g_hair = 0 //Hair color
|
||||
var/b_hair = 0 //Hair color
|
||||
var/grad_style = "none" //Gradient style
|
||||
var/r_grad = 0 //Gradient color
|
||||
var/g_grad = 0 //Gradient color
|
||||
var/b_grad = 0 //Gradient color
|
||||
var/f_style = "Shaved" //Face hair type
|
||||
var/r_facial = 0 //Face hair color
|
||||
var/g_facial = 0 //Face hair color
|
||||
var/b_facial = 0 //Face hair color
|
||||
var/s_tone = -75 //Skin tone
|
||||
var/r_skin = 238 //Skin color // Vorestation edit, so color multi sprites can aren't BLACK AS THE VOID by default.
|
||||
var/g_skin = 206 //Skin color // Vorestation edit, so color multi sprites can aren't BLACK AS THE VOID by default.
|
||||
var/b_skin = 179 //Skin color // Vorestation edit, so color multi sprites can aren't BLACK AS THE VOID by default.
|
||||
var/r_eyes = 0 //Eye color
|
||||
var/g_eyes = 0 //Eye color
|
||||
var/b_eyes = 0 //Eye color
|
||||
var/species = SPECIES_HUMAN //Species datum to use.
|
||||
var/species_preview //Used for the species selection window.
|
||||
var/list/alternate_languages = list() //Secondary language(s)
|
||||
var/list/language_prefixes = list() //Language prefix keys
|
||||
var/list/language_custom_keys = list() //Language custom call keys
|
||||
var/list/gear //Left in for Legacy reasons, will no longer save.
|
||||
var/list/gear_list = list() //Custom/fluff item loadouts.
|
||||
var/gear_slot = 1 //The current gear save slot
|
||||
var/list/traits //Traits which modifier characters for better or worse (mostly worse).
|
||||
var/synth_color = 0 //Lets normally uncolorable synth parts be colorable.
|
||||
var/r_synth //Used with synth_color to color synth parts that normaly can't be colored.
|
||||
var/g_synth //Same as above
|
||||
var/b_synth //Same as above
|
||||
var/synth_markings = 1 //Enable/disable markings on synth parts. //VOREStation Edit - 1 by default
|
||||
var/digitigrade = 0
|
||||
|
||||
//Some faction information.
|
||||
var/home_system = "Unset" //Current home or residence.
|
||||
var/birthplace = "Unset" //Location of birth.
|
||||
var/citizenship = "None" //Government or similar entity with which you hold citizenship.
|
||||
var/faction = "None" //General associated faction.
|
||||
var/religion = "None" //Religious association.
|
||||
var/antag_faction = "None" //Antag associated faction.
|
||||
var/antag_vis = "Hidden" //How visible antag association is to others.
|
||||
|
||||
//Mob preview
|
||||
var/list/char_render_holders //Should only be a key-value list of north/south/east/west = obj/screen.
|
||||
var/static/list/preview_screen_locs = list(
|
||||
"1" = "character_preview_map:2,7",
|
||||
"2" = "character_preview_map:2,5",
|
||||
"4" = "character_preview_map:2,3",
|
||||
"8" = "character_preview_map:2,1",
|
||||
"BG" = "character_preview_map:1,1 to 3,8",
|
||||
"PMH" = "character_preview_map:2,7"
|
||||
)
|
||||
|
||||
//Jobs, uses bitflags
|
||||
var/job_civilian_high = 0
|
||||
var/job_civilian_med = 0
|
||||
var/job_civilian_low = 0
|
||||
|
||||
var/job_medsci_high = 0
|
||||
var/job_medsci_med = 0
|
||||
var/job_medsci_low = 0
|
||||
|
||||
var/job_engsec_high = 0
|
||||
var/job_engsec_med = 0
|
||||
var/job_engsec_low = 0
|
||||
|
||||
//Keeps track of preferrence for not getting any wanted jobs
|
||||
var/alternate_option = 1
|
||||
|
||||
var/used_skillpoints = 0
|
||||
var/skill_specialization = null
|
||||
var/list/skills = list() // skills can range from 0 to 3
|
||||
|
||||
// maps each organ to either null(intact), "cyborg" or "amputated"
|
||||
// will probably not be able to do this for head and torso ;)
|
||||
var/list/organ_data = list()
|
||||
var/list/rlimb_data = list()
|
||||
var/list/player_alt_titles = new() // the default name of a job like "Medical Doctor"
|
||||
|
||||
var/list/body_markings = list() // "name" = "#rgbcolor" //VOREStation Edit: "name" = list(BP_HEAD = list("on" = <enabled>, "color" = "#rgbcolor"), BP_TORSO = ...)
|
||||
|
||||
var/list/flavor_texts = list()
|
||||
var/list/flavour_texts_robot = list()
|
||||
var/custom_link = null
|
||||
|
||||
var/list/body_descriptors = list()
|
||||
|
||||
var/med_record = ""
|
||||
var/sec_record = ""
|
||||
var/gen_record = ""
|
||||
var/exploit_record = ""
|
||||
var/disabilities = 0
|
||||
|
||||
var/economic_status = "Average"
|
||||
|
||||
var/uplinklocation = "PDA"
|
||||
|
||||
// OOC Metadata:
|
||||
var/metadata = ""
|
||||
var/metadata_likes = ""
|
||||
var/metadata_dislikes = ""
|
||||
var/list/ignored_players = list()
|
||||
|
||||
var/client/client = null
|
||||
var/client_ckey = null
|
||||
|
||||
// Communicator identity data
|
||||
var/communicator_visibility = 0
|
||||
|
||||
/// Default ringtone for character; if blank, use job default.
|
||||
var/ringtone = null
|
||||
|
||||
var/datum/category_collection/player_setup_collection/player_setup
|
||||
var/datum/browser/panel
|
||||
|
||||
var/lastnews // Hash of last seen lobby news content.
|
||||
var/lastlorenews //ID of last seen lore news article.
|
||||
|
||||
var/examine_text_mode = 0 // Just examine text, include usage (description_info), switch to examine panel.
|
||||
var/multilingual_mode = 0 // Default behaviour, delimiter-key-space, delimiter-key-delimiter, off
|
||||
|
||||
var/list/volume_channels = list()
|
||||
|
||||
///If they are currently in the process of swapping slots, don't let them open 999 windows for it and get confused
|
||||
var/selecting_slots = FALSE
|
||||
|
||||
|
||||
/datum/preferences/New(client/C)
|
||||
player_setup = new(src)
|
||||
set_biological_gender(pick(MALE, FEMALE))
|
||||
real_name = random_name(identifying_gender,species)
|
||||
b_type = RANDOM_BLOOD_TYPE
|
||||
|
||||
gear = list()
|
||||
gear_list = list()
|
||||
gear_slot = 1
|
||||
|
||||
if(istype(C))
|
||||
client = C
|
||||
client_ckey = C.ckey
|
||||
if(!IsGuestKey(C.key))
|
||||
load_path(C.ckey)
|
||||
if(load_preferences())
|
||||
load_character()
|
||||
|
||||
|
||||
/datum/preferences/Destroy()
|
||||
. = ..()
|
||||
QDEL_LIST_ASSOC_VAL(char_render_holders)
|
||||
|
||||
/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
|
||||
|
||||
/datum/preferences/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
|
||||
|
||||
/datum/preferences/proc/GetSkillClass(points)
|
||||
return CalculateSkillClass(points, age)
|
||||
|
||||
/proc/CalculateSkillClass(points, age)
|
||||
if(points <= 0) return "Unconfigured"
|
||||
// skill classes describe how your character compares in total 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
|
||||
switch(points)
|
||||
if(-1000 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"
|
||||
|
||||
/datum/preferences/proc/ShowChoices(mob/user)
|
||||
if(!user || !user.client) return
|
||||
|
||||
if(!get_mob_by_key(client_ckey))
|
||||
to_chat(user, "<span class='danger'>No mob exists for the given client!</span>")
|
||||
return
|
||||
|
||||
if(!char_render_holders)
|
||||
update_preview_icon()
|
||||
show_character_previews()
|
||||
|
||||
var/dat = "<html><body><center>"
|
||||
|
||||
if(path)
|
||||
dat += "Slot - "
|
||||
dat += "<a href='?src=\ref[src];load=1'>Load slot</a> - "
|
||||
dat += "<a href='?src=\ref[src];save=1'>Save slot</a> - "
|
||||
dat += "<a href='?src=\ref[src];reload=1'>Reload slot</a> - "
|
||||
dat += "<a href='?src=\ref[src];resetslot=1'>Reset slot</a> - "
|
||||
dat += "<a href='?src=\ref[src];copy=1'>Copy slot</a>"
|
||||
|
||||
else
|
||||
dat += "Please create an account to save your preferences."
|
||||
|
||||
dat += "<br>"
|
||||
dat += player_setup.header()
|
||||
dat += "<br><HR></center>"
|
||||
dat += player_setup.content(user)
|
||||
|
||||
dat += "</html></body>"
|
||||
//user << browse(dat, "window=preferences;size=635x736")
|
||||
winshow(user, "preferences_window", TRUE)
|
||||
var/datum/browser/popup = new(user, "preferences_browser", "Character Setup", 800, 800)
|
||||
popup.set_content(dat)
|
||||
popup.open(FALSE) // Skip registring onclose on the browser pane
|
||||
onclose(user, "preferences_window", src) // We want to register on the window itself
|
||||
|
||||
/datum/preferences/proc/update_character_previews(mutable_appearance/MA)
|
||||
if(!client)
|
||||
return
|
||||
|
||||
var/obj/screen/setup_preview/pm_helper/PMH = LAZYACCESS(char_render_holders, "PMH")
|
||||
if(!PMH)
|
||||
PMH = new
|
||||
LAZYSET(char_render_holders, "PMH", PMH)
|
||||
client.screen |= PMH
|
||||
PMH.screen_loc = preview_screen_locs["PMH"]
|
||||
|
||||
var/obj/screen/setup_preview/bg/BG = LAZYACCESS(char_render_holders, "BG")
|
||||
if(!BG)
|
||||
BG = new
|
||||
BG.plane = TURF_PLANE
|
||||
BG.icon = 'icons/effects/setup_backgrounds_vr.dmi'
|
||||
BG.pref = src
|
||||
LAZYSET(char_render_holders, "BG", BG)
|
||||
client.screen |= BG
|
||||
BG.icon_state = bgstate
|
||||
BG.screen_loc = preview_screen_locs["BG"]
|
||||
|
||||
for(var/D in global.cardinal)
|
||||
var/obj/screen/setup_preview/O = LAZYACCESS(char_render_holders, "[D]")
|
||||
if(!O)
|
||||
O = new
|
||||
O.pref = src
|
||||
LAZYSET(char_render_holders, "[D]", O)
|
||||
client.screen |= O
|
||||
O.appearance = MA
|
||||
O.dir = D
|
||||
O.screen_loc = preview_screen_locs["[D]"]
|
||||
|
||||
/datum/preferences/proc/show_character_previews()
|
||||
if(!client || !char_render_holders)
|
||||
return
|
||||
for(var/render_holder in char_render_holders)
|
||||
client.screen |= char_render_holders[render_holder]
|
||||
|
||||
/datum/preferences/proc/clear_character_previews()
|
||||
for(var/index in char_render_holders)
|
||||
var/obj/screen/S = char_render_holders[index]
|
||||
client?.screen -= S
|
||||
qdel(S)
|
||||
char_render_holders = null
|
||||
|
||||
/datum/preferences/proc/process_link(mob/user, list/href_list)
|
||||
if(!user) return
|
||||
|
||||
if(!istype(user, /mob/new_player)) return
|
||||
|
||||
if(href_list["preference"] == "open_whitelist_forum")
|
||||
if(config.forumurl)
|
||||
user << link(config.forumurl)
|
||||
else
|
||||
to_chat(user, "<span class='danger'>The forum URL is not set in the server configuration.</span>")
|
||||
return
|
||||
ShowChoices(usr)
|
||||
return 1
|
||||
|
||||
/datum/preferences/Topic(href, list/href_list)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(href_list["save"])
|
||||
save_preferences()
|
||||
save_character()
|
||||
else if(href_list["reload"])
|
||||
load_preferences()
|
||||
load_character()
|
||||
attempt_vr(client.prefs_vr,"load_vore","") //VOREStation Edit
|
||||
sanitize_preferences()
|
||||
else if(href_list["load"])
|
||||
if(!IsGuestKey(usr.key))
|
||||
open_load_dialog(usr)
|
||||
return 1
|
||||
else if(href_list["resetslot"])
|
||||
if("Yes" != tgui_alert(usr, "This will reset the current slot. Continue?", "Reset current slot?", list("No", "Yes")))
|
||||
return 0
|
||||
if("Yes" != tgui_alert(usr, "Are you completely sure that you want to reset this character slot?", "Reset current slot?", list("No", "Yes")))
|
||||
return 0
|
||||
load_character(SAVE_RESET)
|
||||
sanitize_preferences()
|
||||
else if(href_list["copy"])
|
||||
if(!IsGuestKey(usr.key))
|
||||
open_copy_dialog(usr)
|
||||
return 1
|
||||
else if(href_list["close"])
|
||||
// User closed preferences window, cleanup anything we need to.
|
||||
clear_character_previews()
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
ShowChoices(usr)
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/copy_to(mob/living/carbon/human/character, icon_updates = TRUE)
|
||||
// Sanitizing rather than saving as someone might still be editing when copy_to occurs.
|
||||
player_setup.sanitize_setup()
|
||||
|
||||
// This needs to happen before anything else becuase it sets some variables.
|
||||
character.set_species(species)
|
||||
// Special Case: This references variables owned by two different datums, so do it here.
|
||||
if(be_random_name)
|
||||
real_name = random_name(identifying_gender,species)
|
||||
|
||||
// Ask the preferences datums to apply their own settings to the new mob
|
||||
player_setup.copy_to_mob(character)
|
||||
|
||||
// VOREStation Edit - Sync up all their organs and species one final time
|
||||
character.force_update_organs()
|
||||
|
||||
if(icon_updates)
|
||||
character.force_update_limbs()
|
||||
character.update_icons_body()
|
||||
character.update_mutations()
|
||||
character.update_underwear()
|
||||
character.update_hair()
|
||||
|
||||
if(LAZYLEN(character.descriptors))
|
||||
for(var/entry in body_descriptors)
|
||||
character.descriptors[entry] = body_descriptors[entry]
|
||||
|
||||
/datum/preferences/proc/open_load_dialog(mob/user)
|
||||
if(selecting_slots)
|
||||
to_chat(user, "<span class='warning'>You already have a slot selection dialog open!</span>")
|
||||
return
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S)
|
||||
error("Somehow missing savefile path?! [path]")
|
||||
return
|
||||
|
||||
var/name
|
||||
var/nickname //vorestation edit - This set appends nicknames to the save slot
|
||||
var/list/charlist = list()
|
||||
var/default //VOREStation edit
|
||||
for(var/i=1, i<= config.character_slots, i++)
|
||||
S.cd = "/character[i]"
|
||||
S["real_name"] >> name
|
||||
S["nickname"] >> nickname //vorestation edit
|
||||
if(!name)
|
||||
name = "[i] - \[Unused Slot\]"
|
||||
else if(i == default_slot)
|
||||
name = "►[i] - [name]"
|
||||
else
|
||||
name = "[i] - [name]"
|
||||
if (i == default_slot) //VOREStation edit
|
||||
default = "[name][nickname ? " ([nickname])" : ""]"
|
||||
charlist["[name][nickname ? " ([nickname])" : ""]"] = i
|
||||
|
||||
selecting_slots = TRUE
|
||||
var/choice = tgui_input_list(user, "Select a character to load:", "Load Slot", charlist, default)
|
||||
selecting_slots = FALSE
|
||||
if(!choice)
|
||||
return
|
||||
|
||||
var/slotnum = charlist[choice]
|
||||
if(!slotnum)
|
||||
error("Player picked [choice] slot to load, but that wasn't one we sent.")
|
||||
return
|
||||
|
||||
load_character(slotnum)
|
||||
attempt_vr(user.client?.prefs_vr,"load_vore","") //VOREStation Edit
|
||||
sanitize_preferences()
|
||||
ShowChoices(user)
|
||||
|
||||
/datum/preferences/proc/open_copy_dialog(mob/user)
|
||||
if(selecting_slots)
|
||||
to_chat(user, "<span class='warning'>You already have a slot selection dialog open!</span>")
|
||||
return
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S)
|
||||
error("Somehow missing savefile path?! [path]")
|
||||
return
|
||||
|
||||
var/name
|
||||
var/nickname //vorestation edit - This set appends nicknames to the save slot
|
||||
var/list/charlist = list()
|
||||
for(var/i=1, i<= config.character_slots, i++)
|
||||
S.cd = "/character[i]"
|
||||
S["real_name"] >> name
|
||||
S["nickname"] >> nickname //vorestation edit
|
||||
if(!name)
|
||||
name = "[i] - \[Unused Slot\]"
|
||||
if(i == default_slot)
|
||||
name = "►[i] - [name]"
|
||||
else
|
||||
name = "[i] - [name]"
|
||||
charlist["[name][nickname ? " ([nickname])" : ""]"] = i
|
||||
|
||||
selecting_slots = TRUE
|
||||
var/choice = tgui_input_list(user, "Select a character to COPY TO:", "Copy Slot", charlist)
|
||||
selecting_slots = FALSE
|
||||
if(!choice)
|
||||
return
|
||||
|
||||
var/slotnum = charlist[choice]
|
||||
if(!slotnum)
|
||||
error("Player picked [choice] slot to copy to, but that wasn't one we sent.")
|
||||
return
|
||||
|
||||
overwrite_character(slotnum)
|
||||
sanitize_preferences()
|
||||
ShowChoices(user)
|
||||
#define SAVE_RESET -1
|
||||
|
||||
var/list/preferences_datums = list()
|
||||
|
||||
/datum/preferences
|
||||
//doohickeys for savefiles
|
||||
var/path
|
||||
var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used
|
||||
var/savefile_version = 0
|
||||
|
||||
//non-preference stuff
|
||||
var/warns = 0
|
||||
var/muted = 0
|
||||
var/last_ip
|
||||
var/last_id
|
||||
|
||||
//game-preferences
|
||||
var/lastchangelog = "" //Saved changlog filesize to detect if there was a change
|
||||
var/ooccolor = "#010000" //Whatever this is set to acts as 'reset' color and is thus unusable as an actual custom color
|
||||
var/be_special = 0 //Special role selection
|
||||
var/UI_style = "Midnight"
|
||||
var/UI_style_color = "#ffffff"
|
||||
var/UI_style_alpha = 255
|
||||
var/tooltipstyle = "Midnight" //Style for popup tooltips
|
||||
var/client_fps = 40
|
||||
var/ambience_freq = 5 // How often we're playing repeating ambience to a client.
|
||||
var/ambience_chance = 35 // What's the % chance we'll play ambience (in conjunction with the above frequency)
|
||||
|
||||
var/tgui_fancy = TRUE
|
||||
var/tgui_lock = FALSE
|
||||
var/tgui_input_mode = FALSE // All the Input Boxes (Text,Number,List,Alert)
|
||||
var/tgui_large_buttons = TRUE
|
||||
var/tgui_swapped_buttons = FALSE
|
||||
var/obfuscate_key = FALSE
|
||||
var/obfuscate_job = FALSE
|
||||
var/chat_timestamp = FALSE
|
||||
var/throwmode_loud = FALSE
|
||||
|
||||
//character preferences
|
||||
var/real_name //our character's name
|
||||
var/be_random_name = 0 //whether we are a random name every round
|
||||
var/nickname //our character's nickname
|
||||
var/age = 30 //age of character
|
||||
var/bday_month = 0 //Birthday month
|
||||
var/bday_day = 0 //Birthday day
|
||||
var/last_birthday_notification = 0 //The last year we were notified about our birthday
|
||||
var/bday_announce = FALSE //Public announcement for birthdays
|
||||
var/spawnpoint = "Arrivals Shuttle" //where this character will spawn (0-2).
|
||||
var/b_type = "A+" //blood type (not-chooseable)
|
||||
var/blood_reagents = "default" //blood restoration reagents
|
||||
var/backbag = 2 //backpack type
|
||||
var/pdachoice = 1 //PDA type
|
||||
var/h_style = "Bald" //Hair type
|
||||
var/r_hair = 0 //Hair color
|
||||
var/g_hair = 0 //Hair color
|
||||
var/b_hair = 0 //Hair color
|
||||
var/grad_style = "none" //Gradient style
|
||||
var/r_grad = 0 //Gradient color
|
||||
var/g_grad = 0 //Gradient color
|
||||
var/b_grad = 0 //Gradient color
|
||||
var/f_style = "Shaved" //Face hair type
|
||||
var/r_facial = 0 //Face hair color
|
||||
var/g_facial = 0 //Face hair color
|
||||
var/b_facial = 0 //Face hair color
|
||||
var/s_tone = -75 //Skin tone
|
||||
var/r_skin = 238 //Skin color // Vorestation edit, so color multi sprites can aren't BLACK AS THE VOID by default.
|
||||
var/g_skin = 206 //Skin color // Vorestation edit, so color multi sprites can aren't BLACK AS THE VOID by default.
|
||||
var/b_skin = 179 //Skin color // Vorestation edit, so color multi sprites can aren't BLACK AS THE VOID by default.
|
||||
var/r_eyes = 0 //Eye color
|
||||
var/g_eyes = 0 //Eye color
|
||||
var/b_eyes = 0 //Eye color
|
||||
var/species = SPECIES_HUMAN //Species datum to use.
|
||||
var/species_preview //Used for the species selection window.
|
||||
var/list/alternate_languages = list() //Secondary language(s)
|
||||
var/list/language_prefixes = list() //Language prefix keys
|
||||
var/list/language_custom_keys = list() //Language custom call keys
|
||||
var/list/gear //Left in for Legacy reasons, will no longer save.
|
||||
var/list/gear_list = list() //Custom/fluff item loadouts.
|
||||
var/gear_slot = 1 //The current gear save slot
|
||||
var/list/traits //Traits which modifier characters for better or worse (mostly worse).
|
||||
var/synth_color = 0 //Lets normally uncolorable synth parts be colorable.
|
||||
var/r_synth //Used with synth_color to color synth parts that normaly can't be colored.
|
||||
var/g_synth //Same as above
|
||||
var/b_synth //Same as above
|
||||
var/synth_markings = 1 //Enable/disable markings on synth parts. //VOREStation Edit - 1 by default
|
||||
var/digitigrade = 0
|
||||
|
||||
//Some faction information.
|
||||
var/home_system = "Unset" //Current home or residence.
|
||||
var/birthplace = "Unset" //Location of birth.
|
||||
var/citizenship = "None" //Government or similar entity with which you hold citizenship.
|
||||
var/faction = "None" //General associated faction.
|
||||
var/religion = "None" //Religious association.
|
||||
var/antag_faction = "None" //Antag associated faction.
|
||||
var/antag_vis = "Hidden" //How visible antag association is to others.
|
||||
|
||||
//Mob preview
|
||||
var/list/char_render_holders //Should only be a key-value list of north/south/east/west = obj/screen.
|
||||
var/static/list/preview_screen_locs = list(
|
||||
"1" = "character_preview_map:2,7",
|
||||
"2" = "character_preview_map:2,5",
|
||||
"4" = "character_preview_map:2,3",
|
||||
"8" = "character_preview_map:2,1",
|
||||
"BG" = "character_preview_map:1,1 to 3,8",
|
||||
"PMH" = "character_preview_map:2,7"
|
||||
)
|
||||
|
||||
//Jobs, uses bitflags
|
||||
var/job_civilian_high = 0
|
||||
var/job_civilian_med = 0
|
||||
var/job_civilian_low = 0
|
||||
|
||||
var/job_medsci_high = 0
|
||||
var/job_medsci_med = 0
|
||||
var/job_medsci_low = 0
|
||||
|
||||
var/job_engsec_high = 0
|
||||
var/job_engsec_med = 0
|
||||
var/job_engsec_low = 0
|
||||
|
||||
//Keeps track of preferrence for not getting any wanted jobs
|
||||
var/alternate_option = 1
|
||||
|
||||
var/used_skillpoints = 0
|
||||
var/skill_specialization = null
|
||||
var/list/skills = list() // skills can range from 0 to 3
|
||||
|
||||
// maps each organ to either null(intact), "cyborg" or "amputated"
|
||||
// will probably not be able to do this for head and torso ;)
|
||||
var/list/organ_data = list()
|
||||
var/list/rlimb_data = list()
|
||||
var/list/player_alt_titles = new() // the default name of a job like "Medical Doctor"
|
||||
|
||||
var/list/body_markings = list() // "name" = "#rgbcolor" //VOREStation Edit: "name" = list(BP_HEAD = list("on" = <enabled>, "color" = "#rgbcolor"), BP_TORSO = ...)
|
||||
|
||||
var/list/flavor_texts = list()
|
||||
var/list/flavour_texts_robot = list()
|
||||
var/custom_link = null
|
||||
|
||||
var/list/body_descriptors = list()
|
||||
|
||||
var/med_record = ""
|
||||
var/sec_record = ""
|
||||
var/gen_record = ""
|
||||
var/exploit_record = ""
|
||||
var/disabilities = 0
|
||||
|
||||
var/economic_status = "Average"
|
||||
|
||||
var/uplinklocation = "PDA"
|
||||
|
||||
// OOC Metadata:
|
||||
var/metadata = ""
|
||||
var/metadata_likes = ""
|
||||
var/metadata_dislikes = ""
|
||||
var/list/ignored_players = list()
|
||||
|
||||
var/client/client = null
|
||||
var/client_ckey = null
|
||||
|
||||
// Communicator identity data
|
||||
var/communicator_visibility = 0
|
||||
|
||||
/// Default ringtone for character; if blank, use job default.
|
||||
var/ringtone = null
|
||||
|
||||
var/datum/category_collection/player_setup_collection/player_setup
|
||||
var/datum/browser/panel
|
||||
|
||||
var/lastnews // Hash of last seen lobby news content.
|
||||
var/lastlorenews //ID of last seen lore news article.
|
||||
|
||||
var/examine_text_mode = 0 // Just examine text, include usage (description_info), switch to examine panel.
|
||||
var/multilingual_mode = 0 // Default behaviour, delimiter-key-space, delimiter-key-delimiter, off
|
||||
|
||||
var/list/volume_channels = list()
|
||||
|
||||
///If they are currently in the process of swapping slots, don't let them open 999 windows for it and get confused
|
||||
var/selecting_slots = FALSE
|
||||
|
||||
|
||||
/datum/preferences/New(client/C)
|
||||
player_setup = new(src)
|
||||
set_biological_gender(pick(MALE, FEMALE))
|
||||
real_name = random_name(identifying_gender,species)
|
||||
b_type = RANDOM_BLOOD_TYPE
|
||||
|
||||
gear = list()
|
||||
gear_list = list()
|
||||
gear_slot = 1
|
||||
|
||||
if(istype(C))
|
||||
client = C
|
||||
client_ckey = C.ckey
|
||||
if(!IsGuestKey(C.key))
|
||||
load_path(C.ckey)
|
||||
if(load_preferences())
|
||||
load_character()
|
||||
|
||||
|
||||
/datum/preferences/Destroy()
|
||||
. = ..()
|
||||
QDEL_LIST_ASSOC_VAL(char_render_holders)
|
||||
|
||||
/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
|
||||
|
||||
/datum/preferences/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
|
||||
|
||||
/datum/preferences/proc/GetSkillClass(points)
|
||||
return CalculateSkillClass(points, age)
|
||||
|
||||
/proc/CalculateSkillClass(points, age)
|
||||
if(points <= 0) return "Unconfigured"
|
||||
// skill classes describe how your character compares in total 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
|
||||
switch(points)
|
||||
if(-1000 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"
|
||||
|
||||
/datum/preferences/proc/ShowChoices(mob/user)
|
||||
if(!user || !user.client) return
|
||||
|
||||
if(!get_mob_by_key(client_ckey))
|
||||
to_chat(user, "<span class='danger'>No mob exists for the given client!</span>")
|
||||
return
|
||||
|
||||
if(!char_render_holders)
|
||||
update_preview_icon()
|
||||
show_character_previews()
|
||||
|
||||
var/dat = "<html><body><center>"
|
||||
|
||||
if(path)
|
||||
dat += "Slot - "
|
||||
dat += "<a href='?src=\ref[src];load=1'>Load slot</a> - "
|
||||
dat += "<a href='?src=\ref[src];save=1'>Save slot</a> - "
|
||||
dat += "<a href='?src=\ref[src];reload=1'>Reload slot</a> - "
|
||||
dat += "<a href='?src=\ref[src];resetslot=1'>Reset slot</a> - "
|
||||
dat += "<a href='?src=\ref[src];copy=1'>Copy slot</a>"
|
||||
|
||||
else
|
||||
dat += "Please create an account to save your preferences."
|
||||
|
||||
dat += "<br>"
|
||||
dat += player_setup.header()
|
||||
dat += "<br><HR></center>"
|
||||
dat += player_setup.content(user)
|
||||
|
||||
dat += "</html></body>"
|
||||
//user << browse(dat, "window=preferences;size=635x736")
|
||||
winshow(user, "preferences_window", TRUE)
|
||||
var/datum/browser/popup = new(user, "preferences_browser", "Character Setup", 800, 800)
|
||||
popup.set_content(dat)
|
||||
popup.open(FALSE) // Skip registring onclose on the browser pane
|
||||
onclose(user, "preferences_window", src) // We want to register on the window itself
|
||||
|
||||
/datum/preferences/proc/update_character_previews(mutable_appearance/MA)
|
||||
if(!client)
|
||||
return
|
||||
|
||||
var/obj/screen/setup_preview/pm_helper/PMH = LAZYACCESS(char_render_holders, "PMH")
|
||||
if(!PMH)
|
||||
PMH = new
|
||||
LAZYSET(char_render_holders, "PMH", PMH)
|
||||
client.screen |= PMH
|
||||
PMH.screen_loc = preview_screen_locs["PMH"]
|
||||
|
||||
var/obj/screen/setup_preview/bg/BG = LAZYACCESS(char_render_holders, "BG")
|
||||
if(!BG)
|
||||
BG = new
|
||||
BG.plane = TURF_PLANE
|
||||
BG.icon = 'icons/effects/setup_backgrounds_vr.dmi'
|
||||
BG.pref = src
|
||||
LAZYSET(char_render_holders, "BG", BG)
|
||||
client.screen |= BG
|
||||
BG.icon_state = bgstate
|
||||
BG.screen_loc = preview_screen_locs["BG"]
|
||||
|
||||
for(var/D in global.cardinal)
|
||||
var/obj/screen/setup_preview/O = LAZYACCESS(char_render_holders, "[D]")
|
||||
if(!O)
|
||||
O = new
|
||||
O.pref = src
|
||||
LAZYSET(char_render_holders, "[D]", O)
|
||||
client.screen |= O
|
||||
O.appearance = MA
|
||||
O.dir = D
|
||||
O.screen_loc = preview_screen_locs["[D]"]
|
||||
|
||||
/datum/preferences/proc/show_character_previews()
|
||||
if(!client || !char_render_holders)
|
||||
return
|
||||
for(var/render_holder in char_render_holders)
|
||||
client.screen |= char_render_holders[render_holder]
|
||||
|
||||
/datum/preferences/proc/clear_character_previews()
|
||||
for(var/index in char_render_holders)
|
||||
var/obj/screen/S = char_render_holders[index]
|
||||
client?.screen -= S
|
||||
qdel(S)
|
||||
char_render_holders = null
|
||||
|
||||
/datum/preferences/proc/process_link(mob/user, list/href_list)
|
||||
if(!user) return
|
||||
|
||||
if(!istype(user, /mob/new_player)) return
|
||||
|
||||
if(href_list["preference"] == "open_whitelist_forum")
|
||||
if(config.forumurl)
|
||||
user << link(config.forumurl)
|
||||
else
|
||||
to_chat(user, "<span class='danger'>The forum URL is not set in the server configuration.</span>")
|
||||
return
|
||||
ShowChoices(usr)
|
||||
return 1
|
||||
|
||||
/datum/preferences/Topic(href, list/href_list)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(href_list["save"])
|
||||
save_preferences()
|
||||
save_character()
|
||||
else if(href_list["reload"])
|
||||
load_preferences()
|
||||
load_character()
|
||||
attempt_vr(client.prefs_vr,"load_vore","") //VOREStation Edit
|
||||
sanitize_preferences()
|
||||
else if(href_list["load"])
|
||||
if(!IsGuestKey(usr.key))
|
||||
open_load_dialog(usr)
|
||||
return 1
|
||||
else if(href_list["resetslot"])
|
||||
if("Yes" != tgui_alert(usr, "This will reset the current slot. Continue?", "Reset current slot?", list("No", "Yes")))
|
||||
return 0
|
||||
if("Yes" != tgui_alert(usr, "Are you completely sure that you want to reset this character slot?", "Reset current slot?", list("No", "Yes")))
|
||||
return 0
|
||||
load_character(SAVE_RESET)
|
||||
sanitize_preferences()
|
||||
else if(href_list["copy"])
|
||||
if(!IsGuestKey(usr.key))
|
||||
open_copy_dialog(usr)
|
||||
return 1
|
||||
else if(href_list["close"])
|
||||
// User closed preferences window, cleanup anything we need to.
|
||||
clear_character_previews()
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
ShowChoices(usr)
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/copy_to(mob/living/carbon/human/character, icon_updates = TRUE)
|
||||
// Sanitizing rather than saving as someone might still be editing when copy_to occurs.
|
||||
player_setup.sanitize_setup()
|
||||
|
||||
// This needs to happen before anything else becuase it sets some variables.
|
||||
character.set_species(species)
|
||||
// Special Case: This references variables owned by two different datums, so do it here.
|
||||
if(be_random_name)
|
||||
real_name = random_name(identifying_gender,species)
|
||||
|
||||
// Ask the preferences datums to apply their own settings to the new mob
|
||||
player_setup.copy_to_mob(character)
|
||||
|
||||
// VOREStation Edit - Sync up all their organs and species one final time
|
||||
character.force_update_organs()
|
||||
|
||||
if(icon_updates)
|
||||
character.force_update_limbs()
|
||||
character.update_icons_body()
|
||||
character.update_mutations()
|
||||
character.update_underwear()
|
||||
character.update_hair()
|
||||
|
||||
if(LAZYLEN(character.descriptors))
|
||||
for(var/entry in body_descriptors)
|
||||
character.descriptors[entry] = body_descriptors[entry]
|
||||
|
||||
/datum/preferences/proc/open_load_dialog(mob/user)
|
||||
if(selecting_slots)
|
||||
to_chat(user, "<span class='warning'>You already have a slot selection dialog open!</span>")
|
||||
return
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S)
|
||||
error("Somehow missing savefile path?! [path]")
|
||||
return
|
||||
|
||||
var/name
|
||||
var/nickname //vorestation edit - This set appends nicknames to the save slot
|
||||
var/list/charlist = list()
|
||||
var/default //VOREStation edit
|
||||
for(var/i=1, i<= config.character_slots, i++)
|
||||
S.cd = "/character[i]"
|
||||
S["real_name"] >> name
|
||||
S["nickname"] >> nickname //vorestation edit
|
||||
if(!name)
|
||||
name = "[i] - \[Unused Slot\]"
|
||||
else if(i == default_slot)
|
||||
name = "►[i] - [name]"
|
||||
else
|
||||
name = "[i] - [name]"
|
||||
if (i == default_slot) //VOREStation edit
|
||||
default = "[name][nickname ? " ([nickname])" : ""]"
|
||||
charlist["[name][nickname ? " ([nickname])" : ""]"] = i
|
||||
|
||||
selecting_slots = TRUE
|
||||
var/choice = tgui_input_list(user, "Select a character to load:", "Load Slot", charlist, default)
|
||||
selecting_slots = FALSE
|
||||
if(!choice)
|
||||
return
|
||||
|
||||
var/slotnum = charlist[choice]
|
||||
if(!slotnum)
|
||||
error("Player picked [choice] slot to load, but that wasn't one we sent.")
|
||||
return
|
||||
|
||||
load_character(slotnum)
|
||||
attempt_vr(user.client?.prefs_vr,"load_vore","") //VOREStation Edit
|
||||
sanitize_preferences()
|
||||
ShowChoices(user)
|
||||
|
||||
/datum/preferences/proc/open_copy_dialog(mob/user)
|
||||
if(selecting_slots)
|
||||
to_chat(user, "<span class='warning'>You already have a slot selection dialog open!</span>")
|
||||
return
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S)
|
||||
error("Somehow missing savefile path?! [path]")
|
||||
return
|
||||
|
||||
var/name
|
||||
var/nickname //vorestation edit - This set appends nicknames to the save slot
|
||||
var/list/charlist = list()
|
||||
for(var/i=1, i<= config.character_slots, i++)
|
||||
S.cd = "/character[i]"
|
||||
S["real_name"] >> name
|
||||
S["nickname"] >> nickname //vorestation edit
|
||||
if(!name)
|
||||
name = "[i] - \[Unused Slot\]"
|
||||
if(i == default_slot)
|
||||
name = "►[i] - [name]"
|
||||
else
|
||||
name = "[i] - [name]"
|
||||
charlist["[name][nickname ? " ([nickname])" : ""]"] = i
|
||||
|
||||
selecting_slots = TRUE
|
||||
var/choice = tgui_input_list(user, "Select a character to COPY TO:", "Copy Slot", charlist)
|
||||
selecting_slots = FALSE
|
||||
if(!choice)
|
||||
return
|
||||
|
||||
var/slotnum = charlist[choice]
|
||||
if(!slotnum)
|
||||
error("Player picked [choice] slot to copy to, but that wasn't one we sent.")
|
||||
return
|
||||
|
||||
overwrite_character(slotnum)
|
||||
sanitize_preferences()
|
||||
ShowChoices(user)
|
||||
|
||||
@@ -1,121 +1,121 @@
|
||||
#define SAVEFILE_VERSION_MIN 8
|
||||
#define SAVEFILE_VERSION_MAX 11
|
||||
|
||||
//handles converting savefiles to new formats
|
||||
//MAKE SURE YOU KEEP THIS UP TO DATE!
|
||||
//If the sanity checks are capable of handling any issues. Only increase SAVEFILE_VERSION_MAX,
|
||||
//this will mean that savefile_version will still be over SAVEFILE_VERSION_MIN, meaning
|
||||
//this savefile update doesn't run everytime we load from the savefile.
|
||||
//This is mainly for format changes, such as the bitflags in toggles changing order or something.
|
||||
//if a file can't be updated, return 0 to delete it and start again
|
||||
//if a file was updated, return 1
|
||||
/datum/preferences/proc/savefile_update()
|
||||
if(savefile_version < 8) //lazily delete everything + additional files so they can be saved in the new format
|
||||
for(var/ckey in preferences_datums)
|
||||
var/datum/preferences/D = preferences_datums[ckey]
|
||||
if(D == src)
|
||||
var/delpath = "data/player_saves/[copytext(ckey,1,2)]/[ckey]/"
|
||||
if(delpath && fexists(delpath))
|
||||
fdel(delpath)
|
||||
break
|
||||
return 0
|
||||
|
||||
if(savefile_version == SAVEFILE_VERSION_MAX) //update successful.
|
||||
save_preferences()
|
||||
save_character()
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/preferences/proc/load_path(ckey,filename="preferences.sav")
|
||||
if(!ckey) return
|
||||
path = "data/player_saves/[copytext(ckey,1,2)]/[ckey]/[filename]"
|
||||
savefile_version = SAVEFILE_VERSION_MAX
|
||||
|
||||
/datum/preferences/proc/load_preferences()
|
||||
if(!path) return 0
|
||||
if(!fexists(path)) return 0
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S) return 0
|
||||
S.cd = "/"
|
||||
|
||||
S["version"] >> savefile_version
|
||||
//Conversion
|
||||
if(!savefile_version || !isnum(savefile_version) || savefile_version < SAVEFILE_VERSION_MIN || savefile_version > SAVEFILE_VERSION_MAX)
|
||||
if(!savefile_update()) //handles updates
|
||||
savefile_version = SAVEFILE_VERSION_MAX
|
||||
save_preferences()
|
||||
save_character()
|
||||
return 0
|
||||
|
||||
player_setup.load_preferences(S)
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/save_preferences()
|
||||
if(!path) return 0
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S) return 0
|
||||
S.cd = "/"
|
||||
|
||||
S["version"] << savefile_version
|
||||
player_setup.save_preferences(S)
|
||||
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
|
||||
if(slot != SAVE_RESET) // SAVE_RESET will reset the slot as though it does not exist, but keep the current slot for saving purposes.
|
||||
slot = sanitize_integer(slot, 1, config.character_slots, initial(default_slot))
|
||||
if(slot != default_slot)
|
||||
default_slot = slot
|
||||
S["default_slot"] << slot
|
||||
else
|
||||
S["default_slot"] << default_slot
|
||||
|
||||
if(slot != SAVE_RESET)
|
||||
S.cd = "/character[slot]"
|
||||
player_setup.load_character(S)
|
||||
else
|
||||
player_setup.load_character(S)
|
||||
S.cd = "/character[default_slot]"
|
||||
player_setup.save_character(S)
|
||||
|
||||
clear_character_previews() // VOREStation Edit
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/save_character()
|
||||
if(!path) return 0
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S) return 0
|
||||
S.cd = "/character[default_slot]"
|
||||
|
||||
player_setup.save_character(S)
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/overwrite_character(slot)
|
||||
if(!path) return 0
|
||||
if(!fexists(path)) return 0
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S) return 0
|
||||
if(!slot) slot = default_slot
|
||||
if(slot != SAVE_RESET)
|
||||
slot = sanitize_integer(slot, 1, config.character_slots, initial(default_slot))
|
||||
if(slot != default_slot)
|
||||
default_slot = slot
|
||||
nif_path = nif_durability = nif_savedata = null //VOREStation Add - Don't copy NIF
|
||||
S["default_slot"] << slot
|
||||
|
||||
else
|
||||
S["default_slot"] << default_slot
|
||||
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/sanitize_preferences()
|
||||
player_setup.sanitize_setup()
|
||||
return 1
|
||||
|
||||
#undef SAVEFILE_VERSION_MAX
|
||||
#undef SAVEFILE_VERSION_MIN
|
||||
#define SAVEFILE_VERSION_MIN 8
|
||||
#define SAVEFILE_VERSION_MAX 11
|
||||
|
||||
//handles converting savefiles to new formats
|
||||
//MAKE SURE YOU KEEP THIS UP TO DATE!
|
||||
//If the sanity checks are capable of handling any issues. Only increase SAVEFILE_VERSION_MAX,
|
||||
//this will mean that savefile_version will still be over SAVEFILE_VERSION_MIN, meaning
|
||||
//this savefile update doesn't run everytime we load from the savefile.
|
||||
//This is mainly for format changes, such as the bitflags in toggles changing order or something.
|
||||
//if a file can't be updated, return 0 to delete it and start again
|
||||
//if a file was updated, return 1
|
||||
/datum/preferences/proc/savefile_update()
|
||||
if(savefile_version < 8) //lazily delete everything + additional files so they can be saved in the new format
|
||||
for(var/ckey in preferences_datums)
|
||||
var/datum/preferences/D = preferences_datums[ckey]
|
||||
if(D == src)
|
||||
var/delpath = "data/player_saves/[copytext(ckey,1,2)]/[ckey]/"
|
||||
if(delpath && fexists(delpath))
|
||||
fdel(delpath)
|
||||
break
|
||||
return 0
|
||||
|
||||
if(savefile_version == SAVEFILE_VERSION_MAX) //update successful.
|
||||
save_preferences()
|
||||
save_character()
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/preferences/proc/load_path(ckey,filename="preferences.sav")
|
||||
if(!ckey) return
|
||||
path = "data/player_saves/[copytext(ckey,1,2)]/[ckey]/[filename]"
|
||||
savefile_version = SAVEFILE_VERSION_MAX
|
||||
|
||||
/datum/preferences/proc/load_preferences()
|
||||
if(!path) return 0
|
||||
if(!fexists(path)) return 0
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S) return 0
|
||||
S.cd = "/"
|
||||
|
||||
S["version"] >> savefile_version
|
||||
//Conversion
|
||||
if(!savefile_version || !isnum(savefile_version) || savefile_version < SAVEFILE_VERSION_MIN || savefile_version > SAVEFILE_VERSION_MAX)
|
||||
if(!savefile_update()) //handles updates
|
||||
savefile_version = SAVEFILE_VERSION_MAX
|
||||
save_preferences()
|
||||
save_character()
|
||||
return 0
|
||||
|
||||
player_setup.load_preferences(S)
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/save_preferences()
|
||||
if(!path) return 0
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S) return 0
|
||||
S.cd = "/"
|
||||
|
||||
S["version"] << savefile_version
|
||||
player_setup.save_preferences(S)
|
||||
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
|
||||
if(slot != SAVE_RESET) // SAVE_RESET will reset the slot as though it does not exist, but keep the current slot for saving purposes.
|
||||
slot = sanitize_integer(slot, 1, config.character_slots, initial(default_slot))
|
||||
if(slot != default_slot)
|
||||
default_slot = slot
|
||||
S["default_slot"] << slot
|
||||
else
|
||||
S["default_slot"] << default_slot
|
||||
|
||||
if(slot != SAVE_RESET)
|
||||
S.cd = "/character[slot]"
|
||||
player_setup.load_character(S)
|
||||
else
|
||||
player_setup.load_character(S)
|
||||
S.cd = "/character[default_slot]"
|
||||
player_setup.save_character(S)
|
||||
|
||||
clear_character_previews() // VOREStation Edit
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/save_character()
|
||||
if(!path) return 0
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S) return 0
|
||||
S.cd = "/character[default_slot]"
|
||||
|
||||
player_setup.save_character(S)
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/overwrite_character(slot)
|
||||
if(!path) return 0
|
||||
if(!fexists(path)) return 0
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S) return 0
|
||||
if(!slot) slot = default_slot
|
||||
if(slot != SAVE_RESET)
|
||||
slot = sanitize_integer(slot, 1, config.character_slots, initial(default_slot))
|
||||
if(slot != default_slot)
|
||||
default_slot = slot
|
||||
nif_path = nif_durability = nif_savedata = null //VOREStation Add - Don't copy NIF
|
||||
S["default_slot"] << slot
|
||||
|
||||
else
|
||||
S["default_slot"] << default_slot
|
||||
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/sanitize_preferences()
|
||||
player_setup.sanitize_setup()
|
||||
return 1
|
||||
|
||||
#undef SAVEFILE_VERSION_MAX
|
||||
#undef SAVEFILE_VERSION_MIN
|
||||
|
||||
@@ -1,81 +1,81 @@
|
||||
|
||||
|
||||
/var/all_ui_styles = list(
|
||||
"Midnight" = 'icons/mob/screen/midnight.dmi',
|
||||
"Orange" = 'icons/mob/screen/orange.dmi',
|
||||
"old" = 'icons/mob/screen/old.dmi',
|
||||
"White" = 'icons/mob/screen/white.dmi',
|
||||
"old-noborder" = 'icons/mob/screen/old-noborder.dmi',
|
||||
"minimalist" = 'icons/mob/screen/minimalist.dmi',
|
||||
"Hologram" = 'icons/mob/screen/holo.dmi'
|
||||
)
|
||||
|
||||
/var/all_ui_styles_robot = list(
|
||||
"Midnight" = 'icons/mob/screen1_robot.dmi',
|
||||
"Orange" = 'icons/mob/screen1_robot.dmi',
|
||||
"old" = 'icons/mob/screen1_robot.dmi',
|
||||
"White" = 'icons/mob/screen1_robot.dmi',
|
||||
"old-noborder" = 'icons/mob/screen1_robot.dmi',
|
||||
"minimalist" = 'icons/mob/screen1_robot_minimalist.dmi',
|
||||
"Hologram" = 'icons/mob/screen1_robot_minimalist.dmi'
|
||||
)
|
||||
|
||||
var/global/list/all_tooltip_styles = list(
|
||||
"Midnight", //Default for everyone is the first one,
|
||||
"Plasmafire",
|
||||
"Retro",
|
||||
"Slimecore",
|
||||
"Operative",
|
||||
"Clockwork"
|
||||
)
|
||||
|
||||
/proc/ui_style2icon(ui_style)
|
||||
if(ui_style in all_ui_styles)
|
||||
return all_ui_styles[ui_style]
|
||||
return all_ui_styles["White"]
|
||||
|
||||
|
||||
/client/verb/change_ui()
|
||||
set name = "Change UI"
|
||||
set category = "Preferences"
|
||||
set desc = "Configure your user interface"
|
||||
|
||||
if(!ishuman(usr))
|
||||
if(!isrobot(usr))
|
||||
to_chat(usr, "<span class='warning'>You must be a human or a robot to use this verb.</span>")
|
||||
return
|
||||
|
||||
var/UI_style_new = tgui_input_list(usr, "Select a style. White is recommended for customization", "UI Style Choice", all_ui_styles)
|
||||
if(!UI_style_new) return
|
||||
|
||||
var/UI_style_alpha_new = tgui_input_number(usr, "Select a new alpha (transparency) parameter for your UI, between 50 and 255", null, null, 255, 50)
|
||||
if(!UI_style_alpha_new || !(UI_style_alpha_new <= 255 && UI_style_alpha_new >= 50)) return
|
||||
|
||||
var/UI_style_color_new = input(usr, "Choose your UI color. Dark colors are not recommended!") as color|null
|
||||
if(!UI_style_color_new) return
|
||||
|
||||
//update UI
|
||||
var/list/icons = usr.hud_used.adding + usr.hud_used.other + usr.hud_used.hotkeybuttons
|
||||
icons.Add(usr.zone_sel)
|
||||
icons.Add(usr.gun_setting_icon)
|
||||
icons.Add(usr.item_use_icon)
|
||||
icons.Add(usr.gun_move_icon)
|
||||
icons.Add(usr.radio_use_icon)
|
||||
|
||||
var/icon/ic = all_ui_styles[UI_style_new]
|
||||
if(isrobot(usr))
|
||||
ic = all_ui_styles_robot[UI_style_new]
|
||||
|
||||
for(var/obj/screen/I in icons)
|
||||
if(I.name in list(I_HELP, I_HURT, I_DISARM, I_GRAB)) continue
|
||||
I.icon = ic
|
||||
I.color = UI_style_color_new
|
||||
I.alpha = UI_style_alpha_new
|
||||
|
||||
|
||||
if(tgui_alert(usr, "Like it? Save changes?","Save?",list("Yes", "No")) == "Yes")
|
||||
prefs.UI_style = UI_style_new
|
||||
prefs.UI_style_alpha = UI_style_alpha_new
|
||||
prefs.UI_style_color = UI_style_color_new
|
||||
SScharacter_setup.queue_preferences_save(prefs)
|
||||
to_chat(usr, "UI was saved")
|
||||
|
||||
|
||||
/var/all_ui_styles = list(
|
||||
"Midnight" = 'icons/mob/screen/midnight.dmi',
|
||||
"Orange" = 'icons/mob/screen/orange.dmi',
|
||||
"old" = 'icons/mob/screen/old.dmi',
|
||||
"White" = 'icons/mob/screen/white.dmi',
|
||||
"old-noborder" = 'icons/mob/screen/old-noborder.dmi',
|
||||
"minimalist" = 'icons/mob/screen/minimalist.dmi',
|
||||
"Hologram" = 'icons/mob/screen/holo.dmi'
|
||||
)
|
||||
|
||||
/var/all_ui_styles_robot = list(
|
||||
"Midnight" = 'icons/mob/screen1_robot.dmi',
|
||||
"Orange" = 'icons/mob/screen1_robot.dmi',
|
||||
"old" = 'icons/mob/screen1_robot.dmi',
|
||||
"White" = 'icons/mob/screen1_robot.dmi',
|
||||
"old-noborder" = 'icons/mob/screen1_robot.dmi',
|
||||
"minimalist" = 'icons/mob/screen1_robot_minimalist.dmi',
|
||||
"Hologram" = 'icons/mob/screen1_robot_minimalist.dmi'
|
||||
)
|
||||
|
||||
var/global/list/all_tooltip_styles = list(
|
||||
"Midnight", //Default for everyone is the first one,
|
||||
"Plasmafire",
|
||||
"Retro",
|
||||
"Slimecore",
|
||||
"Operative",
|
||||
"Clockwork"
|
||||
)
|
||||
|
||||
/proc/ui_style2icon(ui_style)
|
||||
if(ui_style in all_ui_styles)
|
||||
return all_ui_styles[ui_style]
|
||||
return all_ui_styles["White"]
|
||||
|
||||
|
||||
/client/verb/change_ui()
|
||||
set name = "Change UI"
|
||||
set category = "Preferences"
|
||||
set desc = "Configure your user interface"
|
||||
|
||||
if(!ishuman(usr))
|
||||
if(!isrobot(usr))
|
||||
to_chat(usr, "<span class='warning'>You must be a human or a robot to use this verb.</span>")
|
||||
return
|
||||
|
||||
var/UI_style_new = tgui_input_list(usr, "Select a style. White is recommended for customization", "UI Style Choice", all_ui_styles)
|
||||
if(!UI_style_new) return
|
||||
|
||||
var/UI_style_alpha_new = tgui_input_number(usr, "Select a new alpha (transparency) parameter for your UI, between 50 and 255", null, null, 255, 50)
|
||||
if(!UI_style_alpha_new || !(UI_style_alpha_new <= 255 && UI_style_alpha_new >= 50)) return
|
||||
|
||||
var/UI_style_color_new = input(usr, "Choose your UI color. Dark colors are not recommended!") as color|null
|
||||
if(!UI_style_color_new) return
|
||||
|
||||
//update UI
|
||||
var/list/icons = usr.hud_used.adding + usr.hud_used.other + usr.hud_used.hotkeybuttons
|
||||
icons.Add(usr.zone_sel)
|
||||
icons.Add(usr.gun_setting_icon)
|
||||
icons.Add(usr.item_use_icon)
|
||||
icons.Add(usr.gun_move_icon)
|
||||
icons.Add(usr.radio_use_icon)
|
||||
|
||||
var/icon/ic = all_ui_styles[UI_style_new]
|
||||
if(isrobot(usr))
|
||||
ic = all_ui_styles_robot[UI_style_new]
|
||||
|
||||
for(var/obj/screen/I in icons)
|
||||
if(I.name in list(I_HELP, I_HURT, I_DISARM, I_GRAB)) continue
|
||||
I.icon = ic
|
||||
I.color = UI_style_color_new
|
||||
I.alpha = UI_style_alpha_new
|
||||
|
||||
|
||||
if(tgui_alert(usr, "Like it? Save changes?","Save?",list("Yes", "No")) == "Yes")
|
||||
prefs.UI_style = UI_style_new
|
||||
prefs.UI_style_alpha = UI_style_alpha_new
|
||||
prefs.UI_style_color = UI_style_color_new
|
||||
SScharacter_setup.queue_preferences_save(prefs)
|
||||
to_chat(usr, "UI was saved")
|
||||
|
||||
Reference in New Issue
Block a user