From 563a9cc516deeb10265b9abc18655de02e849ffc Mon Sep 17 00:00:00 2001 From: forest2001 Date: Mon, 18 Sep 2023 04:06:43 +0100 Subject: [PATCH] Datacore Moves most information from ARES Interface and APOLLO Interface to the ARES Datacore. Also reorganises the files so the two interfaces are in separate files with all their UI data. --- code/defines/procs/announcement.dm | 22 +- code/game/bioscans.dm | 9 +- code/game/machinery/ARES/ARES.dm | 154 +-- code/game/machinery/ARES/ARES_interface.dm | 472 +++++++++ .../machinery/ARES/ARES_interface_apollo.dm | 405 ++++++++ code/game/machinery/ARES/ARES_procs.dm | 892 ++---------------- .../game/machinery/ARES/ARES_step_triggers.dm | 12 +- code/game/machinery/biohazard_lockdown.dm | 5 +- .../machinery/computer/almayer_control.dm | 14 +- .../game/machinery/computer/communications.dm | 8 +- code/game/objects/items/devices/cictablet.dm | 5 +- code/game/supplyshuttle.dm | 5 +- code/modules/admin/tabs/event_tab.dm | 4 +- code/modules/admin/topic/topic.dm | 2 +- code/modules/cm_marines/anti_air.dm | 8 +- code/modules/cm_marines/overwatch.dm | 4 +- .../mob/living/carbon/xenomorph/death.dm | 5 +- .../shuttle/computers/dropship_computer.dm | 25 +- code/modules/shuttles/marine_ferry.dm | 5 +- code/modules/shuttles/shuttle_console.dm | 5 +- colonialmarines.dme | 2 + 21 files changed, 1038 insertions(+), 1025 deletions(-) create mode 100644 code/game/machinery/ARES/ARES_interface.dm create mode 100644 code/game/machinery/ARES/ARES_interface_apollo.dm diff --git a/code/defines/procs/announcement.dm b/code/defines/procs/announcement.dm index 5223d63b8e59..574c06e436a2 100644 --- a/code/defines/procs/announcement.dm +++ b/code/defines/procs/announcement.dm @@ -45,13 +45,13 @@ if((H.faction != faction_to_display && !add_PMCs) || (H.faction != faction_to_display && add_PMCs && !(H.faction in FACTION_LIST_WY)) && !(faction_to_display in H.faction_group)) //faction checks targets.Remove(H) - var/datum/ares_link/link = GLOB.ares_link + var/datum/ares_datacore/datacore = GLOB.ares_datacore if(ares_can_log()) switch(logging) if(ARES_LOG_MAIN) - link.log_ares_announcement(title, message) + datacore.log_ares_announcement(title, message) if(ARES_LOG_SECURITY) - link.log_ares_security(title, message) + datacore.log_ares_security(title, message) else if(faction_to_display == "Everyone (-Yautja)") for(var/mob/M in targets) @@ -98,13 +98,13 @@ for(var/mob/living/silicon/decoy/ship_ai/AI in ai_mob_list) INVOKE_ASYNC(AI, TYPE_PROC_REF(/mob/living/silicon/decoy/ship_ai, say), message) - var/datum/ares_link/link = GLOB.ares_link + var/datum/ares_datacore/datacore = GLOB.ares_datacore if(ares_can_log()) switch(logging) if(ARES_LOG_MAIN) - link.log_ares_announcement("[MAIN_AI_SYSTEM] Comms Update", message) + datacore.log_ares_announcement("[MAIN_AI_SYSTEM] Comms Update", message) if(ARES_LOG_SECURITY) - link.log_ares_security("[MAIN_AI_SYSTEM] Security Update", message) + datacore.log_ares_security("[MAIN_AI_SYSTEM] Security Update", message) /proc/ai_silent_announcement(message, channel_prefix, bypass_cooldown = FALSE) if(!message) @@ -135,9 +135,9 @@ if(!isnull(signature)) message += "

