diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 25a64620a70..047d08e9865 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1671,19 +1671,25 @@ message_admins("[key_name_admin(src.owner)] replied to [key_name_admin(H)]'s Centcom message with: \"[input]\"") to_chat(H, "You hear something crackle in your headset for a moment before a voice speaks. \"Please stand by for a message from Central Command. Message as follows. [input]. Message ends.\"") - else if(href_list["BorgingFax"]) + else if(href_list["EvilFax"]) if(!check_rights(R_ADMIN)) return - var/mob/living/carbon/human/H = locate(href_list["BorgingFax"]) + var/mob/living/carbon/human/H = locate(href_list["EvilFax"]) if(!istype(H)) to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return - if(alert(src.owner, "Are you sure you want to send [key_name(H)] a demotion fax that will borg them when they read it?", "Confirm?" , "Yes" , "No") != "Yes") + var/etypes = list("borging","corgifying","explosive","memetickillagent","honktumor","demotion") + var/eviltype = input(src.owner, "Which type of evil fax do you wish to send [H]?","Its good to be baaaad...", "") as null|anything in etypes + if (!(eviltype in etypes)) return - var/obj/item/weapon/paper/borging/P = new /obj/item/weapon/paper/borging(null) + var/obj/item/weapon/paper/evilfax/P = new /obj/item/weapon/paper/evilfax(null) var/obj/machinery/photocopier/faxmachine/fax = locate(href_list["originfax"]) - P.name = "paper" - P.info = "A reminder: per the terms of your contract, stupid faxes will get you demoted." + P.name = "Central Command - paper" + P.info = "A reminder: per the terms of your contract, stupid faxes will get you demoted, or worse." + P.myeffect = eviltype + P.mytarget = H + if(alert("Do you want the Evil Fax to activate automatically if [H] tries to ignore it?",,"Yes", "No") == "Yes") + P.activate_on_timeout = 1 P.x = rand(-2, 0) P.y = rand(-1, 2) P.offset_x += P.x @@ -1692,23 +1698,78 @@ var/stampvalue = "cent" var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') stampoverlay.icon_state = "paper_stamp-[stampvalue]" + stampoverlay.pixel_x = P.x + stampoverlay.pixel_y = P.y P.stamped = list() P.stamped += /obj/item/weapon/stamp/centcom + if(!P.ico) + P.ico = new + P.ico += "paper_stamp-[stampvalue]" P.overlays += stampoverlay P.stamps += "
"
- P.borgtarget = H
P.update_icon()
+ //fax.receivefax(P) // this does not work, it does not preserve the type, we have to physically teleport the fax paper instead
P.loc = fax.loc
- //fax.receivefax(P)
if(istype(H) && H.stat == CONSCIOUS && (istype(H.l_ear, /obj/item/device/radio/headset) || istype(H.r_ear, /obj/item/device/radio/headset)))
to_chat(H, "Your headset pings, notifying you that a reply to your fax has arrived.")
- to_chat(src.owner, "You sent a borging fax to [H]")
- log_admin("[key_name(src.owner)] sent [key_name(H)] a borging fax")
- message_admins("[key_name_admin(src.owner)] replied to [key_name_admin(H)] with a borging fax")
+ to_chat(src.owner, "You sent a [eviltype] fax to [H]")
+ log_admin("[key_name(src.owner)] sent [key_name(H)] a [eviltype] fax")
+ message_admins("[key_name_admin(src.owner)] replied to [key_name_admin(H)] with a [eviltype] fax")
+ else if(href_list["FaxReplyTemplate"])
+ if(!check_rights(R_ADMIN))
+ return
+ var/mob/living/carbon/human/H = locate(href_list["FaxReplyTemplate"])
+ if(!istype(H))
+ to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
+ return
+ var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(null)
+ var/obj/machinery/photocopier/faxmachine/fax = locate(href_list["originfax"])
+ P.name = "Central Command - paper"
+ var/stypes = list("handle it yourself","illegible","not signed","sorry, not right now","stop wasting our time")
+ var/stype = input(src.owner, "Which type of standard reply do you wish to send to [H]?","Choose your paperwork", "") as null|anything in stypes
+ var/tmsg = "
"
+ P.update_icon()
+ fax.receivefax(P)
+ if(istype(H) && H.stat == CONSCIOUS && (istype(H.l_ear, /obj/item/device/radio/headset) || istype(H.r_ear, /obj/item/device/radio/headset)))
+ to_chat(H, "Your headset pings, notifying you that a reply to your fax has arrived.")
+ to_chat(src.owner, "You sent a standard '[stype]' fax to [H]")
+ log_admin("[key_name(src.owner)] sent [key_name(H)] a standard '[stype]' fax")
+ message_admins("[key_name_admin(src.owner)] replied to [key_name_admin(H)] with a standard '[stype]' fax")
+
else if(href_list["SyndicateReply"])
if(!check_rights(R_ADMIN))
return
-
var/mob/living/carbon/human/H = locate(href_list["SyndicateReply"])
if(!istype(H))
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
@@ -1719,10 +1780,9 @@
if(!istype(H.l_ear, /obj/item/device/radio/headset) && !istype(H.r_ear, /obj/item/device/radio/headset))
to_chat(usr, "The person you are trying to contact is not wearing a headset")
return
-
var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via their headset.","Outgoing message from The Syndicate", "")
- if(!input) return
-
+ if(!input)
+ return
to_chat(src.owner, "You sent [input] to [H] via a secure channel.")
log_admin("[src.owner] replied to [key_name(H)]'s Syndicate message with the message [input].")
to_chat(H, "You hear something crackle in your headset for a moment before a voice speaks. \"Please stand by for a message from your benefactor. Message as follows, agent. [input]. Message ends.\"")
diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm
index 0ef6a64373f..6a0ec635d50 100644
--- a/code/modules/admin/verbs/pray.dm
+++ b/code/modules/admin/verbs/pray.dm
@@ -18,7 +18,8 @@
for(var/client/X in admins)
if(check_rights(R_EVENT,0,X.mob))
to_chat(X, msg)
-
+ if(X.prefs.sound & SOUND_ADMINHELP)
+ X << 'sound/effects/adminhelp.ogg'
to_chat(usr, "Your prayers have been received by the gods.")
feedback_add_details("admin_verb","PR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -27,41 +28,46 @@
/proc/Centcomm_announce(var/text , var/mob/Sender)
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
msg = "\blue CENTCOMM: [key_name(Sender, 1)] (PP) (VV) (SM) ([admin_jump_link(Sender, "holder")]) (CA) (BSA) (RPLY): [msg]"
-
for(var/client/X in admins)
if(R_EVENT & X.holder.rights)
to_chat(X, msg)
+ if(X.prefs.sound & SOUND_ADMINHELP)
+ X << 'sound/effects/adminhelp.ogg'
/proc/Syndicate_announce(var/text , var/mob/Sender)
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
msg = "\blue SYNDICATE: [key_name(Sender, 1)] (PP) (VV) (SM) ([admin_jump_link(Sender, "holder")]) (CA) (BSA) (REPLY): [msg]"
-
for(var/client/X in admins)
if(check_rights(R_EVENT,0,X.mob))
to_chat(X, msg)
+ if(X.prefs.sound & SOUND_ADMINHELP)
+ X << 'sound/effects/adminhelp.ogg'
/proc/HONK_announce(var/text , var/mob/Sender)
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
msg = "\blue HONK: [key_name(Sender, 1)] (PP) (VV) (SM) ([admin_jump_link(Sender, "holder")]) (CA) (BSA) (RPLY): [msg]"
-
for(var/client/X in admins)
if(R_EVENT & X.holder.rights)
to_chat(X, msg)
+ if(X.prefs.sound & SOUND_ADMINHELP)
+ X << 'sound/effects/adminhelp.ogg'
/proc/ERT_Announce(var/text , var/mob/Sender)
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
msg = "\blue ERT REQUEST: [key_name(Sender, 1)] (PP) (VV) (SM) ([admin_jump_link(Sender, "holder")]) (CA) (BSA) (REPLY): [msg]"
-
for(var/client/X in admins)
if(check_rights(R_EVENT,0,X.mob))
to_chat(X, msg)
+ if(X.prefs.sound & SOUND_ADMINHELP)
+ X << 'sound/effects/adminhelp.ogg'
/proc/Nuke_request(text , mob/Sender)
var/nuke_code = get_nuke_code()
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
msg = "NUKE CODE REQUEST: [key_name(Sender)] (PP) (VV) (SM) ([admin_jump_link(Sender, "holder")]) (CA) (BSA) (RPLY): [msg]"
-
for(var/client/X in admins)
if(check_rights(R_EVENT,0,X.mob))
to_chat(X, msg)
to_chat(X, "The nuke code is [nuke_code].")
+ if(X.prefs.sound & SOUND_ADMINHELP)
+ X << 'sound/effects/adminhelp.ogg'
\ No newline at end of file
diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm
index 4dc653afafd..c0e7a2bc468 100644
--- a/code/modules/paperwork/faxmachine.dm
+++ b/code/modules/paperwork/faxmachine.dm
@@ -260,9 +260,10 @@ var/list/alldepartments = list()
visible_message("[src] beeps, \"Message transmitted successfully.\"")
-/obj/machinery/photocopier/faxmachine/proc/message_admins(var/mob/sender, var/faxname, var/faxtype, var/obj/item/sent, font_colour="#006100")
- var/msg = "\blue [faxname]: [key_name(sender, 1)] (PP) (VV) (SM) ([admin_jump_link(sender, "holder")]) (CA) (BSA) (BP) (REPLY): Receiving '[sent.name]' via secure connection... view message"
-
+/obj/machinery/photocopier/faxmachine/proc/message_admins(var/mob/sender, var/faxname, var/faxtype, var/obj/item/sent, font_colour="#9A04D1")
+ var/msg = "\blue [faxname]: [key_name(sender, 1)] (PP) (VV) (CA) ([admin_jump_link(sender, "holder")]) | REPLY: (RADIO) (FAX) (SM) | REJECT: (TEMPLATE) (BSA) (EVILFAX) : Receiving '[sent.name]' via secure connection... view message"
for(var/client/C in admins)
if(R_EVENT & C.holder.rights)
to_chat(C, msg)
+ if(C.prefs.sound & SOUND_ADMINHELP)
+ C << 'sound/effects/adminhelp.ogg'
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index c5a76d2ed00..6aed00801b0 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -619,22 +619,90 @@
/obj/item/weapon/paper/crumpled/bloody
icon_state = "scrap_bloodied"
-/obj/item/weapon/paper/borging
+/obj/item/weapon/paper/evilfax
name = "Centcomm Reply"
- info = "You're Fired."
- var/borgtarget = null
+ info = ""
+ var/mytarget = null
+ var/myeffect = null
var/used = 0
+ var/countdown = 60
+ var/activate_on_timeout = 0
-/obj/item/weapon/paper/borging/show_content(var/mob/user, var/forceshow = 0, var/forcestars = 0, var/infolinks = 0, var/view = 1)
- if (used)
- to_chat(user,"The paper disintegrates in your hands!")
- qdel(src)
- else if (user == borgtarget)
+/obj/item/weapon/paper/evilfax/show_content(var/mob/user, var/forceshow = 0, var/forcestars = 0, var/infolinks = 0, var/view = 1)
+ if (user == mytarget)
if (istype(user, /mob/living/carbon))
var/mob/living/carbon/C = user
- C.ForceContractDisease(new /datum/disease/transformation/robot(0))
- to_chat(C,"The paper appears to be covered in red goo!")
- used = 1
+ evilpaper_specialaction(C)
..()
+ else
+ // This should never happen, but just in case someone is adminbussing
+ evilpaper_selfdestruct()
else
- to_chat(user,"This page appears to be covered in some sort of bizzare code. Perhaps [borgtarget] can make sense of it.")
\ No newline at end of file
+ if (mytarget)
+ to_chat(user,"This page appears to be covered in some sort of bizzare code. The only bit you recognize is the name of [mytarget]. Perhaps [mytarget] can make sense of it?")
+ else
+ evilpaper_selfdestruct()
+
+
+/obj/item/weapon/paper/evilfax/New()
+ ..()
+ processing_objects += src
+
+
+/obj/item/weapon/paper/evilfax/Destroy()
+ processing_objects -= src
+ if (mytarget && !used)
+ var/mob/living/carbon/target = mytarget
+ target.ForceContractDisease(new /datum/disease/transformation/corgi(0))
+ return ..()
+
+
+/obj/item/weapon/paper/evilfax/process()
+ if (countdown == 0)
+ if (mytarget)
+ if (activate_on_timeout)
+ evilpaper_specialaction(mytarget)
+ else
+ message_admins("[mytarget] ignored an evil fax until it timed out.")
+ else
+ message_admins("Evil paper '[src]' timed out, after not being assigned a target.")
+ used = 1
+ evilpaper_selfdestruct()
+ else
+ countdown--
+
+ return
+
+/obj/item/weapon/paper/evilfax/proc/evilpaper_specialaction(var/mob/living/carbon/target)
+ if (myeffect == "borging")
+ target.ForceContractDisease(new /datum/disease/transformation/robot(0))
+ else if (myeffect == "corgifying")
+ target.ForceContractDisease(new /datum/disease/transformation/corgi(0))
+ else if (myeffect == "explosive")
+ var/turf/simulated/floor/T = get_turf(target)
+ if (istype(T))
+ T.break_tile_to_plating()
+ var/obj/effect/stop/S
+ S = new /obj/effect/stop
+ S.victim = target
+ S.loc = target.loc
+ spawn(20)
+ qdel(S)
+ target.adjustBruteLoss(target.health)
+ else if (myeffect == "memetickillagent")
+ to_chat(target,"A series of bright lights flash across your vision: MEMETIC KILL AGENT YHWH-3 ACTIVATED")
+ target.mutations.Add(NOCLONE)
+ target.adjustBrainLoss(125)
+ else if (myeffect == "honktumor")
+ if(!target.get_int_organ(/obj/item/organ/internal/honktumor))
+ new /obj/item/organ/internal/honktumor(target)
+ else if (myeffect == "demotion")
+ command_announcement.Announce("[mytarget] is hereby demoted to the rank of Civilian. Process this demotion immediately. Failure to comply with these orders is grounds for termination.","CC Demotion Order")
+ else
+ message_admins("Evil paper [src] was activated without a proper effect set! This is a bug.")
+ used = 1
+ evilpaper_selfdestruct()
+
+/obj/item/weapon/paper/evilfax/proc/evilpaper_selfdestruct()
+ visible_message("[src] spontaneously catches fire, and burns up!")
+ qdel(src)