var/list/obj/machinery/photocopier/faxmachine/allfaxes = list() var/list/admin_departments = list("Central Command") var/list/hidden_admin_departments = list("Syndicate") var/list/alldepartments = list() /obj/machinery/photocopier/faxmachine name = "fax machine" icon = 'icons/obj/library.dmi' icon_state = "fax" insert_anim = "faxsend" req_one_access = list(access_lawyer, access_heads, access_armory) use_power = 1 idle_power_usage = 30 active_power_usage = 200 var/obj/item/weapon/card/id/scan = null // identification var/authenticated = 0 var/sendcooldown = 0 // to avoid spamming fax messages var/department = "Unknown" // our department var/destination = "Central Command" // the department we're sending to /obj/machinery/photocopier/faxmachine/New() ..() allfaxes += src if( !(("[department]" in alldepartments) || ("[department]" in admin_departments)) ) alldepartments |= department /obj/machinery/photocopier/faxmachine/attack_hand(mob/user as mob) ui_interact(user) /obj/machinery/photocopier/faxmachine/attackby(obj/item/weapon/item, mob/user, params) if(istype(item,/obj/item/weapon/card/id) && !scan) scan(item) else if(istype(item, /obj/item/weapon/paper) || istype(item, /obj/item/weapon/photo) || istype(item, /obj/item/weapon/paper_bundle)) ..() nanomanager.update_uis(src) else return ..() /obj/machinery/photocopier/faxmachine/emag_act(user as mob) if(!emagged) emagged = 1 to_chat(user, "The transmitters realign to an unknown source!") else to_chat(user, "You swipe the card through [src], but nothing happens.") /obj/machinery/photocopier/faxmachine/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] if(scan) data["scan_name"] = scan.name else data["scan_name"] = "-----" data["authenticated"] = authenticated if(!authenticated) data["network"] = "Disconnected" else if(!emagged) data["network"] = "Central Command Quantum Entanglement Network" else data["network"] = "ERR*?*%!*" if(copyitem) data["paper"] = copyitem.name data["paperinserted"] = 1 else data["paper"] = "-----" data["paperinserted"] = 0 data["destination"] = destination data["cooldown"] = sendcooldown if((destination in admin_departments) || (destination in hidden_admin_departments)) data["respectcooldown"] = 1 else data["respectcooldown"] = 0 ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "faxmachine.tmpl", "Fax Machine UI", 540, 450) ui.set_initial_data(data) ui.open() /obj/machinery/photocopier/faxmachine/Topic(href, href_list) if(..()) return 1 if(href_list["send"]) if(copyitem && authenticated) if((destination in admin_departments) || (destination in hidden_admin_departments)) send_admin_fax(usr, destination) else sendfax(destination,usr) if(sendcooldown) spawn(sendcooldown) // cooldown time sendcooldown = 0 nanomanager.update_uis(src) if(href_list["paper"]) if(copyitem) copyitem.loc = usr.loc usr.put_in_hands(copyitem) to_chat(usr, "You take \the [copyitem] out of \the [src].") copyitem = null else var/obj/item/I = usr.get_active_hand() if(istype(I, /obj/item/weapon/paper) || istype(I, /obj/item/weapon/photo) || istype(I, /obj/item/weapon/paper_bundle)) usr.drop_item() copyitem = I I.loc = src to_chat(usr, "You insert \the [I] into \the [src].") flick(insert_anim, src) if(href_list["scan"]) scan() if(href_list["dept"]) if(authenticated) var/lastdestination = destination var/list/combineddepartments = alldepartments + admin_departments if(emagged) combineddepartments += hidden_admin_departments destination = input(usr, "To which department?", "Choose a department", "") as null|anything in combineddepartments if(!destination) destination = lastdestination if(href_list["auth"]) if((!authenticated) && scan) if(check_access(scan)) authenticated = 1 else if(authenticated) authenticated = 0 if(href_list["rename"]) if(copyitem) var/n_name = sanitize(copytext(input(usr, "What would you like to label the fax?", "Fax Labelling", copyitem.name) as text, 1, MAX_MESSAGE_LEN)) if((copyitem && copyitem.loc == src && usr.stat == 0)) if(istype(copyitem, /obj/item/weapon/paper)) copyitem.name = "[(n_name ? text("[n_name]") : initial(copyitem.name))]" copyitem.desc = "This is a paper titled '" + copyitem.name + "'." else if(istype(copyitem, /obj/item/weapon/photo)) copyitem.name = "[(n_name ? text("[n_name]") : "photo")]" else if(istype(copyitem, /obj/item/weapon/paper_bundle)) copyitem.name = "[(n_name ? text("[n_name]") : "paper")]" nanomanager.update_uis(src) /obj/machinery/photocopier/faxmachine/proc/scan(var/obj/item/weapon/card/id/card = null) if(scan) // Card is in machine if(ishuman(usr)) scan.loc = usr.loc if(!usr.get_active_hand()) usr.put_in_hands(scan) scan = null else scan.loc = src.loc scan = null else if(!card) var/obj/item/I = usr.get_active_hand() if(istype(I, /obj/item/weapon/card/id)) usr.drop_item() I.loc = src scan = I else if(istype(card)) usr.drop_item() card.loc = src scan = card nanomanager.update_uis(src) /obj/machinery/photocopier/faxmachine/proc/sendfax(var/destination,var/mob/sender) if(stat & (BROKEN|NOPOWER)) return use_power(200) var/success = 0 for(var/obj/machinery/photocopier/faxmachine/F in allfaxes) if( F.department == destination ) success = F.receivefax(copyitem) if(success) var/datum/fax/F = new /datum/fax() F.name = copyitem.name F.from_department = department F.to_department = destination F.origin = src F.message = copyitem F.sent_by = sender F.sent_at = world.time visible_message("[src] beeps, \"Message transmitted successfully.\"") //sendcooldown = 600 else visible_message("[src] beeps, \"Error transmitting message.\"") /obj/machinery/photocopier/faxmachine/proc/receivefax(var/obj/item/incoming) if(stat & (BROKEN|NOPOWER)) return 0 if(department == "Unknown") return 0 //You can't send faxes to "Unknown" flick("faxreceive", src) playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1) // give the sprite some time to flick sleep(20) if(istype(incoming, /obj/item/weapon/paper)) copy(incoming) else if(istype(incoming, /obj/item/weapon/photo)) photocopy(incoming) else if(istype(incoming, /obj/item/weapon/paper_bundle)) bundlecopy(incoming) else return 0 use_power(active_power_usage) return 1 /obj/machinery/photocopier/faxmachine/proc/send_admin_fax(var/mob/sender, var/destination) if(stat & (BROKEN|NOPOWER)) return use_power(200) var/obj/item/rcvdcopy if(istype(copyitem, /obj/item/weapon/paper)) rcvdcopy = copy(copyitem) else if(istype(copyitem, /obj/item/weapon/photo)) rcvdcopy = photocopy(copyitem) else if(istype(copyitem, /obj/item/weapon/paper_bundle)) rcvdcopy = bundlecopy(copyitem) else visible_message("[src] beeps, \"Error transmitting message.\"") return rcvdcopy.loc = null //hopefully this shouldn't cause trouble var/datum/fax/admin/A = new /datum/fax/admin() A.name = rcvdcopy.name A.from_department = department A.to_department = destination A.origin = src A.message = rcvdcopy A.sent_by = sender A.sent_at = world.time //message badmins that a fax has arrived switch(destination) if("Central Command") message_admins(sender, "CENTCOM FAX", destination, rcvdcopy, "#006100") if("Syndicate") message_admins(sender, "SYNDICATE FAX", destination, rcvdcopy, "#DC143C") sendcooldown = 1800 sleep(50) 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="#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'