/******************** Requests Console ********************/ /** Originally written by errorage, updated by: Carn, needs more work though. I just added some security fixes */ var/req_console_assistance = list() var/req_console_supplies = list() var/req_console_information = list() var/list/obj/machinery/requests_console/allConsoles = list() /obj/machinery/requests_console name = "requests console" desc = "A console intended to send requests to different departments on the station." anchored = 1 icon = 'icons/obj/terminals.dmi' icon_state = "req_comp0" var/department = "Unknown" //The list of all departments on the station (Determined from this variable on each unit) Set this to the same thing if you want several consoles in one department var/list/messages = list() //List of all messages var/departmentType = 0 // 0 = none (not listed, can only replied to) // 1 = assistance // 2 = supplies // 3 = info // 4 = ass + sup //Erro goddamn you just HAD to shorten "assistance" down to "ass" // 5 = ass + info // 6 = sup + info // 7 = ass + sup + info var/newmessagepriority = 0 // 0 = no new message // 1 = normal priority // 2 = high priority // 3 = extreme priority - not implemented, will probably require some hacking... everything needs to have a hidden feature in this game. var/screen = 0 // 0 = main menu, // 1 = req. assistance, // 2 = req. supplies // 3 = relay information // 4 = write msg - not used // 5 = choose priority - not used // 6 = sent successfully // 7 = sent unsuccessfully // 8 = view messages // 9 = authentication before sending // 10 = send announcement var/silent = 0 // set to 1 for it not to beep all the time var/hackState = 0 // 0 = not hacked // 1 = hacked var/announcementConsole = 0 // 0 = This console cannot be used to send department announcements // 1 = This console can send department announcements var/open = 0 // 1 if open var/announceAuth = 0 //Will be set to 1 when you authenticate yourself for announcements var/msgVerified = "" //Will contain the name of the person who verified it var/msgStamped = "" //If a message is stamped, this will contain the stamp name var/message = ""; var/dpt = ""; //the department which will be receiving the message var/priority = -1 ; //Priority of the message being sent var/obj/item/device/radio/Radio var/emergency //If an emergency has been called by this device. Acts as both a cooldown and lets the responder know where it the emergency was triggered from luminosity = 0 /obj/machinery/requests_console/power_change() ..() update_icon() /obj/machinery/requests_console/update_icon() if(open) if(hackState == 0) icon_state="req_comp_open" else icon_state="req_comp_rewired" else if(stat & NOPOWER) if(icon_state != "req_comp_off") icon_state = "req_comp_off" else if(emergency || (newmessagepriority == 3)) icon_state = "req_comp3" else if(newmessagepriority == 2) icon_state = "req_comp2" else if(newmessagepriority == 1) icon_state = "req_comp1" else icon_state = "req_comp0" /obj/machinery/requests_console/New() name = "\improper [department] requests console" allConsoles += src //req_console_departments += department switch(departmentType) if(1) if(!("[department]" in req_console_assistance)) req_console_assistance += department if(2) if(!("[department]" in req_console_supplies)) req_console_supplies += department if(3) if(!("[department]" in req_console_information)) req_console_information += department if(4) if(!("[department]" in req_console_assistance)) req_console_assistance += department if(!("[department]" in req_console_supplies)) req_console_supplies += department if(5) if(!("[department]" in req_console_assistance)) req_console_assistance += department if(!("[department]" in req_console_information)) req_console_information += department if(6) if(!("[department]" in req_console_supplies)) req_console_supplies += department if(!("[department]" in req_console_information)) req_console_information += department if(7) if(!("[department]" in req_console_assistance)) req_console_assistance += department if(!("[department]" in req_console_supplies)) req_console_supplies += department if(!("[department]" in req_console_information)) req_console_information += department Radio = new /obj/item/device/radio(src) Radio.listening = 0 /obj/machinery/requests_console/attack_hand(mob/user) if(..()) return var/dat = "" if(!open) switch(screen) if(1) //req. assistance dat += "Which department do you need assistance from?

" dat += "" for(var/dpt in req_console_assistance) if (dpt != department) dat += "" dat += "" dat += "" dat += "" dat += "
[dpt]Normal High" if (hackState == 1) dat += "EXTREME" dat += "
" dat += "
<< Back
" if(2) //req. supplies dat += "Which department do you need supplies from?

" dat += "" for(var/dpt in req_console_supplies) if (dpt != department) dat += "" dat += "" dat += "" dat += "" dat += "
[dpt]Normal High" if (hackState == 1) dat += "EXTREME" dat += "
" dat += "
<< Back
" if(3) //relay information dat += "Which department would you like to send information to?

