Skip to content

Commit

Permalink
Remote Access Updates
Browse files Browse the repository at this point in the history
remote surrender
  • Loading branch information
realforest2001 committed Aug 28, 2023
1 parent 003cbe4 commit 2ad7eea
Show file tree
Hide file tree
Showing 6 changed files with 163 additions and 193 deletions.
4 changes: 4 additions & 0 deletions code/__DEFINES/ARES.dm
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@
#define TICKET_REJECTED "rejected"
/// Completed by WJs
#define TICKET_COMPLETED "completed"
/// Granted Access Ticket
#define TICKET_GRANTED "granted"
/// Granted Access Ticket
#define TICKET_REVOKED "revoked"

/// Checks for if buttons can be used, these may yet be removed and internalised to the UI programming
#define TICKET_OPEN "OPEN"
Expand Down
44 changes: 0 additions & 44 deletions code/game/machinery/ARES/ARES.dm
Original file line number Diff line number Diff line change
Expand Up @@ -205,11 +205,6 @@
var/list/login_list = list()


/// If this is used to create AI Core access tickets
var/ticket_console = FALSE
var/ticket_authenticated = FALSE
var/obj/item/card/id/target_id

/obj/structure/machinery/computer/working_joe/proc/link_systems(datum/ares_link/new_link = GLOB.ares_link, override)
if(link && !override)
return FALSE
Expand All @@ -233,42 +228,3 @@
/obj/structure/machinery/computer/working_joe/Destroy()
delink()
return ..()

/obj/structure/machinery/computer/working_joe/verb/eject_id()
set category = "Object"
set name = "Eject ID Card"
set src in oview(1)

if(!usr || usr.stat || usr.lying)
return FALSE

if(target_id)
target_id.loc = get_turf(src)
if(!usr.get_active_hand() && istype(usr,/mob/living/carbon/human))
usr.put_in_hands(target_id)
else
to_chat(usr, "You remove [target_id] from [src].")
target_id = null

else
to_chat(usr, "There is nothing to remove from the console.")
return

