Conversion of realname and nickname from bay (#19120)

* Automatic changelog compile [ci skip]

* replace all bay instances for realname and nickname with tg

* add comments where uncertain of sanitisation needed

* Fix issue from git conflict..

* Fix issue causing setup menu not opening

* Attempt to clean up how name datums are handled

* Remove redundant check

* Fix number issues with character names

---------

Co-authored-by: vorestation-ci[bot] <199609141+vorestation-ci[bot]@users.noreply.github.com>
This commit is contained in:
Aura Dusklight
2026-02-08 18:34:04 +02:00
committed by GitHub
parent 8e057cf72b
commit 311c0117c1
33 changed files with 201 additions and 90 deletions
+3 -2
View File
@@ -419,11 +419,12 @@ ADMIN_VERB(respawn_character, (R_ADMIN|R_REJUVINATE), "Spawn Character", "(Re)Sp
var/charjob
var/records
var/datum/data/record/record_found
record_found = find_general_record("name",picked_client.prefs.real_name)
var/char_real_name = picked_client.prefs.read_preference(/datum/preference/name/real_name)
record_found = find_general_record("name", char_real_name)
//Found their record, they were spawned previously
if(record_found)
var/samejob = tgui_alert(src,"Found [picked_client.prefs.real_name] in data core. They were [record_found.fields["real_rank"]] this round. Assign same job? They will not be re-added to the manifest/records, either way.","Previously spawned",list("Yes","Assistant","No"))
var/samejob = tgui_alert(src,"Found [char_real_name] in data core. They were [record_found.fields["real_rank"]] this round. Assign same job? They will not be re-added to the manifest/records, either way.","Previously spawned",list("Yes","Assistant","No"))
if(!samejob)
return
if(samejob == "Yes")
+3 -2
View File
@@ -58,8 +58,9 @@
new_mob.ai_holder_type = /datum/ai_holder/simple_mob/inert //Dont want the mob AI to activate if the client dc's or anything
if(name)
new_mob.real_name = picked_client.prefs.real_name
new_mob.name = picked_client.prefs.real_name
var/spawner_name = picked_client.prefs.read_preference(/datum/preference/name/real_name)
new_mob.real_name = spawner_name
new_mob.name = spawner_name
new_mob.key = picked_client.key //Finally put them in the mob
@@ -18,16 +18,12 @@
sort_order = 1
/datum/category_item/player_setup_item/general/basic/load_character(list/save_data)
pref.real_name = save_data["real_name"]
pref.nickname = save_data["nickname"]
pref.biological_gender = save_data["gender"]
pref.identifying_gender = save_data["id_gender"]
pref.vore_egg_type = save_data["vore_egg_type"]
pref.autohiss = save_data["autohiss"]
/datum/category_item/player_setup_item/general/basic/save_character(list/save_data)
save_data["real_name"] = pref.real_name
save_data["nickname"] = pref.nickname
save_data["gender"] = pref.biological_gender
save_data["id_gender"] = pref.identifying_gender
save_data["vore_egg_type"] = pref.vore_egg_type
@@ -36,29 +32,31 @@
/datum/category_item/player_setup_item/general/basic/sanitize_character()
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.vore_egg_type = sanitize_inlist(pref.vore_egg_type, GLOB.global_vore_egg_types, initial(pref.vore_egg_type))
pref.autohiss = sanitize_inlist(pref.autohiss, list("Off", "Basic", "Full"), initial(pref.autohiss))
// Moved from /datum/preferences/proc/copy_to()
/datum/category_item/player_setup_item/general/basic/copy_to_mob(var/mob/living/carbon/human/character)
var/char_real_name = pref.read_preference(/datum/preference/name/real_name)
// Re-sanitize name on join.
// Fixes being able to swap from FBP to organic before round join to be organic with numbers in name.
char_real_name = sanitize_name(char_real_name, pref.species, is_FBP())
if(!char_real_name)
char_real_name = random_name(pref.identifying_gender, pref.species)
if(CONFIG_GET(flag/humans_need_surnames))
var/firstspace = findtext(pref.real_name, " ")
var/name_length = length(pref.real_name)
var/firstspace = findtext(char_real_name, " ")
var/name_length = length(char_real_name)
if(!firstspace) //we need a surname
pref.real_name += " [pick(GLOB.last_names)]"
char_real_name += " [pick(GLOB.last_names)]"
else if(firstspace == name_length)
pref.real_name += "[pick(GLOB.last_names)]"
char_real_name += "[pick(GLOB.last_names)]"
character.real_name = pref.real_name
character.real_name = char_real_name
character.name = character.real_name
if(character.dna)
character.dna.real_name = character.real_name
character.nickname = pref.nickname
character.nickname = pref.read_preference(/datum/preference/name/nickname)
character.gender = pref.biological_gender
character.identifying_gender = pref.identifying_gender
@@ -80,9 +78,9 @@
/datum/category_item/player_setup_item/general/basic/tgui_data(mob/user)
var/list/data = ..()
data["real_name"] = pref.real_name
data["real_name"] = pref.read_preference(/datum/preference/name/real_name)
data["be_random_name"] = pref.read_preference(/datum/preference/toggle/human/name_is_always_random)
data["nickname"] = pref.nickname
data["nickname"] = pref.read_preference(/datum/preference/name/nickname)
data["biological_sex"] = gender2text(pref.biological_gender)
data["identifying_gender"] = gender2text(pref.identifying_gender)
data["age"] = pref.read_preference(/datum/preference/numeric/human/age)
@@ -201,18 +199,19 @@
switch(action)
if("rename")
var/raw_name = tgui_input_text(user, "Choose your character's name:", "Character Name", pref.real_name, encode = FALSE)
var/current_name = pref.read_preference(/datum/preference/name/real_name)
var/raw_name = tgui_input_text(user, "Choose your character's name:", "Character Name", current_name, encode = FALSE)
if(!isnull(raw_name))
var/new_name = sanitize_name(raw_name, pref.species, is_FBP())
if(new_name)
pref.real_name = new_name
pref.update_preference_by_type(/datum/preference/name/real_name, new_name)
return TOPIC_REFRESH
else
to_chat(user, span_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 ."))
return TOPIC_NOACTION
if("random_name")
pref.real_name = random_name(pref.identifying_gender, pref.species)
pref.update_preference_by_type(/datum/preference/name/real_name, random_name(pref.identifying_gender, pref.species))
return TOPIC_REFRESH
if("always_random_name")
@@ -220,11 +219,12 @@
return TOPIC_REFRESH
if("nickname")
var/raw_nickname = tgui_input_text(user, "Choose your character's nickname:", "Character Nickname", pref.nickname, encode = FALSE)
var/current_nickname = pref.read_preference(/datum/preference/name/nickname)
var/raw_nickname = tgui_input_text(user, "Choose your character's nickname:", "Character Nickname", current_nickname, encode = FALSE)
if(!isnull(raw_nickname))
var/new_nickname = sanitize_name(raw_nickname, pref.species, is_FBP())
if(new_nickname)
pref.nickname = new_nickname
pref.update_preference_by_type(/datum/preference/name/nickname, new_nickname)
return TOPIC_REFRESH
else
to_chat(user, span_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 ."))
@@ -233,7 +233,7 @@
if("reset_nickname")
var/nick_choice = tgui_alert(user, "Wipe your Nickname? This will completely remove any chosen nickname(s).","Wipe Nickname",list("Yes","No"))
if(nick_choice == "Yes")
pref.nickname = null
pref.update_preference_by_type(/datum/preference/name/nickname, null)
return TOPIC_REFRESH
if("bio_gender")
@@ -26,17 +26,18 @@
save_data["runechat_color"] = pref.runechat_color
/datum/category_item/player_setup_item/general/language/sanitize_character()
var/char_name = pref.read_preference(/datum/preference/name/real_name) || "-name not yet loaded-"
if(!islist(pref.alternate_languages))
testing("LANGSANI: Sanitizing languages on [pref.client]'s character [pref.real_name || "-name not yet loaded-"] because their character has no languages list")
testing("LANGSANI: Sanitizing languages on [pref.client]'s character [char_name] because their character has no languages list")
pref.alternate_languages = list()
if(pref.species)
var/datum/species/S = GLOB.all_species[pref.species]
if(!istype(S))
testing("LANGSANI: Failed sani on [pref.client]'s character [pref.real_name || "-name not yet loaded-"] because their species ([pref.species]) isn't in the global list")
testing("LANGSANI: Failed sani on [pref.client]'s character [char_name] because their species ([pref.species]) isn't in the global list")
return
if(pref.alternate_languages.len > (S.num_alternate_languages + pref.extra_languages))
testing("LANGSANI: Truncated [pref.client]'s character [pref.real_name || "-name not yet loaded-"] language list because it was too long (len: [pref.alternate_languages.len], allowed: [S.num_alternate_languages])")
testing("LANGSANI: Truncated [pref.client]'s character [char_name] language list because it was too long (len: [pref.alternate_languages.len], allowed: [S.num_alternate_languages])")
pref.alternate_languages.len = (S.num_alternate_languages + pref.extra_languages) // Truncate to allowed length
// VOREStation Edit Start
@@ -48,7 +49,7 @@
for(var/language in pref.alternate_languages)
var/datum/language/L = GLOB.all_languages[language]
if(!istype(L) || (L.flags & RESTRICTED) || (!(language in S.secondary_langs) && pref.client && !is_lang_whitelisted(pref.client, L)))
testing("LANGSANI: Removed [L?.name || "lang not found"] from [pref.client]'s character [pref.real_name || "-name not yet loaded-"] because it failed allowed checks")
testing("LANGSANI: Removed [L?.name || "lang not found"] from [pref.client]'s character [char_name] because it failed allowed checks")
pref.alternate_languages -= language
if(isnull(pref.language_prefixes) || !pref.language_prefixes.len)
@@ -267,9 +267,12 @@
pref.rlimb_data -= null
// Sanitize the name so that there aren't any numbers sticking around.
pref.real_name = sanitize_name(pref.real_name, pref.species)
if(!pref.real_name)
pref.real_name = random_name(pref.identifying_gender, pref.species)
// Is this still necessary with TG conversation?
var/current_name = pref.read_preference(/datum/preference/name/real_name)
current_name = sanitize_name(current_name, pref.species)
if(!current_name)
current_name = random_name(pref.identifying_gender, pref.species)
pref.update_preference_by_type(/datum/preference/name/real_name, current_name)
/datum/category_item/player_setup_item/general/body/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
var/list/data = ..()
@@ -252,22 +252,26 @@
pref.vantag_preference = names_list[selection]
return TOPIC_REFRESH
if("custom_say")
var/say_choice = tgui_input_text(user, "This word or phrase will appear instead of 'says': [pref.real_name] says, \"Hi.\"", "Custom Say", pref.custom_say, 12)
var/char_name = pref.read_preference(/datum/preference/name/real_name)
var/say_choice = tgui_input_text(user, "This word or phrase will appear instead of 'says': [char_name] says, \"Hi.\"", "Custom Say", pref.custom_say, 12)
if(say_choice)
pref.custom_say = say_choice
return TOPIC_REFRESH
if("custom_whisper")
var/whisper_choice = tgui_input_text(user, "This word or phrase will appear instead of 'whispers': [pref.real_name] whispers, \"Hi...\"", "Custom Whisper", pref.custom_whisper, 12)
var/char_name = pref.read_preference(/datum/preference/name/real_name)
var/whisper_choice = tgui_input_text(user, "This word or phrase will appear instead of 'whispers': [char_name] whispers, \"Hi...\"", "Custom Whisper", pref.custom_whisper, 12)
if(whisper_choice)
pref.custom_whisper = whisper_choice
return TOPIC_REFRESH
if("custom_ask")
var/ask_choice = tgui_input_text(user, "This word or phrase will appear instead of 'asks': [pref.real_name] asks, \"Hi?\"", "Custom Ask", pref.custom_ask, 12)
var/char_name = pref.read_preference(/datum/preference/name/real_name)
var/ask_choice = tgui_input_text(user, "This word or phrase will appear instead of 'asks': [char_name] asks, \"Hi?\"", "Custom Ask", pref.custom_ask, 12)
if(ask_choice)
pref.custom_ask = ask_choice
return TOPIC_REFRESH
if("custom_exclaim")
var/exclaim_choice = tgui_input_text(user, "This word or phrase will appear instead of 'exclaims', 'shouts' or 'yells': [pref.real_name] exclaims, \"Hi!\"", "Custom Exclaim", pref.custom_exclaim, 12)
var/char_name = pref.read_preference(/datum/preference/name/real_name)
var/exclaim_choice = tgui_input_text(user, "This word or phrase will appear instead of 'exclaims', 'shouts' or 'yells': [char_name] exclaims, \"Hi!\"", "Custom Exclaim", pref.custom_exclaim, 12)
if(exclaim_choice)
pref.custom_exclaim = exclaim_choice
return TOPIC_REFRESH
@@ -35,18 +35,19 @@
savefile.save()
/datum/category_item/player_setup_item/general/nif/sanitize_character()
var/char_name = pref.read_preference(/datum/preference/name/real_name) || "-name not yet loaded-"
if(pref.nif_path && !ispath(pref.nif_path)) //We have at least a text string that should be a path.
pref.nif_path = text2path(pref.nif_path) //Try to convert it to a hard path.
if(!pref.nif_path) //If we couldn't, kill it.
pref.nif_path = null //Kill!
WARNING("Loaded a NIF but it was an invalid path, [pref.real_name]")
WARNING("Loaded a NIF but it was an invalid path, [char_name]")
if (ispath(pref.nif_path, /obj/item/nif/protean) && pref.species != SPECIES_PROTEAN) //no free nifs
pref.nif_path = null
if(ispath(pref.nif_path) && isnull(pref.nif_durability)) //How'd you lose this?
pref.nif_durability = initial(pref.nif_path.durability) //Well, have a new one, my bad.
WARNING("Loaded a NIF but with no durability, [pref.real_name]")
WARNING("Loaded a NIF but with no durability, [char_name]")
if(!islist(pref.nif_savedata))
pref.nif_savedata = list()
@@ -80,7 +80,7 @@ var/list/gear_datums = list()
if(pref.client)
if(G.ckeywhitelist && !(pref.client_ckey in G.ckeywhitelist))
return FALSE
if(G.character_name && !(pref.real_name in G.character_name))
if(G.character_name && !(pref.read_preference(/datum/preference/name/real_name) in G.character_name))
return FALSE
return TRUE
+12 -12
View File
@@ -19,8 +19,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/be_special = 0 //Special role selection
//character preferences
var/real_name //our character's name
var/nickname //our character's nickname
var/b_type = DEFAULT_BLOOD_TYPE //blood type (not-chooseable)
var/blood_reagents = "default" //blood restoration reagents
var/headset = 1 //headset type
@@ -160,7 +158,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
// Didn't load a character, so let's randomize
set_biological_gender(pick(MALE, FEMALE))
real_name = random_name(identifying_gender,species)
update_preference_by_type(/datum/preference/name/real_name, random_name(identifying_gender, species))
b_type = RANDOM_BLOOD_TYPE
if(client)
@@ -177,7 +175,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
return ..()
/datum/preferences/proc/ShowChoices(mob/user)
if(!user || !user.client) return
if(!user || !user.client)
return
if(!get_mob_by_key(client_ckey))
to_chat(user, span_danger("No mob exists for the given client!"))
@@ -260,7 +259,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(href_list["save"])
if(save_character())
to_chat(usr,span_notice("Character [player_setup?.preferences?.real_name] saved!"))
to_chat(usr,span_notice("Character [player_setup?.preferences?.read_preference(/datum/preference/name/real_name)] saved!"))
save_preferences()
else if(href_list["reload"])
load_preferences(TRUE)
@@ -301,7 +300,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
character.set_species(species)
// Special Case: This references variables owned by two different datums, so do it here.
if(read_preference(/datum/preference/toggle/human/name_is_always_random))
real_name = random_name(identifying_gender,species)
update_preference_by_type(/datum/preference/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)
@@ -424,18 +423,19 @@ GLOBAL_LIST_EMPTY(preferences_datums)
blood color
*/
if (copy_name)
var/char_real_name = read_preference(/datum/preference/name/real_name)
if(CONFIG_GET(flag/humans_need_surnames))
var/firstspace = findtext(real_name, " ")
var/name_length = length(real_name)
var/firstspace = findtext(char_real_name, " ")
var/name_length = length(char_real_name)
if(!firstspace) //we need a surname
real_name += " [pick(GLOB.last_names)]"
char_real_name += " [pick(GLOB.last_names)]"
else if(firstspace == name_length)
real_name += "[pick(GLOB.last_names)]"
character.real_name = real_name
char_real_name += "[pick(GLOB.last_names)]"
character.real_name = char_real_name
character.name = character.real_name
if(character.dna)
character.dna.real_name = character.real_name
character.nickname = nickname
character.nickname = read_preference(/datum/preference/name/nickname)
character.gender = biological_gender
character.identifying_gender = identifying_gender
+94
View File
@@ -0,0 +1,94 @@
// Name preferences for character creation
// Handles name related validation, including per species.
/// Abstract name preference type that provides species-aware sanitization
/datum/preference/name
abstract_type = /datum/preference/name
savefile_identifier = PREFERENCE_CHARACTER
priority = PREFERENCE_PRIORITY_NAMES
var/maximum_value_length = MAX_NAME_LEN
var/default_species = SPECIES_HUMAN
/// Check if the character is a Full Body Prosthetic (allows numbers in name)
/datum/preference/name/proc/is_fbp(datum/preferences/preferences)
if(!preferences?.organ_data)
return FALSE
return preferences.organ_data[BP_TORSO] == "cyborg"
/datum/preference/name/is_valid(value)
if(!istext(value))
return FALSE
if(length(value) > maximum_value_length)
return FALSE
return TRUE
/datum/preference/name/pref_deserialize(input, datum/preferences/preferences)
if(!istext(input))
return create_default_value()
var/species = default_species
if(preferences?.species)
species = preferences.species
var/allow_numbers = is_fbp(preferences)
var/sanitized = sanitize_name(input, species, allow_numbers)
if(!sanitized)
return create_default_value()
return sanitized
// Note: pref_serialize intentionally does NOT re-sanitize the value.
// The base proc doesn't pass preferences, so we can't check is_fbp().
// Sanitization happens on read via pref_deserialize which DOES have access to preferences.
/datum/preference/name/pref_serialize(input)
if(!istext(input))
return create_default_value()
return input
/datum/preference/name/apply_to_human(mob/living/carbon/human/target, value)
return // Handled in copy_to_mob
/datum/preference/name/apply_to_living(mob/living/target, value)
return
/datum/preference/name/apply_to_silicon(mob/living/silicon/target, value)
return
/datum/preference/name/apply_to_animal(mob/living/simple_mob, value)
return
/// Character's real name
/datum/preference/name/real_name
savefile_key = "real_name"
/datum/preference/name/real_name/create_default_value()
return "Character"
/datum/preference/name/real_name/create_informed_default_value(datum/preferences/preferences)
var/gender = preferences?.identifying_gender || MALE
var/species = preferences?.species || SPECIES_HUMAN
return random_name(gender, species)
/datum/preference/name/real_name/create_random_value(datum/preferences/preferences, datum/species/current_species)
var/gender = preferences?.identifying_gender || MALE
var/species_name = current_species?.name || SPECIES_HUMAN
return random_name(gender, species_name)
/// Character's nickname (optional)
/datum/preference/name/nickname
savefile_key = "nickname"
/datum/preference/name/nickname/is_valid(value)
if(isnull(value) || value == "")
return TRUE
return ..()
/datum/preference/name/nickname/pref_deserialize(input, datum/preferences/preferences)
if(isnull(input) || input == "")
return null
return ..()
/datum/preference/name/nickname/pref_serialize(value, datum/preferences/preferences)
if(isnull(value) || value == "")
return null
return ..()
/datum/preference/name/nickname/create_default_value()
return null
+2 -2
View File
@@ -81,7 +81,7 @@
/mob/living/proc/save_ooc_panel(mob/user)
if(user != src)
return
if(client.prefs.real_name != real_name)
if(client.prefs.read_preference(/datum/preference/name/real_name) != real_name)
to_chat(src, span_danger("Your selected character slot name is not the same as your character's name. Aborting save. Please select [real_name]'s character slot in character setup before saving."))
return
if(client.prefs.save_character())
@@ -186,7 +186,7 @@
/mob/living/proc/save_private_notes(mob/user)
if(user != src)
return
if(client.prefs.real_name != real_name)
if(client.prefs.read_preference(/datum/preference/name/real_name) != real_name)
to_chat(src, span_danger("Your selected character slot name is not the same as your character's name. Aborting save. Please select [real_name]'s character slot in character setup before saving."))
return
if(client.prefs.save_character())
+2 -2
View File
@@ -29,7 +29,7 @@
alpha = 127 //Maybe we'll have hologram calls later.
if(speaker.client && speaker.client.prefs)
var/datum/preferences/p = speaker.client.prefs
name = p.real_name
name = p.read_preference(/datum/preference/name/real_name)
real_name = name
gender = p.identifying_gender
@@ -81,7 +81,7 @@
set desc = "Changes your name."
set src = usr
var/new_name = sanitizeSafe(tgui_input_text(src, "Who would you like to be now?", "Communicator", src.client.prefs.real_name, MAX_NAME_LEN, encode = FALSE), MAX_NAME_LEN)
var/new_name = sanitizeSafe(tgui_input_text(src, "Who would you like to be now?", "Communicator", src.client.prefs.read_preference(/datum/preference/name/real_name), MAX_NAME_LEN, encode = FALSE), MAX_NAME_LEN)
if(new_name)
if(comm)
comm.visible_message(span_notice("[icon2html(comm,viewers(comm))] [src.name] has left, and now you see [new_name]."))
+2 -2
View File
@@ -128,8 +128,8 @@
announce_ghost_joinleave(src)
if(client.prefs.read_preference(/datum/preference/toggle/human/name_is_always_random))
client.prefs.real_name = random_name(client.prefs.identifying_gender)
observer.real_name = client.prefs.real_name
client.prefs.update_preference_by_type(/datum/preference/name/real_name, random_name(client.prefs.identifying_gender))
observer.real_name = client.prefs.read_preference(/datum/preference/name/real_name)
observer.name = observer.real_name
if(!check_rights_for(client, R_HOLDER) && !CONFIG_GET(flag/antag_hud_allowed)) // For new ghosts we remove the verb from even showing up if it's not allowed.
remove_verb(observer, /mob/observer/dead/verb/toggle_antagHUD) // Poor guys, don't know what they are missing!
+1 -1
View File
@@ -400,7 +400,7 @@
if(CONFIG_GET(flag/force_random_names))
new_character.gender = pick(MALE, FEMALE)
client.prefs.real_name = random_name(new_character.gender)
client.prefs.update_preference_by_type(/datum/preference/name/real_name, random_name(new_character.gender))
else
client.prefs.copy_to(new_character, icon_updates = TRUE)
+1 -1
View File
@@ -17,7 +17,7 @@
pass = FALSE
//Are they on the VERBOTEN LIST?
if (GLOB.prevent_respawns.Find(client?.prefs?.real_name))
if (GLOB.prevent_respawns.Find(client?.prefs?.read_preference(/datum/preference/name/real_name)))
to_chat(src,span_warning("You've already quit the round as this character. You can't go back now that you've free'd your job slot. Play another character, or wait for the next round."))
pass = FALSE
+1 -1
View File
@@ -300,7 +300,7 @@ var/list/organ_cache = list()
germ_level = 0
if(owner)
handle_organ_mod_special()
if(!ignore_prosthetic_prefs && owner && owner.client && owner.client.prefs && owner.client.prefs.real_name == owner.real_name)
if(!ignore_prosthetic_prefs && owner && owner.client && owner.client.prefs && owner.client.prefs.read_preference(/datum/preference/name/real_name) == owner.real_name)
var/status = owner.client.prefs.organ_data[organ_tag]
if(status == FBP_ASSISTED)
mechassist()
+1 -1
View File
@@ -584,7 +584,7 @@ This function completely restores a damaged organ to perfect condition.
owner.clear_alert("embeddedobject")
if(owner && !ignore_prosthetic_prefs)
if(owner.client && owner.client.prefs && owner.client.prefs.real_name == owner.real_name)
if(owner.client && owner.client.prefs && owner.client.prefs.read_preference(/datum/preference/name/real_name) == owner.real_name)
var/status = owner.client.prefs.organ_data[organ_tag]
if(status == "amputated")
remove_rejuv()
+1 -1
View File
@@ -102,7 +102,7 @@ GLOBAL_LIST_EMPTY(active_autoresleevers)
//Name matching is ugly but mind doesn't persist to look at.
var/charjob
var/datum/data/record/record_found
record_found = find_general_record("name",ghost_client.prefs.real_name)
record_found = find_general_record("name", ghost_client.prefs.read_preference(/datum/preference/name/real_name))
//Found their record, they were spawned previously
if(record_found)
+1 -1
View File
@@ -57,7 +57,7 @@
/datum/tgui_module/late_choices/tgui_data(mob/new_player/user)
var/list/data = ..()
var/name = user.client.prefs.read_preference(/datum/preference/toggle/human/name_is_always_random) ? "friend" : user.client.prefs.real_name
var/name = user.client.prefs.read_preference(/datum/preference/toggle/human/name_is_always_random) ? "friend" : user.client.prefs.read_preference(/datum/preference/name/real_name)
data["name"] = name
data["duration"] = roundduration2text()
+3 -2
View File
@@ -3,7 +3,8 @@
return
// Are we cool with this prey spawning in at all?
var/answer = tgui_alert(src, "[potential_prey.prefs.real_name] wants to spawn in one of your bellies. Do you accept?", "Inbelly Spawning", list("Yes", "No"))
var/prey_name = potential_prey.prefs.read_preference(/datum/preference/name/real_name)
var/answer = tgui_alert(src, "[prey_name] wants to spawn in one of your bellies. Do you accept?", "Inbelly Spawning", list("Yes", "No"))
if(answer != "Yes")
to_chat(potential_prey, span_notice("Your request was turned down."))
return
@@ -40,7 +41,7 @@
return
// Final confirmation for pred
var/confirmation_pred = tgui_alert(src, "Are you certain that you want [potential_prey.prefs.real_name] spawned in your [belly_choice][absorbed ? ", absorbed" : ""]?", "Inbelly Spawning", list("Yes", "No"))
var/confirmation_pred = tgui_alert(src, "Are you certain that you want [prey_name] spawned in your [belly_choice][absorbed ? ", absorbed" : ""]?", "Inbelly Spawning", list("Yes", "No"))
if(confirmation_pred != "Yes")
to_chat(potential_prey, span_notice("Your pred couldn't finish selection. Try again?"))
+1 -1
View File
@@ -334,7 +334,7 @@
var/choice = tgui_alert(ui.user, "Warning: Saving your vore panel while in the lobby will save it to the CURRENTLY LOADED character slot, and potentially overwrite it. Are you SURE you want to overwrite your current slot with these vore bellies?", "WARNING!", list("No, abort!", "Yes, save."))
if(choice != "Yes, save.")
return TRUE
else if(host.real_name != host.client.prefs.real_name || (!ishuman(host) && !issilicon(host)))
else if(host.real_name != host.client.prefs.read_preference(/datum/preference/name/real_name) || (!ishuman(host) && !issilicon(host)))
var/choice = tgui_alert(ui.user, "Warning: Saving your vore panel while playing what is very-likely not your normal character will overwrite whatever character you have loaded in character setup. Maybe this is your 'playing a simple mob' slot, though. Are you SURE you want to overwrite your current slot with these vore bellies?", "WARNING!", list("No, abort!", "Yes, save."))
if(choice != "Yes, save.")
return TRUE
+3 -2
View File
@@ -60,8 +60,9 @@
return // Failed to load character
// For now as a safety measure we will only save if the name matches.
if(prefs.real_name != persister.real_name)
NOTICE("Persist (P4P): Skipping [persister] because ORIG:[persister.real_name] != CURR:[prefs.real_name].")
var/prefs_real_name = prefs.read_preference(/datum/preference/name/real_name)
if(prefs_real_name != persister.real_name)
NOTICE("Persist (P4P): Skipping [persister] because ORIG:[persister.real_name] != CURR:[prefs_real_name].")
return
return prefs