mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Co-authored-by: Casey <a.roaming.shadow@gmail.com> Co-authored-by: CHOMPStation2 <chompsation2@gmail.com>
374 lines
14 KiB
Plaintext
374 lines
14 KiB
Plaintext
/datum/preferences
|
|
var/biological_gender = MALE
|
|
var/identifying_gender = MALE
|
|
|
|
/datum/preferences/proc/set_biological_gender(var/gender)
|
|
biological_gender = gender
|
|
identifying_gender = gender
|
|
|
|
/datum/category_item/player_setup_item/general/basic
|
|
name = "Basic"
|
|
sort_order = 1
|
|
|
|
/datum/category_item/player_setup_item/general/basic/load_character(var/savefile/S)
|
|
S["real_name"] >> pref.real_name
|
|
S["nickname"] >> pref.nickname
|
|
S["name_is_always_random"] >> pref.be_random_name
|
|
S["gender"] >> pref.biological_gender
|
|
S["id_gender"] >> pref.identifying_gender
|
|
S["age"] >> pref.age
|
|
S["bday_month"] >> pref.bday_month
|
|
S["bday_day"] >> pref.bday_day
|
|
S["last_bday_note"] >> pref.last_birthday_notification
|
|
S["bday_announce"] >> pref.bday_announce
|
|
S["spawnpoint"] >> pref.spawnpoint
|
|
S["OOC_Notes"] >> pref.metadata
|
|
S["OOC_Notes_Likes"] >> pref.metadata_likes
|
|
S["OOC_Notes_Disikes"] >> pref.metadata_dislikes
|
|
|
|
/datum/category_item/player_setup_item/general/basic/save_character(var/savefile/S)
|
|
S["real_name"] << pref.real_name
|
|
S["nickname"] << pref.nickname
|
|
S["name_is_always_random"] << pref.be_random_name
|
|
S["gender"] << pref.biological_gender
|
|
S["id_gender"] << pref.identifying_gender
|
|
S["age"] << pref.age
|
|
S["bday_month"] << pref.bday_month
|
|
S["bday_day"] << pref.bday_day
|
|
S["last_bday_note"] << pref.last_birthday_notification
|
|
S["bday_announce"] << pref.bday_announce
|
|
S["spawnpoint"] << pref.spawnpoint
|
|
S["OOC_Notes"] << pref.metadata
|
|
S["OOC_Notes_Likes"] << pref.metadata_likes
|
|
S["OOC_Notes_Disikes"] << pref.metadata_dislikes
|
|
|
|
/datum/category_item/player_setup_item/general/basic/sanitize_character()
|
|
pref.age = sanitize_integer(pref.age, get_min_age(), get_max_age(), initial(pref.age))
|
|
pref.bday_month = sanitize_integer(pref.bday_month, 0, 12, initial(pref.bday_month))
|
|
pref.bday_day = sanitize_integer(pref.bday_day, 0, 31, initial(pref.bday_day))
|
|
pref.last_birthday_notification = sanitize_integer(pref.last_birthday_notification, 0, 9999, initial(pref.last_birthday_notification))
|
|
pref.biological_gender = sanitize_inlist(pref.biological_gender, get_genders(), pick(get_genders()))
|
|
pref.identifying_gender = (pref.identifying_gender in all_genders_define_list) ? pref.identifying_gender : pref.biological_gender
|
|
pref.real_name = sanitize_name(pref.real_name, pref.species, is_FBP())
|
|
if(!pref.real_name)
|
|
pref.real_name = random_name(pref.identifying_gender, pref.species)
|
|
pref.nickname = sanitize_name(pref.nickname)
|
|
pref.spawnpoint = sanitize_inlist(pref.spawnpoint, spawntypes, initial(pref.spawnpoint))
|
|
pref.be_random_name = sanitize_integer(pref.be_random_name, 0, 1, initial(pref.be_random_name))
|
|
|
|
// Moved from /datum/preferences/proc/copy_to()
|
|
/datum/category_item/player_setup_item/general/basic/copy_to_mob(var/mob/living/carbon/human/character)
|
|
if(config.humans_need_surnames)
|
|
var/firstspace = findtext(pref.real_name, " ")
|
|
var/name_length = length(pref.real_name)
|
|
if(!firstspace) //we need a surname
|
|
pref.real_name += " [pick(last_names)]"
|
|
else if(firstspace == name_length)
|
|
pref.real_name += "[pick(last_names)]"
|
|
|
|
character.real_name = pref.real_name
|
|
character.name = character.real_name
|
|
if(character.dna)
|
|
character.dna.real_name = character.real_name
|
|
|
|
character.nickname = pref.nickname
|
|
|
|
character.gender = pref.biological_gender
|
|
character.identifying_gender = pref.identifying_gender
|
|
character.age = pref.age
|
|
character.bday_month = pref.bday_month
|
|
character.bday_day = pref.bday_day
|
|
|
|
/datum/category_item/player_setup_item/general/basic/content()
|
|
. = list()
|
|
. += "<b>Name:</b> "
|
|
. += "<a href='?src=\ref[src];rename=1'><b>[pref.real_name]</b></a><br>"
|
|
. += "<a href='?src=\ref[src];random_name=1'>Randomize Name</A><br>"
|
|
. += "<a href='?src=\ref[src];always_random_name=1'>Always Random Name: [pref.be_random_name ? "Yes" : "No"]</a><br>"
|
|
. += "<b>Nickname:</b> "
|
|
. += "<a href='?src=\ref[src];nickname=1'><b>[pref.nickname]</b></a>"
|
|
. += "<br>"
|
|
. += "<b>Biological Sex:</b> <a href='?src=\ref[src];bio_gender=1'><b>[gender2text(pref.biological_gender)]</b></a><br>"
|
|
. += "<b>Pronouns:</b> <a href='?src=\ref[src];id_gender=1'><b>[gender2text(pref.identifying_gender)]</b></a><br>"
|
|
. += "<b>Age:</b> <a href='?src=\ref[src];age=1'>[pref.age]</a> <b>Birthday:</b> <a href='?src=\ref[src];bday_month=1'>[pref.bday_month]</a><b>/</b><a href='?src=\ref[src];bday_day=1'>[pref.bday_day]</a> - <b>Announce?:</b> <a href='?src=\ref[src];bday_announce=1'>[pref.bday_announce ? "Yes" : "Disabled"]</a><br>" //ChompEDIT - DISABLE the announcement
|
|
. += "<b>Spawn Point</b>: <a href='?src=\ref[src];spawnpoint=1'>[pref.spawnpoint]</a><br>"
|
|
if(config.allow_Metadata)
|
|
. += "<b>OOC Notes:</b> <a href='?src=\ref[src];metadata=1'> Edit </a><br>"
|
|
. = jointext(.,null)
|
|
|
|
/datum/category_item/player_setup_item/general/basic/OnTopic(var/href,var/list/href_list, var/mob/user)
|
|
if(href_list["rename"])
|
|
var/raw_name = tgui_input_text(user, "Choose your character's name:", "Character Name")
|
|
if (!isnull(raw_name) && CanUseTopic(user))
|
|
var/new_name = sanitize_name(raw_name, pref.species, is_FBP())
|
|
if(new_name)
|
|
pref.real_name = new_name
|
|
return TOPIC_REFRESH
|
|
else
|
|
to_chat(user, "<span class='warning'>Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .</span>")
|
|
return TOPIC_NOACTION
|
|
|
|
else if(href_list["random_name"])
|
|
pref.real_name = random_name(pref.identifying_gender, pref.species)
|
|
return TOPIC_REFRESH
|
|
|
|
else if(href_list["always_random_name"])
|
|
pref.be_random_name = !pref.be_random_name
|
|
return TOPIC_REFRESH
|
|
|
|
else if(href_list["nickname"])
|
|
var/raw_nickname = tgui_input_text(user, "Choose your character's nickname:", "Character Nickname", pref.nickname)
|
|
if (!isnull(raw_nickname) && CanUseTopic(user))
|
|
var/new_nickname = sanitize_name(raw_nickname, pref.species, is_FBP())
|
|
if(new_nickname)
|
|
pref.nickname = new_nickname
|
|
return TOPIC_REFRESH
|
|
else
|
|
to_chat(user, "<span class='warning'>Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .</span>")
|
|
return TOPIC_NOACTION
|
|
|
|
else if(href_list["bio_gender"])
|
|
var/new_gender = tgui_input_list(user, "Choose your character's biological sex:", "Character Preference", get_genders(), pref.biological_gender)
|
|
if(new_gender && CanUseTopic(user))
|
|
pref.set_biological_gender(new_gender)
|
|
return TOPIC_REFRESH_UPDATE_PREVIEW
|
|
|
|
else if(href_list["id_gender"])
|
|
var/new_gender = tgui_input_list(user, "Choose your character's pronouns:", "Character Preference", all_genders_define_list, pref.identifying_gender)
|
|
if(new_gender && CanUseTopic(user))
|
|
pref.identifying_gender = new_gender
|
|
return TOPIC_REFRESH
|
|
|
|
else if(href_list["age"])
|
|
var/min_age = get_min_age()
|
|
var/max_age = get_max_age()
|
|
var/new_age = tgui_input_number(user, "Choose your character's age:\n([min_age]-[max_age])", "Character Preference", pref.age, max_age, min_age)
|
|
if(new_age && CanUseTopic(user))
|
|
pref.age = max(min(round(text2num(new_age)), max_age), min_age)
|
|
return TOPIC_REFRESH
|
|
|
|
else if(href_list["bday_month"])
|
|
var/new_month = tgui_input_number(user, "Choose your character's birth month (number)", "Birthday Month", pref.bday_month, 12, 0)
|
|
if(new_month && CanUseTopic(user))
|
|
pref.bday_month = new_month
|
|
else if((tgui_alert(user, "Would you like to clear the birthday entry?","Clear?",list("No","Yes")) == "Yes") && CanUseTopic(user))
|
|
pref.bday_month = 0
|
|
pref.bday_day = 0
|
|
return TOPIC_REFRESH
|
|
|
|
else if(href_list["bday_day"])
|
|
if(!pref.bday_month)
|
|
tgui_alert(user,"You must set a birth month before you can set a day.", "Error", list("Okay"))
|
|
return
|
|
var/max_days
|
|
switch(pref.bday_month)
|
|
if(1)
|
|
max_days = 31
|
|
if(2)
|
|
max_days = 29
|
|
if(3)
|
|
max_days = 31
|
|
if(4)
|
|
max_days = 30
|
|
if(5)
|
|
max_days = 31
|
|
if(6)
|
|
max_days = 30
|
|
if(7)
|
|
max_days = 31
|
|
if(8)
|
|
max_days = 31
|
|
if(9)
|
|
max_days = 30
|
|
if(10)
|
|
max_days = 31
|
|
if(11)
|
|
max_days = 30
|
|
if(12)
|
|
max_days = 31
|
|
|
|
var/new_day = tgui_input_number(user, "Choose your character's birth day (number, 1-[max_days])", "Birthday Day", pref.bday_day, max_days, 0)
|
|
if(new_day && CanUseTopic(user))
|
|
pref.bday_day = new_day
|
|
else if((tgui_alert(user, "Would you like to clear the birthday entry?","Clear?",list("No","Yes")) == "Yes") && CanUseTopic(user))
|
|
pref.bday_month = 0
|
|
pref.bday_day = 0
|
|
return TOPIC_REFRESH
|
|
|
|
else if(href_list["bday_announce"])
|
|
pref.bday_announce = 0 //ChompEDIT - Disable this
|
|
return TOPIC_REFRESH
|
|
|
|
else if(href_list["spawnpoint"])
|
|
var/list/spawnkeys = list()
|
|
for(var/spawntype in spawntypes)
|
|
spawnkeys += spawntype
|
|
var/choice = tgui_input_list(user, "Where would you like to spawn when late-joining?", "Late-Join Choice", spawnkeys)
|
|
if(!choice || !spawntypes[choice] || !CanUseTopic(user)) return TOPIC_NOACTION
|
|
pref.spawnpoint = choice
|
|
return TOPIC_REFRESH
|
|
|
|
else if(href_list["metadata"])
|
|
// var/new_metadata = strip_html_simple(tgui_input_text(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , html_decode(pref.metadata), multiline = TRUE, prevent_enter = TRUE)) //VOREStation Edit
|
|
if(CanUseTopic(user))
|
|
ooc_notes_window(user)
|
|
// pref.metadata = new_metadata
|
|
return TOPIC_HANDLED
|
|
else if(href_list["edit_ooc_notes"])
|
|
var/new_metadata = strip_html_simple(tgui_input_text(usr, "Enter any information you'd like others to see, such as Roleplay-preferences. This will not be saved permanently unless you click save in the Character Setup panel!", "Game Preference" , html_decode(pref.metadata), multiline = TRUE, prevent_enter = TRUE))
|
|
if(new_metadata && CanUseTopic(user))
|
|
pref.metadata = new_metadata
|
|
ooc_notes_window(usr)
|
|
else if(href_list["edit_ooc_note_likes"])
|
|
var/new_metadata = strip_html_simple(tgui_input_text(usr, "Enter any information you'd like others to see relating to your LIKED roleplay preferences. This will not be saved permanently unless you click save in the Character Setup panel!", "Game Preference" , html_decode(pref.metadata_likes), multiline = TRUE, prevent_enter = TRUE))
|
|
if(new_metadata && CanUseTopic(user))
|
|
pref.metadata_likes = new_metadata
|
|
ooc_notes_window(usr)
|
|
else if(href_list["edit_ooc_note_dislikes"])
|
|
var/new_metadata = strip_html_simple(tgui_input_text(usr, "Enter any information you'd like others to see relating to your DISLIKED roleplay preferences. This will not be saved permanently unless you click save in the Character Setup panel!", "Game Preference" , html_decode(pref.metadata_dislikes), multiline = TRUE, prevent_enter = TRUE))
|
|
if(new_metadata && CanUseTopic(user))
|
|
pref.metadata_dislikes = new_metadata
|
|
ooc_notes_window(usr)
|
|
return ..()
|
|
|
|
/datum/category_item/player_setup_item/general/basic/proc/get_genders()
|
|
var/datum/species/S
|
|
if(pref.species)
|
|
S = GLOB.all_species[pref.species]
|
|
else
|
|
S = GLOB.all_species[SPECIES_HUMAN]
|
|
var/list/possible_genders = S.genders
|
|
if(!pref.organ_data || pref.organ_data[BP_TORSO] != "cyborg")
|
|
return possible_genders
|
|
possible_genders = possible_genders.Copy()
|
|
possible_genders |= NEUTER
|
|
return possible_genders
|
|
|
|
/datum/category_item/player_setup_item/general/basic/proc/ooc_notes_window(mob/user)
|
|
//I tried to get it to accept things like emojis and all that, but, it wouldn't do! It would be cool if it did.
|
|
var/notes = replacetext(html_decode(pref.metadata), "\n", "<BR>")
|
|
var/likes = replacetext(html_decode(pref.metadata_likes), "\n", "<BR>")
|
|
var/dislikes = replacetext(html_decode(pref.metadata_dislikes), "\n", "<BR>")
|
|
var/dat = {"
|
|
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">
|
|
<html>
|
|
<head>
|
|
<style>
|
|
body {
|
|
margin-top:5px;
|
|
font-family:Verdana;
|
|
color:white;
|
|
font-size:13px;
|
|
background-image:url('ooc_notes.png');
|
|
background-repeat:repeat-x;
|
|
background-color:#272727;
|
|
background-position:center top;
|
|
}
|
|
table {
|
|
font-size:13px;
|
|
margin-left:-2px;
|
|
}
|
|
h2 {
|
|
font-size:15px;
|
|
}
|
|
.collapsible {
|
|
background-color: #263d20;
|
|
color: white;
|
|
padding: 5px;
|
|
width: 100%;
|
|
border: none;
|
|
text-align: left;
|
|
outline: none;
|
|
font-size: 20px;
|
|
}
|
|
.collapsible_b {
|
|
background-color: #3f1a1a;
|
|
color: white;
|
|
padding: 5px;
|
|
width: 100%;
|
|
border: none;
|
|
text-align: left;
|
|
outline: none;
|
|
font-size: 20px;
|
|
}
|
|
|
|
.content {
|
|
padding: 5;
|
|
width: 100%;
|
|
background-color: #363636;
|
|
}
|
|
|
|
.button {
|
|
background-color: #40628a;
|
|
text-align: center;
|
|
}
|
|
td.button {
|
|
border: 1px solid #161616;
|
|
background-color: #40628a;
|
|
text-align: center;
|
|
}
|
|
a.button {
|
|
color:white;
|
|
text-decoration: none;
|
|
}
|
|
|
|
</style>
|
|
</head>"}
|
|
|
|
dat += {"<body>
|
|
<p><b>Save your changes in the character setup!</b></p>
|
|
<b><font size='3px'>[pref.real_name]'s OOC notes</font></b><br>"}
|
|
dat += {"
|
|
<br>
|
|
<table>
|
|
<td class="button">
|
|
<a href='byond://?src=\ref[src];edit_ooc_notes=1' class='button'>Edit</a>
|
|
</td>
|
|
</table>
|
|
"}
|
|
|
|
dat += {"
|
|
<br>
|
|
<p>[notes]</p>
|
|
<head>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<body>
|
|
|
|
<div class="collapsible"><b>Likes</b></div>"}
|
|
dat += {"
|
|
<table>
|
|
<td class="button">
|
|
<a href='byond://?src=\ref[src];edit_ooc_note_likes=1' class='button'>Edit</a>
|
|
</td>
|
|
</table>
|
|
"}
|
|
|
|
dat += {"
|
|
<div class="content">
|
|
<p>[likes]</p>
|
|
</div>"}
|
|
dat += {"
|
|
<br>
|
|
<div class="collapsible_b"><b>Dislikes</b></div>"}
|
|
dat += {"
|
|
<table>
|
|
<td class="button">
|
|
<a href='byond://?src=\ref[src];edit_ooc_note_dislikes=1' class='button'>Edit</a>
|
|
</td>
|
|
</table>
|
|
"}
|
|
|
|
dat += {"
|
|
<div class="content">
|
|
<p>[dislikes]</p>
|
|
</div>
|
|
</body>
|
|
</html>
|
|
<br><br>
|
|
<p><b>This only updates your character save file, to update your notes in the round use the Set OOC Metainfo verb!</b></p>
|
|
"}
|
|
|
|
user << browse("<html><head><title>OOC Notes: [pref.real_name]</title></head>[dat]</html>", "window=[pref.real_name]mvp;size=500x600;can_resize=1;can_minimize=0")
|
|
|
|
onclose(usr, "[pref.real_name]")
|