mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-11 23:23:28 +01:00
user feedback, updates adminhelp string, replying to a ticket stops stale counter
This commit is contained in:
@@ -21,6 +21,13 @@ var/global/nologevent = 0
|
||||
var/msg = rendered
|
||||
to_chat(C, msg)
|
||||
|
||||
/proc/message_adminTicket(var/msg)
|
||||
msg = "<span class='admintickets'><span class='prefix'>ADMIN TICKET:</span> <span class='admintickets'>[msg]</span></span>"
|
||||
for(var/client/C in admins)
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
if(C.prefs && !(C.prefs.toggles & CHAT_NO_TICKETLOGS))
|
||||
to_chat(C, msg)
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////Panels
|
||||
|
||||
|
||||
@@ -222,6 +222,7 @@ var/list/admin_verbs_ticket = list(
|
||||
/client/proc/startadmintickets,
|
||||
/client/proc/vvadmintickets,
|
||||
/client/proc/openTicketUI,
|
||||
/client/proc/toggleticketlogs
|
||||
)
|
||||
|
||||
/client/proc/on_holder_add()
|
||||
@@ -924,6 +925,20 @@ var/list/admin_verbs_ticket = list(
|
||||
else
|
||||
to_chat(usr, "You now will get admin log messages.")
|
||||
|
||||
/client/proc/toggleticketlogs()
|
||||
set name = "Toggle Admin Ticket Messgaes"
|
||||
set category = "Preferences"
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
prefs.toggles ^= CHAT_NO_TICKETLOGS
|
||||
prefs.save_preferences(src)
|
||||
if(prefs.toggles & CHAT_NO_TICKETLOGS)
|
||||
to_chat(usr, "You now won't get admin ticket messages.")
|
||||
else
|
||||
to_chat(usr, "You now will get admin ticket messages.")
|
||||
|
||||
/client/proc/toggledrones()
|
||||
set name = "Toggle Maintenance Drones"
|
||||
set category = "Server"
|
||||
|
||||
@@ -6,10 +6,10 @@ Admin ticket system by Birdtalon
|
||||
var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicketHolder
|
||||
|
||||
//Defines
|
||||
//Deciseconds until timeout
|
||||
//Deciseconds until ticket becomes stale if unanswered.
|
||||
#define ADMIN_TICKET_TIMEOUT 3000
|
||||
//Decisecions before opening another ticket
|
||||
#define ADMIN_TICKET_DUPLICATE_COOLDOWN 300
|
||||
//Decisecions before opening another ticket.
|
||||
#define ADMIN_TICKET_DUPLICATE_COOLDOWN 1200
|
||||
|
||||
//Status defines
|
||||
#define ADMIN_TICKET_OPEN 1
|
||||
@@ -38,7 +38,7 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke
|
||||
|
||||
/datum/adminTicketHolder/proc/purgeAllTickets() // Delete ALL tickets
|
||||
QDEL_LIST(allTickets)
|
||||
message_admins("<span class='adminticket'>[usr.client] purged all admin tickets!</span>")
|
||||
message_adminTicket("<span class='adminticket'>[usr.client] purged all admin tickets!</span>")
|
||||
ticketCounter = 1
|
||||
|
||||
/datum/adminTicketHolder/proc/closeAllOpenTickets() // Close all open tickets
|
||||
@@ -79,23 +79,29 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke
|
||||
//Set ticket state with key N to open
|
||||
/datum/adminTicketHolder/proc/openTicket(var/N as num)
|
||||
var/datum/admin_ticket/T = globAdminTicketHolder.allTickets[N]
|
||||
T.ticketState = ADMIN_TICKET_OPEN
|
||||
if(T.ticketState != ADMIN_TICKET_OPEN)
|
||||
T.ticketState = ADMIN_TICKET_OPEN
|
||||
return TRUE
|
||||
|
||||
//Set ticket state with key N to resolved
|
||||
/datum/adminTicketHolder/proc/resolveTicket(var/N as num)
|
||||
var/datum/admin_ticket/T = globAdminTicketHolder.allTickets[N]
|
||||
T.ticketState = ADMIN_TICKET_RESOLVED
|
||||
if(T.ticketState != ADMIN_TICKET_RESOLVED)
|
||||
T.ticketState = ADMIN_TICKET_RESOLVED
|
||||
return TRUE
|
||||
|
||||
//Set ticket state with key N to closed
|
||||
/datum/adminTicketHolder/proc/closeTicket(var/N as num)
|
||||
var/datum/admin_ticket/T = globAdminTicketHolder.allTickets[N]
|
||||
T.ticketState = ADMIN_TICKET_CLOSED
|
||||
if(T.ticketState != ADMIN_TICKET_CLOSED)
|
||||
T.ticketState = ADMIN_TICKET_CLOSED
|
||||
return TRUE
|
||||
|
||||
//List Open Tickets in chat
|
||||
/datum/adminTicketHolder/proc/listOpenTicketsToChat()
|
||||
for(var/T in allTickets)
|
||||
var/datum/admin_ticket/ticket = T
|
||||
message_admins("<span class='adminticket'>Ticket #[ticket.ticketNum]: Opened by [ticket.clientName] at [ticket.timeOpened]: [ticket.content]</span>")
|
||||
message_adminTicket("<span class='adminticket'>Ticket #[ticket.ticketNum]: Opened by [ticket.clientName] at [ticket.timeOpened]: [ticket.content]</span>")
|
||||
|
||||
//Check if the user already has a ticket open and within the cooldown period.
|
||||
/datum/adminTicketHolder/proc/checkForOpenTicket(var/client/C)
|
||||
@@ -104,6 +110,11 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke
|
||||
return T
|
||||
return FALSE
|
||||
|
||||
//return the client of a ticket number
|
||||
/datum/adminTicketHolder/proc/returnClient(var/N as num)
|
||||
var/datum/admin_ticket/T = globAdminTicketHolder.allTickets[N]
|
||||
return T.clientName
|
||||
|
||||
//Single admin ticket
|
||||
|
||||
/datum/admin_ticket
|
||||
@@ -122,10 +133,10 @@ var/global/datum/adminTicketHolder/globAdminTicketHolder = new /datum/adminTicke
|
||||
/datum/admin_ticket/proc/beginStaleCount()
|
||||
if(!src)
|
||||
return
|
||||
while(world.time < timeUntilStale)
|
||||
while(world.time < timeUntilStale && !lastAdminResponse)
|
||||
sleep(200)
|
||||
if(ticketState == ADMIN_TICKET_OPEN && world.time > timeUntilStale)
|
||||
message_admins("<span class='adminticket'>Ticket #[ticketNum] has been open for [ADMIN_TICKET_TIMEOUT * 0.1] seconds. Changing status to stale.</span>")
|
||||
message_adminTicket("<span class='adminticket'>Ticket #[ticketNum] has been open for [ADMIN_TICKET_TIMEOUT * 0.1] seconds. Changing status to stale.</span>")
|
||||
ticketState = ADMIN_TICKET_STALE
|
||||
break
|
||||
|
||||
|
||||
@@ -59,9 +59,11 @@
|
||||
dat += "<h4>Ticket Status: <font color='red'>[status]</font>"
|
||||
dat += "<p>[T.content]</p>"
|
||||
|
||||
dat += "<a href='?src=[UID()];reopen=[T.ticketNum]'>Re-Open</a><a href='?src=[UID()];resolve=[T.ticketNum]'>Resolve</a><a href='?src=[UID()];close=[T.ticketNum]'>Close</a>"
|
||||
|
||||
dat += "<b>Last Admin Response:</b> [T.lastAdminResponse] at [T.lastResponseTime]"
|
||||
dat += "<a href='?src=[UID()];detailreopen=[T.ticketNum]'>Re-Open</a><a href='?src=[UID()];detailresolve=[T.ticketNum]'>Resolve</a><a href='?src=[UID()];detailclose=[T.ticketNum]'>Close</a><br />"
|
||||
if(T.lastAdminResponse)
|
||||
dat += "<b>Last Admin Response:</b> [T.lastAdminResponse] at [T.lastResponseTime]"
|
||||
else
|
||||
dat +="<font color='red'>No Admin Response</font>"
|
||||
|
||||
var/datum/browser/popup = new(usr, "adminticketsdetail", "Admin Ticket #[T.ticketNum]", 800, 600)
|
||||
popup.set_content(dat)
|
||||
@@ -95,19 +97,38 @@
|
||||
|
||||
if(href_list["resolve"])
|
||||
var/indexNum = text2num(href_list["resolve"])
|
||||
globAdminTicketHolder.resolveTicket(indexNum)
|
||||
message_admins("<span class='adminticket'>[usr.client] / ([usr]) resolved admin ticket number [indexNum]</span>")
|
||||
showUI(usr)
|
||||
return
|
||||
if(globAdminTicketHolder.resolveTicket(indexNum))
|
||||
message_adminTicket("<span class='adminticket'>[usr.client] / ([usr]) resolved admin ticket number [indexNum]</span>")
|
||||
to_chat(returnClient(indexNum), "<span class='adminticket'>Your admin ticket has now been resolved.</span>")
|
||||
showUI(usr)
|
||||
|
||||
if(href_list["close"])
|
||||
var/indexNum = text2num(href_list["close"])
|
||||
globAdminTicketHolder.closeTicket(indexNum)
|
||||
message_admins("<span class='adminticket'>[usr.client] / ([usr]) closed admin ticket number [indexNum]</span>")
|
||||
showUI(usr)
|
||||
return
|
||||
if(globAdminTicketHolder.closeTicket(indexNum))
|
||||
message_adminTicket("<span class='adminticket'>[usr.client] / ([usr]) closed admin ticket number [indexNum]</span>")
|
||||
to_chat(returnClient(indexNum), "<font color='red' size='4'><b>- AdminHelp Rejected! -</b></font>")
|
||||
to_chat(returnClient(indexNum), "<span class='adminticket'>Please try to be calm, clear, and descriptive in admin helps, do not assume the admin has seen any related events, and clearly state the names of anybody you are reporting. If you asked a question, please ensure it was clear what you were asking.</span>")
|
||||
to_chat(returnClient(indexNum), "<span class='adminticket'>Your ticket has now been closed.</span>")
|
||||
showUI(usr)
|
||||
|
||||
else if(href_list["reopen"])
|
||||
var/indexNum = text2num(href_list["reopen"])
|
||||
globAdminTicketHolder.openTicket(indexNum)
|
||||
message_admins("<span class='adminticket'>[usr.client] / ([usr]) re-opened admin ticket number [indexNum]</span>")
|
||||
if(href_list["detailresolve"])
|
||||
var/indexNum = text2num(href_list["detailresolve"])
|
||||
if(globAdminTicketHolder.resolveTicket(indexNum))
|
||||
message_adminTicket("<span class='adminticket'>[usr.client] / ([usr]) resolved admin ticket number [indexNum]</span>")
|
||||
to_chat(returnClient(indexNum), "<span class='adminticket'>Your admin ticket has now been resolved.</span>")
|
||||
showDetailUI(usr, indexNum)
|
||||
|
||||
if(href_list["detailclose"])
|
||||
var/indexNum = text2num(href_list["detailclose"])
|
||||
if(globAdminTicketHolder.closeTicket(indexNum))
|
||||
message_adminTicket("<span class='adminticket'>[usr.client] / ([usr]) closed admin ticket number [indexNum]</span>")
|
||||
to_chat(returnClient(indexNum), "<font color='red' size='4'><b>- AdminHelp Rejected! -</b></font>")
|
||||
to_chat(returnClient(indexNum), "<span class='boldmessage'>Please try to be calm, clear, and descriptive in admin helps, do not assume the admin has seen any related events, and clearly state the names of anybody you are reporting. If you asked a question, please ensure it was clear what you were asking.</span>")
|
||||
to_chat(returnClient(indexNum), "<span class='adminticket'>Your ticket has now been closed.</span>")
|
||||
showDetailUI(usr, indexNum)
|
||||
|
||||
if(href_list["detailreopen"])
|
||||
var/indexNum = text2num(href_list["detailreopen"])
|
||||
if(globAdminTicketHolder.openTicket(indexNum))
|
||||
message_adminTicket("<span class='adminticket'>[usr.client] / ([usr]) re-opened admin ticket number [indexNum]</span>")
|
||||
showDetailUI(usr, indexNum)
|
||||
@@ -26,6 +26,12 @@
|
||||
message_admins("[key_name_admin(usr)] rejected [key_name_admin(C.mob)]'s admin help")
|
||||
log_admin("[key_name(usr)] rejected [key_name(C.mob)]'s admin help")
|
||||
|
||||
if(href_list["openadminticket"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
var/ticketID = text2num(href_list["openadminticket"])
|
||||
globAdminTicketHolder.showDetailUI(usr, ticketID)
|
||||
|
||||
if(href_list["stickyban"])
|
||||
stickyban(href_list["stickyban"],href_list)
|
||||
|
||||
|
||||
@@ -115,7 +115,8 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
to_chat(X, msg)
|
||||
if("Adminhelp")
|
||||
msg = "<span class='adminhelp'>[selected_type]: </span><span class='boldnotice'>[key_name(src, 1, 1, selected_type)] (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[mob.UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(mob)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>) (<A HREF='?_src_=holder;rejectadminhelp=[ref_client]'>REJT</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""] (<A HREF='?_src_=holder;take_question=[mob.UID()]'>TAKE</A>) :</span> <span class='adminhelp'>[msg]</span>"
|
||||
var/ticketNum = globAdminTicketHolder.getTicketCounter()
|
||||
msg = "<span class='adminhelp'>[selected_type]: </span><span class='boldnotice'>[key_name(src, 1, 1, selected_type)] (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[mob.UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(mob)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>) (<A HREF='?_src_=holder;openadminticket=[ticketNum]'>TICKET</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""] :</span> <span class='adminhelp'>[msg]</span>"
|
||||
for(var/client/X in modholders + adminholders)
|
||||
if(X.prefs.sound & SOUND_ADMINHELP)
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
|
||||
Reference in New Issue
Block a user