Update with master

This commit is contained in:
Archie
2021-05-04 03:28:10 -03:00
1103 changed files with 123721 additions and 20971 deletions
-11
View File
@@ -104,17 +104,6 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
if(!src.holder) return
message_admins("[key_name_admin(usr)] manually reloaded mentors")
//Flavor Text
/mob/living/carbon/human/verb/set_flavor()
set name = "Set Flavor Text"
set desc = "Sets an extended description of your character's features."
set category = "IC"
var/new_flavor = input(src, "Enter your new flavor text:", "Flavor text", null) as message|null
if(!isnull(new_flavor))
flavor_text = sanitize(new_flavor)
to_chat(src, "Your flavor text has been updated.")
//LOOC toggles
/client/verb/listen_looc()
set name = "Show/Hide LOOC"
+8 -4
View File
@@ -522,10 +522,8 @@
used_key_list[input_key] = 1
return input_key
#if DM_VERSION > 513
#error Remie said that lummox was adding a way to get a lists
#error contents via list.values, if that is true remove this
#error otherwise, update the version and bug lummox
#if DM_VERSION < 513
#error For the love of god do not compile the server below 513
#endif
//Flattens a keyed list into a list of it's contents
/proc/flatten_list(list/key_list)
@@ -573,3 +571,9 @@
L1[key] += other_value
else
L1[key] = other_value
/proc/assoc_list_strip_value(list/input)
var/list/ret = list()
for(var/key in input)
ret += key
return ret
+1 -1
View File
@@ -55,7 +55,7 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_shapes_list)
GLOB.breasts_size_list = list ("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o") //We need the list to choose from initialized, but it's no longer a sprite_accessory thing.
GLOB.genital_fluids_list = list ("Milk", "Water", "Semen", "Femcum")
GLOB.genital_fluids_list = list ("Milk", "Water", "Semen", "Femcum", "Honey")
GLOB.gentlemans_organ_names = list("phallus", "willy", "dick", "prick", "member", "tool", "gentleman's organ", "cock", "wang", "knob", "dong", "joystick", "pecker", "johnson", "weenie", "tadger", "schlong", "thirsty ferret", "baloney pony", "schlanger")
for(var/K in GLOB.breasts_shapes_list)
var/datum/sprite_accessory/breasts/value = GLOB.breasts_shapes_list[K]
+8 -1
View File
@@ -186,6 +186,9 @@
"cock_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
"has_sheath" = FALSE,
"sheath_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
"has_belly" = FALSE,
"hide_belly" = FALSE,
"belly_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
"has_balls" = FALSE,
"balls_internal" = FALSE,
"balls_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
@@ -227,7 +230,9 @@
"womb_fluid" = "femcum",
"ipc_screen" = snowflake_ipc_antenna_list ? pick(snowflake_ipc_antenna_list) : "None",
"ipc_antenna" = "None",
"flavor_text" = ""))
"flavor_text" = "",
"silicon_flavor_text" = "",
"ooc_text" = ""))
/proc/random_hair_style(gender)
switch(gender)
@@ -546,6 +551,8 @@ GLOBAL_LIST_EMPTY(species_list)
override = TRUE
if(isnewplayer(M) && !override)
continue
if(SSticker.current_state == GAME_STATE_FINISHED)
override = TRUE
if(M.stat != DEAD && !override)
continue
if(speaker_key && speaker_key in prefs.ignoring)
+1 -1
View File
@@ -10,7 +10,7 @@
announcement += "<br><h2 class='alert'>[html_encode(title)]</h2>"
else if(type == "Captain")
announcement += "<h1 class='alert'>Captain Announces</h1>"
GLOB.news_network.SubmitArticle(text, "Captain's Announcement", "Station Announcements", null)
GLOB.news_network.SubmitArticle(html_encode(text), "Captain's Announcement", "Station Announcements", null)
else
if(!sender_override)
+27 -7
View File
@@ -163,6 +163,7 @@
set waitfor = FALSE
to_chat(world, "<BR><BR><BR><span class='big bold'>The round has ended.</span>")
var/botmsg = "**The Round has ended!**```Round ID: [GLOB.round_id]\nRound Time: [DisplayTimeText(world.time - SSticker.round_start_time)]\nTotal Population: [GLOB.joined_player_list.len]```"
if(LAZYLEN(GLOB.round_end_notifiees))
send2irc("Notice", "[GLOB.round_end_notifiees.Join(", ")] the round has ended.")
@@ -179,6 +180,20 @@
var/popcount = gather_roundend_feedback()
display_report(popcount)
CHECK_TICK
//Hyper bot list players
botmsg += "\n**The Crew!** ```"
for(var/p in GLOB.player_list)
var/mob/living/P = p //the living crew members
if(P)
botmsg += "[P.real_name]"
if(P.job)
botmsg += " ([P.job])"
botmsg += "\n"
botmsg += "```"
CHECK_TICK
// Add AntagHUD to everyone, see who was really evil the whole time!
@@ -189,6 +204,15 @@
CHECK_TICK
set_observer_default_invisibility(0, "<span class='warning'>The round is over! You are now visible to the living.</span>")
CHECK_TICK
// Stop eorg mech prepping.
for(var/obj/mecha/combat/Obj in world)
qdel(Obj)
CHECK_TICK
//Set news report and mode result
mode.set_round_result()
@@ -199,10 +223,6 @@
if(length(CONFIG_GET(keyed_list/cross_server)))
send_news_report()
//tell the nice people on discord what went on before the salt cannon happens.
world.TgsTargetedChatBroadcast("The current round has ended. Please standby for your shift interlude Kinaris News Network's report!", FALSE)
world.TgsTargetedChatBroadcast(send_news_report(),FALSE)
CHECK_TICK
//These need update to actually reflect the real antagonists
@@ -217,7 +237,6 @@
total_antagonists[A.name] += "[key_name(A.owner)]"
CHECK_TICK
//Now print them all into the log!
log_game("Antagonists at round end were...")
for(var/antag_name in total_antagonists)
@@ -234,6 +253,7 @@
SSblackbox.Seal()
sleep(50)
world.hypermessage(botmsg)
ready_for_reboot = TRUE
standard_reboot()
@@ -331,7 +351,7 @@
if(!previous)
var/list/report_parts = list(personal_report(C), GLOB.common_report)
content = report_parts.Join()
C.verbs -= /client/proc/show_previous_roundend_report
remove_verb(C, /client/proc/show_previous_roundend_report)
fdel(filename)
text2file(content, filename)
else
@@ -510,7 +530,7 @@
var/jobtext = ""
if(ply.assigned_role)
jobtext = " the <b>[ply.assigned_role]</b>"
var/text = "<b>[ply.key]</b> was <b>[ply.name]</b>[jobtext] and"
var/text = "<b>[ply.hide_ckey ? "<b>[ply.name]</b>[jobtext] " : "[ply.key]</b> was <b>[ply.name]</b>[jobtext] and "]"
if(ply.current)
if(ply.current.stat == DEAD)
text += " <span class='redtext'>died</span>"
+49 -1
View File
@@ -44,6 +44,12 @@
index = findtext(t, char, index + length(char))
return t
/proc/sanitize_name(t,list/repl_chars = null)
if(t == "space" || t == "floor" || t == "wall" || t == "r-wall" || t == "monkey" || t == "unknown" || t == "inactive ai") //prevents these common metagamey names
alert("Invalid name.")
return ""
return sanitize(t)
/proc/sanitize_filename(t)
return sanitize_simple(t, list("\n"="", "\t"="", "/"="", "\\"="", "?"="", "%"="", "*"="", ":"="", "|"="", "\""="", "<"="", ">"=""))
@@ -773,6 +779,48 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
shuffle_inplace(rearranged)
return "[prefix][jointext(rearranged, " ")]"
/proc/autocorrect(var/input as text) // syntax is "stringtoreplace"="stringtoreplacewith"
return input = replace_characters(input, list(
" i "=" I ",
"i'm"="I'm",
"s's"="s'",
"isnt"="isn't",
"dont"="don't",
"shouldnt"="shouldn't",
" ive "=" I've ",
"whos"="who's",
"whove"="who've",
"whod"="whod",
"whats"="whats",
"whatd"="whatd",
"thats"="thats",
"thatll"="thatll",
"thatd"="thatd",
" nows "=" nows ",
"isnt"="isnt",
"arent"="arent",
"wasnt"="wasnt",
"werent"="werent",
"havent"="havent",
"hasnt"="hasnt",
"hadnt"="hadnt",
"doesnt"="doesnt",
"didnt"="didnt",
"couldnt"="couldnt",
"wouldnt"="wouldnt",
"mustnt"="mustnt",
" alot "=" a lot ",
" allthough"=" although",
"shouldnt"="shouldnt"
))
/*
* Text modification
*/
/proc/replace_characters(var/t,var/list/repl_chars)
for(var/char in repl_chars)
t = replacetext(t, char, repl_chars[char])
return t
#define is_alpha(X) ((text2ascii(X) <= 122) && (text2ascii(X) >= 97))
#define is_digit(X) ((length(X) == 1) && (length(text2num(X)) == 1))
#define is_digit(X) ((length(X) == 1) && (length(text2num(X)) == 1))
+6 -5
View File
@@ -444,11 +444,8 @@ Turf and target are separate in case you want to teleport some distance from a t
var/y = min(world.maxy, max(1, A.y + dy))
return locate(x,y,A.z)
#if DM_VERSION > 513
#warn if you're getting this warning it means 513 is stable
#warn and you should remove this tidbit
#endif
#if DM_VERSION < 513
#warn what the fuck are you doing? Compile on 513+ not below.
/proc/arctan(x)
var/y=arcsin(x/sqrt(1+x*x))
return y
@@ -1505,6 +1502,10 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
var/list/blocked = list(/obj/item/reagent_containers/food/drinks/soda_cans,
/obj/item/reagent_containers/food/drinks/bottle
)
blocked |= typesof(/obj/item/reagent_containers/food/drinks/prospacillin,
/obj/item/reagent_containers/food/drinks/diminicillin
)
return pick(subtypesof(/obj/item/reagent_containers/food/drinks) - blocked)
//For these two procs refs MUST be ref = TRUE format like typecaches!
@@ -1612,4 +1613,4 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
if(190)
return "."
if(189)
return "-"
return "-"
+96
View File
@@ -0,0 +1,96 @@
/**
* handles adding verbs and updating the stat panel browser
*
* pass the verb type path to this instead of adding it directly to verbs so the statpanel can update
* Arguments:
* * target - Who the verb is being added to, client or mob typepath
* * verb - typepath to a verb, or a list of verbs, supports lists of lists
*/
/proc/add_verb(client/target, verb_or_list_to_add)
if(!target)
CRASH("add_verb called without a target")
if(IsAdminAdvancedProcCall())
return
var/mob/mob_target = null
if(ismob(target))
mob_target = target
target = mob_target.client
else if(!istype(target, /client))
CRASH("add_verb called on a non-mob and non-client")
var/list/verbs_list = list()
if(!islist(verb_or_list_to_add))
verbs_list += verb_or_list_to_add
else
var/list/verb_listref = verb_or_list_to_add
var/list/elements_to_process = verb_listref.Copy()
while(length(elements_to_process))
var/element_or_list = elements_to_process[length(elements_to_process)] //Last element
elements_to_process.len--
if(islist(element_or_list))
elements_to_process += element_or_list //list/a += list/b adds the contents of b into a, not the reference to the list itself
else
verbs_list += element_or_list
if(mob_target)
mob_target.verbs += verbs_list
if(!target)
return //Our work is done.
else
target.verbs += verbs_list
var/list/output_list = list()
for(var/thing in verbs_list)
var/procpath/verb_to_add = thing
output_list[++output_list.len] = list(verb_to_add.category, verb_to_add.name)
output_list = url_encode(json_encode(output_list))
target << output("[output_list];", "statbrowser:add_verb_list")
/**
* handles removing verb and sending it to browser to update, use this for removing verbs
*
* pass the verb type path to this instead of removing it from verbs so the statpanel can update
* Arguments:
* * target - Who the verb is being removed from, client or mob typepath
* * verb - typepath to a verb, or a list of verbs, supports lists of lists
*/
/proc/remove_verb(client/target, verb_or_list_to_remove)
if(IsAdminAdvancedProcCall())
return
var/mob/mob_target = null
if(ismob(target))
mob_target = target
target = mob_target.client
else if(!istype(target, /client))
CRASH("remove_verb called on a non-mob and non-client")
var/list/verbs_list = list()
if(!islist(verb_or_list_to_remove))
verbs_list += verb_or_list_to_remove
else
var/list/verb_listref = verb_or_list_to_remove
var/list/elements_to_process = verb_listref.Copy()
while(length(elements_to_process))
var/element_or_list = elements_to_process[length(elements_to_process)] //Last element
elements_to_process.len--
if(islist(element_or_list))
elements_to_process += element_or_list //list/a += list/b adds the contents of b into a, not the reference to the list itself
else
verbs_list += element_or_list
if(mob_target)
mob_target.verbs -= verbs_list
if(!target)
return //Our work is done.
else
target.verbs -= verbs_list
var/list/output_list = list()
for(var/thing in verbs_list)
var/procpath/verb_to_remove = thing
output_list[++output_list.len] = list(verb_to_remove.category, verb_to_remove.name)
output_list = url_encode(json_encode(output_list))
target << output("[output_list];", "statbrowser:remove_verb_list")