" dat += "" for(var/dpt in req_console_information) if (dpt != department) dat += "" dat += "" dat += "" dat += "" dat += "
[dpt]Normal High" if (hackState == 1) dat += "EXTREME" dat += "
" dat += "
<< Back
" if(6) //sent successfully dat += "Message sent.

" dat += "Continue
" if(7) //unsuccessful; not sent dat += "An error occurred.

" dat += "Continue
" if(8) //view messages for (var/obj/machinery/requests_console/Console in allConsoles) if (Console.department == department) Console.newmessagepriority = 0 Console.update_icon() Console.SetLuminosity(1) newmessagepriority = 0 update_icon() var/messageComposite = "" for(var/msg in messages) // This puts more recent messages at the *top*, where they belong. messageComposite = "
[msg]
" + messageComposite dat += messageComposite dat += "
<< Back to Main Menu
" if(9) //authentication before sending dat += "Message Authentication

" dat += "Message for [dpt]: [message]

" dat += "
You may authenticate your message now by scanning your ID or your stamp

" dat += "Validated by: [msgVerified ? msgVerified : "Not Validated"]
" dat += "Stamped by: [msgStamped ? msgStamped : "Not Stamped"]

" dat += "Send Message
" dat += "
<< Discard Message
" if(10) //send announcement dat += "

Station-wide Announcement

" if(announceAuth) dat += "
Authentication accepted

" else dat += "
Swipe your card to authenticate yourself

" dat += "Message: [message ? message : "No Message"]
" dat += "[message ? "Edit" : "Write"] Message

" if ((announceAuth || IsAdminGhost(user)) && message) dat += "Announce Message
" else dat += "Announce Message
" dat += "
<< Back
" else //main menu screen = 0 announceAuth = 0 if (newmessagepriority == 1) dat += "
There are new messages

" if (newmessagepriority == 2) dat += "
There are new PRIORITY messages

" if (newmessagepriority == 3) dat += "
There are new EXTREME PRIORITY messages

" dat += "View Messages

" dat += "Request Assistance
" dat += "Request Supplies
" dat += "Relay Anonymous Information

" if(!emergency) dat += "Emergency: Security
" dat += "Emergency: Engineering
" dat += "Emergency: Medical

" else dat += "[emergency] has been dispatched to this location.

" if(announcementConsole) dat += "Send Station-wide Announcement

