diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 4ed13adf3e7..73d3913edcc 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -103,7 +103,6 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) var/datum/admin_help/AH = I if(AH.initiator) var/obj/effect/statclick/updated = AH.statclick.update() - //L[++L.len] = list("#[AH.id]. [AH.initiator_key_name]:", "[updated.name]", REF(AH)) //ORIGINAL L[++L.len] = list("[AH.handler ? "H-[AH.handler]" : ""]#[AH.id]. [AH.initiator_key_name]:", "[updated.name]", REF(AH)) //SKYRAT EDIT CHANGE - ADMIN else ++num_disconnected @@ -111,7 +110,6 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) L[++L.len] = list("Disconnected:", "[astatclick.update("[num_disconnected]")]", null, REF(astatclick)) L[++L.len] = list("Closed Tickets:", "[cstatclick.update("[closed_tickets.len]")]", null, REF(cstatclick)) L[++L.len] = list("Resolved Tickets:", "[rstatclick.update("[resolved_tickets.len]")]", null, REF(rstatclick)) - //SKYRAT EDIT ADDITION if(LAZYLEN(SSopposing_force.submitted_applications)) for(var/datum/opposing_force/opposing_force as anything in SSopposing_force.submitted_applications) @@ -200,14 +198,19 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) var/static/ticket_counter = 0 /// The list of clients currently responding to the opening ticket before it gets a response var/list/opening_responders + /// Whether this ahelp has sent a webhook or not, and what type + var/webhook_sent = WEBHOOK_NONE + /// List of player interactions + var/list/player_interactions + //SKYRAT EDIT START /// Have we requested this ticket to stop being part of the Ticket Ping subsystem? var/ticket_ping_stop = FALSE /// Are we added to the ticket ping subsystem in the first place var/ticket_ping = FALSE + /// Who is handling this admin help? + var/handler //SKYRAT EDIT END - /// Whether this ahelp has sent a webhook or not, and what type - var/webhook_sent = WEBHOOK_NONE /** * Call this on its own to create a ticket, don't manually assign current_ticket @@ -246,14 +249,10 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) statclick = new(null, src) ticket_interactions = list() - //SKYRAT EDIT START - _interactions_player = list() - addtimer(CALLBACK(src, .proc/add_to_ping_ss, 3 MINUTES)) - //SKYRAT EDIT END + player_interactions = list() if(is_bwoink) - AddInteraction("[key_name_admin(usr)] PM'd [LinkedReplyName()]") - AddInteractionPlayer("[key_name_admin(usr, FALSE)] PM'd [LinkedReplyName()]") // SKYRAT EDIT ADDITION -- Player ticket viewing + AddInteraction("[key_name_admin(usr)] PM'd [LinkedReplyName()]", player_message = "[key_name_admin(usr, include_name = FALSE)] PM'd [LinkedReplyName()]") message_admins("Ticket [TicketHref("#[id]")] created") else MessageNoRecipient(msg_raw, urgent) @@ -365,11 +364,13 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) GLOB.ahelp_tickets.resolved_tickets -= src return ..() -/datum/admin_help/proc/AddInteraction(formatted_message) +/datum/admin_help/proc/AddInteraction(formatted_message, player_message) if(heard_by_no_admins && usr && usr.ckey != initiator_ckey) heard_by_no_admins = FALSE send2adminchat(initiator_ckey, "Ticket #[id]: Answered by [key_name(usr)]") ticket_interactions += "[time_stamp()]: [formatted_message]" + if (!isnull(player_message)) + player_interactions += "[time_stamp()]: [player_message]" //Removes the ahelp verb and returns it after 2 minutes /datum/admin_help/proc/TimeoutVerb() @@ -390,13 +391,12 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) /datum/admin_help/proc/ClosureLinks(ref_src) if(!ref_src) ref_src = "[REF(src)]" - . = " (REJT)" . += " (IC)" . += " (CLOSE)" . += " (RSLVE)" - . += " (HANDLE)" //SKYRAT EDIT ADDITION - ADMIN - . += " (PING MUTE)" //SKYRAT EDIT + . += " (HANDLE)" //SKYRAT EDIT ADDITION + . += " (PING MUTE)" //SKYRAT EDIT ADDITION //private /datum/admin_help/proc/LinkedReplyName(ref_src) @@ -418,8 +418,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) //Message to be sent to all admins var/admin_msg = span_adminnotice(span_adminhelp("Ticket [TicketHref("#[id]", ref_src)]: [LinkedReplyName(ref_src)] [FullMonty(ref_src)]: [keywords_lookup(msg)]")) - AddInteraction("[LinkedReplyName(ref_src)]: [msg]") - AddInteractionPlayer("[LinkedReplyName(ref_src)]: [msg]") // SKYRAT EDIT ADDITION -- Player ticket viewing + AddInteraction("[LinkedReplyName(ref_src)]: [msg]", player_message = "[LinkedReplyName(ref_src)]: [msg]") log_admin_private("Ticket #[id]: [key_name(initiator)]: [msg]") //send this msg to all admins @@ -463,8 +462,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) if(initiator) initiator.current_ticket = src - AddInteraction("Reopened by [key_name_admin(usr)]") - AddInteractionPlayer("Reopened by [key_name_admin(usr, FALSE)]") // SKYRAT EDIT ADDITION -- Player ticket viewing + AddInteraction("Reopened by [key_name_admin(usr)]", player_message = "Ticket reopened!") var/msg = span_adminhelp("Ticket [TicketHref("#[id]")] reopened by [key_name_admin(usr)].") message_admins(msg) log_admin_private(msg) @@ -497,8 +495,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) RemoveActive() state = AHELP_CLOSED GLOB.ahelp_tickets.ListInsert(src) - AddInteraction("Closed by [key_name].") - AddInteractionPlayer("Closed by [key_name_admin(usr, FALSE)].") // SKYRAT EDIT ADDITION -- Player ticket viewing + AddInteraction("Closed by [key_name].", player_message = "Ticket closed!") if(!silent) SSblackbox.record_feedback("tally", "ahelp_stats", 1, "closed") var/msg = "Ticket [TicketHref("#[id]")] closed by [key_name]." @@ -510,22 +507,19 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) /datum/admin_help/proc/Resolve(key_name = key_name_admin(usr), silent = FALSE) if(state != AHELP_ACTIVE) return - //SKYRAT EDIT ADDITION BEGIN - ADMIN if(handler && handler != usr.ckey) var/response = tgui_alert(usr, "This ticket is already being handled by [handler]. Do you want to continue?", "Ticket already assigned", list("Yes", "No")) if(!response || response == "No") return //SKYRAT EDIT ADDITION END - RemoveActive() state = AHELP_RESOLVED GLOB.ahelp_tickets.ListInsert(src) addtimer(CALLBACK(initiator, /client/proc/giveadminhelpverb), 50) - AddInteraction("Resolved by [key_name].") - AddInteractionPlayer("Resolved by [key_name_admin(usr, FALSE)].") // SKYRAT EDIT ADDITION -- Player ticket viewing + AddInteraction("Resolved by [key_name].", player_message = "Ticket resolved!") to_chat(initiator, span_adminhelp("Your ticket has been resolved by an admin. The Adminhelp verb will be returned to you shortly."), confidential = TRUE) if(!silent) SSblackbox.record_feedback("tally", "ahelp_stats", 1, "resolved") @@ -538,14 +532,12 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) /datum/admin_help/proc/Reject(key_name = key_name_admin(usr)) if(state != AHELP_ACTIVE) return - //SKYRAT EDIT ADDITION BEGIN - ADMIN if(handler && handler != usr.ckey) var/response = tgui_alert(usr, "This ticket is already being handled by [handler]. Do you want to continue?", "Ticket already assigned", list("Yes", "No")) if(!response || response == "No") return //SKYRAT EDIT ADDITION END - if(initiator) initiator.giveadminhelpverb() @@ -559,8 +551,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) var/msg = "Ticket [TicketHref("#[id]")] rejected by [key_name]" message_admins(msg) log_admin_private(msg) - AddInteraction("Rejected by [key_name].") - AddInteractionPlayer("Rejected by [key_name_admin(usr, FALSE)].") // SKYRAT EDIT ADDITION -- Player ticket viewing + AddInteraction("Rejected by [key_name].", player_message = "Ticket rejected!") SSblackbox.LogAhelp(id, "Rejected", "Rejected by [usr.key]", null, usr.ckey) Close(silent = TRUE) @@ -568,14 +559,12 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) /datum/admin_help/proc/ICIssue(key_name = key_name_admin(usr)) if(state != AHELP_ACTIVE) return - //SKYRAT EDIT ADDITION BEGIN - ADMIN if(handler && handler != usr.ckey) var/response = tgui_alert(usr, "This ticket is already being handled by [handler]. Do you want to continue?", "Ticket already assigned", list("Yes", "No")) if(!response || response == "No") return //SKYRAT EDIT ADDITION END - var/msg = "- AdminHelp marked as IC issue! -
" msg += "Your issue has been determined by an administrator to be an in character issue and does NOT require administrator intervention at this time. For further resolution you should pursue options that are in character." @@ -586,8 +575,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) msg = "Ticket [TicketHref("#[id]")] marked as IC by [key_name]" message_admins(msg) log_admin_private(msg) - AddInteraction("Marked as IC issue by [key_name]") - AddInteractionPlayer("Marked as IC issue by [key_name_admin(usr, FALSE)]") // SKYRAT EDIT ADDITION -- Player ticket viewing + AddInteraction("Marked as IC issue by [key_name]", player_message = "Marked as IC issue!") SSblackbox.LogAhelp(id, "IC Issue", "Marked as IC issue by [usr.key]", null, usr.ckey) Resolve(silent = TRUE) @@ -684,7 +672,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) Resolve() if("reopen") Reopen() - //SKYRAT EDIT ADDITION BEING - ADMIN + // SKYRAT EDIT ADDITION if("handle_issue") handle_issue() if("pingmute") @@ -693,7 +681,33 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) var/msg = "Ticket [TicketHref("#[id]")] has been [ticket_ping_stop ? "" : "un"]muted from the Ticket Ping Subsystem by [key_name_admin(usr)]." message_admins(msg) log_admin_private(msg) - //SKYRAT EDIT ADDITION END + // SKYRAT EDIT ADDITION END + +/datum/admin_help/proc/player_ticket_panel() + var/list/dat = list("Player Ticket") + dat += "State: " + switch(state) + if(AHELP_ACTIVE) + dat += "OPEN" + if(AHELP_RESOLVED) + dat += "RESOLVED" + if(AHELP_CLOSED) + dat += "CLOSED" + else + dat += "UNKNOWN" + dat += "\n[FOURSPACES]Refresh" + dat += "

