diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 18acc2cf..e2c1b007 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -142,7 +142,7 @@ //checks text for html tags //if tag is not in whitelist (var/list/paper_tag_whitelist in global.dm) //relpaces < with < -proc/checkhtml(var/t) +proc/checkhtml(var/t, var/whitelist = paper_tag_whitelist) t = sanitize_simple(t, list("&#"=".")) var/p = findtext(t,"<",1) while (p) //going through all the tags @@ -153,8 +153,10 @@ proc/checkhtml(var/t) tag = copytext(t,start, p) p++ tag = copytext(t,start+1, p) - if (!(tag in paper_tag_whitelist)) //if it's unkown tag, disarming it + if (!(tag in whitelist)) //if it's unkown tag, disarming it t = copytext(t,1,start-1) + "<" + copytext(t,start+1) + if(whitelist == signature_tag_whitelist) + return null p = findtext(t,"<",p) return t /* diff --git a/code/datums/mind.dm b/code/datums/mind.dm index e9ddd5eb..b0c224e1 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -62,6 +62,10 @@ datum/mind // the world.time since the mob has been brigged, or -1 if not at all var/brigged_since = -1 + // The custom signature holder + var/signature + var/signature_font + New(var/key) src.key = key @@ -1288,6 +1292,8 @@ datum/mind else world.log << "## DEBUG: mind_initialize(): No ticker ready yet! Please inform Carn" if(!mind.name) mind.name = real_name + if(client.prefs.signature) mind.signature = client.prefs.signature + if(client.prefs.signature_font) mind.signature_font = client.prefs.signature_font mind.current = src //HUMAN diff --git a/code/global.dm b/code/global.dm index 57b90a85..90c139f7 100644 --- a/code/global.dm +++ b/code/global.dm @@ -37,6 +37,7 @@ var/list/paper_tag_whitelist = list("center","p","div","span","h1","h2","h3","h4 var/list/paper_blacklist = list("java","onblur","onchange","onclick","ondblclick","onfocus","onkeydown", \ "onkeypress","onkeyup","onload","onmousedown","onmousemove","onmouseout","onmouseover", \ "onmouseup","onreset","onselect","onsubmit","onunload") +var/list/signature_tag_whitelist = list("i","u","b","small","big") var/BLINDBLOCK = 0 var/DEAFBLOCK = 0 diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f35ed16b..daed9a39 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -125,10 +125,14 @@ datum/preferences var/uplinklocation = "PDA" - // OOC Metadata: + // OOC Metadata: var/metadata = "" var/slot_name = "" + //Signature information: + var/signature + var/signature_font + /datum/preferences/New(client/C) b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") if(istype(C)) @@ -139,6 +143,8 @@ datum/preferences return gender = pick(MALE, FEMALE) real_name = random_name(gender) + signature = "[real_name]" + signature_font = "Verdanta" gear = list() @@ -401,6 +407,11 @@ datum/preferences dat += "pAI Configuration
" dat += "
" + dat += "Character's Signature
" + dat += "Edit Font Help
" + dat += "[signature]
" + + dat += "
Hair
" dat += "Change Color
__
" dat += " Style: [h_style]
" @@ -1017,11 +1028,34 @@ datum/preferences gear -= gear_name break + else if(href_list["preference"] == "signature") + switch(href_list["task"]) + if("input") + var/raw_signature = input(user, "Choose your character's signature:","Character Preference") as text + if(!isnull(raw_signature)) + var/new_signature = checkhtml(raw_signature, signature_tag_whitelist) + if(new_signature && !(length(new_signature) > MAX_NAME_LEN + 12)) + signature = new_signature + else + user << "Invalid signature. Your character's signature should be at least 2 and at most [MAX_NAME_LEN + 12] characters long. For accepted formatting tags, please review the Help option." + if("help") + var/HTML + HTML += "A character's signature can be augmented with the following tags:
" + HTML += "" + HTML += "

Beyond that, a maximum of [MAX_NAME_LEN + 12] characters are allowed for the signature text, including symbols." + user << browse(HTML, "window=signaturehelp;size=350x300") + if("font") + signature_font = input(user, "Choose your character's signature:", "Character Preference") as null|anything in list("Times New Roman", "Verdana") + switch(href_list["task"]) if("random") switch(href_list["preference"]) if("name") real_name = random_name(gender) + signature = "[real_name]" if("age") age = rand(AGE_MIN, AGE_MAX) if("hair") @@ -1414,6 +1448,7 @@ datum/preferences religion = sanitize(copytext(raw_choice,1,MAX_MESSAGE_LEN)) return religion = choice + else switch(href_list["preference"]) if("gender") @@ -1500,6 +1535,8 @@ datum/preferences /datum/preferences/proc/copy_to(mob/living/carbon/human/character, safety = 0) if(be_random_name) real_name = random_name(gender) + signature = "[real_name]" + signature_font = "Verdana" if(config.humans_need_surnames) var/firstspace = findtext(real_name, " ") diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index cb375f71..d30d80c1 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -179,6 +179,9 @@ S["UI_style_color"] << UI_style_color S["UI_style_alpha"] << UI_style_alpha + S["signature"] >> signature + S["signature_font"] >> signature_font + //Sanitize metadata = sanitize_text(metadata, initial(metadata)) real_name = reject_bad_name(real_name) @@ -187,6 +190,8 @@ if(isnull(spawnpoint)) spawnpoint = "Arrivals Shuttle" if(isnull(nanotrasen_relation)) nanotrasen_relation = initial(nanotrasen_relation) if(!real_name) real_name = random_name(gender) + if(!signature) signature = "[real_name]" + if(!signature_font) signature_font = "Times New Roman" be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name)) gender = sanitize_gender(gender) age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age)) @@ -319,6 +324,9 @@ S["UI_style_color"] << UI_style_color S["UI_style_alpha"] << UI_style_alpha + S["signature"] << signature + S["signature_font"] << signature_font + return 1 diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index e9072d1a..e07b8d90 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -204,7 +204,7 @@ t = replacetext(t, "\[/u\]", "") t = replacetext(t, "\[large\]", "") t = replacetext(t, "\[/large\]", "") - t = replacetext(t, "\[sign\]", "[user ? user.real_name : "Anonymous"]") + t = replacetext(t, "\[sign\]", "[user ? user.mind.signature : "Anonymous"]") t = replacetext(t, "\[field\]", "") if(!iscrayon)