Added some restrictions to round-start names for humans. this was necessary due to people using meta names like "floor" "unknown" "lol" etc.

If you feel the restrictions are to strict please let me know here or on the feedback forums.

Generally only A-Z, a-z, space, . - ' are allowed.
Names should be 2 words at least.
Names with too many space, . - ' are rejected.
Names are auto-capitalised.
Names with not enough regular alpha-numeric characters are rejected.
Names with bad characters such as \ etc are rejected.

Raised the minimum character age at the request of a few people. It's now the minimum age for enlisting in the army for most countries (17)

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3956 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
elly1989@rocketmail.com
2012-07-01 00:53:52 +00:00
parent bbf978d3cd
commit 2a775f9d1f
2 changed files with 56 additions and 22 deletions

View File

@@ -128,18 +128,64 @@
return t
//For sanitizing user inputs
/proc/reject_bad_text(var/text)
if(length(text) > 512) return //message too long
/proc/reject_bad_text(var/text, var/max_length=512)
if(length(text) > max_length) return //message too long
var/non_whitespace = 0
for(var/i=1, i<=length(text), i++)
switch(text2ascii(text,i))
if(62,60,92,47) return //rejects the text if it contains these bad characters: <, >, \ or /
if(127 to 255) return //rejects weird letters like <20>
if(0 to 31) return //more weird stuff
if(32) //whitespace
if(32) continue //whitespace
else non_whitespace = 1
if(non_whitespace) return text //only accepts the text if it has some non-spaces
//proc for processing names to make it harder for people to use names to metagame. Much stricter than the above.
//Allows only characters (A...Z,a...z), spaces and apostrophes.
//There is a flag to allow numbers
//removes doublespaces and double apostrophes
//lowercases everything and capitalises the first letter of each word (or characters following an apostrophe)
//prevents names which are too short, have too many space, or not enough normal letters
/proc/reject_bad_name(var/t_in, var/allow_numbers=0, var/max_length=MAX_NAME_LEN)
if(length(t_in) > max_length) return //name too long
var/number_of_alphanumeric = 0
var/number_of_spaces = 0
var/last_char_group = 0
var/t_out = ""
for(var/i=1, i<=length(t_in), i++)
var/ascii_char = text2ascii(t_in,i)
switch(ascii_char)
if(65 to 90) //Uppercase letters allowed
switch(last_char_group)
if(3,4,0) t_out += ascii2text(ascii_char)
else t_out += ascii2text(ascii_char+32) //lowercase if not preceeded by space or '
last_char_group = 1
number_of_alphanumeric++
if(97 to 122) //Lowercase letters allowed
switch(last_char_group)
if(3,4,0) t_out += ascii2text(ascii_char-32) //uppercase if preceeded by space or '
else t_out += ascii2text(ascii_char)
last_char_group = 2
number_of_alphanumeric++
if(32) //Space
if(i==1) continue
if(last_char_group!=3) t_out += ascii2text(ascii_char) //so we don't get double-spaces
last_char_group = 3
number_of_spaces++
if(39,45,46) //Apostrophe for dem Oirish names like "O'Neil", dashes for double-barreled names and periods for "James T. Kirk" and AI's
if(i==1) continue
if(last_char_group!=4) t_out += ascii2text(ascii_char) //so we don't get double apostrophes or whatever
last_char_group = 4
if(48 to 57)
if(allow_numbers)
t_out += ascii2text(ascii_char) //Allow numbers (i.e. for borgs andd AIs)
number_of_alphanumeric++
else
return
if(number_of_alphanumeric < 4) return //protects against tiny names like "A" and also names like "' ' ' ' ' ' ' '"
if(number_of_spaces > 4 || number_of_spaces < 1) return //protects against single-word names like "Unknown" and names like "I ' M A D E R P Spaces Lul"
return t_out
/proc/strip_html_simple(var/t,var/limit=MAX_MESSAGE_LEN)
var/list/strip_chars = list("<",">")
t = copytext(t,1,limit)

View File

@@ -439,42 +439,30 @@ datum/preferences
return 1
if(link_tags["real_name"])
var/new_name
switch(link_tags["real_name"])
if("input")
new_name = copytext( (input(user, "Please select a name:", "Character Generation") as text) ,1,MAX_NAME_LEN)
var/list/bad_characters = list("_", "\"", "<", ">", ";", "\[", "\]", "{", "}", "|", "\\","0","1","2","3","4","5","6","7","8","9")
for(var/c in bad_characters)
new_name = dd_replacetext(new_name, c, "")
if(!new_name || (new_name == "Unknown") || (new_name == "floor") || (new_name == "wall") || (new_name == "r-wall"))
alert("Invalid name. Don't do that!")
return
//Carn: To fix BYOND text-parsing errors caused by people using dumb capitalisation in their names.
var/tempname
for(var/N in dd_text2list(new_name, " "))
if(N && tempname) //if both aren't null strings
tempname += " "
tempname += capitalize(lowertext(N))
new_name = tempname
new_name = reject_bad_name( input(user, "Please select a name:", "Character Generation") as text|null )
if("random")
randomize_name()
if(new_name)
real_name = new_name
else
user << "<font color='red'>Invalid name. Your name should be at least ten letters and two words. It should be under [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .</font>"
if(link_tags["age"])
switch(link_tags["age"])
if("input")
var/new_age = input(user, "Please select type in age: 15-45", "Character Generation") as num
var/new_age = input(user, "Please select type in age: 17-45", "Character Generation") as num
if(new_age)
age = max(min(round(text2num(new_age)), 45), 15)
age = max(min(round(text2num(new_age)), 45), 17)
if("random")
age = rand (20, 45)
age = rand (17, 45)
if(link_tags["OOC"])
var/tempnote = ""