From b439b96865178407ada99f3a9f1fa3abde81240a Mon Sep 17 00:00:00 2001 From: oranges Date: Thu, 19 Oct 2017 21:52:37 +1300 Subject: [PATCH] Comms console tweak --- code/__HELPERS/priority_announce.dm | 6 +- .../game/machinery/computer/communications.dm | 251 ++++++++++-------- 2 files changed, 150 insertions(+), 107 deletions(-) diff --git a/code/__HELPERS/priority_announce.dm b/code/__HELPERS/priority_announce.dm index 0ffd8d8580..abda33b136 100644 --- a/code/__HELPERS/priority_announce.dm +++ b/code/__HELPERS/priority_announce.dm @@ -43,8 +43,10 @@ var/obj/item/paper/P = new /obj/item/paper(C.loc) P.name = "paper - '[title]'" P.info = text - C.messagetitle.Add("[title]") - C.messagetext.Add(text) + var/datum/comm_message/message = new + message.title = title + message.content = text + C.add_message(message) P.update_icon() /proc/minor_announce(message, title = "Attention:", alert) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 89b2bc4620..4f2498863a 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -8,10 +8,9 @@ circuit = /obj/item/circuitboard/computer/communications var/authenticated = 0 var/auth_id = "Unknown" //Who is currently logged in? - var/list/messagetitle = list() - var/list/messagetext = list() - var/currmsg = 0 - var/aicurrmsg = 0 + var/list/datum/comm_message/messages = list() + var/datum/comm_message/currmsg + var/datum/comm_message/aicurrmsg var/state = STATE_DEFAULT var/aistate = STATE_DEFAULT var/message_cooldown = 0 @@ -48,7 +47,7 @@ /obj/machinery/computer/communications/process() if(..()) if(state != STATE_STATUSDISPLAY) - src.updateDialog() + updateDialog() /obj/machinery/computer/communications/Topic(href, href_list) @@ -65,7 +64,7 @@ switch(href_list["operation"]) // main interface if("main") - src.state = STATE_DEFAULT + state = STATE_DEFAULT playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) if("login") var/mob/M = usr @@ -75,13 +74,13 @@ I = M.get_idcard() if(I && istype(I)) - if(src.check_access(I)) + if(check_access(I)) authenticated = 1 auth_id = "[I.registered_name] ([I.assignment])" if((20 in I.access)) authenticated = 2 playsound(src, 'sound/machines/terminal_on.ogg', 50, 0) - if(src.emagged) + if(emagged) authenticated = 2 auth_id = "Unknown" to_chat(M, "[src] lets out a quiet alarm as its login is overriden.") @@ -129,7 +128,7 @@ playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) if("announce") - if(src.authenticated==2) + if(authenticated==2) playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0) make_announcement(usr) @@ -183,54 +182,63 @@ to_chat(usr, "Not enough credits.") if("callshuttle") - src.state = STATE_DEFAULT - if(src.authenticated) - src.state = STATE_CALLSHUTTLE + state = STATE_DEFAULT + if(authenticated) + state = STATE_CALLSHUTTLE if("callshuttle2") - if(src.authenticated) + if(authenticated) SSshuttle.requestEvac(usr, href_list["call"]) if(SSshuttle.emergency.timer) post_status("shuttle") - src.state = STATE_DEFAULT + state = STATE_DEFAULT if("cancelshuttle") - src.state = STATE_DEFAULT - if(src.authenticated) - src.state = STATE_CANCELSHUTTLE + state = STATE_DEFAULT + if(authenticated) + state = STATE_CANCELSHUTTLE if("cancelshuttle2") - if(src.authenticated) + if(authenticated) SSshuttle.cancelEvac(usr) - src.state = STATE_DEFAULT + state = STATE_DEFAULT if("messagelist") - src.currmsg = 0 - src.state = STATE_MESSAGELIST + currmsg = 0 + state = STATE_MESSAGELIST if("viewmessage") - src.state = STATE_VIEWMESSAGE - if (!src.currmsg) + state = STATE_VIEWMESSAGE + if (!currmsg) if(href_list["message-num"]) - src.currmsg = text2num(href_list["message-num"]) + var/msgnum = text2num(href_list["message-num"]) + currmsg = messages[msgnum] else - src.state = STATE_MESSAGELIST + state = STATE_MESSAGELIST if("delmessage") - src.state = (src.currmsg) ? STATE_DELMESSAGE : STATE_MESSAGELIST + state = currmsg ? STATE_DELMESSAGE : STATE_MESSAGELIST if("delmessage2") - if(src.authenticated) - if(src.currmsg) - var/title = src.messagetitle[src.currmsg] - var/text = src.messagetext[src.currmsg] - src.messagetitle.Remove(title) - src.messagetext.Remove(text) - if(src.currmsg == src.aicurrmsg) - src.aicurrmsg = 0 - src.currmsg = 0 - src.state = STATE_MESSAGELIST + if(authenticated) + if(currmsg) + if(aicurrmsg == currmsg) + aicurrmsg = null + messages -= currmsg + currmsg = null + state = STATE_MESSAGELIST else - src.state = STATE_VIEWMESSAGE + state = STATE_VIEWMESSAGE + if("respond") + var/answer = text2num(href_list["answer"]) + if(!currmsg || !answer || currmsg.possible_answers.len < answer) + state = STATE_MESSAGELIST + currmsg.answered = answer + state = STATE_VIEWMESSAGE if("status") - src.state = STATE_STATUSDISPLAY - + state = STATE_STATUSDISPLAY if("securitylevel") +<<<<<<< HEAD src.tmp_alertlevel = text2num( href_list["newalertlevel"] ) if(!tmp_alertlevel) tmp_alertlevel = 0 +======= + tmp_alertlevel = text2num( href_list["newalertlevel"] ) + if(!tmp_alertlevel) + tmp_alertlevel = 0 +>>>>>>> 7feea9a... Merge pull request #31849 from AnturK/commsconsolecleanup state = STATE_CONFIRM_LEVEL if("changeseclevel") state = STATE_ALERT_LEVEL @@ -241,12 +249,12 @@ make_maint_all_access() log_game("[key_name(usr)] enabled emergency maintenance access.") message_admins("[key_name_admin(usr)] enabled emergency maintenance access.") - src.state = STATE_DEFAULT + state = STATE_DEFAULT if("disableemergency") revoke_maint_all_access() log_game("[key_name(usr)] disabled emergency maintenance access.") message_admins("[key_name_admin(usr)] disabled emergency maintenance access.") - src.state = STATE_DEFAULT + state = STATE_DEFAULT // Status display stuff if("setstat") @@ -261,14 +269,14 @@ if("setmsg1") stat_msg1 = reject_bad_text(input("Line 1", "Enter Message Text", stat_msg1) as text|null, 40) - src.updateDialog() + updateDialog() if("setmsg2") stat_msg2 = reject_bad_text(input("Line 2", "Enter Message Text", stat_msg2) as text|null, 40) - src.updateDialog() + updateDialog() // OMG CENTCOM LETTERHEAD if("MessageCentCom") - if(src.authenticated==2) + if(authenticated==2) if(!checkCCcooldown()) to_chat(usr, "Arrays recycling. Please stand by.") return @@ -284,7 +292,7 @@ // OMG SYNDICATE ...LETTERHEAD if("MessageSyndicate") - if((src.authenticated==2) && (src.emagged)) + if((authenticated==2) && (emagged)) if(!checkCCcooldown()) to_chat(usr, "Arrays recycling. Please stand by.") playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) @@ -302,10 +310,10 @@ to_chat(usr, "Backup routing data restored!") playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) emagged = FALSE - src.updateDialog() + updateDialog() if("nukerequest") //When there's no other way - if(src.authenticated==2) + if(authenticated==2) if(!checkCCcooldown()) to_chat(usr, "Arrays recycling. Please stand by.") return @@ -321,42 +329,52 @@ // AI interface if("ai-main") - src.aicurrmsg = 0 - src.aistate = STATE_DEFAULT + aicurrmsg = null + aistate = STATE_DEFAULT if("ai-callshuttle") - src.aistate = STATE_CALLSHUTTLE + aistate = STATE_CALLSHUTTLE if("ai-callshuttle2") SSshuttle.requestEvac(usr, href_list["call"]) - src.aistate = STATE_DEFAULT + aistate = STATE_DEFAULT if("ai-messagelist") - src.aicurrmsg = 0 - src.aistate = STATE_MESSAGELIST + aicurrmsg = null + aistate = STATE_MESSAGELIST if("ai-viewmessage") - src.aistate = STATE_VIEWMESSAGE - if (!src.aicurrmsg) + aistate = STATE_VIEWMESSAGE + if (!aicurrmsg) if(href_list["message-num"]) - src.aicurrmsg = text2num(href_list["message-num"]) + var/msgnum = text2num(href_list["message-num"]) + aicurrmsg = messages[msgnum] else - src.aistate = STATE_MESSAGELIST + aistate = STATE_MESSAGELIST if("ai-delmessage") - src.aistate = (src.aicurrmsg) ? STATE_DELMESSAGE : STATE_MESSAGELIST + aistate = aicurrmsg ? STATE_DELMESSAGE : STATE_MESSAGELIST if("ai-delmessage2") - if(src.aicurrmsg) - var/title = src.messagetitle[src.aicurrmsg] - var/text = src.messagetext[src.aicurrmsg] - src.messagetitle.Remove(title) - src.messagetext.Remove(text) - if(src.currmsg == src.aicurrmsg) - src.currmsg = 0 - src.aicurrmsg = 0 - src.aistate = STATE_MESSAGELIST + if(aicurrmsg) + if(currmsg == aicurrmsg) + currmsg = null + messages -= aicurrmsg + aicurrmsg = null + aistate = STATE_MESSAGELIST + if("ai-respond") + var/answer = text2num(href_list["answer"]) + if(!aicurrmsg || !answer || aicurrmsg.possible_answers.len < answer) + aistate = STATE_MESSAGELIST + aicurrmsg.answered = answer + aistate = STATE_VIEWMESSAGE if("ai-status") - src.aistate = STATE_STATUSDISPLAY + aistate = STATE_STATUSDISPLAY if("ai-announce") make_announcement(usr, 1) if("ai-securitylevel") +<<<<<<< HEAD src.tmp_alertlevel = text2num( href_list["newalertlevel"] ) if(!tmp_alertlevel) tmp_alertlevel = 0 +======= + tmp_alertlevel = text2num( href_list["newalertlevel"] ) + if(!tmp_alertlevel) + tmp_alertlevel = 0 +>>>>>>> 7feea9a... Merge pull request #31849 from AnturK/commsconsolecleanup var/old_level = GLOB.security_level if(!tmp_alertlevel) tmp_alertlevel = SEC_LEVEL_GREEN if(tmp_alertlevel < SEC_LEVEL_GREEN) tmp_alertlevel = SEC_LEVEL_GREEN @@ -372,24 +390,23 @@ if(SEC_LEVEL_BLUE) SSblackbox.inc("alert_comms_blue",1) tmp_alertlevel = 0 - src.aistate = STATE_DEFAULT + aistate = STATE_DEFAULT if("ai-changeseclevel") - src.aistate = STATE_ALERT_LEVEL - + aistate = STATE_ALERT_LEVEL if("ai-emergencyaccess") - src.aistate = STATE_TOGGLE_EMERGENCY + aistate = STATE_TOGGLE_EMERGENCY if("ai-enableemergency") make_maint_all_access() log_game("[key_name(usr)] enabled emergency maintenance access.") message_admins("[key_name_admin(usr)] enabled emergency maintenance access.") - src.aistate = STATE_DEFAULT + aistate = STATE_DEFAULT if("ai-disableemergency") revoke_maint_all_access() log_game("[key_name(usr)] disabled emergency maintenance access.") message_admins("[key_name_admin(usr)] disabled emergency maintenance access.") - src.aistate = STATE_DEFAULT + aistate = STATE_DEFAULT - src.updateUsrDialog() + updateUsrDialog() /obj/machinery/computer/communications/attackby(obj/I, mob/user, params) if(istype(I, /obj/item/card/id)) @@ -409,7 +426,7 @@ /obj/machinery/computer/communications/attack_hand(mob/user) if(..()) return - if (src.z > 6) + if (z > 6) to_chat(user, "Unable to establish a connection: \black You're too far away from the station!") return @@ -421,19 +438,19 @@ var/datum/browser/popup = new(user, "communications", "Communications Console", 400, 500) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) if(issilicon(user)) - var/dat2 = src.interact_ai(user) // give the AI a different interact proc to limit its access + var/dat2 = interact_ai(user) // give the AI a different interact proc to limit its access if(dat2) dat += dat2 popup.set_content(dat) popup.open() return - switch(src.state) + switch(state) if(STATE_DEFAULT) - if (src.authenticated) + if (authenticated) if(SSshuttle.emergencyCallAmount) if(SSshuttle.emergencyLastCallLoc) dat += "Most recent shuttle call/recall traced to: [format_text(SSshuttle.emergencyLastCallLoc.name)]
" @@ -451,7 +468,7 @@ dat += "
\[ Cancel Shuttle Call \]" dat += "
\[ Set Status Display \]" - if (src.authenticated==2) + if (authenticated==2) dat += "

