Files
kiwistation/code/game/machinery/requests_console.dm
T
MrPerson e4a3abdd70 Object based lighting system
Uses actual objects on each non-space, dynamically lit turf. Light levels are switched back and forth via animate() and the object's alpha. Supporting colors shouldn't be too hard. Some hacky efficiency improvements means it isn't that much more expensive than current (I think, needs testing). Most of the lighting ss's cost is in checking all the lights and doing big loops, not anything actually in the loops themselves.

Start PDA flashlights on. This was to speed up testing but frankly I think it's a good change in general.

Added a Moved() proc. Called after a successful move.

In the future I hope to move off the luminosity var entirely but that was too slow in testing for me. That's what all that "for(area in sortedAreas) area.luminosity = 1" stuff in the lighting ss is, tests on removing luminosity outright.
2015-03-31 05:09:42 -07:00

481 lines
17 KiB
Plaintext

/******************** 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
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(newmessagepriority == 1)
icon_state = "req_comp1"
else if(newmessagepriority == 2)
icon_state = "req_comp2"
else if(newmessagepriority == 3)
icon_state = "req_comp3"
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
/obj/machinery/requests_console/attack_hand(var/mob/user)
if(..(user))
return
var/dat = ""
if(!open)
switch(screen)
if(1) //req. assistance
dat += "Which department do you need assistance from?<BR><BR>"
dat += "<table width='100%'>"
for(var/dpt in req_console_assistance)
if (dpt != department)
dat += "<tr>"
dat += "<td width='55%'>[dpt]</td>"
dat += "<td width='45%'><A href='?src=\ref[src];write=[ckey(dpt)]'>Normal</A> <A href='?src=\ref[src];write=[ckey(dpt)];priority=2'>High</A>"
if (hackState == 1)
dat += "<A href='?src=\ref[src];write=[ckey(dpt)];priority=3'>EXTREME</A>"
dat += "</td>"
dat += "</tr>"
dat += "</table>"
dat += "<BR><A href='?src=\ref[src];setScreen=0'><< Back</A><BR>"
if(2) //req. supplies
dat += "Which department do you need supplies from?<BR><BR>"
dat += "<table width='100%'>"
for(var/dpt in req_console_supplies)
if (dpt != department)
dat += "<tr>"
dat += "<td width='55%'>[dpt]</td>"
dat += "<td width='45%'><A href='?src=\ref[src];write=[ckey(dpt)]'>Normal</A> <A href='?src=\ref[src];write=[ckey(dpt)];priority=2'>High</A>"
if (hackState == 1)
dat += "<A href='?src=\ref[src];write=[ckey(dpt)];priority=3'>EXTREME</A>"
dat += "</td>"
dat += "</tr>"
dat += "</table>"
dat += "<BR><A href='?src=\ref[src];setScreen=0'><< Back</A><BR>"
if(3) //relay information
dat += "Which department would you like to send information to?<BR><BR>"
dat += "<table width='100%'>"
for(var/dpt in req_console_information)
if (dpt != department)
dat += "<tr>"
dat += "<td width='55%'>[dpt]</td>"
dat += "<td width='45%'><A href='?src=\ref[src];write=[ckey(dpt)]'>Normal</A> <A href='?src=\ref[src];write=[ckey(dpt)];priority=2'>High</A>"
if (hackState == 1)
dat += "<A href='?src=\ref[src];write=[ckey(dpt)];priority=3'>EXTREME</A>"
dat += "</td>"
dat += "</tr>"
dat += "</table>"
dat += "<BR><A href='?src=\ref[src];setScreen=0'><< Back</A><BR>"
if(6) //sent successfully
dat += "<span class='good'>Message sent.</span><BR><BR>"
dat += "<A href='?src=\ref[src];setScreen=0'>Continue</A><BR>"
if(7) //unsuccessful; not sent
dat += "<span class='bad'>An error occurred.</span><BR><BR>"
dat += "<A href='?src=\ref[src];setScreen=0'>Continue</A><BR>"
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 = "<div class='block'>[msg]</div>" + messageComposite
dat += messageComposite
dat += "<BR><A href='?src=\ref[src];setScreen=0'><< Back to Main Menu</A><BR>"
if(9) //authentication before sending
dat += "<B>Message Authentication</B><BR><BR>"
dat += "<b>Message for [dpt]: </b>[message]<BR><BR>"
dat += "<div class='notice'>You may authenticate your message now by scanning your ID or your stamp</div><BR>"
dat += "<b>Validated by:</b> [msgVerified ? msgVerified : "<i>Not Validated</i>"]<br>"
dat += "<b>Stamped by:</b> [msgStamped ? msgStamped : "<i>Not Stamped</i>"]<br><br>"
dat += "<A href='?src=\ref[src];department=[dpt]'>Send Message</A><BR>"
dat += "<BR><A href='?src=\ref[src];setScreen=0'><< Discard Message</A><BR>"
if(10) //send announcement
dat += "<h3>Station-wide Announcement</h3>"
if(announceAuth)
dat += "<div class='notice'>Authentication accepted</div><BR>"
else
dat += "<div class='notice'>Swipe your card to authenticate yourself</div><BR>"
dat += "<b>Message: </b>[message ? message : "<i>No Message</i>"]<BR>"
dat += "<A href='?src=\ref[src];writeAnnouncement=1'>[message ? "Edit" : "Write"] Message</A><BR><BR>"
if (announceAuth && message)
dat += "<A href='?src=\ref[src];sendAnnouncement=1'>Announce Message</A><BR>"
else
dat += "<span class='linkOff'>Announce Message</span><BR>"
dat += "<BR><A href='?src=\ref[src];setScreen=0'><< Back</A><BR>"
else //main menu
screen = 0
announceAuth = 0
if (newmessagepriority == 1)
dat += "<div class='notice'>There are new messages</div><BR>"
if (newmessagepriority == 2)
dat += "<div class='notice'>There are new <b>PRIORITY</b> messages</div><BR>"
if (newmessagepriority == 3)
dat += "<div class='notice'>There are new <b>EXTREME PRIORITY</b> messages</div><BR>"
dat += "<A href='?src=\ref[src];setScreen=8'>View Messages</A><BR><BR>"
dat += "<A href='?src=\ref[src];setScreen=1'>Request Assistance</A><BR>"
dat += "<A href='?src=\ref[src];setScreen=2'>Request Supplies</A><BR>"
dat += "<A href='?src=\ref[src];setScreen=3'>Relay Anonymous Information</A><BR><BR>"
if(announcementConsole)
dat += "<A href='?src=\ref[src];setScreen=10'>Send Station-wide Announcement</A><BR><BR>"
if (silent)
dat += "Speaker <A href='?src=\ref[src];setSilent=0'>OFF</A>"
else
dat += "Speaker <A href='?src=\ref[src];setSilent=1'>ON</A>"
//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["department"] && message )
var/log_msg = message
var/sending = message
sending += "<br>"
if (msgVerified)
sending += msgVerified
sending += "<br>"
if (msgStamped)
sending += msgStamped
sending += "<br>"
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 world)
if(!MS.active) continue
MS.send_rc_message(href_list["department"],department,log_msg,msgStamped,msgVerified,priority)
pass = 1
if(pass)
for (var/obj/machinery/requests_console/Console in allConsoles)
if (ckey(Console.department) == ckey(href_list["department"]))
switch(priority)
if(2) //High priority
Console.createmessage(src, "PRIORITY Alert in [department]", sending, 2, 1)
if(3) // Extreme Priority
Console.createmessage(src, "EXTREME PRIORITY Alert in [department]", sending, 3, 1)
else // Normal priority
Console.createmessage(src, "Message from [department]", sending, 1, 1)
screen = 6
Console.SetLuminosity(2)
switch(priority)
if(2)
messages += "<span class='bad'>High Priority</span><BR><b>To:</b> [dpt]<BR>[sending]"
else
messages += "<b>To: [dpt]</b><BR>[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(var/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, paper)
var/linkedsender
var/unlinkedsender
if(istype(source, /obj/machinery/requests_console))
var/obj/machinery/requests_console/sender = source
linkedsender = "<a href='?src=\ref[src];write=[ckey(sender.department)]'>[sender.department]</a>"
unlinkedsender = sender.department
else
capitalize(source)
linkedsender = source
unlinkedsender = 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 += "<span class='bad'>High Priority</span><BR><b>From:</b> [linkedsender]<BR>[message]"
if(paper)
var/obj/item/weapon/paper/slip = new /obj/item/weapon/paper(src.loc)
slip.info = "<span class='bad'>High Priority</span><BR><b>From:</b> [unlinkedsender]<BR>[message]"
slip.name = "Important Message - [source]"
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 += "<span class='bad'>!!!Extreme Priority!!!</span><BR><b>From:</b> [linkedsender]<BR>[message]"
var/obj/item/weapon/paper/slip = new /obj/item/weapon/paper(src.loc)
if(paper)
slip.info = "<span class='bad'>!!!Extreme Priority!!!</span><BR><b>From:</b> [unlinkedsender]<BR>[message]"
slip.name = "URGENT message - [unlinkedsender]"
var/mob/living/target = locate() in view(7,src)
if(target)
src.visible_message("<span class='danger'>[src] launches [slip] at [target]!</span>")
slip.throw_at(target, 16, 3)
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 += "<b>From:</b> [linkedsender]<BR>[message]"
if(paper)
var/obj/item/weapon/paper/slip = new /obj/item/weapon/paper(src.loc)
slip.info = "<b>From:</b> [unlinkedsender]<BR>[message]"
slip.name = "Message - [unlinkedsender]"
SetLuminosity(2)
/obj/machinery/requests_console/attackby(var/obj/item/weapon/O as obj, var/mob/user as mob, 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 = "<font color='green'><b>Verified by [ID.registered_name] ([ID.assignment])</b></font>"
updateUsrDialog()
if(screen == 10)
if (access_RC_announce in ID.access)
announceAuth = 1
else
announceAuth = 0
user << "<span class='danger'>You are not authorized to send announcements.</span>"
updateUsrDialog()
if (istype(O, /obj/item/weapon/stamp))
if(screen == 9)
var/obj/item/weapon/stamp/T = O
msgStamped = "<span class='boldnotice'>Stamped with the [T.name]</span>"
updateUsrDialog()
return