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