Opened at: [gameTimestamp("hh:mm:ss", opened_at)] (Approx [DisplayTimeText(world.time - opened_at)] ago)" + if(closed_at) + dat += "
Closed at: [gameTimestamp("hh:mm:ss", closed_at)] (Approx [DisplayTimeText(world.time - closed_at)] ago)" + dat += "

" + dat += "
Log:

" + for (var/interaction in player_interactions) + dat += "[interaction]
" + + var/datum/browser/player_panel = new(usr, "ahelp[id]", 0, 620, 480) + player_panel.set_content(dat.Join()) + player_panel.open() + // // TICKET STATCLICK @@ -806,8 +820,7 @@ GLOBAL_DATUM_INIT(admin_help_ui_handler, /datum/admin_help_ui_handler, new) user_client.current_ticket.MessageNoRecipient(message, urgent) return - //new /datum/admin_help(message, user_client, FALSE, urgent) //ORIGINAL - new /datum/admin_help(message, user_client, FALSE, urgent=urgent) //SKYRAT EDIT CHANGE - ADMIN + new /datum/admin_help(message, user_client, FALSE, urgent) /client/verb/no_tgui_adminhelp(message as message) set name = "NoTguiAdminhelp" @@ -826,44 +839,68 @@ GLOBAL_DATUM_INIT(admin_help_ui_handler, /datum/admin_help_ui_handler, new) GLOB.admin_help_ui_handler.ui_interact(mob) to_chat(src, span_boldnotice("Adminhelp failing to open or work? Click here")) +/client/verb/view_latest_ticket() + set category = "Admin" + set name = "View Latest Ticket" + + if(!current_ticket) + // Check if the client had previous tickets, and show the latest one + var/list/prev_tickets = list() + var/datum/admin_help/last_ticket + // Check all resolved tickets for this player + for(var/datum/admin_help/resolved_ticket in GLOB.ahelp_tickets.resolved_tickets) + if(resolved_ticket.initiator_ckey == ckey) // Initiator is a misnomer, it's always the non-admin player even if an admin bwoinks first + prev_tickets += resolved_ticket + // Check all closed tickets for this player + for(var/datum/admin_help/closed_ticket in GLOB.ahelp_tickets.closed_tickets) + if(closed_ticket.initiator_ckey == ckey) + prev_tickets += closed_ticket + // Take the most recent entry of prev_tickets and open the panel on it + if(LAZYLEN(prev_tickets)) + last_ticket = pop(prev_tickets) + last_ticket.player_ticket_panel() + return + + // client had no tickets this round + to_chat(src, span_warning("You have not had an ahelp ticket this round.")) + return + + current_ticket.player_ticket_panel() // // LOGGING // -//Use this proc when an admin takes action that may be related to an open ticket on what -//what can be a client, ckey, or mob - -//log_in_blackbox: Whether or not this message with the blackbox system. -//If disabled, this message should be logged with a different proc call -// /proc/admin_ticket_log(what, message, log_in_blackbox = TRUE) // SKYRAT EDIT ORIGINAL -/proc/admin_ticket_log(what, message, log_in_blackbox = TRUE, admin_only = TRUE) // SKYRAT EDIT CHANGE -- Player ticket viewing - var/client/C +/// Use this proc when an admin takes action that may be related to an open ticket on what +/// what can be a client, ckey, or mob +/// player_message: If the message should be shown in the player ticket panel, fill this out +/// log_in_blackbox: Whether or not this message with the blackbox system. +/// If disabled, this message should be logged with a different proc call +/proc/admin_ticket_log(what, message, player_message, log_in_blackbox = TRUE) + var/client/mob_client var/mob/Mob = what if(istype(Mob)) - C = Mob.client + mob_client = Mob.client else - C = what - if(istype(C) && C.current_ticket) - C.current_ticket.AddInteraction(message) - // SKYRAT EDIT ADDITION START -- Player ticket viewing - if(!admin_only) - C.current_ticket.AddInteractionPlayer(message) - // SKYRAT EDIT ADDITION END + mob_client = what + if(istype(mob_client) && mob_client.current_ticket) + if (isnull(player_message)) + mob_client.current_ticket.AddInteraction(message) + else + mob_client.current_ticket.AddInteraction(message, player_message) if(log_in_blackbox) - SSblackbox.LogAhelp(C.current_ticket.id, "Interaction", message, C.ckey, usr.ckey) - return C.current_ticket + SSblackbox.LogAhelp(mob_client.current_ticket.id, "Interaction", message, mob_client.ckey, usr.ckey) + return mob_client.current_ticket if(istext(what)) //ckey - var/datum/admin_help/AH = GLOB.ahelp_tickets.CKey2ActiveTicket(what) - if(AH) - AH.AddInteraction(message) - // SKYRAT EDIT ADDITION START -- Player ticket viewing - if(!admin_only) - AH.AddInteractionPlayer(message) - // SKYRAT EDIT ADDITION END + var/datum/admin_help/active_admin_help = GLOB.ahelp_tickets.CKey2ActiveTicket(what) + if(active_admin_help) + if (isnull(player_message)) + active_admin_help.AddInteraction(message) + else + active_admin_help.AddInteraction(message, player_message) if(log_in_blackbox) - SSblackbox.LogAhelp(AH.id, "Interaction", message, what, usr.ckey) - return AH + SSblackbox.LogAhelp(active_admin_help.id, "Interaction", message, what, usr.ckey) + return active_admin_help // // HELPER PROCS @@ -921,19 +958,12 @@ GLOBAL_DATUM_INIT(admin_help_ui_handler, /datum/admin_help_ui_handler, new) additional_data += type var/list/servers = CONFIG_GET(keyed_list/cross_server) - // SKYRAT EDTI ADDITION - if(target_servers == "all") - for(var/server in servers) - if(server == our_id) - continue - world.send_cross_comms(server, additional_data) - else //SKYRAT EDIT END - for(var/I in servers) - if(I == our_id) //No sending to ourselves - continue - if(target_servers && !(I in target_servers)) - continue - world.send_cross_comms(I, additional_data) + for(var/I in servers) + if(I == our_id) //No sending to ourselves + continue + if(target_servers && !(I in target_servers)) + continue + world.send_cross_comms(I, additional_data) /// Sends a message to a given cross comms server by name (by name for security). /world/proc/send_cross_comms(server_name, list/message, auth = TRUE) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 15b067f67e3..3142d264745 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -214,10 +214,9 @@ type = MESSAGE_TYPE_ADMINPM, html = span_notice("PM to-Admins: [rawmsg]"), confidential = TRUE) - var/datum/admin_help/AH = admin_ticket_log(src, "Reply PM from-[key_name(src, TRUE, TRUE)] to External: [keywordparsedmsg]") - AH.AddInteractionPlayer("Reply PM from-[key_name(src, TRUE, FALSE)] to External: [keywordparsedmsg]") // SKYRAT EDIT ADDITION -- Player ticket viewing + var/datum/admin_help/new_admin_help = admin_ticket_log(src, "Reply PM from-[key_name(src, TRUE, TRUE)] to External: [keywordparsedmsg]", player_message = "Reply PM from-[key_name(src, TRUE, FALSE)] to External: [msg]") externalreplyamount-- - send2adminchat("[AH ? "#[AH.id] " : ""]Reply: [ckey]", rawmsg) + send2adminchat("[new_admin_help ? "#[new_admin_help.id] " : ""]Reply: [ckey]", rawmsg) else var/badmin = FALSE //Lets figure out if an admin is getting bwoinked. if(holder && recipient.holder && !current_ticket) //Both are admins, and this is not a reply to our own ticket. @@ -235,17 +234,16 @@ html = span_notice("Admin PM to-[key_name(recipient, src, 1)]: [keywordparsedmsg]"), confidential = TRUE) //omg this is dumb, just fill in both their tickets - var/interaction_message = "PM from-[key_name(src, recipient, 1)] to-[key_name(recipient, src, 1)]: [keywordparsedmsg]" - // admin_ticket_log(src, interaction_message, log_in_blackbox = FALSE) // SKYRAT EDIT ORIGINAL - admin_ticket_log(src, interaction_message, log_in_blackbox = FALSE, admin_only = FALSE) // SKYRAT EDIT CHANGE -- Player ticket viewing - if(recipient != src)//reeee - // admin_ticket_log(recipient, interaction_message, log_in_blackbox = FALSE) // SKYRAT EDIT ORIGINAL - admin_ticket_log(recipient, interaction_message, log_in_blackbox = FALSE, admin_only = FALSE) // SKYRAT EDIT CHANGE -- Player ticket viewing + var/interaction_message = "PM from-[key_name(src, recipient, TRUE)] to-[key_name(recipient, src, TRUE)]: [keywordparsedmsg]" + var/player_interaction_message = "PM from-[key_name(src, recipient, FALSE)] to-[key_name(recipient, src, FALSE)]: [msg]" + admin_ticket_log(src, interaction_message, log_in_blackbox = FALSE, player_message = player_interaction_message) + if(recipient != src) //reeee + admin_ticket_log(recipient, interaction_message, log_in_blackbox = FALSE, player_message = player_interaction_message) SSblackbox.LogAhelp(current_ticket.id, "Reply", msg, recipient.ckey, src.ckey) else //recipient is an admin but sender is not - var/replymsg = "Reply PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]" - // admin_ticket_log(src, "[replymsg]", log_in_blackbox = FALSE) // SKYRAT EDIT ORIGINAL - admin_ticket_log(src, "[replymsg]", log_in_blackbox = FALSE, admin_only = FALSE) // SKYRAT EDIT CHANGE -- Player ticket viewing + var/replymsg = "Reply PM from-[key_name(src, recipient, TRUE)]: [keywordparsedmsg]" + var/player_replymsg = "Reply PM from-[key_name(src, recipient, FALSE)]: [msg]" + admin_ticket_log(src, "[replymsg]", log_in_blackbox = FALSE, player_message = player_replymsg) to_chat(recipient, type = MESSAGE_TYPE_ADMINPM, html = span_danger("[replymsg]"), @@ -263,7 +261,6 @@ if(holder) //sender is an admin but recipient is not. Do BIG RED TEXT var/already_logged = FALSE if(!recipient.current_ticket) - //new /datum/admin_help(msg, recipient, TRUE) //ORIGINAL new /datum/admin_help(msg, recipient, TRUE, src) //SKYRAT EDIT CHANGE - ADMIN already_logged = TRUE SSblackbox.LogAhelp(recipient.current_ticket.id, "Ticket Opened", msg, recipient.ckey, src.ckey) @@ -272,7 +269,7 @@ // Basically, if we realized that we shouldn't've been handling the ticket, let's bail. Otherwise, we just change who's handling it. if(!recipient.current_ticket.handle_issue()) return - //SKYRAT EDIT ADDITION END + // SKYRAT EDIT END to_chat(recipient, type = MESSAGE_TYPE_ADMINPM, @@ -291,8 +288,7 @@ html = span_notice("Admin PM to-[key_name(recipient, src, 1)]: [msg]"), confidential = TRUE) - // admin_ticket_log(recipient, "PM From [key_name_admin(src)]: [keywordparsedmsg]", log_in_blackbox = FALSE) // SKYRAT EDIT ORIGINAL - admin_ticket_log(recipient, "PM From [key_name_admin(src, FALSE)]: [keywordparsedmsg]", log_in_blackbox = FALSE, admin_only = FALSE) // SKYRAT EDIT CHANGE -- Player ticket viewing + admin_ticket_log(recipient, "PM From [key_name_admin(src)]: [keywordparsedmsg]", log_in_blackbox = FALSE, player_message = "PM From [key_name_admin(src, include_name = FALSE)]: [msg]") if(!already_logged) //Reply to an existing ticket SSblackbox.LogAhelp(recipient.current_ticket.id, "Reply", msg, recipient.ckey, src.ckey) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index d7de1b5315d..d085187d9af 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -104,6 +104,9 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if(href_list["priv_msg"]) cmd_admin_pm(href_list["priv_msg"],null) return + if (href_list["player_ticket_panel"]) + view_latest_ticket() + return // TGUIless adminhelp if(href_list["tguiless_adminhelp"]) no_tgui_adminhelp(input(src, "Enter your ahelp", "Ahelp") as null|message) diff --git a/modular_skyrat/master_files/code/modules/admin/admin.dm b/modular_skyrat/master_files/code/modules/admin/admin.dm index 69cadecf209..38a4dea6c4e 100644 --- a/modular_skyrat/master_files/code/modules/admin/admin.dm +++ b/modular_skyrat/master_files/code/modules/admin/admin.dm @@ -18,3 +18,30 @@ GLOBAL_VAR_INIT(dchat_allowed, TRUE) else // otherwise just toggle it GLOB.dchat_allowed = !GLOB.dchat_allowed to_chat(world, span_oocplain("The dead chat channel has been globally [GLOB.dchat_allowed ? "enabled" : "disabled"].")) + +//Let the initiator know their ahelp is being handled +/datum/admin_help/proc/handle_issue(key_name = key_name_admin(usr)) + if(state != AHELP_ACTIVE) + return FALSE + + if(handler && handler == usr.ckey) // No need to handle it twice as the same person ;) + return TRUE + + if(handler && handler != usr.ckey) + var/response = tgui_alert(usr, "This ticket is already being handled by [handler]. Do you want to continue?", "Ticket already assigned", list("Yes", "No")) + if(!response || response == "No") + return FALSE + + var/msg = span_adminhelp("Your ticket is now being handled by [usr?.client?.holder?.fakekey ? usr?.client?.holder?.fakekey : "an administrator"]! Please wait while they type their response and/or gather relevant information.") + + if(initiator) + to_chat(initiator, msg) + + SSblackbox.record_feedback("tally", "ahelp_stats", 1, "handling") + msg = "Ticket [TicketHref("#[id]")] is being handled by [key_name]" + message_admins(msg) + log_admin_private(msg) + AddInteraction("Being handled by [key_name]", "Being handled by [key_name_admin(usr, FALSE)]") + + handler = "[usr.ckey]" + return TRUE diff --git a/modular_skyrat/modules/admin/code/admin_help.dm b/modular_skyrat/modules/admin/code/admin_help.dm deleted file mode 100644 index e15385d1a87..00000000000 --- a/modular_skyrat/modules/admin/code/admin_help.dm +++ /dev/null @@ -1,56 +0,0 @@ -/datum/admin_help - var/handler - var/list/_interactions_player - -//Let the initiator know their ahelp is being handled -/datum/admin_help/proc/handle_issue(key_name = key_name_admin(usr)) - if(state != AHELP_ACTIVE) - return FALSE - - if(handler && handler == usr.ckey) // No need to handle it twice as the same person ;) - return TRUE - - if(handler && handler != usr.ckey) - var/response = tgui_alert(usr, "This ticket is already being handled by [handler]. Do you want to continue?", "Ticket already assigned", list("Yes", "No")) - if(!response || response == "No") - return FALSE - - var/msg = span_adminhelp("Your ticket is now being handled by [usr?.client?.holder?.fakekey ? usr?.client?.holder?.fakekey : "an administrator"]! Please wait while they type their response and/or gather relevant information.") - - if(initiator) - to_chat(initiator, msg) - - SSblackbox.record_feedback("tally", "ahelp_stats", 1, "handling") - msg = "Ticket [TicketHref("#[id]")] is being handled by [key_name]" - message_admins(msg) - log_admin_private(msg) - AddInteraction("Being handled by [key_name]") - AddInteractionPlayer("Being handled by [key_name_admin(usr, FALSE)]") - - handler = "[usr.ckey]" - return TRUE - -/datum/admin_help/proc/PlayerTicketPanel() - var/list/dat = list("Player Ticket") - dat += "State: " - switch(state) - if(AHELP_ACTIVE) - dat += "OPEN" - if(AHELP_RESOLVED) - dat += "RESOLVED" - if(AHELP_CLOSED) - dat += "CLOSED" - else - dat += "UNKNOWN" - dat += "