" if (silent) dat += "Speaker OFF" else dat += "Speaker ON" //user << browse("[dat]", "window=request_console") //onclose(user, "req_console") var/datum/browser/popup = new(user, "req_console", "[department] Requests Console", 450, 440) popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() return /obj/machinery/requests_console/Topic(href, href_list) if(..()) return usr.set_machine(src) add_fingerprint(usr) if(reject_bad_text(href_list["write"])) dpt = ckey(href_list["write"]) //write contains the string of the receiving department's name var/new_message = copytext(reject_bad_text(input(usr, "Write your message:", "Awaiting Input", "")),1,MAX_MESSAGE_LEN) if(new_message) message = new_message screen = 9 if (text2num(href_list["priority"]) < 2) priority = -1 else priority = text2num(href_list["priority"]) else dpt = ""; msgVerified = "" msgStamped = "" screen = 0 priority = -1 if(href_list["writeAnnouncement"]) var/new_message = copytext(reject_bad_text(input(usr, "Write your message:", "Awaiting Input", "")),1,MAX_MESSAGE_LEN) if(new_message) message = new_message if (text2num(href_list["priority"]) < 2) priority = -1 else priority = text2num(href_list["priority"]) else message = "" announceAuth = 0 screen = 0 if(href_list["sendAnnouncement"]) if(!announcementConsole) return minor_announce(message, "[department] Announcement:") news_network.SubmitArticle(message, department, "Station Announcements", null) log_say("[key_name(usr)] has made a station announcement: [message]") message_admins("[key_name_admin(usr)] has made a station announcement.") announceAuth = 0 message = "" screen = 0 if(href_list["emergency"]) if(!emergency) var/radio_freq switch(text2num(href_list["emergency"])) if(1) //Security radio_freq = SEC_FREQ emergency = "Security" if(2) //Engineering radio_freq = ENG_FREQ emergency = "Engineering" if(3) //Medical radio_freq = MED_FREQ emergency = "Medical" if(radio_freq) Radio.set_frequency(radio_freq) Radio.talk_into(src,"[emergency] emergency in [department]!!",radio_freq) update_icon() spawn(3000) emergency = null update_icon() if( href_list["department"] && message ) var/log_msg = message var/sending = message sending += "
" if (msgVerified) sending += msgVerified sending += "
" if (msgStamped) sending += msgStamped sending += "
" screen = 7 //if it's successful, this will get overrwritten (7 = unsufccessfull, 6 = successfull) if (sending) var/pass = 0 for (var/obj/machinery/message_server/MS in machines) if(!MS.active) continue MS.send_rc_message(href_list["department"],department,log_msg,msgStamped,msgVerified,priority) pass = 1 if(pass) var/radio_freq = 0 switch(href_list["department"]) if("bridge") radio_freq = COMM_FREQ if("medbay") radio_freq = MED_FREQ if("science") radio_freq = SCI_FREQ if("engineering") radio_freq = ENG_FREQ if("security") radio_freq = SEC_FREQ if("cargobay" || "mining") radio_freq = SUPP_FREQ Radio.set_frequency(radio_freq) var/authentic if(msgVerified || msgStamped) authentic = " (Authenticated)" var/alert = "" for (var/obj/machinery/requests_console/Console in allConsoles) if (ckey(Console.department) == ckey(href_list["department"])) switch(priority) if(2) //High priority alert = "PRIORITY Alert in [department][authentic]" Console.createmessage(src, alert, sending, 2, 1) if(3) // Extreme Priority alert = "EXTREME PRIORITY Alert from [department][authentic]" Console.createmessage(src, alert , sending, 3, 1) else // Normal priority alert = "Message from [department][authentic]" Console.createmessage(src, alert , sending, 1, 1) screen = 6 Console.SetLuminosity(2) if(radio_freq) Radio.talk_into(src,"[alert]: [message]",radio_freq) switch(priority) if(2) messages += "High Priority
To: [dpt]
[sending]" else messages += "To: [dpt]
[sending]" else say("NOTICE: No server detected!") //Handle screen switching switch(text2num(href_list["setScreen"])) if(null) //skip if(1) //req. assistance screen = 1 if(2) //req. supplies screen = 2 if(3) //relay information screen = 3 // if(4) //write message // screen = 4 if(5) //choose priority screen = 5 if(6) //sent successfully screen = 6 if(7) //unsuccessfull; not sent screen = 7 if(8) //view messages screen = 8 if(9) //authentication screen = 9 if(10) //send announcement if(!announcementConsole) return screen = 10 else //main menu dpt = "" msgVerified = "" msgStamped = "" message = "" priority = -1 screen = 0 //Handle silencing the console switch( href_list["setSilent"] ) if(null) //skip if("1") silent = 1 else silent = 0 updateUsrDialog() return /obj/machinery/say_quote(input, list/spans) var/ending = copytext(input, length(input) - 2) if (ending == "!!!") return "blares, \"[attach_spans(input, spans)]\"" return ..() /obj/machinery/requests_console/proc/createmessage(source, title, message, priority) var/linkedsender if(istype(source, /obj/machinery/requests_console)) var/obj/machinery/requests_console/sender = source linkedsender = "[sender.department]" else capitalize(source) linkedsender = source capitalize(title) switch(priority) if(2) //High priority if(src.newmessagepriority < 2) src.newmessagepriority = 2 src.update_icon() if(!src.silent) playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 1) say(title) src.messages += "High Priority
From: [linkedsender]
[message]" if(3) // Extreme Priority if(src.newmessagepriority < 3) src.newmessagepriority = 3 src.update_icon() if(1) playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 1) say(title) src.messages += "!!!Extreme Priority!!!
From: [linkedsender]
[message]" else // Normal priority if(src.newmessagepriority < 1) src.newmessagepriority = 1 src.update_icon() if(!src.silent) playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 1) say(title) src.messages += "From: [linkedsender]
[message]" SetLuminosity(2) /obj/machinery/requests_console/attackby(obj/item/weapon/O, mob/user, params) if (istype(O, /obj/item/weapon/crowbar)) if(open) user << "You close the maintenance panel." open = 0 icon_state="req_comp0" else user << "You open the maintenance panel." open = 1 if(hackState == 0) icon_state="req_comp_open" else if(hackState == 1) icon_state="req_comp_rewired" if (istype(O, /obj/item/weapon/screwdriver)) if(open) if(hackState == 0) user << "You modify the wiring." hackState = 1 icon_state="req_comp_rewired" else if(hackState == 1) user << "You reset the wiring." hackState = 0 icon_state="req_comp_open" else user << "You can't do much with that!" update_icon() var/obj/item/weapon/card/id/ID = O.GetID() if (ID) if(screen == 9) msgVerified = "Verified by [ID.registered_name] ([ID.assignment])" updateUsrDialog() if(screen == 10) if (access_RC_announce in ID.access) announceAuth = 1 else announceAuth = 0 user << "You are not authorized to send announcements!" updateUsrDialog() if (istype(O, /obj/item/weapon/stamp)) if(screen == 9) var/obj/item/weapon/stamp/T = O msgStamped = "Stamped with the [T.name]" updateUsrDialog() return