Captain Functions" dat += "
\[ Make a Captain's Announcement \]" if(CONFIG_GET(string/cross_server_address)) @@ -476,24 +493,31 @@ playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0) if(STATE_MESSAGELIST) dat += "Messages:" - for(var/i = 1; i<=src.messagetitle.len; i++) - dat += "
[src.messagetitle[i]]" + for(var/i in 1 to messages.len) + var/datum/comm_message/M = messages[i] + dat += "
[M.title]" playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) if(STATE_VIEWMESSAGE) - if (src.currmsg) - dat += "[src.messagetitle[src.currmsg]]

[src.messagetext[src.currmsg]]" - if (src.authenticated) - dat += "

\[ Delete \]" + if (currmsg) + dat += "[currmsg.title]

[currmsg.content]" + if(!currmsg.answered && currmsg.possible_answers.len) + for(var/i in 1 to currmsg.possible_answers.len) + var/answer = currmsg.possible_answers[i] + dat += "
\[ Answer : [answer] \]" + else if(currmsg.answered) + var/answered = currmsg.possible_answers[currmsg.answered] + dat += "
Archived Answer : [answered]" + dat += "

\[ Delete \]" else - src.state = STATE_MESSAGELIST - src.attack_hand(user) - return + aistate = STATE_MESSAGELIST + attack_hand(user) + return null if(STATE_DELMESSAGE) - if (src.currmsg) + if (currmsg) dat += "Are you sure you want to delete this message? \[ OK | Cancel \]" else - src.state = STATE_MESSAGELIST - src.attack_hand(user) + state = STATE_MESSAGELIST + attack_hand(user) return if(STATE_STATUSDISPLAY) dat += "Set Status Displays
" @@ -538,7 +562,7 @@ dat += "Prerequisites: [S.prerequisites]
" dat += "(Purchase)

" - dat += "

\[ [(src.state != STATE_DEFAULT) ? "Main Menu | " : ""]Close \]" + dat += "

\[ [(state != STATE_DEFAULT) ? "Main Menu | " : ""]Close \]" popup.set_content(dat) popup.open() @@ -584,7 +608,7 @@ /obj/machinery/computer/communications/proc/interact_ai(mob/living/silicon/ai/user) var/dat = "" - switch(src.aistate) + switch(aistate) if(STATE_DEFAULT) if(SSshuttle.emergencyCallAmount) if(SSshuttle.emergencyLastCallLoc) @@ -608,22 +632,30 @@ dat += get_call_shuttle_form(1) if(STATE_MESSAGELIST) dat += "Messages:" - for(var/i = 1; i<=src.messagetitle.len; i++) - dat += "
[src.messagetitle[i]]" + for(var/i in 1 to messages.len) + var/datum/comm_message/M = messages[i] + dat += "
[M.title]" if(STATE_VIEWMESSAGE) - if (src.aicurrmsg) - dat += "[src.messagetitle[src.aicurrmsg]]

[src.messagetext[src.aicurrmsg]]" + if (aicurrmsg) + dat += "[aicurrmsg.title]

[aicurrmsg.content]" + if(!aicurrmsg.answered && aicurrmsg.possible_answers.len) + for(var/i in 1 to aicurrmsg.possible_answers.len) + var/answer = aicurrmsg.possible_answers[i] + dat += "
\[ Answer : [answer] \]" + else if(aicurrmsg.answered) + var/answered = aicurrmsg.possible_answers[aicurrmsg.answered] + dat += "
Archived Answer : [answered]" dat += "

\[ Delete \]" else - src.aistate = STATE_MESSAGELIST - src.attack_hand(user) + aistate = STATE_MESSAGELIST + attack_hand(user) return null if(STATE_DELMESSAGE) - if(src.aicurrmsg) + if(aicurrmsg) dat += "Are you sure you want to delete this message? \[ OK | Cancel \]" else - src.aistate = STATE_MESSAGELIST - src.attack_hand(user) + aistate = STATE_MESSAGELIST + attack_hand(user) return if(STATE_STATUSDISPLAY) @@ -654,7 +686,7 @@ dat += "Emergency Maintenance Access is currently DISABLED" dat += "
Lift access restrictions on maintenance and external airlocks?
\[ OK | Cancel \]" - dat += "

\[ [(src.aistate != STATE_DEFAULT) ? "Main Menu | " : ""]Close \]" + dat += "

\[ [(aistate != STATE_DEFAULT) ? "Main Menu | " : ""]Close \]" return dat /obj/machinery/computer/communications/proc/make_announcement(mob/living/user, is_silicon) @@ -695,3 +727,12 @@ /obj/machinery/computer/communications/proc/overrideCooldown() var/obj/item/circuitboard/computer/communications/CM = circuit CM.lastTimeUsed = 0 + +/obj/machinery/computer/communications/proc/add_message(datum/comm_message/new_message) + messages += new_message + +/datum/comm_message + var/title + var/content + var/list/possible_answers = list() + var/answered \ No newline at end of file