Opened at: [gameTimestamp("hh:mm:ss", opened_at)] (Approx [DisplayTimeText(world.time - opened_at)] ago)" - if(closed_at) - dat += "
Closed at: [gameTimestamp("hh:mm:ss", closed_at)] (Approx [DisplayTimeText(world.time - closed_at)] ago)" - dat += "

" - dat += "
Log:

" - for(var/I in _interactions_player) - dat += "[I]
" - - usr << browse(dat.Join(), "window=ahelp[id];size=620x480") - -/datum/admin_help/proc/AddInteractionPlayer(formatted_message) - _interactions_player += "[time_stamp()]: [formatted_message]" diff --git a/modular_skyrat/modules/admin/code/adminhelp.dm b/modular_skyrat/modules/admin/code/adminhelp.dm deleted file mode 100644 index 5b71f07ff1c..00000000000 --- a/modular_skyrat/modules/admin/code/adminhelp.dm +++ /dev/null @@ -1,28 +0,0 @@ -// File for more general procs, admin_help.dm is focused on the datum/admin_help/ -/client/verb/viewlatestticket() - set category = "Admin" - set name = "View Latest Ticket" - - if(!current_ticket) - // Check if the client had previous tickets, and show the latest one - var/list/prev_tickets = list() - var/datum/admin_help/last_ticket - // Check all resolved tickets for this player - for(var/datum/admin_help/resolved_ticket in GLOB.ahelp_tickets.resolved_tickets) - if(resolved_ticket.initiator_ckey == ckey) // Initiator is a misnomer, it's always the non-admin player even if an admin bwoinks first - prev_tickets += resolved_ticket - // Check all closed tickets for this player - for(var/datum/admin_help/closed_ticket in GLOB.ahelp_tickets.closed_tickets) - if(closed_ticket.initiator_ckey == ckey) - prev_tickets += closed_ticket - // Take the most recent entry of prev_tickets and open the panel on it - if(LAZYLEN(prev_tickets)) - last_ticket = pop(prev_tickets) - last_ticket.PlayerTicketPanel() - return - - // client had no tickets this round - to_chat(src, span_warning("You have not had an ahelp ticket this round.")) - return - - current_ticket.PlayerTicketPanel() diff --git a/tgstation.dme b/tgstation.dme index c9293a48a5a..c8097da3c07 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4738,8 +4738,6 @@ #include "modular_skyrat\modules\additional_circuit\code\interact_item.dm" #include "modular_skyrat\modules\additional_circuit\code\mining_circuit.dm" #include "modular_skyrat\modules\additional_circuit\code\target_scanner.dm" -#include "modular_skyrat\modules\admin\code\admin_help.dm" -#include "modular_skyrat\modules\admin\code\adminhelp.dm" #include "modular_skyrat\modules\admin\code\aooc.dm" #include "modular_skyrat\modules\admin\code\fix_chat.dm" #include "modular_skyrat\modules\admin\code\loud_say.dm"