/obj/structure/machinery/computer/working_joe/attackby(obj/object, mob/user)
if(istype(object, /obj/item/card/id))
if(!ticket_console)
to_chat(user, SPAN_WARNING("This console doesn't have an ID port!"))
return FALSE
if(!operable())
to_chat(user, SPAN_NOTICE("You try to insert [object] but [src] remains silent."))
return FALSE
if(!target_id)
if(user.drop_held_item())
object.forceMove(src)
target_id = object
return TRUE
else
to_chat(user, "ID modification slot is full. Please remove existing card first.")
return FALSE
else
..()
161 changes: 97 additions & 64 deletions code/game/machinery/ARES/ARES_procs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ GLOBAL_LIST_INIT(maintenance_categories, 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_link/Destroy()
for(var/obj/structure/machinery/ares/link in linked_systems)
Expand Down Expand Up @@ -650,7 +652,6 @@ GLOBAL_LIST_INIT(maintenance_categories, list(
/obj/structure/machinery/computer/working_joe/ui_data(mob/user)
var/list/data = list()

data["ticket_console"] = ticket_console
data["current_menu"] = current_menu
data["last_page"] = last_menu

Expand All @@ -668,8 +669,6 @@ GLOBAL_LIST_INIT(maintenance_categories, list(
data["apollo_log"] = list()
data["apollo_log"] += link.apollo_log

data["authenticated"] = ticket_authenticated

var/list/logged_maintenance = list()
for(var/datum/ares_ticket/maintenance/maint_ticket as anything in link.tickets_maintenance)
if(!istype(maint_ticket))
Expand Down Expand Up @@ -698,7 +697,7 @@ GLOBAL_LIST_INIT(maintenance_categories, 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_COMPLETED)
if(TICKET_REJECTED, TICKET_CANCELLED, TICKET_REVOKED)
lock_status = TICKET_CLOSED

var/list/current_ticket = list()
Expand All @@ -718,19 +717,6 @@ GLOBAL_LIST_INIT(maintenance_categories, list(
requesting_access += access_ticket.ticket_name
data["access_tickets"] = logged_access

data["can_update_id"] = "No"

if(!target_id)
data["id_tooltip"] = "Target ID card is missing!"
else if(!(target_id.registered_name in requesting_access) && !(ACCESS_MARINE_AI_TEMP in target_id.access))
data["id_tooltip"] = "No existing access ticket for '[target_id.registered_name]'"
else
data["can_update_id"] = "Yes"
if(ACCESS_MARINE_AI_TEMP in target_id.access)
data["id_tooltip"] = "Revoke core access."
else
data["id_tooltip"] = "Grant core access."

return data

/obj/structure/machinery/computer/working_joe/ui_static_data(mob/user)
Expand Down Expand Up @@ -895,6 +881,23 @@ GLOBAL_LIST_INIT(maintenance_categories, list(
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
var/priority_report = FALSE
var/is_self = tgui_alert(operator, "Is this request for yourself?", "Ticket Holder", list("Yes", "No"))
Expand All @@ -916,63 +919,93 @@ GLOBAL_LIST_INIT(maintenance_categories, list(
var/confirm = alert(operator, "Please confirm the submission of your access ticket request. \n\n Priority: [priority_report ? "Yes" : "No"] \n Holder: '[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, priority_report)
var/datum/ares_ticket/access/access_ticket = new(last_login, ticket_holder, details, priority_report, idcard.registered_gid)
link.waiting_ids += idcard
link.tickets_access += access_ticket
if(priority_report)
ares_apollo_talk("Priority Access Request: [ticket_holder] - ID [access_ticket.ticket_id]. Seek and resolve.")
log_game("ARES: Access Ticket '\ref[access_ticket]' created by [key_name(operator)] as [last_login] with Holder '[ticket_holder]' and Details of '[details]'.")
return TRUE

if("eject_id")
playsound = FALSE
eject_id()
if("apply_access")
playsound = FALSE
if(!target_id)
return FALSE
var/announce_text = "[last_login] revoked core access from [target_id.registered_name]'s ID card."
if(ACCESS_MARINE_AI_TEMP in target_id.access)
target_id.access -= ACCESS_MARINE_AI_TEMP
target_id.modification_log += "Temporary AI access revoked by [key_name(operator)]"
to_chat(operator, SPAN_NOTICE("Access revoked from [target_id.registered_name]."))
else
target_id.access += ACCESS_MARINE_AI_TEMP
target_id.modification_log += "Temporary AI access granted by [key_name(operator)]"
announce_text = "[last_login] granted core access to [target_id.registered_name]'s ID card."
to_chat(operator, SPAN_NOTICE("Access granted to [target_id.registered_name]."))
ares_apollo_talk(announce_text)
playsound(src, 'sound/machines/chime.ogg', 15, 1)

if("return_access")
playsound = FALSE
var/obj/item/card/id/idcard = operator.get_active_hand()
var/real_id = TRUE
if(!istype(idcard))
real_id = FALSE
if(operator.wear_id)
idcard = operator.wear_id
real_id = TRUE
if(!istype(idcard))
real_id = FALSE
if(!real_id)
to_chat(operator, SPAN_WARNING("You require an ID card to return an access ticket!"))
playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
return FALSE

if(!(ACCESS_MARINE_AI_TEMP in idcard.access))
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
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_REVOKED
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

idcard.access -= ACCESS_MARINE_AI_TEMP
idcard.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(idcard)
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(authentication)
login_list += "[last_login] at [worldtime2text()], Surrendered Temporary Access Ticket."
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)
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
14 changes: 14 additions & 0 deletions code/game/machinery/ARES/ARES_records.dm
Original file line number Diff line number Diff line change
Expand Up @@ -107,3 +107,17 @@

/datum/ares_ticket/access
ticket_type = ARES_RECORD_ACCESS
var/user_id_num

/datum/ares_ticket/access/New(user, name, details, priority, global_id_num)
var/ref_holder = "\ref[src]"
var/pos = length(ref_holder)
var/new_id = "#[copytext("\ref[src]", pos - 4, pos)]"

ticket_time = worldtime2text()
ticket_submitter = user
ticket_details = details
ticket_name = name
ticket_priority = priority
ticket_id = new_id
user_id_num = global_id_num
9 changes: 3 additions & 6 deletions maps/map_files/USS_Almayer/USS_Almayer.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -37163,8 +37163,7 @@
/obj/structure/machinery/computer/working_joe{
dir = 8;
pixel_x = 17;
pixel_y = -6;
ticket_console = 1
pixel_y = -6
},
/obj/item/storage/box/ids{
pixel_x = -4
Expand Down Expand Up @@ -54819,8 +54818,7 @@
},
/obj/structure/machinery/computer/working_joe{
dir = 8;
pixel_x = 17;
ticket_console = 1
pixel_x = 17
},
/obj/structure/sign/safety/laser{
pixel_y = 24
Expand Down Expand Up @@ -72955,8 +72953,7 @@
},
/obj/structure/machinery/computer/working_joe{
dir = 4;
pixel_x = -17;
ticket_console = 1
pixel_x = -17
},
/turf/open/floor/almayer/no_build{
icon_state = "ai_floors"
Expand Down
Loading

0 comments on commit 2ad7eea

Please sign in to comment.