mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-29 15:08:02 +01:00
Adds buttons for admins/mentors to see amount of open adminhelp/mentorhelp tickets. (#29498)
* wham * fix
This commit is contained in:
@@ -134,3 +134,5 @@
|
||||
|
||||
/// from base of /datum/ruleset/proc/can_apply()
|
||||
#define COMSIG_RULESET_FAILED_SPECIES "failed_species"
|
||||
|
||||
#define COMSIGN_TICKET_COUNT_UPDATE "ticket_count_updated"
|
||||
|
||||
@@ -187,6 +187,7 @@ SUBSYSTEM_DEF(tickets)
|
||||
SEND_SOUND(C, sound('sound/effects/adminticketopen.ogg'))
|
||||
|
||||
message_staff(url_title, NONE, TRUE)
|
||||
open_ticket_count_updated()
|
||||
return T
|
||||
|
||||
//Set ticket state with key N to open
|
||||
@@ -197,6 +198,7 @@ SUBSYSTEM_DEF(tickets)
|
||||
sendFollowupToDiscord(T, usr.client, "*Ticket reopened.*")
|
||||
to_chat_safe(returnClient(N), "<span class='[span_class]'>Your [ticket_name] has been re-opened.</span>")
|
||||
T.ticketState = TICKET_OPEN
|
||||
open_ticket_count_updated()
|
||||
return TRUE
|
||||
|
||||
//Set ticket state with key N to resolved
|
||||
@@ -207,6 +209,7 @@ SUBSYSTEM_DEF(tickets)
|
||||
message_staff("<span class='[span_class]'>[usr.client] / ([usr]) resolved [ticket_name] number [N]</span>")
|
||||
sendFollowupToDiscord(T, usr.client, "*Ticket resolved.*")
|
||||
to_chat_safe(returnClient(N), "<span class='[span_class]'>Your [ticket_name] has now been resolved.</span>")
|
||||
open_ticket_count_updated()
|
||||
return TRUE
|
||||
|
||||
/datum/controller/subsystem/tickets/proc/refresh_tickets(list/tickets)
|
||||
@@ -271,6 +274,7 @@ SUBSYSTEM_DEF(tickets)
|
||||
message_staff("<span class='[span_class]'>[C] has converted ticket number [T.ticketNum] to a [other_ticket_name] ticket.</span>")
|
||||
log_game("[C] has converted ticket number [T.ticketNum] to a [other_ticket_name] ticket.")
|
||||
create_other_system_ticket(T)
|
||||
open_ticket_count_updated()
|
||||
|
||||
/datum/controller/subsystem/tickets/proc/create_other_system_ticket(datum/ticket/T)
|
||||
var/client/C = get_client_by_ckey(T.client_ckey)
|
||||
@@ -326,6 +330,7 @@ SUBSYSTEM_DEF(tickets)
|
||||
sendFollowupToDiscord(T, usr.client, "*Ticket closed.*")
|
||||
to_chat_safe(returnClient(N), close_messages)
|
||||
T.ticketState = TICKET_CLOSED
|
||||
open_ticket_count_updated()
|
||||
return TRUE
|
||||
|
||||
//Check if the user already has a ticket open and within the cooldown period.
|
||||
@@ -827,6 +832,13 @@ UI STUFF
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/controller/subsystem/tickets/proc/open_ticket_count_updated()
|
||||
var/ticket_count = 0
|
||||
for(var/datum/ticket/T in allTickets)
|
||||
if(T.ticketState == TICKET_OPEN || T.ticketState == TICKET_STALE)
|
||||
ticket_count++
|
||||
SEND_SIGNAL(src, COMSIGN_TICKET_COUNT_UPDATE, ticket_count)
|
||||
|
||||
#undef TICKET_STAFF_MESSAGE_ADMIN_CHANNEL
|
||||
#undef TICKET_STAFF_MESSAGE_PREFIX
|
||||
|
||||
|
||||
@@ -929,6 +929,9 @@ GLOBAL_LIST_INIT(view_runtimes_verbs, list(
|
||||
log_admin("[key_name(usr)] re-adminned themselves.")
|
||||
GLOB.de_admins -= ckey
|
||||
GLOB.de_mentors -= ckey
|
||||
if(istype(mob, /mob/dead/observer))
|
||||
var/mob/dead/observer/O = mob
|
||||
O.update_admin_actions()
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Re-admin")
|
||||
return
|
||||
else
|
||||
|
||||
@@ -148,7 +148,10 @@ you will have to do something like if(client.holder.rights & R_ADMIN) yourself.
|
||||
if(holder)
|
||||
holder.disassociate()
|
||||
qdel(holder)
|
||||
return 1
|
||||
if(istype(mob, /mob/dead/observer))
|
||||
var/mob/dead/observer/O = mob
|
||||
O.update_admin_actions()
|
||||
return TRUE
|
||||
|
||||
//This proc checks whether subject has at least ONE of the rights specified in rights_required.
|
||||
/proc/check_rights_for(client/subject, rights_required)
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
/mob/dead/observer/proc/update_admin_actions()
|
||||
for(var/datum/action/innate/admin/action in actions)
|
||||
if(!check_rights(action.rights_required, FALSE, src))
|
||||
qdel(action)
|
||||
if(!client || !client.holder)
|
||||
return
|
||||
if(ckey && (ckey in (GLOB.de_admins + GLOB.de_mentors)))
|
||||
return
|
||||
|
||||
for(var/datum/action/innate/admin/action as anything in subtypesof(/datum/action/innate/admin))
|
||||
if(check_rights(action.rights_required, FALSE, src))
|
||||
var/datum/action/innate/admin/given_action = new action()
|
||||
given_action.Grant(src)
|
||||
|
||||
/datum/action/innate/admin
|
||||
button_overlay_icon = 'icons/mob/actions/actions_admin.dmi'
|
||||
var/rights_required = R_ADMIN
|
||||
|
||||
/datum/action/innate/admin/Trigger()
|
||||
if(!..())
|
||||
return FALSE
|
||||
if(!check_rights(rights_required, TRUE, usr))
|
||||
return
|
||||
admin_click(usr)
|
||||
|
||||
/datum/action/innate/admin/proc/admin_click(mob/user)
|
||||
return
|
||||
|
||||
/datum/action/innate/admin/ticket
|
||||
name = "Adminhelps"
|
||||
desc = "There are 0 open tickets."
|
||||
button_overlay_icon_state = "adminhelp"
|
||||
var/ticket_amt = 0
|
||||
|
||||
/datum/action/innate/admin/ticket/New(Target)
|
||||
button_overlay_icon_state = "nohelp"
|
||||
. = ..()
|
||||
register_ticket_signals()
|
||||
|
||||
/datum/action/innate/admin/ticket/admin_click(mob/user)
|
||||
SStickets.showUI(user)
|
||||
|
||||
/datum/action/innate/admin/ticket/proc/register_ticket_signals()
|
||||
RegisterSignal(SStickets, COMSIGN_TICKET_COUNT_UPDATE, PROC_REF(update_tickets))
|
||||
|
||||
/datum/action/innate/admin/ticket/proc/update_tickets(ticketsystem, _ticket_amt)
|
||||
ticket_amt = _ticket_amt
|
||||
desc = "There are [ticket_amt] open tickets."
|
||||
if(ticket_amt > 0)
|
||||
button_overlay_icon_state = initial(button_overlay_icon_state)
|
||||
else
|
||||
button_overlay_icon_state = "nohelp"
|
||||
UpdateButtons()
|
||||
|
||||
/datum/action/innate/admin/ticket/UpdateButton(atom/movable/screen/movable/action_button/button, status_only, force)
|
||||
. = ..()
|
||||
if(ticket_amt <= 0)
|
||||
return
|
||||
var/image/maptext_holder = image('icons/effects/effects.dmi', icon_state = "nothing")
|
||||
maptext_holder.plane = FLOAT_PLANE + 1.1
|
||||
maptext_holder.maptext = "<span class='maptext'>[ticket_amt]</span>"
|
||||
maptext_holder.maptext_x = 2
|
||||
button.add_overlay(maptext_holder)
|
||||
|
||||
/datum/action/innate/admin/ticket/mentor
|
||||
name = "Mentorhelps"
|
||||
button_overlay_icon_state = "mentorhelp"
|
||||
rights_required = R_MENTOR|R_ADMIN
|
||||
|
||||
/datum/action/innate/admin/ticket/mentor/register_ticket_signals()
|
||||
RegisterSignal(SSmentor_tickets, COMSIGN_TICKET_COUNT_UPDATE, PROC_REF(update_tickets))
|
||||
|
||||
/datum/action/innate/admin/ticket/mentor/admin_click(mob/user)
|
||||
SSmentor_tickets.showUI(user)
|
||||
@@ -10,3 +10,4 @@
|
||||
if(GLOB.non_respawnable_keys[ckey])
|
||||
can_reenter_corpse = 0
|
||||
REMOVE_TRAIT(src, TRAIT_RESPAWNABLE, GHOSTED)
|
||||
update_admin_actions()
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
cleanup_observe()
|
||||
|
||||
..()
|
||||
update_admin_actions()
|
||||
spawn(0)
|
||||
if(src && !key) //we've transferred to another mob. This ghost should be deleted.
|
||||
qdel(src)
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
@@ -2342,6 +2342,7 @@
|
||||
#include "code\modules\mob\camera\eye\syndicate.dm"
|
||||
#include "code\modules\mob\camera\eye\xenobio_eye.dm"
|
||||
#include "code\modules\mob\dead\dead.dm"
|
||||
#include "code\modules\mob\dead\observer\observer_admin_actions.dm"
|
||||
#include "code\modules\mob\dead\observer\observer_base.dm"
|
||||
#include "code\modules\mob\dead\observer\observer_login.dm"
|
||||
#include "code\modules\mob\dead\observer\observer_logout.dm"
|
||||
|
||||
Reference in New Issue
Block a user