mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
Adds client verb to access the character setup screen from anywhere. Moves name validation to species level, making it possible for IPCs to have numbers in their name. Adds gender validation, also adds support to add neuter/plural genders in the future if ever desired. Now sanitizes preferences before applying them to a mob. Fixes #11433. (cherry picked from commit e40246e9dfc9feb28b8c5a0a7ce765fd063c4f7e)
89 lines
3.9 KiB
Plaintext
89 lines
3.9 KiB
Plaintext
/datum/category_item/player_setup_item/general/basic
|
|
name = "Basic"
|
|
sort_order = 1
|
|
var/list/valid_player_genders = list(MALE, FEMALE)
|
|
|
|
/datum/category_item/player_setup_item/general/basic/load_character(var/savefile/S)
|
|
S["real_name"] >> pref.real_name
|
|
S["name_is_always_random"] >> pref.be_random_name
|
|
S["gender"] >> pref.gender
|
|
S["age"] >> pref.age
|
|
S["spawnpoint"] >> pref.spawnpoint
|
|
S["OOC_Notes"] >> pref.metadata
|
|
|
|
/datum/category_item/player_setup_item/general/basic/save_character(var/savefile/S)
|
|
S["real_name"] << pref.real_name
|
|
S["name_is_always_random"] << pref.be_random_name
|
|
S["gender"] << pref.gender
|
|
S["age"] << pref.age
|
|
S["spawnpoint"] << pref.spawnpoint
|
|
S["OOC_Notes"] << pref.metadata
|
|
|
|
/datum/category_item/player_setup_item/general/basic/sanitize_character()
|
|
pref.age = sanitize_integer(pref.age, AGE_MIN, AGE_MAX, initial(pref.age))
|
|
pref.gender = sanitize_inlist(pref.gender, valid_player_genders, pick(valid_player_genders))
|
|
pref.real_name = sanitize_name(pref.real_name, pref.species)
|
|
if(!pref.real_name)
|
|
pref.real_name = random_name(pref.gender, pref.species)
|
|
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))
|
|
|
|
/datum/category_item/player_setup_item/general/basic/content()
|
|
. = "<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'>Random Name</A>) "
|
|
. += "(<a href='?src=\ref[src];always_random_name=1'>Always Random Name: [pref.be_random_name ? "Yes" : "No"]</a>)"
|
|
. += "<br>"
|
|
. += "<b>Gender:</b> <a href='?src=\ref[src];gender=1'><b>[capitalize(lowertext(pref.gender))]</b></a><br>"
|
|
. += "<b>Age:</b> <a href='?src=\ref[src];age=1'>[pref.age]</a><br>"
|
|
. += "<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>"
|
|
|
|
/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 = input(user, "Choose your character's name:", "Character Name") as text|null
|
|
if (!isnull(raw_name) && CanUseTopic(user))
|
|
var/new_name = sanitize_name(raw_name, pref.species)
|
|
if(new_name)
|
|
pref.real_name = new_name
|
|
return TOPIC_REFRESH
|
|
else
|
|
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.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["gender"])
|
|
pref.gender = next_in_list(pref.gender, valid_player_genders)
|
|
return TOPIC_REFRESH
|
|
|
|
else if(href_list["age"])
|
|
var/new_age = input(user, "Choose your character's age:\n([AGE_MIN]-[AGE_MAX])", "Character Preference", pref.age) as num|null
|
|
if(new_age && CanUseTopic(user))
|
|
pref.age = max(min(round(text2num(new_age)), AGE_MAX), AGE_MIN)
|
|
return TOPIC_REFRESH
|
|
|
|
else if(href_list["spawnpoint"])
|
|
var/list/spawnkeys = list()
|
|
for(var/S in spawntypes)
|
|
spawnkeys += S
|
|
var/choice = input(user, "Where would you like to spawn when late-joining?") as null|anything in spawnkeys
|
|
if(!choice || !spawntypes[choice] || !CanUseTopic(user)) return TOPIC_NOACTION
|
|
pref.spawnpoint = choice
|
|
return TOPIC_REFRESH
|
|
|
|
else if(href_list["metadata"])
|
|
var/new_metadata = sanitize(input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , pref.metadata)) as message|null
|
|
if(new_metadata && CanUseTopic(user))
|
|
pref.metadata = sanitize(new_metadata)
|
|
return TOPIC_REFRESH
|
|
|
|
return ..()
|