Merge branch 'master' into upstream-merge-26965

This commit is contained in:
LetterJay
2017-06-19 15:39:01 -05:00
committed by GitHub
423 changed files with 304918 additions and 166801 deletions
+1 -1
View File
@@ -38,7 +38,7 @@
if(M.client)
body += "<br>\[<b>First Seen:</b> [M.client.player_join_date]\]\[<b>Byond account registered on:</b> [M.client.account_join_date]\]"
body += "<br><b>Show related accounts by:</b> "
body += "<br><br><b>Show related accounts by:</b> "
body += "\[ <a href='?_src_=holder;showrelatedacc=cid;client=\ref[M.client]'>CID</a> | "
body += "<a href='?_src_=holder;showrelatedacc=ip;client=\ref[M.client]'>IP</a> \]"
+4 -1
View File
@@ -66,7 +66,10 @@ GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin())
/client/proc/toggle_AI_interact, /*toggle admin ability to interact with machines as an AI*/
/client/proc/customiseSNPC, /* Customise any interactive crewmembers in the world */
/client/proc/resetSNPC, /* Resets any interactive crewmembers in the world */
/client/proc/open_shuttle_manipulator /* Opens shuttle manipulator UI */
/client/proc/open_shuttle_manipulator, /* Opens shuttle manipulator UI */
/client/proc/deadchat,
/client/proc/toggleprayers,
/client/proc/toggleadminhelpsound
)
GLOBAL_PROTECT(admin_verbs_ban)
GLOBAL_LIST_INIT(admin_verbs_ban, list(/client/proc/unban_panel,/client/proc/DB_ban_panel,/client/proc/stickybanpanel))
+5 -5
View File
@@ -1,11 +1,11 @@
/datum/menu/Admin/Generate_list(client/C)
/datum/verbs/menu/Admin/Generate_list(client/C)
if (C.holder)
. = ..()
/datum/menu/Admin/verb/playerpanel()
/datum/verbs/menu/Admin/verb/playerpanel()
set name = "Player Panel"
set desc = "Player Panel"
set category = "Admin"
usr.client.holder.player_panel_new()
SSblackbox.add_details("admin_verb","Player Panel New") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
if(usr.client.holder)
usr.client.holder.player_panel_new()
SSblackbox.add_details("admin_verb","Player Panel New") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+1 -1
View File
@@ -506,7 +506,7 @@
for(var/datum/mind/N in SSticker.mode.cult)
var/mob/M = N.current
if(M)
dat += "<tr><td><a href='?_src_=holder;adminplayeropts=\ref[M]'>[M.real_name]</a>[M.client ? "" : " <i>(No Client)</i>"][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
dat += "<tr><td><a href='?_src_=holder;adminplayeropts=\ref[M]'>[M.real_name]</a>[N.has_antag_datum(ANTAG_DATUM_CULT_MASTER) ? "<i><font color=red> \[Master\]</font></i>" : ""][M.client ? "" : " <i>(No Client)</i>"][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
dat += "<td><A href='?priv_msg=[M.ckey]'>PM</A></td>"
dat += "<td><A href='?_src_=holder;adminplayerobservefollow=\ref[M]'>FLW</a></td></tr>"
dat += "</table>"
+11 -9
View File
@@ -480,7 +480,8 @@
if(minutes > GLOB.CMinutes)
mins = minutes - GLOB.CMinutes
mins = input(usr,"How long (in minutes)? (Default: 1440)","Ban time",mins ? mins : 1440) as num|null
if(!mins)
if(mins <= 0)
to_chat(usr, "<span class='danger'>[mins] is not a valid duration.</span>")
return
minutes = GLOB.CMinutes + mins
duration = GetExp(minutes)
@@ -914,7 +915,8 @@
switch(alert("Temporary Ban?",,"Yes","No", "Cancel"))
if("Yes")
var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null
if(!mins)
if(mins <= 0)
to_chat(usr, "<span class='danger'>[mins] is not a valid duration.</span>")
return
var/reason = input(usr,"Please State Reason.","Reason") as message|null
if(!reason)
@@ -1109,7 +1111,8 @@
switch(alert("Temporary Ban?",,"Yes","No", "Cancel"))
if("Yes")
var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null
if(!mins)
if(mins <= 0)
to_chat(usr, "<span class='danger'>[mins] is not a valid duration.</span>")
return
var/reason = input(usr,"Please State Reason.","Reason") as message|null
if(!reason)
@@ -1739,7 +1742,7 @@
else if(href_list["reject_custom_name"])
if(!check_rights(R_ADMIN))
return
var/obj/item/station_charter/charter = locate(href_list["reject_custom_name"])
var/obj/item/weapon/station_charter/charter = locate(href_list["reject_custom_name"])
if(istype(charter))
charter.reject_proposed(usr)
else if(href_list["jumpto"])
@@ -2239,7 +2242,7 @@
error_viewer.show_to(owner, null, href_list["viewruntime_linear"])
else if(href_list["showrelatedacc"])
var/client/C = locate(href_list["client"]) in GLOB.clients
var/list/thing_to_check
var/thing_to_check
if(href_list["showrelatedacc"] == "cid")
thing_to_check = C.related_accounts_cid
else
@@ -2247,9 +2250,8 @@
thing_to_check = splittext(thing_to_check, ", ")
var/dat = "Related accounts by [uppertext(href_list["showrelatedacc"])]:<br>"
for(var/thing in thing_to_check)
dat += "[thing]<br>"
var/list/dat = list("Related accounts by [uppertext(href_list["showrelatedacc"])]:")
dat += thing_to_check
usr << browse(dat, "size=420x300")
usr << browse(dat.Join("<br>"), "window=related_[C];size=420x300")
+17
View File
@@ -24,6 +24,23 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
QDEL_NULL(cstatclick)
QDEL_NULL(rstatclick)
return ..()
/datum/admin_help_tickets/proc/TicketByID(id)
var/list/lists = list(active_tickets, closed_tickets, resolved_tickets)
for(var/I in lists)
for(var/J in I)
var/datum/admin_help/AH = J
if(AH.id == id)
return J
/datum/admin_help_tickets/proc/TicketsByCKey(ckey)
. = list()
var/list/lists = list(active_tickets, closed_tickets, resolved_tickets)
for(var/I in lists)
for(var/J in I)
var/datum/admin_help/AH = J
if(AH.initiator_ckey == ckey)
. += AH
//private
/datum/admin_help_tickets/proc/ListInsert(datum/admin_help/new_ticket)
+34 -6
View File
@@ -203,19 +203,19 @@
if(irc)
log_admin_private("PM: [key_name(src)]->IRC: [rawmsg]")
for(var/client/X in GLOB.admins)
to_chat(X, "<B><font color='blue'>PM: [key_name(src, X, 0)]-&gt;IRC:</B> \blue [keywordparsedmsg]</font>" )
for(var/client/X in GLOB.admins)
to_chat(X, "<font color='blue'><B>PM: [key_name(src, X, 0)]-&gt;IRC:</B> [keywordparsedmsg]</font>")
else
window_flash(recipient, ignorepref = TRUE)
log_admin_private("PM: [key_name(src)]->[key_name(recipient)]: [rawmsg]")
//we don't use message_admins here because the sender/receiver might get it too
for(var/client/X in GLOB.admins)
if(X.key!=key && X.key!=recipient.key) //check client/X is an admin and isn't the sender or recipient
to_chat(X, "<B><font color='blue'>PM: [key_name(src, X, 0)]-&gt;[key_name(recipient, X, 0)]:</B> \blue [keywordparsedmsg]</font>" )
to_chat(X, "<font color='blue'><B>PM: [key_name(src, X, 0)]-&gt;[key_name(recipient, X, 0)]:</B> [keywordparsedmsg]</font>" )
#define IRC_AHELP_USAGE "Usage: ticket <close|resolve|icissue|reject|reopen \[ticket #\]|list>"
/proc/IrcPm(target,msg,sender)
var/client/C = GLOB.directory[target]
@@ -225,7 +225,7 @@
var/list/splits = splittext(compliant_msg, " ")
if(splits.len && splits[1] == "ticket")
if(splits.len < 2)
return "Usage: ticket <close|resolve|icissue|reject>"
return IRC_AHELP_USAGE
switch(splits[2])
if("close")
if(ticket)
@@ -243,8 +243,36 @@
if(ticket)
ticket.Reject(irc_tagged)
return "Ticket #[ticket.id] successfully rejected"
if("reopen")
if(ticket)
return "Error: [target] already has ticket #[ticket.id] open"
var/fail = splits.len < 3 ? null : -1
if(!isnull(fail))
fail = text2num(splits[3])
if(isnull(fail))
return "Error: No/Invalid ticket id specified. [IRC_AHELP_USAGE]"
var/datum/admin_help/AH = GLOB.ahelp_tickets.TicketByID(fail)
if(!AH)
return "Error: Ticket #[fail] not found"
if(AH.initiator_ckey != target)
return "Error: Ticket #[fail] belongs to [AH.initiator_ckey]"
AH.Reopen()
return "Ticket #[ticket.id] successfully reopened"
if("list")
var/list/tickets = GLOB.ahelp_tickets.TicketsByCKey(target)
if(!tickets.len)
return "None"
. = ""
for(var/I in tickets)
var/datum/admin_help/AH = I
if(.)
. += ", "
if(AH == ticket)
. += "Active: "
. += "#[AH.id]"
return
else
return "Usage: ticket <close|resolve|icissue|reject>"
return IRC_AHELP_USAGE
return "Error: Ticket could not be found"
var/static/stealthkey
+36 -34
View File
@@ -114,47 +114,49 @@
return
/datum/buildmode/proc/show_help(mob/user)
var/list/dat = list()
switch(mode)
if(BASIC_BUILDMODE)
to_chat(user, "\blue ***********************************************************")
to_chat(user, "\blue Left Mouse Button = Construct / Upgrade")
to_chat(user, "\blue Right Mouse Button = Deconstruct / Delete / Downgrade")
to_chat(user, "\blue Left Mouse Button + ctrl = R-Window")
to_chat(user, "\blue Left Mouse Button + alt = Airlock")
to_chat(user, "")
to_chat(user, "\blue Use the button in the upper left corner to")
to_chat(user, "\blue change the direction of built objects.")
to_chat(user, "\blue ***********************************************************")
dat += "***********************************************************"
dat += "Left Mouse Button = Construct / Upgrade"
dat += "Right Mouse Button = Deconstruct / Delete / Downgrade"
dat += "Left Mouse Button + ctrl = R-Window"
dat += "Left Mouse Button + alt = Airlock"
dat += ""
dat += "Use the button in the upper left corner to"
dat += "change the direction of built objects."
dat += "***********************************************************"
if(ADV_BUILDMODE)
to_chat(user, "\blue ***********************************************************")
to_chat(user, "\blue Right Mouse Button on buildmode button = Set object type")
to_chat(user, "\blue Left Mouse Button on turf/obj = Place objects")
to_chat(user, "\blue Right Mouse Button = Delete objects")
to_chat(user, "")
to_chat(user, "\blue Use the button in the upper left corner to")
to_chat(user, "\blue change the direction of built objects.")
to_chat(user, "\blue ***********************************************************")
dat += "***********************************************************"
dat += "Right Mouse Button on buildmode button = Set object type"
dat += "Left Mouse Button on turf/obj = Place objects"
dat += "Right Mouse Button = Delete objects"
dat += ""
dat += "Use the button in the upper left corner to"
dat += "change the direction of built objects."
dat += "***********************************************************"
if(VAR_BUILDMODE)
to_chat(user, "\blue ***********************************************************")
to_chat(user, "\blue Right Mouse Button on buildmode button = Select var(type) & value")
to_chat(user, "\blue Left Mouse Button on turf/obj/mob = Set var(type) & value")
to_chat(user, "\blue Right Mouse Button on turf/obj/mob = Reset var's value")
to_chat(user, "\blue ***********************************************************")
dat += "***********************************************************"
dat += "Right Mouse Button on buildmode button = Select var(type) & value"
dat += "Left Mouse Button on turf/obj/mob = Set var(type) & value"
dat += "Right Mouse Button on turf/obj/mob = Reset var's value"
dat += "***********************************************************"
if(THROW_BUILDMODE)
to_chat(user, "\blue ***********************************************************")
to_chat(user, "\blue Left Mouse Button on turf/obj/mob = Select")
to_chat(user, "\blue Right Mouse Button on turf/obj/mob = Throw")
to_chat(user, "\blue ***********************************************************")
dat += "***********************************************************"
dat += "Left Mouse Button on turf/obj/mob = Select"
dat += "Right Mouse Button on turf/obj/mob = Throw"
dat += "***********************************************************"
if(AREA_BUILDMODE)
to_chat(user, "\blue ***********************************************************")
to_chat(user, "\blue Left Mouse Button on turf/obj/mob = Select corner")
to_chat(user, "\blue Right Mouse Button on buildmode button = Select generator")
to_chat(user, "\blue ***********************************************************")
dat += "***********************************************************"
dat += "Left Mouse Button on turf/obj/mob = Select corner"
dat += "Right Mouse Button on buildmode button = Select generator"
dat += "***********************************************************"
if(COPY_BUILDMODE)
to_chat(user, "\blue ***********************************************************")
to_chat(user, "\blue Left Mouse Button on obj/turf/mob = Spawn a Copy of selected target")
to_chat(user, "\blue Right Mouse Button on obj/mob = Select target to copy")
to_chat(user, "\blue ***********************************************************")
dat += "***********************************************************"
dat += "Left Mouse Button on obj/turf/mob = Spawn a Copy of selected target"
dat += "Right Mouse Button on obj/mob = Select target to copy"
dat += "***********************************************************"
to_chat(user, "<font color='blue'>[dat.Join("\n")]</font>")
/datum/buildmode/proc/change_settings(mob/user)
switch(mode)
@@ -14,11 +14,12 @@
if(type == INDIVIDUAL_SHOW_ALL_LOG)
dat += "<center>Displaying all logs of [key_name(M)]</center><br><hr>"
for(var/log_type in M.logging)
var/list/reversed = M.logging[log_type]
reversed = reverseRange(reversed.Copy())
dat += "<center><b>[log_type]</b></center><br>"
for(var/entry in reversed)
dat += "<font size=2px>[entry]: [reversed[entry]]</font><br>"
var/list/reversed = M.logging[log_type]
if(islist(reversed))
reversed = reverseRange(reversed.Copy())
for(var/entry in reversed)
dat += "<font size=2px>[entry]: [reversed[entry]]</font><br>"
dat += "<hr>"
else
dat += "<center>[type] of [key_name(M)]</center><br>"
@@ -26,6 +27,6 @@
if(reversed)
reversed = reverseRange(reversed.Copy())
for(var/entry in reversed)
dat += "<font size=2px>[entry]: [reversed[entry]]</font><br>"
dat += "<font size=2px>[entry]: [reversed[entry]]</font><hr>"
usr << browse(dat, "window=invidual_logging;size=600x480")
usr << browse(dat, "window=invidual_logging_[M];size=600x480")
+3 -3
View File
@@ -612,8 +612,8 @@ GLOBAL_PROTECT(VVpixelmovement)
if (O.vv_edit_var(variable, var_new) == FALSE)
to_chat(src, "Your edit was rejected by the object.")
return
log_world("### VarEdit by [src]: [O.type] [variable]=[html_encode("[O.vars[variable]]")]")
log_admin("[key_name(src)] modified [original_name]'s [variable] to [O.vars[variable]]")
var/msg = "[key_name_admin(src)] modified [original_name]'s [variable] to [O.vars[variable]]"
log_world("### VarEdit by [src]: [O.type] [variable]=[html_encode("[var_new]")]")
log_admin("[key_name(src)] modified [original_name]'s [variable] to [var_new]")
var/msg = "[key_name_admin(src)] modified [original_name]'s [variable] to [var_new]"
message_admins(msg)
admin_ticket_log(O, msg)
+1 -1
View File
@@ -99,7 +99,7 @@ GLOBAL_VAR_INIT(highlander, FALSE)
var/datum/gang/multiverse/G = new(src, "[H.real_name]")
SSticker.mode.gangs += G
G.bosses += H.mind
G.bosses[H.mind] = 0 //No they don't use influence but this prevents runtimes.
G.add_gang_hud(H.mind)
H.mind.gang_datum = G
+23 -23
View File
@@ -1,23 +1,23 @@
#define WHITELISTFILE "config/whitelist.txt, gamedata/config/whitelist.txt"
GLOBAL_LIST(whitelist)
GLOBAL_PROTECT(whitelist)
/proc/load_whitelist()
GLOB.whitelist = list()
for(var/line in world.file2list(WHITELISTFILE))
if(!line)
continue
if(findtextEx(line,"#",1,2))
continue
GLOB.whitelist += line
if(!GLOB.whitelist.len)
GLOB.whitelist = null
/proc/check_whitelist(var/ckey)
if(!GLOB.whitelist)
return FALSE
. = (ckey in GLOB.whitelist)
#undef WHITELISTFILE
#define WHITELISTFILE "config/whitelist.txt"
GLOBAL_LIST(whitelist)
GLOBAL_PROTECT(whitelist)
/proc/load_whitelist()
GLOB.whitelist = list()
for(var/line in world.file2list(WHITELISTFILE))
if(!line)
continue
if(findtextEx(line,"#",1,2))
continue
GLOB.whitelist += ckey(line)
if(!GLOB.whitelist.len)
GLOB.whitelist = null
/proc/check_whitelist(var/ckey)
if(!GLOB.whitelist)
return FALSE
. = (ckey in GLOB.whitelist)
#undef WHITELISTFILE