mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-28 14:37:27 +01:00
language key initial customization
This commit is contained in:
@@ -11,12 +11,14 @@
|
||||
S["extra_languages"] >> pref.extra_languages
|
||||
testing("LANGSANI: Loaded from [pref.client]'s character [pref.real_name || "-name not yet loaded-"] savefile: [english_list(pref.alternate_languages || list())]")
|
||||
S["language_prefixes"] >> pref.language_prefixes
|
||||
S["language_custom_keys"] >> pref.language_custom_keys
|
||||
|
||||
/datum/category_item/player_setup_item/general/language/save_character(var/savefile/S)
|
||||
S["language"] << pref.alternate_languages
|
||||
S["extra_languages"] << pref.extra_languages
|
||||
testing("LANGSANI: Saved to [pref.client]'s character [pref.real_name || "-name not yet loaded-"] savefile: [english_list(pref.alternate_languages || list())]")
|
||||
S["language_prefixes"] << pref.language_prefixes
|
||||
S["language_custom_keys"] << pref.language_custom_keys
|
||||
|
||||
/datum/category_item/player_setup_item/general/language/sanitize_character()
|
||||
if(!islist(pref.alternate_languages))
|
||||
|
||||
@@ -192,6 +192,9 @@
|
||||
/mob/proc/remove_language(var/rem_language)
|
||||
var/datum/language/L = GLOB.all_languages[rem_language]
|
||||
. = (L in languages)
|
||||
var/prefix = get_custom_prefix_by_lang(src, L)
|
||||
if(prefix)
|
||||
language_keys.Remove(prefix)
|
||||
languages.Remove(L)
|
||||
|
||||
/mob/living/remove_language(rem_language)
|
||||
@@ -240,7 +243,8 @@
|
||||
|
||||
for(var/datum/language/L in languages)
|
||||
if(!(L.flags & NONGLOBAL))
|
||||
. += "<b>[L.name] ([get_language_prefix()][L.key])</b><br/>[L.desc]<br/><br/>"
|
||||
var/lang_key = get_custom_prefix_by_lang(src, L)
|
||||
. += "<b>[L.name] ([get_language_prefix()][L.key][lang_key ? " [get_language_prefix()][lang_key]" : ""])</b><br/>[L.desc]<br/><br/>"
|
||||
|
||||
/mob/living/check_lang_data()
|
||||
. = ""
|
||||
@@ -250,12 +254,13 @@
|
||||
|
||||
for(var/datum/language/L in languages)
|
||||
if(!(L.flags & NONGLOBAL))
|
||||
var/lang_key = get_custom_prefix_by_lang(src, L)
|
||||
if(L == default_language)
|
||||
. += "<b>[L.name] ([get_language_prefix()][L.key])</b> - default - <a href='byond://?src=\ref[src];default_lang=reset'>reset</a><br/>[L.desc]<br/><br/>"
|
||||
. += "<b>[L.name] ([get_language_prefix()][L.key][lang_key ? " [get_language_prefix()][lang_key]" : ""])</b> <a href='byond://?src=\ref[src];set_lang_key=\ref[L]'>Edit Custom Key</a> - default - <a href='byond://?src=\ref[src];default_lang=reset'>reset</a><br/>[L.desc]<br/><br/>"
|
||||
else if (can_speak(L))
|
||||
. += "<b>[L.name] ([get_language_prefix()][L.key])</b> - <a href='byond://?src=\ref[src];default_lang=\ref[L]'>set default</a><br/>[L.desc]<br/><br/>"
|
||||
. += "<b>[L.name] ([get_language_prefix()][L.key][lang_key ? " [get_language_prefix()][lang_key]" : ""])</b> <a href='byond://?src=\ref[src];set_lang_key=\ref[L]'>Edit Custom Key</a> - <a href='byond://?src=\ref[src];default_lang=\ref[L]'>set default</a><br/>[L.desc]<br/><br/>"
|
||||
else
|
||||
. += "<b>[L.name] ([get_language_prefix()][L.key])</b> - cannot speak!<br/>[L.desc]<br/><br/>"
|
||||
. += "<b>[L.name] ([get_language_prefix()][L.key][lang_key ? " [get_language_prefix()][lang_key]" : ""])</b> <a href='byond://?src=\ref[src];set_lang_key=\ref[L]'>Edit Custom Key</a> - cannot speak!<br/>[L.desc]<br/><br/>"
|
||||
|
||||
/mob/verb/check_languages()
|
||||
set name = "Check Known Languages"
|
||||
@@ -279,6 +284,16 @@
|
||||
set_default_language(L)
|
||||
check_languages()
|
||||
return 1
|
||||
else if(href_list["set_lang_key"])
|
||||
var/datum/language/L = locate(href_list["set_lang_key"])
|
||||
if(L && (L in languages))
|
||||
var/old_key = get_custom_prefix_by_lang(src, L)
|
||||
var/custom_key = tgui_input_text(src, "Input a new key for [L.name]", "Language Key", null)
|
||||
if(custom_key && length(custom_key) == 1)
|
||||
language_keys[custom_key] = L
|
||||
if(old_key && old_key != custom_key)
|
||||
language_keys.Remove(old_key)
|
||||
check_languages()
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -287,5 +302,17 @@
|
||||
if(L.flags & except_flags)
|
||||
continue
|
||||
target.add_language(L.name)
|
||||
for(var/key in source.language_keys)
|
||||
if(L == source.language_keys[key])
|
||||
if(!(key in target.language_keys))
|
||||
target.language_keys[key] = L
|
||||
|
||||
/proc/get_custom_prefix_by_lang(var/mob/our_mob, var/language)
|
||||
if(!our_mob || !our_mob.language_keys.len || !language)
|
||||
return
|
||||
|
||||
for(var/key in our_mob.language_keys)
|
||||
if(our_mob.language_keys[key] == language)
|
||||
return key
|
||||
|
||||
#undef SCRAMBLE_CACHE_LEN
|
||||
|
||||
@@ -94,6 +94,7 @@
|
||||
var/list/pinned = list() // List of things pinning this creature to walls (see living_defense.dm)
|
||||
var/list/embedded = list() // Embedded items, since simple mobs don't have organs.
|
||||
var/list/languages = list() // For speaking/listening.
|
||||
var/list/language_keys = list() // List of language keys indexed by language
|
||||
var/species_language = null // For species who want reset to use a specified default.
|
||||
var/only_species_language = 0 // For species who can only speak their default and no other languages. Does not affect understanding.
|
||||
var/list/speak_emote = list("says") // Verbs used when speaking. Defaults to 'say' if speak_emote is null.
|
||||
|
||||
@@ -180,6 +180,8 @@
|
||||
// Okay, we're definitely now trying to invoke a language (probably)
|
||||
// This "[]" is probably unnecessary but BYOND will runtime if a number is used
|
||||
var/datum/language/L = GLOB.language_keys["[language_key]"]
|
||||
if(language_key in language_keys && language_keys[language_key])
|
||||
L = language_keys[language_key]
|
||||
|
||||
// MULTILINGUAL_SPACE enforces a space after the language key
|
||||
if(client && (client.prefs.multilingual_mode == MULTILINGUAL_SPACE) && (text2ascii(copytext(selection, 3, 4)) != 32)) // If we're looking for a space and we don't find one
|
||||
|
||||
+1
-1
@@ -4159,6 +4159,6 @@
|
||||
#include "maps\submaps\space_submaps\debrisfield\debrisfield.dm"
|
||||
#include "maps\submaps\surface_submaps\wilderness\wilderness.dm"
|
||||
#include "maps\submaps\surface_submaps\wilderness\wilderness_areas.dm"
|
||||
#include "maps\tether\tether.dm"
|
||||
#include "maps\virgo_minitest\virgo_minitest.dm"
|
||||
#include "maps\~map_system\maps.dm"
|
||||
// END_INCLUDE
|
||||
|
||||
Reference in New Issue
Block a user