Signed by,
[signature]
" - var/datum/ares_link/link = GLOB.ares_link - if(link.interface && !(link.interface.inoperable())) - link.log_ares_announcement(title, message) + var/datum/ares_datacore/datacore = GLOB.ares_datacore + if(ares_can_log()) + datacore.log_ares_announcement(title, message) announcement_helper(message, title, targets, sound_to_play) @@ -150,9 +150,9 @@ if(!ishuman(T) || isyautja(T) || !is_mainship_level(T.z)) targets.Remove(T) - var/datum/ares_link/link = GLOB.ares_link + var/datum/ares_datacore/datacore = GLOB.ares_datacore if(ares_can_log()) - link.log_ares_announcement("[title] Shipwide Update", message) + datacore.log_ares_announcement("[title] Shipwide Update", message) announcement_helper(message, title, targets, sound_to_play) diff --git a/code/game/bioscans.dm b/code/game/bioscans.dm index 62c801a02d29..d3170a06c557 100644 --- a/code/game/bioscans.dm +++ b/code/game/bioscans.dm @@ -109,24 +109,23 @@ GLOBAL_DATUM_INIT(bioscan_data, /datum/bioscan_data, new) to_chat(ghost, ghost_scan) -/// This will do something after Project ARES. /datum/bioscan_data/proc/ares_can_bioscan() var/datum/ares_link/link = GLOB.ares_link if(!istype(link)) return FALSE - if(link.p_bioscan && !link.p_bioscan.inoperable()) + if(link.processor_bioscan && !link.processor_bioscan.inoperable()) return TRUE return FALSE /// The announcement to all Humans. Slightly off for the planet and elsewhere, accurate for the ship. /datum/bioscan_data/proc/ares_bioscan(forced = FALSE, variance = 2) - var/datum/ares_link/link = GLOB.ares_link + var/datum/ares_datacore/datacore = GLOB.ares_datacore if(!forced && !ares_can_bioscan()) message_admins("An ARES Bioscan has failed.") var/name = "[MAIN_AI_SYSTEM] Bioscan Status" var/input = "Bioscan failed. \n\nInvestigation into Bioscan subsystem recommended." if(ares_can_log()) - link.log_ares_bioscan(name, input) + datacore.log_ares_bioscan(name, input) if(ares_can_interface()) marine_announcement(input, name, 'sound/misc/interference.ogg', logging = ARES_LOG_NONE) return @@ -138,7 +137,7 @@ GLOBAL_DATUM_INIT(bioscan_data, /datum/bioscan_data, new) log_game("BIOSCAN: ARES bioscan completed. [input]") if(forced || ares_can_log()) - link.log_ares_bioscan(name, input) //if interface is down, bioscan still logged, just have to go read it. + datacore.log_ares_bioscan(name, input) //if interface is down, bioscan still logged, just have to go read it. if(forced || ares_can_interface()) marine_announcement(input, name, 'sound/AI/bioscan.ogg', logging = ARES_LOG_NONE) else diff --git a/code/game/machinery/ARES/ARES.dm b/code/game/machinery/ARES/ARES.dm index ed4391c89c24..1ecbb4a5d7d6 100644 --- a/code/game/machinery/ARES/ARES.dm +++ b/code/game/machinery/ARES/ARES.dm @@ -8,7 +8,6 @@ unslashable = TRUE unacidable = TRUE - var/link_id = MAIN_SHIP_DEFAULT_NAME var/datum/ares_link/link /obj/structure/machinery/ares/ex_act(severity) @@ -40,14 +39,12 @@ log_debug("Error: link_systems called without a link datum") if(link && !override) return FALSE - if(new_link.link_id == link_id) + if(new_link) link = new_link - log_debug("[name] linked to Ares Link [link_id]") new_link.linked_systems += src return TRUE /obj/structure/machinery/ares/proc/delink() - log_debug("[name] delinked from Ares Link [link.link_id]") link.linked_systems -= src link = null @@ -63,11 +60,11 @@ /obj/structure/machinery/ares/processor/apollo/link_systems(datum/ares_link/new_link = GLOB.ares_link, override) ..() - new_link.p_apollo = src + new_link.processor_apollo = src /obj/structure/machinery/ares/processor/apollo/delink() - if(link && link.p_apollo == src) - link.p_apollo = null + if(link && link.processor_apollo == src) + link.processor_apollo = null ..() /obj/structure/machinery/ares/processor/interface @@ -77,11 +74,11 @@ /obj/structure/machinery/ares/processor/interface/link_systems(datum/ares_link/new_link = GLOB.ares_link, override) ..() - new_link.p_interface = src + new_link.processor_interface = src /obj/structure/machinery/ares/processor/interface/delink() - if(link && link.p_interface == src) - link.p_interface = null + if(link && link.processor_interface == src) + link.processor_interface = null ..() /obj/structure/machinery/ares/processor/bioscan @@ -91,11 +88,11 @@ /obj/structure/machinery/ares/processor/bioscan/link_systems(datum/ares_link/new_link = GLOB.ares_link, override) ..() - new_link.p_bioscan = src + new_link.processor_bioscan = src /obj/structure/machinery/ares/processor/bioscan/delink() - if(link && link.p_bioscan == src) - link.p_bioscan = null + if(link && link.processor_bioscan == src) + link.processor_bioscan = null ..() /// Central Core @@ -104,130 +101,17 @@ desc = "This is ARES' central processor. Made of a casing designed to withstand nuclear blasts, the CPU also contains ARES' blackbox recorder." icon_state = "CPU" +/obj/structure/machinery/ares/cpu/link_systems(datum/ares_link/new_link = GLOB.ares_link, override) + ..() + new_link.central_processor = src + +/obj/structure/machinery/ares/cpu/delink() + if(link && link.central_processor == src) + link.central_processor = null + ..() + /// Memory Substrate, /obj/structure/machinery/ares/substrate name = "ARES Substrate" desc = "The memory substrate of ARES, containing complex protocols and information. Limited capabilities can operate on substrate alone, without the main ARES Unit operational." icon_state = "substrate" - -// #################### ARES Interface Console ##################### -/obj/structure/machinery/computer/ares_console - name = "ARES Interface" - desc = "A console built to interface with ARES, allowing for 1:1 communication." - icon = 'icons/obj/structures/machinery/ares.dmi' - icon_state = "console" - exproof = TRUE - - var/current_menu = "login" - var/last_menu = "" - - var/authentication = ARES_ACCESS_BASIC - - /// The last person to login. - var/last_login - /// The person pretending to be last_login - var/sudo_holder - /// A record of who logged in and when. - var/list/access_list = list() - - /// The ID used to link all devices. - var/link_id = MAIN_SHIP_DEFAULT_NAME - var/datum/ares_link/link - - /// The current deleted chat log of 1:1 conversations being read. - var/list/deleted_1to1 = list() - - /// Holds all (/datum/ares_record/announcement)s - var/list/records_announcement = list() - /// Holds all (/datum/ares_record/bioscan)s - var/list/records_bioscan = list() - /// Holds all (/datum/ares_record/bombardment)s - var/list/records_bombardment = list() - /// Holds all (/datum/ares_record/deletion)s - var/list/records_deletion = list() - /// Holds all (/datum/ares_record/talk_log)s - var/list/records_talking = list() - /// Holds all (/datum/ares_record/requisition_log)s - var/list/records_asrs = list() - /// Holds all (/datum/ares_record/security)s (including AA) - var/list/records_security = list() - /// Holds all (/datum/ares_record/flight)s - var/list/records_flight = list() - /// Is nuke request usable or not? - var/nuke_available = TRUE - - - COOLDOWN_DECLARE(ares_distress_cooldown) - COOLDOWN_DECLARE(ares_nuclear_cooldown) - COOLDOWN_DECLARE(ares_quarters_cooldown) - -/obj/structure/machinery/computer/ares_console/proc/link_systems(datum/ares_link/new_link = GLOB.ares_link, override) - if(link && !override) - return FALSE - if(new_link.link_id == link_id) - new_link.interface = src - link = new_link - log_debug("[name] linked to Ares Link [link_id]") - new_link.linked_systems += src - return TRUE - -/obj/structure/machinery/computer/ares_console/Initialize(mapload, ...) - link_systems(override = FALSE) - . = ..() - -/obj/structure/machinery/computer/ares_console/proc/delink() - if(link && link.interface == src) - link.interface = null - link.linked_systems -= src - link = null - -/obj/structure/machinery/computer/ares_console/Destroy() - delink() - return ..() - -// #################### Working Joe Ticket Console ##################### -/obj/structure/machinery/computer/working_joe - name = "APOLLO Maintenance Controller" - desc = "A console built to facilitate Working Joes and their operation, allowing for simple allocation of resources." - icon = 'icons/obj/structures/machinery/ares.dmi' - icon_state = "console" - exproof = TRUE - - /// The ID used to link all devices. - var/link_id = MAIN_SHIP_DEFAULT_NAME - var/datum/ares_link/link - var/obj/structure/machinery/ares/processor/interface/processor - - var/current_menu = "login" - var/last_menu = "" - - var/authentication = ARES_ACCESS_BASIC - /// The last person to login. - var/last_login - /// A record of who logged in and when. - var/list/login_list = list() - - -/obj/structure/machinery/computer/working_joe/proc/link_systems(datum/ares_link/new_link = GLOB.ares_link, override) - if(link && !override) - return FALSE - if(new_link.link_id == link_id) - new_link.ticket_computers += src - link = new_link - log_debug("[name] linked to Ares Link [link_id]") - new_link.linked_systems += src - return TRUE - -/obj/structure/machinery/computer/working_joe/Initialize(mapload, ...) - link_systems(override = FALSE) - . = ..() - -/obj/structure/machinery/computer/working_joe/proc/delink() - if(link) - link.ticket_computers -= src - link.linked_systems -= src - link = null - -/obj/structure/machinery/computer/working_joe/Destroy() - delink() - return ..() diff --git a/code/game/machinery/ARES/ARES_interface.dm b/code/game/machinery/ARES/ARES_interface.dm new file mode 100644 index 000000000000..41f4c4a38f07 --- /dev/null +++ b/code/game/machinery/ARES/ARES_interface.dm @@ -0,0 +1,472 @@ +// #################### ARES Interface Console ##################### +/obj/structure/machinery/computer/ares_console + name = "ARES Interface" + desc = "A console built to interface with ARES, allowing for 1:1 communication." + icon = 'icons/obj/structures/machinery/ares.dmi' + icon_state = "console" + exproof = TRUE + + var/current_menu = "login" + var/last_menu = "" + + var/authentication = ARES_ACCESS_BASIC + + /// The last person to login. + var/last_login + /// The person pretending to be last_login + var/sudo_holder + + /// The current deleted chat log of 1:1 conversations being read. + var/list/deleted_1to1 = list() + + /// The ID used to link all devices. + var/datum/ares_link/link + /// The datacore storing all the information. + var/datum/ares_datacore/datacore + +/obj/structure/machinery/computer/ares_console/proc/link_systems(datum/ares_link/new_link = GLOB.ares_link, override) + if(link && !override) + return FALSE + if(new_link) + new_link.interface = src + link = new_link + new_link.linked_systems += src + if(!datacore) + datacore = GLOB.ares_datacore + return TRUE + +/obj/structure/machinery/computer/ares_console/Initialize(mapload, ...) + link_systems(override = FALSE) + . = ..() + +/obj/structure/machinery/computer/ares_console/proc/delink() + if(link) + if(link.interface == src) + link.interface = null + link.linked_systems -= src + link = null + datacore = null + +/obj/structure/machinery/computer/ares_console/Destroy() + delink() + return ..() + +// ------ ARES Interface UI ------ // + +/obj/structure/machinery/computer/ares_console/attack_hand(mob/user as mob) + if(..() || !allowed(usr) || inoperable()) + return FALSE + + tgui_interact(user) + return TRUE + +/obj/structure/machinery/computer/ares_console/tgui_interact(mob/user, datum/tgui/ui, datum/ui_state/state) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AresInterface", name) + ui.open() + +/obj/structure/machinery/computer/ares_console/ui_data(mob/user) + var/list/data = list() + + data["current_menu"] = current_menu + data["last_page"] = last_menu + + data["logged_in"] = last_login + data["sudo"] = sudo_holder ? TRUE : FALSE + + data["access_text"] = "[sudo_holder ? "(SUDO)," : ""] access level [authentication], [ares_auth_to_text(authentication)]." + data["access_level"] = authentication + + data["alert_level"] = security_level + data["evac_status"] = EvacuationAuthority.evac_status + data["worldtime"] = world.time + + data["access_log"] = datacore.interface_access_list + data["apollo_log"] = datacore.apollo_log + + data["deleted_conversation"] = deleted_1to1 + + data["distresstime"] = datacore.ares_distress_cooldown + data["distresstimelock"] = DISTRESS_TIME_LOCK + data["quarterstime"] = datacore.ares_quarters_cooldown + data["mission_failed"] = SSticker.mode.is_in_endgame + data["nuketimelock"] = NUCLEAR_TIME_LOCK + data["nuke_available"] = datacore.nuke_available + + var/list/logged_announcements = list() + for(var/datum/ares_record/announcement/broadcast as anything in datacore.records_announcement) + var/list/current_broadcast = list() + current_broadcast["time"] = broadcast.time + current_broadcast["title"] = broadcast.title + current_broadcast["details"] = broadcast.details + current_broadcast["ref"] = "\ref[broadcast]" + logged_announcements += list(current_broadcast) + data["records_announcement"] = logged_announcements + + var/list/logged_alerts = list() + for(var/datum/ares_record/security/security_alert as anything in datacore.records_security) + var/list/current_alert = list() + current_alert["time"] = security_alert.time + current_alert["title"] = security_alert.title + current_alert["details"] = security_alert.details + current_alert["ref"] = "\ref[security_alert]" + logged_alerts += list(current_alert) + data["records_security"] = logged_alerts + + var/list/logged_flights = list() + for(var/datum/ares_record/flight/flight_log as anything in datacore.records_flight) + var/list/current_flight = list() + current_flight["time"] = flight_log.time + current_flight["title"] = flight_log.title + current_flight["details"] = flight_log.details + current_flight["user"] = flight_log.user + current_flight["ref"] = "\ref[flight_log]" + logged_flights += list(current_flight) + data["records_flight"] = logged_flights + + var/list/logged_bioscans = list() + for(var/datum/ares_record/bioscan/scan as anything in datacore.records_bioscan) + var/list/current_scan = list() + current_scan["time"] = scan.time + current_scan["title"] = scan.title + current_scan["details"] = scan.details + current_scan["ref"] = "\ref[scan]" + logged_bioscans += list(current_scan) + data["records_bioscan"] = logged_bioscans + + var/list/logged_bombs = list() + for(var/datum/ares_record/bombardment/bomb as anything in datacore.records_bombardment) + var/list/current_bomb = list() + current_bomb["time"] = bomb.time + current_bomb["title"] = bomb.title + current_bomb["details"] = bomb.details + current_bomb["user"] = bomb.user + current_bomb["ref"] = "\ref[bomb]" + logged_bombs += list(current_bomb) + data["records_bombardment"] = logged_bombs + + var/list/logged_deletes = list() + for(var/datum/ares_record/deletion/deleted as anything in datacore.records_deletion) + if(!istype(deleted)) + continue + var/list/current_delete = list() + current_delete["time"] = deleted.time + current_delete["title"] = deleted.title + current_delete["details"] = deleted.details + current_delete["user"] = deleted.user + current_delete["ref"] = "\ref[deleted]" + logged_deletes += list(current_delete) + data["records_deletion"] = logged_deletes + + var/list/logged_discussions = list() + for(var/datum/ares_record/deleted_talk/deleted_convo as anything in datacore.records_deletion) + if(!istype(deleted_convo)) + continue + var/list/deleted_disc = list() + deleted_disc["time"] = deleted_convo.time + deleted_disc["title"] = deleted_convo.title + deleted_disc["ref"] = "\ref[deleted_convo]" + logged_discussions += list(deleted_disc) + data["deleted_discussions"] = logged_discussions + + var/list/logged_orders = list() + for(var/datum/ares_record/requisition_log/req_order as anything in datacore.records_asrs) + if(!istype(req_order)) + continue + var/list/current_order = list() + current_order["time"] = req_order.time + current_order["details"] = req_order.details + current_order["title"] = req_order.title + current_order["user"] = req_order.user + current_order["ref"] = "\ref[req_order]" + logged_orders += list(current_order) + data["records_requisition"] = logged_orders + + var/list/logged_convos = list() + var/list/active_convo = list() + var/active_ref + for(var/datum/ares_record/talk_log/log as anything in datacore.records_talking) + if(!istype(log)) + continue + if(log.user == last_login) + active_convo = log.conversation + active_ref = "\ref[log]" + + var/list/current_convo = list() + current_convo["user"] = log.user + current_convo["ref"] = "\ref[log]" + current_convo["conversation"] = log.conversation + logged_convos += list(current_convo) + + data["active_convo"] = active_convo + data["active_ref"] = active_ref + data["conversations"] = logged_convos + + return data + +/obj/structure/machinery/computer/ares_console/ui_status(mob/user, datum/ui_state/state) + . = ..() + if(!allowed(user)) + return UI_UPDATE + if(inoperable()) + return UI_DISABLED + +/obj/structure/machinery/computer/ares_console/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + playsound(src, "keyboard_alt", 15, 1) + + switch (action) + if("go_back") + if(!last_menu) + return to_chat(usr, SPAN_WARNING("Error, no previous page detected.")) + var/temp_holder = current_menu + current_menu = last_menu + last_menu = temp_holder + + if("login") + var/mob/living/carbon/human/operator = usr + var/obj/item/card/id/idcard = operator.get_active_hand() + if(istype(idcard)) + authentication = get_ares_access(idcard) + last_login = idcard.registered_name + else if(operator.wear_id) + idcard = operator.wear_id + if(istype(idcard)) + authentication = get_ares_access(idcard) + last_login = idcard.registered_name + else + to_chat(usr, SPAN_WARNING("You require an ID card to access this terminal!")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + if(authentication) + datacore.interface_access_list += "[last_login] at [worldtime2text()], Access Level [authentication] - [ares_auth_to_text(authentication)]." + current_menu = "main" + + if("sudo") + var/new_user = tgui_input_text(usr, "Enter Sudo Username", "Sudo User", encode = FALSE) + if(new_user) + if(new_user == sudo_holder) + last_login = sudo_holder + sudo_holder = null + return FALSE + if(new_user == last_login) + to_chat(usr, SPAN_WARNING("Already remote logged in as this user.")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + sudo_holder = last_login + last_login = new_user + datacore.interface_access_list += "[last_login] at [worldtime2text()], Sudo Access." + return TRUE + if("sudo_logout") + datacore.interface_access_list += "[last_login] at [worldtime2text()], Sudo Logout." + last_login = sudo_holder + sudo_holder = null + return + // -- Page Changers -- // + if("logout") + last_menu = current_menu + current_menu = "login" + if(sudo_holder) + datacore.interface_access_list += "[last_login] at [worldtime2text()], Sudo Logout." + last_login = sudo_holder + sudo_holder = null + datacore.interface_access_list += "[last_login] logged out at [worldtime2text()]." + + if("home") + last_menu = current_menu + current_menu = "main" + if("page_1to1") + last_menu = current_menu + current_menu = "talking" + if("page_announcements") + last_menu = current_menu + current_menu = "announcements" + if("page_bioscans") + last_menu = current_menu + current_menu = "bioscans" + if("page_bombardments") + last_menu = current_menu + current_menu = "bombardments" + if("page_apollo") + last_menu = current_menu + current_menu = "apollo" + if("page_access") + last_menu = current_menu + current_menu = "access_log" + if("page_security") + last_menu = current_menu + current_menu = "security" + if("page_flight") + last_menu = current_menu + current_menu = "flight_log" + if("page_requisitions") + last_menu = current_menu + current_menu = "requisitions" + if("page_emergency") + last_menu = current_menu + current_menu = "emergency" + if("page_deleted") + last_menu = current_menu + current_menu = "delete_log" + if("page_deleted_1to1") + last_menu = current_menu + current_menu = "deleted_talks" + + // -- Delete Button -- // + if("delete_record") + var/datum/ares_record/record = locate(params["record"]) + if(record.record_name == ARES_RECORD_DELETED) + return FALSE + var/datum/ares_record/deletion/new_delete = new + var/new_details = "Error" + var/new_title = "Error" + switch(record.record_name) + if(ARES_RECORD_ANNOUNCE) + new_title = "[record.title] at [record.time]" + new_details = record.details + datacore.records_announcement -= record + if(ARES_RECORD_SECURITY, ARES_RECORD_ANTIAIR) + new_title = "[record.title] at [record.time]" + new_details = record.details + datacore.records_security -= record + if(ARES_RECORD_BIOSCAN) + new_title = "[record.title] at [record.time]" + new_details = record.details + datacore.records_bioscan -= record + if(ARES_RECORD_BOMB) + new_title = "[record.title] at [record.time]" + new_details = "[record.details] Launched by [record.user]." + datacore.records_bombardment -= record + + new_delete.details = new_details + new_delete.user = last_login + new_delete.title = new_title + + datacore.records_deletion += new_delete + + // -- 1:1 Conversation -- // + if("new_conversation") + var/datum/ares_record/talk_log/convo = new(last_login) + convo.conversation += "[MAIN_AI_SYSTEM] at [worldtime2text()], 'New 1:1 link initiated. Greetings, [last_login].'" + datacore.records_talking += convo + + if("clear_conversation") + var/datum/ares_record/talk_log/conversation = locate(params["active_convo"]) + if(!istype(conversation)) + return FALSE + var/datum/ares_record/deleted_talk/deleted = new + deleted.title = conversation.title + deleted.conversation = conversation.conversation + deleted.user = conversation.user + datacore.records_deletion += deleted + datacore.records_talking -= conversation + + if("message_ares") + var/message = tgui_input_text(usr, "What do you wish to say to ARES?", "ARES Message", encode = FALSE) + if(message) + message_ares(message, usr, params["active_convo"]) + + if("read_record") + var/datum/ares_record/deleted_talk/conversation = locate(params["record"]) + deleted_1to1 = conversation.conversation + last_menu = current_menu + current_menu = "read_deleted" + + // -- Emergency Buttons -- // + if("general_quarters") + if(!COOLDOWN_FINISHED(datacore, ares_quarters_cooldown)) + to_chat(usr, SPAN_WARNING("It has not been long enough since the last General Quarters call!")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + if(security_level < SEC_LEVEL_RED) + set_security_level(SEC_LEVEL_RED, no_sound = TRUE, announce = FALSE) + shipwide_ai_announcement("ATTENTION! GENERAL QUARTERS. ALL HANDS, MAN YOUR BATTLESTATIONS.", MAIN_AI_SYSTEM, 'sound/effects/GQfullcall.ogg') + log_game("[key_name(usr)] has called for general quarters via ARES.") + message_admins("[key_name_admin(usr)] has called for general quarters via ARES.") + datacore.log_ares_security("General Quarters", "[last_login] has called for general quarters via ARES.") + COOLDOWN_START(datacore, ares_quarters_cooldown, 10 MINUTES) + . = TRUE + + if("evacuation_start") + if(security_level < SEC_LEVEL_RED) + to_chat(usr, SPAN_WARNING("The ship must be under red alert in order to enact evacuation procedures.")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + + if(EvacuationAuthority.flags_scuttle & FLAGS_EVACUATION_DENY) + to_chat(usr, SPAN_WARNING("The USCM has placed a lock on deploying the evacuation pods.")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + + if(!EvacuationAuthority.initiate_evacuation()) + to_chat(usr, SPAN_WARNING("You are unable to initiate an evacuation procedure right now!")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + + log_game("[key_name(usr)] has called for an emergency evacuation via ARES.") + message_admins("[key_name_admin(usr)] has called for an emergency evacuation via ARES.") + datacore.log_ares_security("Initiate Evacuation", "[last_login] has called for an emergency evacuation via ARES.") + . = TRUE + + if("distress") + if(!SSticker.mode) + return FALSE //Not a game mode? + if(world.time < DISTRESS_TIME_LOCK) + to_chat(usr, SPAN_WARNING("You have been here for less than six minutes... what could you possibly have done!")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + if(!COOLDOWN_FINISHED(datacore, ares_distress_cooldown)) + to_chat(usr, SPAN_WARNING("The distress launcher is cooling down!")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + if(security_level == SEC_LEVEL_DELTA) + to_chat(usr, SPAN_WARNING("The ship is already undergoing self destruct procedures!")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + else if(security_level < SEC_LEVEL_RED) + to_chat(usr, SPAN_WARNING("The ship must be under red alert to launch a distress beacon!")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + + for(var/client/admin in GLOB.admins) + if((R_ADMIN|R_MOD) & admin.admin_holder.rights) + playsound_client(admin,'sound/effects/sos-morse-code.ogg',10) + SSticker.mode.request_ert(usr, TRUE) + to_chat(usr, SPAN_NOTICE("A distress beacon request has been sent to USCM High Command.")) + COOLDOWN_START(datacore, ares_distress_cooldown, COOLDOWN_COMM_REQUEST) + return TRUE + + if("nuclearbomb") + if(!SSticker.mode) + return FALSE //Not a game mode? + if(world.time < NUCLEAR_TIME_LOCK) + to_chat(usr, SPAN_WARNING("It is too soon to request Nuclear Ordnance!")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + if(!COOLDOWN_FINISHED(datacore, ares_nuclear_cooldown)) + to_chat(usr, SPAN_WARNING("The ordnance request frequency is garbled, wait for reset!")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + if(security_level == SEC_LEVEL_DELTA || SSticker.mode.is_in_endgame) + to_chat(usr, SPAN_WARNING("The mission has failed catastrophically, what do you want a nuke for?!")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + var/reason = tgui_input_text(usr, "Please enter reason nuclear ordnance is required.", "Reason for Nuclear Ordnance") + if(!reason) + return FALSE + for(var/client/admin in GLOB.admins) + if((R_ADMIN|R_MOD) & admin.admin_holder.rights) + playsound_client(admin,'sound/effects/sos-morse-code.ogg',10) + message_admins("[key_name(usr)] has requested use of Nuclear Ordnance (via ARES)! Reason: [reason] [CC_MARK(usr)] (APPROVE) (DENY) [ADMIN_JMP_USER(usr)] [CC_REPLY(usr)]") + to_chat(usr, SPAN_NOTICE("A nuclear ordnance request has been sent to USCM High Command for the following reason: [reason]")) + if(ares_can_log()) + datacore.log_ares_security("Nuclear Ordnance Request", "[last_login] has sent a request for nuclear ordnance for the following reason: [reason]") + if(ares_can_interface()) + ai_silent_announcement("[last_login] has sent a request for nuclear ordnance to USCM High Command.", ".V") + ai_silent_announcement("Reason given: [reason].", ".V") + COOLDOWN_START(datacore, ares_nuclear_cooldown, COOLDOWN_COMM_DESTRUCT) + return TRUE diff --git a/code/game/machinery/ARES/ARES_interface_apollo.dm b/code/game/machinery/ARES/ARES_interface_apollo.dm new file mode 100644 index 000000000000..005e60019d4c --- /dev/null +++ b/code/game/machinery/ARES/ARES_interface_apollo.dm @@ -0,0 +1,405 @@ +// #################### Working Joe Ticket Console ##################### +/obj/structure/machinery/computer/working_joe + name = "APOLLO Maintenance Controller" + desc = "A console built to facilitate Working Joes and their operation, allowing for simple allocation of resources." + icon = 'icons/obj/structures/machinery/ares.dmi' + icon_state = "console" + exproof = TRUE + + /// The ID used to link all devices. + var/datum/ares_link/link + /// The datacore storing all the information. + var/datum/ares_datacore/datacore + + var/current_menu = "login" + var/last_menu = "" + + var/authentication = ARES_ACCESS_BASIC + /// The last person to login. + var/last_login + + +/obj/structure/machinery/computer/working_joe/proc/link_systems(datum/ares_link/new_link = GLOB.ares_link, override) + if(link && !override) + return FALSE + if(new_link) + new_link.ticket_computers += src + link = new_link + new_link.linked_systems += src + if(!datacore) + datacore = GLOB.ares_datacore + return TRUE + +/obj/structure/machinery/computer/working_joe/Initialize(mapload, ...) + link_systems(override = FALSE) + . = ..() + +/obj/structure/machinery/computer/working_joe/proc/delink() + if(link) + link.ticket_computers -= src + link.linked_systems -= src + link = null + datacore = null + +/obj/structure/machinery/computer/working_joe/Destroy() + delink() + return ..() + +// ------ Maintenance Controller UI ------ // +/obj/structure/machinery/computer/working_joe/attack_hand(mob/user as mob) + if(..() || !allowed(usr) || inoperable()) + return FALSE + + tgui_interact(user) + return TRUE + +/obj/structure/machinery/computer/working_joe/tgui_interact(mob/user, datum/tgui/ui, datum/ui_state/state) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "WorkingJoe", name) + ui.open() + +/obj/structure/machinery/computer/working_joe/ui_data(mob/user) + var/list/data = list() + + data["current_menu"] = current_menu + data["last_page"] = last_menu + + data["logged_in"] = last_login + + data["access_text"] = "access level [authentication], [ares_auth_to_text(authentication)]." + data["access_level"] = authentication + + data["alert_level"] = security_level + data["worldtime"] = world.time + + data["access_log"] = list() + data["access_log"] += datacore.apollo_login_list + + data["apollo_log"] = list() + data["apollo_log"] += datacore.apollo_log + + var/list/logged_maintenance = list() + for(var/datum/ares_ticket/maintenance/maint_ticket as anything in link.tickets_maintenance) + if(!istype(maint_ticket)) + continue + var/lock_status = TICKET_OPEN + switch(maint_ticket.ticket_status) + if(TICKET_REJECTED, TICKET_CANCELLED, TICKET_COMPLETED) + lock_status = TICKET_CLOSED + + var/list/current_maint = list() + current_maint["id"] = maint_ticket.ticket_id + current_maint["time"] = maint_ticket.ticket_time + current_maint["priority_status"] = maint_ticket.ticket_priority + current_maint["category"] = maint_ticket.ticket_name + current_maint["details"] = maint_ticket.ticket_details + current_maint["status"] = maint_ticket.ticket_status + current_maint["submitter"] = maint_ticket.ticket_submitter + current_maint["assignee"] = maint_ticket.ticket_assignee + current_maint["lock_status"] = lock_status + current_maint["ref"] = "\ref[maint_ticket]" + logged_maintenance += list(current_maint) + data["maintenance_tickets"] = logged_maintenance + + var/list/logged_access = list() + var/list/requesting_access = list() + for(var/datum/ares_ticket/access/access_ticket as anything in link.tickets_access) + var/lock_status = TICKET_OPEN + switch(access_ticket.ticket_status) + if(TICKET_REJECTED, TICKET_CANCELLED, TICKET_REVOKED) + lock_status = TICKET_CLOSED + + var/list/current_ticket = list() + current_ticket["id"] = access_ticket.ticket_id + current_ticket["time"] = access_ticket.ticket_time + current_ticket["priority_status"] = access_ticket.ticket_priority + current_ticket["title"] = access_ticket.ticket_name + current_ticket["details"] = access_ticket.ticket_details + current_ticket["status"] = access_ticket.ticket_status + current_ticket["submitter"] = access_ticket.ticket_submitter + current_ticket["assignee"] = access_ticket.ticket_assignee + current_ticket["lock_status"] = lock_status + current_ticket["ref"] = "\ref[access_ticket]" + logged_access += list(current_ticket) + + if(lock_status == TICKET_OPEN) + requesting_access += access_ticket.ticket_name + data["access_tickets"] = logged_access + + return data + +/obj/structure/machinery/computer/working_joe/ui_status(mob/user, datum/ui_state/state) + . = ..() + if(!allowed(user)) + return UI_UPDATE + if(inoperable()) + return UI_DISABLED + +/obj/structure/machinery/computer/working_joe/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + var/playsound = TRUE + var/mob/living/carbon/human/operator = usr + + switch (action) + if("go_back") + if(!last_menu) + return to_chat(usr, SPAN_WARNING("Error, no previous page detected.")) + var/temp_holder = current_menu + current_menu = last_menu + last_menu = temp_holder + + if("login") + + var/obj/item/card/id/idcard = operator.get_active_hand() + if(istype(idcard)) + authentication = get_ares_access(idcard) + last_login = idcard.registered_name + else if(operator.wear_id) + idcard = operator.wear_id + if(istype(idcard)) + authentication = get_ares_access(idcard) + last_login = idcard.registered_name + else + to_chat(operator, SPAN_WARNING("You require an ID card to access this terminal!")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + if(authentication) + datacore.apollo_login_list += "[last_login] at [worldtime2text()], Access Level [authentication] - [ares_auth_to_text(authentication)]." + current_menu = "main" + + if("logout") + last_menu = current_menu + current_menu = "login" + datacore.apollo_login_list += "[last_login] logged out at [worldtime2text()]." + + if("home") + last_menu = current_menu + current_menu = "main" + if("page_logins") + last_menu = current_menu + current_menu = "login_records" + if("page_apollo") + last_menu = current_menu + current_menu = "apollo" + if("page_request") + last_menu = current_menu + current_menu = "access_requests" + if("page_report") + last_menu = current_menu + current_menu = "maint_reports" + if("page_tickets") + last_menu = current_menu + current_menu = "access_tickets" + if("page_maintenance") + last_menu = current_menu + current_menu = "maint_claim" + + if("new_report") + var/priority_report = FALSE + var/maint_type = tgui_input_list(operator, "What is the type of maintenance item you wish to report?", "Report Category", GLOB.maintenance_categories, 30 SECONDS) + switch(maint_type) + if("Major Structural Damage", "Fire", "Communications Failure", "Power Generation Failure") + priority_report = TRUE + + if(!maint_type) + return FALSE + var/details = tgui_input_text(operator, "What are the details for this report?", "Ticket Details", encode = FALSE) + if(!details) + return FALSE + + if((authentication >= APOLLO_ACCESS_REPORTER) && !priority_report) + var/is_priority = tgui_alert(operator, "Is this a priority report?", "Priority designation", list("Yes", "No")) + if(is_priority == "Yes") + priority_report = TRUE + + var/confirm = alert(operator, "Please confirm the submission of your maintenance report. \n\n Priority: [priority_report ? "Yes" : "No"] \n Category: '[maint_type]' \n Details: '[details]' \n\n Is this correct?", "Confirmation", "Yes", "No") + if(confirm == "Yes") + if(link) + var/datum/ares_ticket/maintenance/maint_ticket = new(last_login, maint_type, details, priority_report) + link.tickets_maintenance += maint_ticket + if(priority_report) + ares_apollo_talk("Priority Maintenance Report: [maint_type] - ID [maint_ticket.ticket_id]. Seek and resolve.") + log_game("ARES: Maintenance Ticket '\ref[maint_ticket]' created by [key_name(operator)] as [last_login] with Category '[maint_type]' and Details of '[details]'.") + return TRUE + return FALSE + + if("claim_ticket") + var/datum/ares_ticket/ticket = locate(params["ticket"]) + if(!istype(ticket)) + return FALSE + var/claim = TRUE + var/assigned = ticket.ticket_assignee + if(assigned) + if(assigned == last_login) + var/prompt = tgui_alert(usr, "You already claimed this ticket! Do you wish to drop your claim?", "Unclaim ticket", list("Yes", "No")) + if(prompt != "Yes") + return FALSE + /// set ticket back to pending + ticket.ticket_assignee = null + ticket.ticket_status = TICKET_PENDING + return claim + var/choice = tgui_alert(usr, "This ticket has already been claimed by [assigned]! Do you wish to override their claim?", "Claim Override", list("Yes", "No")) + if(choice != "Yes") + claim = FALSE + if(claim) + ticket.ticket_assignee = last_login + ticket.ticket_status = TICKET_ASSIGNED + return claim + + if("cancel_ticket") + var/datum/ares_ticket/ticket = locate(params["ticket"]) + if(!istype(ticket)) + return FALSE + if(ticket.ticket_submitter != last_login) + to_chat(usr, SPAN_WARNING("You cannot cancel a ticket that does not belong to you!")) + return FALSE + to_chat(usr, SPAN_WARNING("[ticket.ticket_type] [ticket.ticket_id] has been cancelled.")) + ticket.ticket_status = TICKET_CANCELLED + if(ticket.ticket_priority) + ares_apollo_talk("Priority [ticket.ticket_type] [ticket.ticket_id] has been cancelled.") + return TRUE + + if("mark_ticket") + var/datum/ares_ticket/ticket = locate(params["ticket"]) + if(!istype(ticket)) + return FALSE + if(ticket.ticket_assignee != last_login && ticket.ticket_assignee) //must be claimed by you or unclaimed.) + to_chat(usr, SPAN_WARNING("You cannot update a ticket that is not assigned to you!")) + return FALSE + var/choice = tgui_alert(usr, "What do you wish to mark the ticket as?", "Mark", list(TICKET_COMPLETED, TICKET_REJECTED), 20 SECONDS) + switch(choice) + if(TICKET_COMPLETED) + ticket.ticket_status = TICKET_COMPLETED + if(TICKET_REJECTED) + ticket.ticket_status = TICKET_REJECTED + else + return FALSE + if(ticket.ticket_priority) + ares_apollo_talk("Priority [ticket.ticket_type] [ticket.ticket_id] has been [choice] by [last_login].") + to_chat(usr, SPAN_NOTICE("[ticket.ticket_type] [ticket.ticket_id] marked as [choice].")) + return TRUE + + if("new_access") + var/obj/item/card/id/idcard = operator.get_active_hand() + var/has_id = FALSE + if(istype(idcard)) + has_id = TRUE + else if(operator.wear_id) + idcard = operator.wear_id + if(istype(idcard)) + has_id = TRUE + if(!has_id) + to_chat(operator, SPAN_WARNING("You require an ID card to request an access ticket!")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + if(idcard.registered_name != last_login) + to_chat(operator, SPAN_WARNING("This ID card does not match the active login!")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + + var/ticket_holder = last_login + if(!ticket_holder) + return FALSE + var/details = tgui_input_text(operator, "What is the purpose of this access ticket?", "Ticket Details", encode = FALSE) + if(!details) + return FALSE + + var/confirm = alert(operator, "Please confirm the submission of your access ticket request. \n\nHolder: '[ticket_holder]' \n Details: '[details]' \n\n Is this correct?", "Confirmation", "Yes", "No") + if(confirm != "Yes" || !link) + return FALSE + var/datum/ares_ticket/access/access_ticket = new(last_login, ticket_holder, details, FALSE, idcard.registered_gid) + link.waiting_ids += idcard + link.tickets_access += access_ticket + log_game("ARES: Access Ticket '\ref[access_ticket]' created by [key_name(operator)] as [last_login] with Holder '[ticket_holder]' and Details of '[details]'.") + message_admins(SPAN_STAFF_IC("[key_name_admin(operator)] created a new ARES Access Ticket."), 1) + return TRUE + + if("return_access") + playsound = FALSE + var/datum/ares_ticket/access/access_ticket + for(var/datum/ares_ticket/access/possible_ticket in link.tickets_access) + if(possible_ticket.ticket_status != TICKET_GRANTED) + continue + if(possible_ticket.ticket_name != last_login) + continue + access_ticket = possible_ticket + break + + for(var/obj/item/card/id/identification in link.active_ids) + if(!istype(identification)) + continue + if(identification.registered_gid != access_ticket.user_id_num) + continue + + access_ticket.ticket_status = TICKET_RETURNED + identification.access -= ACCESS_MARINE_AI_TEMP + identification.modification_log += "Temporary AI Access self-returned by [key_name(operator)]." + + to_chat(operator, SPAN_NOTICE("Temporary Access Ticket surrendered.")) + playsound(src, 'sound/machines/chime.ogg', 15, 1) + ares_apollo_talk("[last_login] surrendered their access ticket.") + + authentication = get_ares_access(identification) + if(authentication) + datacore.apollo_login_list += "[last_login] at [worldtime2text()], Surrendered Temporary Access Ticket." + return TRUE + + to_chat(operator, SPAN_WARNING("This ID card does not have an access ticket!")) + playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) + return FALSE + + if("auth_access") + playsound = FALSE + var/datum/ares_ticket/access/access_ticket = locate(params["ticket"]) + if(!access_ticket) + return FALSE + for(var/obj/item/card/id/identification in link.waiting_ids) + if(!istype(identification)) + continue + if(identification.registered_gid != access_ticket.user_id_num) + continue + identification.handle_ares_access(last_login, operator) + access_ticket.ticket_status = TICKET_GRANTED + playsound(src, 'sound/machines/chime.ogg', 15, 1) + return TRUE + for(var/obj/item/card/id/identification in link.active_ids) + if(!istype(identification)) + continue + if(identification.registered_gid != access_ticket.user_id_num) + continue + identification.handle_ares_access(last_login, operator) + access_ticket.ticket_status = TICKET_REVOKED + playsound(src, 'sound/machines/chime.ogg', 15, 1) + return TRUE + return FALSE + + if(playsound) + playsound(src, "keyboard_alt", 15, 1) + +/obj/item/card/id/proc/handle_ares_access(logged_in, mob/user) + var/announce_text = "[logged_in] revoked core access from [registered_name]'s ID card." + var/operator = key_name(user) + var/datum/ares_link/link = GLOB.ares_link + if(logged_in == MAIN_AI_SYSTEM) + if(!user) + operator = "[MAIN_AI_SYSTEM] (Sensor Trip)" + else + operator = "[user.ckey]/([MAIN_AI_SYSTEM])" + if(ACCESS_MARINE_AI_TEMP in access) + access -= ACCESS_MARINE_AI_TEMP + link.active_ids -= src + modification_log += "Temporary AI access revoked by [operator]" + to_chat(user, SPAN_NOTICE("Access revoked from [registered_name].")) + else + access += ACCESS_MARINE_AI_TEMP + modification_log += "Temporary AI access granted by [operator]" + announce_text = "[logged_in] granted core access to [registered_name]'s ID card." + to_chat(user, SPAN_NOTICE("Access granted to [registered_name].")) + link.waiting_ids -= src + link.active_ids += src + ares_apollo_talk(announce_text) + return TRUE diff --git a/code/game/machinery/ARES/ARES_procs.dm b/code/game/machinery/ARES/ARES_procs.dm index e03f218f0f34..21436d7b23ab 100644 --- a/code/game/machinery/ARES/ARES_procs.dm +++ b/code/game/machinery/ARES/ARES_procs.dm @@ -1,4 +1,5 @@ GLOBAL_DATUM_INIT(ares_link, /datum/ares_link, new) +GLOBAL_DATUM_INIT(ares_datacore, /datum/ares_datacore, new) GLOBAL_LIST_INIT(maintenance_categories, list( "Broken Light", "Shattered Glass", @@ -15,26 +16,56 @@ GLOBAL_LIST_INIT(maintenance_categories, list( )) /datum/ares_link - var/link_id = MAIN_SHIP_DEFAULT_NAME /// All motion triggers for the link var/list/linked_alerts = list() /// All machinery for the link var/list/linked_systems = list() - var/obj/structure/machinery/ares/processor/interface/p_interface - var/obj/structure/machinery/ares/processor/apollo/p_apollo - var/obj/structure/machinery/ares/processor/bioscan/p_bioscan + var/obj/structure/machinery/ares/cpu/central_processor + var/obj/structure/machinery/ares/processor/interface/processor_interface + var/obj/structure/machinery/ares/processor/apollo/processor_apollo + var/obj/structure/machinery/ares/processor/bioscan/processor_bioscan var/obj/structure/machinery/computer/ares_console/interface var/list/obj/structure/machinery/computer/working_joe/ticket_computers = list() - /// The chat log of the apollo link. Timestamped. - var/list/apollo_log = list() - /// Working Joe stuff var/list/tickets_maintenance = list() var/list/tickets_access = list() var/list/waiting_ids = list() var/list/active_ids = list() +/datum/ares_datacore + /// A record of who logged in and when. + var/list/interface_access_list = list() + /// Access list for Apollo Maintenance Console + var/list/apollo_login_list = list() + + /// The chat log of the apollo link. Timestamped. + var/list/apollo_log = list() + + /// Holds all (/datum/ares_record/announcement)s + var/list/records_announcement = list() + /// Holds all (/datum/ares_record/bioscan)s + var/list/records_bioscan = list() + /// Holds all (/datum/ares_record/bombardment)s + var/list/records_bombardment = list() + /// Holds all (/datum/ares_record/deletion)s + var/list/records_deletion = list() + /// Holds all (/datum/ares_record/talk_log)s + var/list/records_talking = list() + /// Holds all (/datum/ares_record/requisition_log)s + var/list/records_asrs = list() + /// Holds all (/datum/ares_record/security)s (including AA) + var/list/records_security = list() + /// Holds all (/datum/ares_record/flight)s + var/list/records_flight = list() + /// Is nuke request usable or not? + var/nuke_available = TRUE + + + COOLDOWN_DECLARE(ares_distress_cooldown) + COOLDOWN_DECLARE(ares_nuclear_cooldown) + COOLDOWN_DECLARE(ares_quarters_cooldown) + /datum/ares_link/Destroy() for(var/obj/structure/machinery/ares/link in linked_systems) link.delink() @@ -50,32 +81,35 @@ GLOBAL_LIST_INIT(maintenance_categories, list( if(!speaker) speaker = "Unknown" var/datum/ares_link/link = GLOB.ares_link - if(!link.p_apollo || link.p_apollo.inoperable()) + var/datum/ares_datacore/datacore = GLOB.ares_datacore + if(!istype(link) || !istype(datacore)) return FALSE - if(!link.p_interface || link.p_interface.inoperable()) + if(!link.processor_apollo || link.processor_apollo.inoperable()) return FALSE - link.apollo_log.Add("[worldtime2text()]: [speaker], '[message]'") + if(!ares_can_log()) + return FALSE + datacore.apollo_log.Add("[worldtime2text()]: [speaker], '[message]'") -/datum/ares_link/proc/log_ares_bioscan(title, input) - interface.records_bioscan.Add(new /datum/ares_record/bioscan(title, input)) +/datum/ares_datacore/proc/log_ares_bioscan(title, input) + records_bioscan.Add(new /datum/ares_record/bioscan(title, input)) -/datum/ares_link/proc/log_ares_bombardment(user_name, ob_name, coordinates) - interface.records_bombardment.Add(new /datum/ares_record/bombardment(ob_name, "Bombardment fired at [coordinates].", user_name)) +/datum/ares_datacore/proc/log_ares_bombardment(user_name, ob_name, coordinates) + records_bombardment.Add(new /datum/ares_record/bombardment(ob_name, "Bombardment fired at [coordinates].", user_name)) -/datum/ares_link/proc/log_ares_announcement(title, message) - interface.records_announcement.Add(new /datum/ares_record/announcement(title, message)) +/datum/ares_datacore/proc/log_ares_announcement(title, message) + records_announcement.Add(new /datum/ares_record/announcement(title, message)) -/datum/ares_link/proc/log_ares_requisition(source, details, user_name) - interface.records_asrs.Add(new /datum/ares_record/requisition_log(source, details, user_name)) +/datum/ares_datacore/proc/log_ares_requisition(source, details, user_name) + records_asrs.Add(new /datum/ares_record/requisition_log(source, details, user_name)) -/datum/ares_link/proc/log_ares_security(title, details) - interface.records_security.Add(new /datum/ares_record/security(title, details)) +/datum/ares_datacore/proc/log_ares_security(title, details) + records_security.Add(new /datum/ares_record/security(title, details)) -/datum/ares_link/proc/log_ares_antiair(details) - interface.records_security.Add(new /datum/ares_record/security/antiair(details)) +/datum/ares_datacore/proc/log_ares_antiair(details) + records_security.Add(new /datum/ares_record/security/antiair(details)) -/datum/ares_link/proc/log_ares_flight(user_name, details) - interface.records_flight.Add(new /datum/ares_record/flight(details, user_name)) +/datum/ares_datacore/proc/log_ares_flight(user_name, details) + records_flight.Add(new /datum/ares_record/flight(details, user_name)) // ------ End ARES Logging Procs ------ // /proc/ares_apollo_talk(broadcast_message) @@ -89,7 +123,7 @@ GLOBAL_LIST_INIT(maintenance_categories, list( playsound_client(listener.client, sound('sound/misc/interference.ogg'), listener, vol = 45) /proc/ares_can_interface() - var/obj/structure/machinery/ares/processor/interface/processor = GLOB.ares_link.p_interface + var/obj/structure/machinery/ares/processor/interface/processor = GLOB.ares_link.processor_interface if(!istype(GLOB.ares_link)) return FALSE if(processor && !processor.inoperable()) @@ -97,12 +131,12 @@ GLOBAL_LIST_INIT(maintenance_categories, list( return FALSE //interface processor not found or is broken /proc/ares_can_log() - var/obj/structure/machinery/computer/ares_console/interface = GLOB.ares_link.interface - if(!istype(GLOB.ares_link)) + if(!istype(GLOB.ares_link) || !istype(GLOB.ares_datacore)) return FALSE - if(interface && !interface.inoperable()) + var/obj/structure/machinery/ares/cpu/central_processor = GLOB.ares_link.central_processor + if(central_processor && !central_processor.inoperable()) return TRUE - return FALSE //ares interface not found or is broken + return FALSE //CPU not found or is broken // ------ ARES Interface Procs ------ // /obj/structure/machinery/computer/proc/get_ares_access(obj/item/card/id/card) @@ -172,440 +206,6 @@ GLOBAL_LIST_INIT(maintenance_categories, list( conversation.conversation += "[MAIN_AI_SYSTEM] at [worldtime2text()], '[text]'" // ------ End ARES Interface Procs ------ // -// ------ ARES Interface UI ------ // - -/obj/structure/machinery/computer/ares_console/attack_hand(mob/user as mob) - if(..() || !allowed(usr) || inoperable()) - return FALSE - - tgui_interact(user) - return TRUE - -/obj/structure/machinery/computer/ares_console/tgui_interact(mob/user, datum/tgui/ui, datum/ui_state/state) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "AresInterface", name) - ui.open() - -/obj/structure/machinery/computer/ares_console/ui_data(mob/user) - var/list/data = list() - - data["current_menu"] = current_menu - data["last_page"] = last_menu - - data["logged_in"] = last_login - data["sudo"] = sudo_holder ? TRUE : FALSE - - data["access_text"] = "[sudo_holder ? "(SUDO)," : ""] access level [authentication], [ares_auth_to_text(authentication)]." - data["access_level"] = authentication - - data["alert_level"] = security_level - data["evac_status"] = EvacuationAuthority.evac_status - data["worldtime"] = world.time - - data["access_log"] = list() - data["access_log"] += access_list - data["apollo_log"] = list() - data["apollo_log"] += link.apollo_log - - data["deleted_conversation"] = list() - data["deleted_conversation"] += deleted_1to1 - - data["distresstime"] = ares_distress_cooldown - data["distresstimelock"] = DISTRESS_TIME_LOCK - data["quarterstime"] = ares_quarters_cooldown - data["mission_failed"] = SSticker.mode.is_in_endgame - data["nuketimelock"] = NUCLEAR_TIME_LOCK - data["nuke_available"] = nuke_available - - var/list/logged_announcements = list() - for(var/datum/ares_record/announcement/broadcast as anything in records_announcement) - var/list/current_broadcast = list() - current_broadcast["time"] = broadcast.time - current_broadcast["title"] = broadcast.title - current_broadcast["details"] = broadcast.details - current_broadcast["ref"] = "\ref[broadcast]" - logged_announcements += list(current_broadcast) - data["records_announcement"] = logged_announcements - - var/list/logged_alerts = list() - for(var/datum/ares_record/security/security_alert as anything in records_security) - var/list/current_alert = list() - current_alert["time"] = security_alert.time - current_alert["title"] = security_alert.title - current_alert["details"] = security_alert.details - current_alert["ref"] = "\ref[security_alert]" - logged_alerts += list(current_alert) - data["records_security"] = logged_alerts - - var/list/logged_flights = list() - for(var/datum/ares_record/flight/flight_log as anything in records_flight) - var/list/current_flight = list() - current_flight["time"] = flight_log.time - current_flight["title"] = flight_log.title - current_flight["details"] = flight_log.details - current_flight["user"] = flight_log.user - current_flight["ref"] = "\ref[flight_log]" - logged_flights += list(current_flight) - data["records_flight"] = logged_flights - - var/list/logged_bioscans = list() - for(var/datum/ares_record/bioscan/scan as anything in records_bioscan) - var/list/current_scan = list() - current_scan["time"] = scan.time - current_scan["title"] = scan.title - current_scan["details"] = scan.details - current_scan["ref"] = "\ref[scan]" - logged_bioscans += list(current_scan) - data["records_bioscan"] = logged_bioscans - - var/list/logged_bombs = list() - for(var/datum/ares_record/bombardment/bomb as anything in records_bombardment) - var/list/current_bomb = list() - current_bomb["time"] = bomb.time - current_bomb["title"] = bomb.title - current_bomb["details"] = bomb.details - current_bomb["user"] = bomb.user - current_bomb["ref"] = "\ref[bomb]" - logged_bombs += list(current_bomb) - data["records_bombardment"] = logged_bombs - - var/list/logged_deletes = list() - for(var/datum/ares_record/deletion/deleted as anything in records_deletion) - if(!istype(deleted)) - continue - var/list/current_delete = list() - current_delete["time"] = deleted.time - current_delete["title"] = deleted.title - current_delete["details"] = deleted.details - current_delete["user"] = deleted.user - current_delete["ref"] = "\ref[deleted]" - logged_deletes += list(current_delete) - data["records_deletion"] = logged_deletes - - var/list/logged_discussions = list() - for(var/datum/ares_record/deleted_talk/deleted_convo as anything in records_deletion) - if(!istype(deleted_convo)) - continue - var/list/deleted_disc = list() - deleted_disc["time"] = deleted_convo.time - deleted_disc["title"] = deleted_convo.title - deleted_disc["ref"] = "\ref[deleted_convo]" - logged_discussions += list(deleted_disc) - data["deleted_discussions"] = logged_discussions - - var/list/logged_orders = list() - for(var/datum/ares_record/requisition_log/req_order as anything in records_asrs) - if(!istype(req_order)) - continue - var/list/current_order = list() - current_order["time"] = req_order.time - current_order["details"] = req_order.details - current_order["title"] = req_order.title - current_order["user"] = req_order.user - current_order["ref"] = "\ref[req_order]" - logged_orders += list(current_order) - data["records_requisition"] = logged_orders - - var/list/logged_convos = list() - var/list/active_convo = list() - var/active_ref - for(var/datum/ares_record/talk_log/log as anything in records_talking) - if(!istype(log)) - continue - if(log.user == last_login) - active_convo = log.conversation - active_ref = "\ref[log]" - - var/list/current_convo = list() - current_convo["user"] = log.user - current_convo["ref"] = "\ref[log]" - current_convo["conversation"] = log.conversation - logged_convos += list(current_convo) - - data["active_convo"] = active_convo - data["active_ref"] = active_ref - data["conversations"] = logged_convos - - return data - -/obj/structure/machinery/computer/ares_console/ui_static_data(mob/user) - var/list/data = list() - - data["link_id"] = link_id - - return data - -/obj/structure/machinery/computer/ares_console/ui_status(mob/user, datum/ui_state/state) - . = ..() - if(!allowed(user)) - return UI_UPDATE - if(inoperable()) - return UI_DISABLED - -/obj/structure/machinery/computer/ares_console/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - . = ..() - if(.) - return - - playsound(src, "keyboard_alt", 15, 1) - - switch (action) - if("go_back") - if(!last_menu) - return to_chat(usr, SPAN_WARNING("Error, no previous page detected.")) - var/temp_holder = current_menu - current_menu = last_menu - last_menu = temp_holder - - if("login") - var/mob/living/carbon/human/operator = usr - var/obj/item/card/id/idcard = operator.get_active_hand() - if(istype(idcard)) - authentication = get_ares_access(idcard) - last_login = idcard.registered_name - else if(operator.wear_id) - idcard = operator.wear_id - if(istype(idcard)) - authentication = get_ares_access(idcard) - last_login = idcard.registered_name - else - to_chat(usr, SPAN_WARNING("You require an ID card to access this terminal!")) - playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) - return FALSE - if(authentication) - access_list += "[last_login] at [worldtime2text()], Access Level [authentication] - [ares_auth_to_text(authentication)]." - current_menu = "main" - - if("sudo") - var/new_user = tgui_input_text(usr, "Enter Sudo Username", "Sudo User", encode = FALSE) - if(new_user) - if(new_user == sudo_holder) - last_login = sudo_holder - sudo_holder = null - return FALSE - if(new_user == last_login) - to_chat(usr, SPAN_WARNING("Already remote logged in as this user.")) - playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) - return FALSE - sudo_holder = last_login - last_login = new_user - access_list += "[last_login] at [worldtime2text()], Sudo Access." - return TRUE - if("sudo_logout") - access_list += "[last_login] at [worldtime2text()], Sudo Logout." - last_login = sudo_holder - sudo_holder = null - return - // -- Page Changers -- // - if("logout") - last_menu = current_menu - current_menu = "login" - if(sudo_holder) - access_list += "[last_login] at [worldtime2text()], Sudo Logout." - last_login = sudo_holder - sudo_holder = null - access_list += "[last_login] logged out at [worldtime2text()]." - - if("home") - last_menu = current_menu - current_menu = "main" - if("page_1to1") - last_menu = current_menu - current_menu = "talking" - if("page_announcements") - last_menu = current_menu - current_menu = "announcements" - if("page_bioscans") - last_menu = current_menu - current_menu = "bioscans" - if("page_bombardments") - last_menu = current_menu - current_menu = "bombardments" - if("page_apollo") - last_menu = current_menu - current_menu = "apollo" - if("page_access") - last_menu = current_menu - current_menu = "access_log" - if("page_security") - last_menu = current_menu - current_menu = "security" - if("page_flight") - last_menu = current_menu - current_menu = "flight_log" - if("page_requisitions") - last_menu = current_menu - current_menu = "requisitions" - if("page_emergency") - last_menu = current_menu - current_menu = "emergency" - if("page_deleted") - last_menu = current_menu - current_menu = "delete_log" - if("page_deleted_1to1") - last_menu = current_menu - current_menu = "deleted_talks" - - // -- Delete Button -- // - if("delete_record") - var/datum/ares_record/record = locate(params["record"]) - if(record.record_name == ARES_RECORD_DELETED) - return FALSE - var/datum/ares_record/deletion/new_delete = new - var/new_details = "Error" - var/new_title = "Error" - switch(record.record_name) - if(ARES_RECORD_ANNOUNCE) - new_title = "[record.title] at [record.time]" - new_details = record.details - records_announcement -= record - if(ARES_RECORD_SECURITY, ARES_RECORD_ANTIAIR) - new_title = "[record.title] at [record.time]" - new_details = record.details - records_security -= record - if(ARES_RECORD_BIOSCAN) - new_title = "[record.title] at [record.time]" - new_details = record.details - records_bioscan -= record - if(ARES_RECORD_BOMB) - new_title = "[record.title] at [record.time]" - new_details = "[record.details] Launched by [record.user]." - records_bombardment -= record - - new_delete.details = new_details - new_delete.user = last_login - new_delete.title = new_title - - records_deletion += new_delete - - // -- 1:1 Conversation -- // - if("new_conversation") - var/datum/ares_record/talk_log/convo = new(last_login) - convo.conversation += "[MAIN_AI_SYSTEM] at [worldtime2text()], 'New 1:1 link initiated. Greetings, [last_login].'" - records_talking += convo - - if("clear_conversation") - var/datum/ares_record/talk_log/conversation = locate(params["active_convo"]) - if(!istype(conversation)) - return FALSE - var/datum/ares_record/deleted_talk/deleted = new - deleted.title = conversation.title - deleted.conversation = conversation.conversation - deleted.user = conversation.user - records_deletion += deleted - records_talking -= conversation - - if("message_ares") - var/message = tgui_input_text(usr, "What do you wish to say to ARES?", "ARES Message", encode = FALSE) - if(message) - message_ares(message, usr, params["active_convo"]) - - if("read_record") - var/datum/ares_record/deleted_talk/conversation = locate(params["record"]) - deleted_1to1 = conversation.conversation - last_menu = current_menu - current_menu = "read_deleted" - - // -- Emergency Buttons -- // - if("general_quarters") - if(!COOLDOWN_FINISHED(src, ares_quarters_cooldown)) - to_chat(usr, SPAN_WARNING("It has not been long enough since the last General Quarters call!")) - playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) - return FALSE - if(security_level < SEC_LEVEL_RED) - set_security_level(SEC_LEVEL_RED, no_sound = TRUE, announce = FALSE) - shipwide_ai_announcement("ATTENTION! GENERAL QUARTERS. ALL HANDS, MAN YOUR BATTLESTATIONS.", MAIN_AI_SYSTEM, 'sound/effects/GQfullcall.ogg') - log_game("[key_name(usr)] has called for general quarters via ARES.") - message_admins("[key_name_admin(usr)] has called for general quarters via ARES.") - var/datum/ares_link/link = GLOB.ares_link - link.log_ares_security("General Quarters", "[last_login] has called for general quarters via ARES.") - COOLDOWN_START(src, ares_quarters_cooldown, 10 MINUTES) - . = TRUE - - if("evacuation_start") - if(security_level < SEC_LEVEL_RED) - to_chat(usr, SPAN_WARNING("The ship must be under red alert in order to enact evacuation procedures.")) - playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) - return FALSE - - if(EvacuationAuthority.flags_scuttle & FLAGS_EVACUATION_DENY) - to_chat(usr, SPAN_WARNING("The USCM has placed a lock on deploying the evacuation pods.")) - playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) - return FALSE - - if(!EvacuationAuthority.initiate_evacuation()) - to_chat(usr, SPAN_WARNING("You are unable to initiate an evacuation procedure right now!")) - playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) - return FALSE - - log_game("[key_name(usr)] has called for an emergency evacuation via ARES.") - message_admins("[key_name_admin(usr)] has called for an emergency evacuation via ARES.") - var/datum/ares_link/link = GLOB.ares_link - link.log_ares_security("Initiate Evacuation", "[last_login] has called for an emergency evacuation via ARES.") - . = TRUE - - if("distress") - if(!SSticker.mode) - return FALSE //Not a game mode? - if(world.time < DISTRESS_TIME_LOCK) - to_chat(usr, SPAN_WARNING("You have been here for less than six minutes... what could you possibly have done!")) - playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) - return FALSE - if(!COOLDOWN_FINISHED(src, ares_distress_cooldown)) - to_chat(usr, SPAN_WARNING("The distress launcher is cooling down!")) - playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) - return FALSE - if(security_level == SEC_LEVEL_DELTA) - to_chat(usr, SPAN_WARNING("The ship is already undergoing self destruct procedures!")) - playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) - return FALSE - else if(security_level < SEC_LEVEL_RED) - to_chat(usr, SPAN_WARNING("The ship must be under red alert to launch a distress beacon!")) - playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) - return FALSE - - for(var/client/admin in GLOB.admins) - if((R_ADMIN|R_MOD) & admin.admin_holder.rights) - playsound_client(admin,'sound/effects/sos-morse-code.ogg',10) - SSticker.mode.request_ert(usr, TRUE) - to_chat(usr, SPAN_NOTICE("A distress beacon request has been sent to USCM High Command.")) - COOLDOWN_START(src, ares_distress_cooldown, COOLDOWN_COMM_REQUEST) - return TRUE - - if("nuclearbomb") - if(!SSticker.mode) - return FALSE //Not a game mode? - if(world.time < NUCLEAR_TIME_LOCK) - to_chat(usr, SPAN_WARNING("It is too soon to request Nuclear Ordnance!")) - playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) - return FALSE - if(!COOLDOWN_FINISHED(src, ares_nuclear_cooldown)) - to_chat(usr, SPAN_WARNING("The ordnance request frequency is garbled, wait for reset!")) - playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) - return FALSE - if(security_level == SEC_LEVEL_DELTA || SSticker.mode.is_in_endgame) - to_chat(usr, SPAN_WARNING("The mission has failed catastrophically, what do you want a nuke for?!")) - playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) - return FALSE - var/reason = tgui_input_text(usr, "Please enter reason nuclear ordnance is required.", "Reason for Nuclear Ordnance") - if(!reason) - return FALSE - for(var/client/admin in GLOB.admins) - if((R_ADMIN|R_MOD) & admin.admin_holder.rights) - playsound_client(admin,'sound/effects/sos-morse-code.ogg',10) - message_admins("[key_name(usr)] has requested use of Nuclear Ordnance (via ARES)! Reason: [reason] [CC_MARK(usr)] (APPROVE) (DENY) [ADMIN_JMP_USER(usr)] [CC_REPLY(usr)]") - to_chat(usr, SPAN_NOTICE("A nuclear ordnance request has been sent to USCM High Command for the following reason: [reason]")) - if(ares_can_log()) - link.log_ares_security("Nuclear Ordnance Request", "[last_login] has sent a request for nuclear ordnance for the following reason: [reason]") - if(ares_can_interface()) - ai_silent_announcement("[last_login] has sent a request for nuclear ordnance to USCM High Command.", ".V") - ai_silent_announcement("Reason given: [reason].", ".V") - COOLDOWN_START(src, ares_nuclear_cooldown, COOLDOWN_COMM_DESTRUCT) - return TRUE -// ------ End ARES Interface UI ------ // - - /obj/structure/machinery/computer/working_joe/get_ares_access(obj/item/card/id/card) if(ACCESS_ARES_DEBUG in card.access) return APOLLO_ACCESS_DEBUG @@ -639,369 +239,3 @@ GLOBAL_LIST_INIT(maintenance_categories, list( return "Working Joe" if(APOLLO_ACCESS_DEBUG)//6 return "AI Service Technician" - -// ------ Maintenance Controller UI ------ // -/obj/structure/machinery/computer/working_joe/attack_hand(mob/user as mob) - if(..() || !allowed(usr) || inoperable()) - return FALSE - - tgui_interact(user) - return TRUE - -/obj/structure/machinery/computer/working_joe/tgui_interact(mob/user, datum/tgui/ui, datum/ui_state/state) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "WorkingJoe", name) - ui.open() - -/obj/structure/machinery/computer/working_joe/ui_data(mob/user) - var/list/data = list() - - data["current_menu"] = current_menu - data["last_page"] = last_menu - - data["logged_in"] = last_login - - data["access_text"] = "access level [authentication], [ares_auth_to_text(authentication)]." - data["access_level"] = authentication - - data["alert_level"] = security_level - data["worldtime"] = world.time - - data["access_log"] = list() - data["access_log"] += login_list - - data["apollo_log"] = list() - data["apollo_log"] += link.apollo_log - - var/list/logged_maintenance = list() - for(var/datum/ares_ticket/maintenance/maint_ticket as anything in link.tickets_maintenance) - if(!istype(maint_ticket)) - continue - var/lock_status = TICKET_OPEN - switch(maint_ticket.ticket_status) - if(TICKET_REJECTED, TICKET_CANCELLED, TICKET_COMPLETED) - lock_status = TICKET_CLOSED - - var/list/current_maint = list() - current_maint["id"] = maint_ticket.ticket_id - current_maint["time"] = maint_ticket.ticket_time - current_maint["priority_status"] = maint_ticket.ticket_priority - current_maint["category"] = maint_ticket.ticket_name - current_maint["details"] = maint_ticket.ticket_details - current_maint["status"] = maint_ticket.ticket_status - current_maint["submitter"] = maint_ticket.ticket_submitter - current_maint["assignee"] = maint_ticket.ticket_assignee - current_maint["lock_status"] = lock_status - current_maint["ref"] = "\ref[maint_ticket]" - logged_maintenance += list(current_maint) - data["maintenance_tickets"] = logged_maintenance - - var/list/logged_access = list() - var/list/requesting_access = list() - for(var/datum/ares_ticket/access/access_ticket as anything in link.tickets_access) - var/lock_status = TICKET_OPEN - switch(access_ticket.ticket_status) - if(TICKET_REJECTED, TICKET_CANCELLED, TICKET_REVOKED) - lock_status = TICKET_CLOSED - - var/list/current_ticket = list() - current_ticket["id"] = access_ticket.ticket_id - current_ticket["time"] = access_ticket.ticket_time - current_ticket["priority_status"] = access_ticket.ticket_priority - current_ticket["title"] = access_ticket.ticket_name - current_ticket["details"] = access_ticket.ticket_details - current_ticket["status"] = access_ticket.ticket_status - current_ticket["submitter"] = access_ticket.ticket_submitter - current_ticket["assignee"] = access_ticket.ticket_assignee - current_ticket["lock_status"] = lock_status - current_ticket["ref"] = "\ref[access_ticket]" - logged_access += list(current_ticket) - - if(lock_status == TICKET_OPEN) - requesting_access += access_ticket.ticket_name - data["access_tickets"] = logged_access - - return data - -/obj/structure/machinery/computer/working_joe/ui_static_data(mob/user) - var/list/data = list() - - data["link_id"] = link_id - - return data - -/obj/structure/machinery/computer/working_joe/ui_status(mob/user, datum/ui_state/state) - . = ..() - if(!allowed(user)) - return UI_UPDATE - if(inoperable()) - return UI_DISABLED - -/obj/structure/machinery/computer/working_joe/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - . = ..() - if(.) - return - - var/playsound = TRUE - var/mob/living/carbon/human/operator = usr - - switch (action) - if("go_back") - if(!last_menu) - return to_chat(usr, SPAN_WARNING("Error, no previous page detected.")) - var/temp_holder = current_menu - current_menu = last_menu - last_menu = temp_holder - - if("login") - - var/obj/item/card/id/idcard = operator.get_active_hand() - if(istype(idcard)) - authentication = get_ares_access(idcard) - last_login = idcard.registered_name - else if(operator.wear_id) - idcard = operator.wear_id - if(istype(idcard)) - authentication = get_ares_access(idcard) - last_login = idcard.registered_name - else - to_chat(operator, SPAN_WARNING("You require an ID card to access this terminal!")) - playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) - return FALSE - if(authentication) - login_list += "[last_login] at [worldtime2text()], Access Level [authentication] - [ares_auth_to_text(authentication)]." - current_menu = "main" - - if("logout") - last_menu = current_menu - current_menu = "login" - login_list += "[last_login] logged out at [worldtime2text()]." - - if("home") - last_menu = current_menu - current_menu = "main" - if("page_logins") - last_menu = current_menu - current_menu = "login_records" - if("page_apollo") - last_menu = current_menu - current_menu = "apollo" - if("page_request") - last_menu = current_menu - current_menu = "access_requests" - if("page_report") - last_menu = current_menu - current_menu = "maint_reports" - if("page_tickets") - last_menu = current_menu - current_menu = "access_tickets" - if("page_maintenance") - last_menu = current_menu - current_menu = "maint_claim" - - if("new_report") - var/priority_report = FALSE - var/maint_type = tgui_input_list(operator, "What is the type of maintenance item you wish to report?", "Report Category", GLOB.maintenance_categories, 30 SECONDS) - switch(maint_type) - if("Major Structural Damage", "Fire", "Communications Failure", "Power Generation Failure") - priority_report = TRUE - - if(!maint_type) - return FALSE - var/details = tgui_input_text(operator, "What are the details for this report?", "Ticket Details", encode = FALSE) - if(!details) - return FALSE - - if((authentication >= APOLLO_ACCESS_REPORTER) && !priority_report) - var/is_priority = tgui_alert(operator, "Is this a priority report?", "Priority designation", list("Yes", "No")) - if(is_priority == "Yes") - priority_report = TRUE - - var/confirm = alert(operator, "Please confirm the submission of your maintenance report. \n\n Priority: [priority_report ? "Yes" : "No"] \n Category: '[maint_type]' \n Details: '[details]' \n\n Is this correct?", "Confirmation", "Yes", "No") - if(confirm == "Yes") - if(link) - var/datum/ares_ticket/maintenance/maint_ticket = new(last_login, maint_type, details, priority_report) - link.tickets_maintenance += maint_ticket - if(priority_report) - ares_apollo_talk("Priority Maintenance Report: [maint_type] - ID [maint_ticket.ticket_id]. Seek and resolve.") - log_game("ARES: Maintenance Ticket '\ref[maint_ticket]' created by [key_name(operator)] as [last_login] with Category '[maint_type]' and Details of '[details]'.") - return TRUE - return FALSE - - if("claim_ticket") - var/datum/ares_ticket/ticket = locate(params["ticket"]) - if(!istype(ticket)) - return FALSE - var/claim = TRUE - var/assigned = ticket.ticket_assignee - if(assigned) - if(assigned == last_login) - var/prompt = tgui_alert(usr, "You already claimed this ticket! Do you wish to drop your claim?", "Unclaim ticket", list("Yes", "No")) - if(prompt != "Yes") - return FALSE - /// set ticket back to pending - ticket.ticket_assignee = null - ticket.ticket_status = TICKET_PENDING - return claim - var/choice = tgui_alert(usr, "This ticket has already been claimed by [assigned]! Do you wish to override their claim?", "Claim Override", list("Yes", "No")) - if(choice != "Yes") - claim = FALSE - if(claim) - ticket.ticket_assignee = last_login - ticket.ticket_status = TICKET_ASSIGNED - return claim - - if("cancel_ticket") - var/datum/ares_ticket/ticket = locate(params["ticket"]) - if(!istype(ticket)) - return FALSE - if(ticket.ticket_submitter != last_login) - to_chat(usr, SPAN_WARNING("You cannot cancel a ticket that does not belong to you!")) - return FALSE - to_chat(usr, SPAN_WARNING("[ticket.ticket_type] [ticket.ticket_id] has been cancelled.")) - ticket.ticket_status = TICKET_CANCELLED - if(ticket.ticket_priority) - ares_apollo_talk("Priority [ticket.ticket_type] [ticket.ticket_id] has been cancelled.") - return TRUE - - if("mark_ticket") - var/datum/ares_ticket/ticket = locate(params["ticket"]) - if(!istype(ticket)) - return FALSE - if(ticket.ticket_assignee != last_login && ticket.ticket_assignee) //must be claimed by you or unclaimed.) - to_chat(usr, SPAN_WARNING("You cannot update a ticket that is not assigned to you!")) - return FALSE - var/choice = tgui_alert(usr, "What do you wish to mark the ticket as?", "Mark", list(TICKET_COMPLETED, TICKET_REJECTED), 20 SECONDS) - switch(choice) - if(TICKET_COMPLETED) - ticket.ticket_status = TICKET_COMPLETED - if(TICKET_REJECTED) - ticket.ticket_status = TICKET_REJECTED - else - return FALSE - if(ticket.ticket_priority) - ares_apollo_talk("Priority [ticket.ticket_type] [ticket.ticket_id] has been [choice] by [last_login].") - to_chat(usr, SPAN_NOTICE("[ticket.ticket_type] [ticket.ticket_id] marked as [choice].")) - return TRUE - - if("new_access") - var/obj/item/card/id/idcard = operator.get_active_hand() - var/has_id = FALSE - if(istype(idcard)) - has_id = TRUE - else if(operator.wear_id) - idcard = operator.wear_id - if(istype(idcard)) - has_id = TRUE - if(!has_id) - to_chat(operator, SPAN_WARNING("You require an ID card to request an access ticket!")) - playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) - return FALSE - if(idcard.registered_name != last_login) - to_chat(operator, SPAN_WARNING("This ID card does not match the active login!")) - playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) - return FALSE - - var/ticket_holder = last_login - if(!ticket_holder) - return FALSE - var/details = tgui_input_text(operator, "What is the purpose of this access ticket?", "Ticket Details", encode = FALSE) - if(!details) - return FALSE - - var/confirm = alert(operator, "Please confirm the submission of your access ticket request. \n\nHolder: '[ticket_holder]' \n Details: '[details]' \n\n Is this correct?", "Confirmation", "Yes", "No") - if(confirm != "Yes" || !link) - return FALSE - var/datum/ares_ticket/access/access_ticket = new(last_login, ticket_holder, details, FALSE, idcard.registered_gid) - link.waiting_ids += idcard - link.tickets_access += access_ticket - log_game("ARES: Access Ticket '\ref[access_ticket]' created by [key_name(operator)] as [last_login] with Holder '[ticket_holder]' and Details of '[details]'.") - message_admins(SPAN_STAFF_IC("[key_name_admin(operator)] created a new ARES Access Ticket."), 1) - return TRUE - - if("return_access") - playsound = FALSE - var/datum/ares_ticket/access/access_ticket - for(var/datum/ares_ticket/access/possible_ticket in link.tickets_access) - if(possible_ticket.ticket_status != TICKET_GRANTED) - continue - if(possible_ticket.ticket_name != last_login) - continue - access_ticket = possible_ticket - break - - for(var/obj/item/card/id/identification in link.active_ids) - if(!istype(identification)) - continue - if(identification.registered_gid != access_ticket.user_id_num) - continue - - access_ticket.ticket_status = TICKET_RETURNED - identification.access -= ACCESS_MARINE_AI_TEMP - identification.modification_log += "Temporary AI Access self-returned by [key_name(operator)]." - - to_chat(operator, SPAN_NOTICE("Temporary Access Ticket surrendered.")) - playsound(src, 'sound/machines/chime.ogg', 15, 1) - ares_apollo_talk("[last_login] surrendered their access ticket.") - - authentication = get_ares_access(identification) - if(authentication) - login_list += "[last_login] at [worldtime2text()], Surrendered Temporary Access Ticket." - return TRUE - - to_chat(operator, SPAN_WARNING("This ID card does not have an access ticket!")) - playsound(src, 'sound/machines/buzz-two.ogg', 15, 1) - return FALSE - - if("auth_access") - playsound = FALSE - var/datum/ares_ticket/access/access_ticket = locate(params["ticket"]) - if(!access_ticket) - return FALSE - for(var/obj/item/card/id/identification in link.waiting_ids) - if(!istype(identification)) - continue - if(identification.registered_gid != access_ticket.user_id_num) - continue - identification.handle_ares_access(last_login, operator) - access_ticket.ticket_status = TICKET_GRANTED - playsound(src, 'sound/machines/chime.ogg', 15, 1) - return TRUE - for(var/obj/item/card/id/identification in link.active_ids) - if(!istype(identification)) - continue - if(identification.registered_gid != access_ticket.user_id_num) - continue - identification.handle_ares_access(last_login, operator) - access_ticket.ticket_status = TICKET_REVOKED - playsound(src, 'sound/machines/chime.ogg', 15, 1) - return TRUE - return FALSE - - if(playsound) - playsound(src, "keyboard_alt", 15, 1) - -/obj/item/card/id/proc/handle_ares_access(logged_in, mob/user) - var/announce_text = "[logged_in] revoked core access from [registered_name]'s ID card." - var/operator = key_name(user) - var/datum/ares_link/link = GLOB.ares_link - if(logged_in == MAIN_AI_SYSTEM) - if(!user) - operator = "[MAIN_AI_SYSTEM] (Sensor Trip)" - else - operator = "[user.ckey]/([MAIN_AI_SYSTEM])" - if(ACCESS_MARINE_AI_TEMP in access) - access -= ACCESS_MARINE_AI_TEMP - link.active_ids -= src - modification_log += "Temporary AI access revoked by [operator]" - to_chat(user, SPAN_NOTICE("Access revoked from [registered_name].")) - else - access += ACCESS_MARINE_AI_TEMP - modification_log += "Temporary AI access granted by [operator]" - announce_text = "[logged_in] granted core access to [registered_name]'s ID card." - to_chat(user, SPAN_NOTICE("Access granted to [registered_name].")) - link.waiting_ids -= src - link.active_ids += src - ares_apollo_talk(announce_text) - return TRUE diff --git a/code/game/machinery/ARES/ARES_step_triggers.dm b/code/game/machinery/ARES/ARES_step_triggers.dm index 335a877f9f25..818d1e7145ad 100644 --- a/code/game/machinery/ARES/ARES_step_triggers.dm +++ b/code/game/machinery/ARES/ARES_step_triggers.dm @@ -3,7 +3,6 @@ layer = 5 /// Link alerts to ARES Link var/datum/ares_link/link - var/link_id = MAIN_SHIP_DEFAULT_NAME /// Alert message to report unless area based. var/alert_message = "ALERT: Unauthorized movement detected in ARES Core!" /// Connect alerts to use same cooldowns @@ -53,7 +52,7 @@ /obj/effect/step_trigger/ares_alert/proc/link_systems(datum/ares_link/new_link = GLOB.ares_link, override) if(link && !override) return FALSE - if(new_link.link_id == link_id) + if(new_link) link = new_link new_link.linked_alerts += src return TRUE @@ -70,7 +69,7 @@ broadcast_message = "ALERT: Unauthorized movement detected in [area_name]!" var/datum/ares_link/link = GLOB.ares_link - if(link.p_apollo.inoperable()) + if(link.processor_apollo.inoperable()) return FALSE to_chat(passer, SPAN_BOLDWARNING("You hear a soft beeping sound as you cross the threshold.")) @@ -113,8 +112,6 @@ /obj/effect/step_trigger/ares_alert/access_control/Crossed(atom/passer as mob|obj) if(isobserver(passer) || isxeno(passer)) return FALSE - if(!COOLDOWN_FINISHED(src, sensor_cooldown))//Don't want alerts spammed. - return FALSE if(!passer) return FALSE if(passer.alpha <= 100)//Can't be seen/detected to trigger alert. @@ -157,11 +154,12 @@ var/broadcast_message = get_broadcast(passer, idcard, failure) var/datum/ares_link/link = GLOB.ares_link - if(link.p_apollo.inoperable()) + if(link.processor_apollo.inoperable()) return FALSE to_chat(passer, SPAN_BOLDWARNING("You hear a harsh buzzing sound as you cross the threshold!")) - ares_apollo_talk(broadcast_message) + if(COOLDOWN_FINISHED(src, sensor_cooldown))//Don't want alerts spammed. + ares_apollo_talk(broadcast_message) if(idcard) /// Removes the access from the ID and updates the ID's modification log. for(var/obj/item/card/id/identification in link.active_ids) diff --git a/code/game/machinery/biohazard_lockdown.dm b/code/game/machinery/biohazard_lockdown.dm index fd6205baa1d9..b598c4b2a009 100644 --- a/code/game/machinery/biohazard_lockdown.dm +++ b/code/game/machinery/biohazard_lockdown.dm @@ -102,8 +102,9 @@ GLOBAL_VAR_INIT(lockdown_state, LOCKDOWN_READY) shipwide_ai_announcement(message, MAIN_AI_SYSTEM, 'sound/effects/biohazard.ogg') message_admins(log) - var/datum/ares_link/link = GLOB.ares_link - link.log_ares_security("Containment Lockdown", ares_log) + var/datum/ares_datacore/datacore = GLOB.ares_datacore + if(ares_can_log()) + datacore.log_ares_security("Containment Lockdown", ares_log) #undef LOCKDOWN_READY #undef LOCKDOWN_ACTIVE diff --git a/code/game/machinery/computer/almayer_control.dm b/code/game/machinery/computer/almayer_control.dm index c3b17dbf8090..e413b56757c7 100644 --- a/code/game/machinery/computer/almayer_control.dm +++ b/code/game/machinery/computer/almayer_control.dm @@ -108,7 +108,7 @@ . = ..() if(.) return - + var/datum/ares_datacore/datacore = GLOB.ares_datacore switch(action) if("award") print_medal(usr, src) @@ -131,8 +131,8 @@ log_game("[key_name(usr)] has called for an emergency evacuation.") message_admins("[key_name_admin(usr)] has called for an emergency evacuation.") - var/datum/ares_link/link = GLOB.ares_link - link.log_ares_security("Initiate Evacuation", "[usr] has called for an emergency evacuation.") + if(ares_can_log()) + datacore.log_ares_security("Initiate Evacuation", "[usr] has called for an emergency evacuation.") . = TRUE if("evacuation_cancel") @@ -144,8 +144,8 @@ log_game("[key_name(usr)] has canceled the emergency evacuation.") message_admins("[key_name_admin(usr)] has canceled the emergency evacuation.") - var/datum/ares_link/link = GLOB.ares_link - link.log_ares_security("Cancel Evacuation", "[usr] has cancelled the emergency evacuation.") + if(ares_can_log()) + datacore.log_ares_security("Cancel Evacuation", "[usr] has cancelled the emergency evacuation.") . = TRUE // evac stuff end \\ @@ -167,8 +167,8 @@ set_security_level(seclevel2num(level_selected), log = ARES_LOG_NONE) log_game("[key_name(usr)] has changed the security level to [get_security_level()].") message_admins("[key_name_admin(usr)] has changed the security level to [get_security_level()].") - var/datum/ares_link/link = GLOB.ares_link - link.log_ares_security("Manual Security Update", "[usr] has changed the security level to [get_security_level()].") + if(ares_can_log()) + datacore.log_ares_security("Manual Security Update", "[usr] has changed the security level to [get_security_level()].") . = TRUE if("messageUSCM") diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index f7ea31fba36a..83531d65bff3 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -65,7 +65,7 @@ if(..()) return FALSE usr.set_interaction(src) - var/datum/ares_link/link = GLOB.ares_link + var/datum/ares_datacore/datacore = GLOB.ares_datacore switch(href_list["operation"]) if("mapview") tacmap.tgui_interact(usr) @@ -149,7 +149,8 @@ log_game("[key_name(usr)] has called for an emergency evacuation.") message_admins("[key_name_admin(usr)] has called for an emergency evacuation.") - link.log_ares_security("Initiate Evacuation", "[usr] has called for an emergency evacuation.") + if(ares_can_log()) + datacore.log_ares_security("Initiate Evacuation", "[usr] has called for an emergency evacuation.") return TRUE state = STATE_EVACUATION @@ -169,7 +170,8 @@ log_game("[key_name(usr)] has canceled the emergency evacuation.") message_admins("[key_name_admin(usr)] has canceled the emergency evacuation.") - link.log_ares_security("Cancel Evacuation", "[usr] has cancelled the emergency evacuation.") + if(ares_can_log()) + datacore.log_ares_security("Cancel Evacuation", "[usr] has cancelled the emergency evacuation.") return TRUE state = STATE_EVACUATION_CANCEL diff --git a/code/game/objects/items/devices/cictablet.dm b/code/game/objects/items/devices/cictablet.dm index fc9bb015ece0..69eb8b90aea4 100644 --- a/code/game/objects/items/devices/cictablet.dm +++ b/code/game/objects/items/devices/cictablet.dm @@ -145,8 +145,9 @@ log_game("[key_name(usr)] has called for an emergency evacuation.") message_admins("[key_name_admin(usr)] has called for an emergency evacuation.") - var/datum/ares_link/link = GLOB.ares_link - link.log_ares_security("Initiate Evacuation", "[usr] has called for an emergency evacuation.") + var/datum/ares_datacore/datacore = GLOB.ares_datacore + if(ares_can_log()) + datacore.log_ares_security("Initiate Evacuation", "[usr] has called for an emergency evacuation.") . = TRUE if("distress") diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index 3d774cedc616..03d6aa1796df 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -1020,7 +1020,7 @@ var/datum/controller/supply/supply_controller = new() to_chat(usr, SPAN_DANGER("Current retrieval load has reached maximum capacity.")) return - var/datum/ares_link/link = GLOB.ares_link + var/datum/ares_datacore/datacore = GLOB.ares_datacore for(var/i=1, i<=supply_controller.requestlist.len, i++) var/datum/supply_order/SO = supply_controller.requestlist[i] if(SO.ordernum == ordernum) @@ -1046,7 +1046,8 @@ var/datum/controller/supply/supply_controller = new() pack_source = "Unknown" if(prob(90)) pack_name = "Unknown" - link.log_ares_requisition(pack_source, pack_name, usr.name) + if(ares_can_log()) + datacore.log_ares_requisition(pack_source, pack_name, usr.name) else temp = "Not enough money left.
" temp += "
Back Main Menu" diff --git a/code/modules/admin/tabs/event_tab.dm b/code/modules/admin/tabs/event_tab.dm index 79c0a03a7589..247ab5c241ce 100644 --- a/code/modules/admin/tabs/event_tab.dm +++ b/code/modules/admin/tabs/event_tab.dm @@ -597,9 +597,9 @@ return FALSE var/datum/ares_link/link = GLOB.ares_link - if(link.p_apollo.inoperable()) + if(link.processor_apollo.inoperable()) var/prompt = tgui_alert(src, "ARES APOLLO processor is offline or destroyed, send the message anyways?", "Choose.", list("Yes", "No"), 20 SECONDS) - if(prompt == "No") + if(prompt != "Yes") to_chat(usr, SPAN_WARNING("[MAIN_AI_SYSTEM] is not responding. It's APOLLO processor may be offline or destroyed.")) return FALSE diff --git a/code/modules/admin/topic/topic.dm b/code/modules/admin/topic/topic.dm index 4c7e6afa5b7b..6db984dad217 100644 --- a/code/modules/admin/topic/topic.dm +++ b/code/modules/admin/topic/topic.dm @@ -1948,7 +1948,7 @@ supply_controller.shoppinglist += new_order //Can no longer request a nuke - GLOB.ares_link.interface.nuke_available = FALSE + GLOB.ares_datacore.nuke_available = FALSE marine_announcement("A nuclear device has been authorized by High Command and will be delivered to requisitions via ASRS.", "NUCLEAR ORDNANCE AUTHORIZED", 'sound/misc/notice2.ogg', logging = ARES_LOG_MAIN) log_game("[key_name_admin(usr)] has authorized a [nuketype], requested by [key_name_admin(ref_person)]") diff --git a/code/modules/cm_marines/anti_air.dm b/code/modules/cm_marines/anti_air.dm index cdb162cddfa3..f139fdead0c5 100644 --- a/code/modules/cm_marines/anti_air.dm +++ b/code/modules/cm_marines/anti_air.dm @@ -102,7 +102,7 @@ var/obj/structure/anti_air_cannon/almayer_aa_cannon if(!almayer_aa_cannon) return - var/datum/ares_link/link = GLOB.ares_link + var/datum/ares_datacore/datacore = GLOB.ares_datacore switch(action) if("protect") almayer_aa_cannon.protecting_section = params["section_id"] @@ -110,12 +110,14 @@ var/obj/structure/anti_air_cannon/almayer_aa_cannon almayer_aa_cannon.protecting_section = "" return message_admins("[key_name(usr)] has set the AA to [html_encode(almayer_aa_cannon.protecting_section)].") - link.log_ares_antiair("[usr] Set AA to cover [html_encode(almayer_aa_cannon.protecting_section)].") + if(ares_can_log()) + datacore.log_ares_antiair("[usr] Set AA to cover [html_encode(almayer_aa_cannon.protecting_section)].") . = TRUE if("deactivate") almayer_aa_cannon.protecting_section = "" message_admins("[key_name(usr)] has deactivated the AA cannon.") - link.log_ares_antiair("[usr] Deactivated Anti Air systems.") + if(ares_can_log()) + datacore.log_ares_antiair("[usr] Deactivated Anti Air systems.") . = TRUE add_fingerprint(usr) diff --git a/code/modules/cm_marines/overwatch.dm b/code/modules/cm_marines/overwatch.dm index d2d55a8cadb1..e79477eb80b5 100644 --- a/code/modules/cm_marines/overwatch.dm +++ b/code/modules/cm_marines/overwatch.dm @@ -798,7 +798,9 @@ log_attack("[key_name(user)] fired an orbital bombardment in [A.name] for squad '[current_squad]'") /// Project ARES interface log. - GLOB.ares_link.log_ares_bombardment(user.name, ob_name, "X[x_bomb], Y[y_bomb] in [A.name]") + var/datum/ares_datacore/datacore = GLOB.ares_datacore + if(ares_can_log()) + datacore.log_ares_bombardment(user.name, ob_name, "X[x_bomb], Y[y_bomb] in [A.name]") busy = FALSE var/turf/target = locate(T.x + rand(-3, 3), T.y + rand(-3, 3), T.z) diff --git a/code/modules/mob/living/carbon/xenomorph/death.dm b/code/modules/mob/living/carbon/xenomorph/death.dm index d81413b68651..dd83b26835a8 100644 --- a/code/modules/mob/living/carbon/xenomorph/death.dm +++ b/code/modules/mob/living/carbon/xenomorph/death.dm @@ -124,8 +124,9 @@ // Tell the marines where the last one is. var/name = "[MAIN_AI_SYSTEM] Bioscan Status" var/input = "Bioscan complete.\n\nSensors indicate one remaining unknown lifeform signature in [get_area(X)]." - var/datum/ares_link/link = GLOB.ares_link - link.log_ares_bioscan(name, input) + var/datum/ares_datacore/datacore = GLOB.ares_datacore + if(ares_can_log()) + datacore.log_ares_bioscan(name, input) marine_announcement(input, name, 'sound/AI/bioscan.ogg', logging = ARES_LOG_NONE) // Tell the xeno she is the last one. if(X.client) diff --git a/code/modules/shuttle/computers/dropship_computer.dm b/code/modules/shuttle/computers/dropship_computer.dm index c7a79b9c44ca..9ff0fe22c98a 100644 --- a/code/modules/shuttle/computers/dropship_computer.dm +++ b/code/modules/shuttle/computers/dropship_computer.dm @@ -272,8 +272,9 @@ GLOB.alt_ctrl_disabled = TRUE marine_announcement("Unscheduled dropship departure detected from operational area. Hijack likely. Shutting down autopilot.", "Dropship Alert", 'sound/AI/hijack.ogg', logging = ARES_LOG_SECURITY) - var/datum/ares_link/link = GLOB.ares_link - link.log_ares_flight("Unknown", "Unscheduled dropship departure detected from operational area. Hijack likely. Shutting down autopilot.") + var/datum/ares_datacore/datacore = GLOB.ares_datacore + if(ares_can_log()) + datacore.log_ares_flight("Unknown", "Unscheduled dropship departure detected from operational area. Hijack likely. Shutting down autopilot.") var/mob/living/carbon/xenomorph/xeno = user var/hivenumber = XENO_HIVE_NORMAL @@ -352,7 +353,7 @@ to_chat(user, SPAN_WARNING("The dropship isn't responding to controls.")) return - var/datum/ares_link/link = GLOB.ares_link + var/datum/ares_datacore/datacore = GLOB.ares_datacore switch(action) if("move") if(shuttle.mode != SHUTTLE_IDLE && (shuttle.mode != SHUTTLE_CALL && !shuttle.destination)) @@ -369,7 +370,8 @@ update_equipment(is_optimised) if(is_set_flyby) to_chat(user, SPAN_NOTICE("You begin the launch sequence for a flyby.")) - link.log_ares_flight(user.name, "Launched Dropship [shuttle.name] on a flyby.") + if(ares_can_log()) + datacore.log_ares_flight(user.name, "Launched Dropship [shuttle.name] on a flyby.") var/log = "[key_name(user)] launched the dropship [src.shuttleId] on flyby." msg_admin_niche(log) log_interact(user, msg = "[log]") @@ -398,7 +400,8 @@ return TRUE SSshuttle.moveShuttle(shuttle.id, dock.id, TRUE) to_chat(user, SPAN_NOTICE("You begin the launch sequence to [dock].")) - link.log_ares_flight(user.name, "Launched Dropship [shuttle.name] on a flight to [dock].") + if(ares_can_log()) + datacore.log_ares_flight(user.name, "Launched Dropship [shuttle.name] on a flight to [dock].") var/log = "[key_name(user)] launched the dropship [src.shuttleId] on transport." msg_admin_niche(log) log_interact(user, msg = "[log]") @@ -418,13 +421,15 @@ to_chat(user, SPAN_WARNING("Door controls have been overridden. Please call technical support.")) if("set-ferry") is_set_flyby = FALSE - link.log_ares_flight(user.name, "Set Dropship [shuttle.name] to transport runs.") + if(ares_can_log()) + datacore.log_ares_flight(user.name, "Set Dropship [shuttle.name] to transport runs.") var/log = "[key_name(user)] set the dropship [src.shuttleId] into transport" msg_admin_niche(log) log_interact(user, msg = "[log]") if("set-flyby") is_set_flyby = TRUE - link.log_ares_flight(user.name, "Set Dropship [shuttle.name] to flyby runs.") + if(ares_can_log()) + datacore.log_ares_flight(user.name, "Set Dropship [shuttle.name] to flyby runs.") var/log = "[key_name(user)] set the dropship [src.shuttleId] into flyby." msg_admin_niche(log) log_interact(user, msg = "[log]") @@ -447,7 +452,8 @@ shuttle.automated_lz_id = ground_lz shuttle.automated_delay = delay playsound(loc, get_sfx("terminal_button"), KEYBOARD_SOUND_VOLUME, 1) - link.log_ares_flight(user.name, "Enabled autopilot for Dropship [shuttle.name].") + if(ares_can_log()) + datacore.log_ares_flight(user.name, "Enabled autopilot for Dropship [shuttle.name].") var/log = "[key_name(user)] has enabled auto pilot on '[shuttle.name]'" message_admins(log) log_interact(user, msg = "[log]") @@ -464,7 +470,8 @@ shuttle.automated_lz_id = null shuttle.automated_delay = null playsound(loc, get_sfx("terminal_button"), KEYBOARD_SOUND_VOLUME, 1) - link.log_ares_flight(user.name, "Disabled autopilot for Dropship [shuttle.name].") + if(ares_can_log()) + datacore.log_ares_flight(user.name, "Disabled autopilot for Dropship [shuttle.name].") var/log = "[key_name(user)] has disabled auto pilot on '[shuttle.name]'" message_admins(log) log_interact(user, msg = "[log]") diff --git a/code/modules/shuttles/marine_ferry.dm b/code/modules/shuttles/marine_ferry.dm index 426d90c1457a..8a1fbb26f6fa 100644 --- a/code/modules/shuttles/marine_ferry.dm +++ b/code/modules/shuttles/marine_ferry.dm @@ -102,8 +102,9 @@ automated_launch = FALSE automated_launch_timer = TIMER_ID_NULL ai_silent_announcement("Dropship '[name]' departing.") - var/datum/ares_link/link = GLOB.ares_link - link.log_ares_flight("Automated", "Dropship [name] launched on an automatic flight.") + var/datum/ares_datacore/datacore = GLOB.ares_datacore + if(ares_can_log()) + datacore.log_ares_flight("Automated", "Dropship [name] launched on an automatic flight.") /* diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm index 12356754872c..6c327fe9dd5a 100644 --- a/code/modules/shuttles/shuttle_console.dm +++ b/code/modules/shuttles/shuttle_console.dm @@ -293,8 +293,9 @@ GLOBAL_LIST_EMPTY(shuttle_controls) marine_announcement("Unscheduled dropship departure detected from operational area. Hijack likely. Shutting down autopilot.", "Dropship Alert", 'sound/AI/hijack.ogg', logging = ARES_LOG_SECURITY) shuttle.alerts_allowed-- - var/datum/ares_link/link = GLOB.ares_link - link.log_ares_flight("Unknown", "Unscheduled dropship departure detected from operational area. Hijack likely. Shutting down autopilot.") + var/datum/ares_datacore/datacore = GLOB.ares_datacore + if(ares_can_log()) + datacore.log_ares_flight("Unknown", "Unscheduled dropship departure detected from operational area. Hijack likely. Shutting down autopilot.") to_chat(Q, SPAN_DANGER("A loud alarm erupts from [src]! The fleshy hosts must know that you can access it!")) xeno_message(SPAN_XENOANNOUNCE("The Queen has commanded the metal bird to depart for the metal hive in the sky! Rejoice!"),3,Q.hivenumber) diff --git a/colonialmarines.dme b/colonialmarines.dme index 79ddef81b976..c9036835aea2 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -795,6 +795,8 @@ s// DM Environment file for colonialmarines.dme. #include "code\game\machinery\washing_machine.dm" #include "code\game\machinery\weather_siren.dm" #include "code\game\machinery\ARES\ARES.dm" +#include "code\game\machinery\ARES\ARES_interface.dm" +#include "code\game\machinery\ARES\ARES_interface_apollo.dm" #include "code\game\machinery\ARES\ARES_procs.dm" #include "code\game\machinery\ARES\ARES_records.dm" #include "code\game\machinery\ARES\ARES_step_triggers.dm"