Files
Paradise/code/modules/mob/dead/observer/observer_admin_actions.dm
warriorstar-orion 56f4960ed4 refactor action buttons (#29416)
* refactor action buttons

* fix cult spell charge overlay

* lewc review

* update for a/mhelp buttons and xenobio organs

* update for minebot

* properly create button each time

* directly add/remove unavail overlay for reasons

* lewc review
2025-07-28 19:13:28 +00:00

80 lines
2.8 KiB
Plaintext

/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_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_icon_state = "adminhelp"
var/mutable_appearance/button_text
var/ticket_amt = 0
/datum/action/innate/admin/ticket/New(Target)
button_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))
SStickets.open_ticket_count_updated() // update the starting count
/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_icon_state = initial(button_icon_state)
else
button_icon_state = "nohelp"
build_all_button_icons(force = TRUE)
/datum/action/innate/admin/ticket/apply_button_overlay(atom/movable/screen/movable/action_button/button, force)
. = ..()
// TODO: We need a generic way to handle button text for actions bc this is atrocious
// Yes cutting and adding the overlay each time is required
button.cut_overlay(button_text)
button_text = mutable_appearance('icons/effects/effects.dmi', icon_state = "nothing")
button_text.appearance_flags = RESET_COLOR | RESET_ALPHA
button_text.plane = FLOAT_PLANE + 1
button_text.maptext_x = 2
button_text.maptext = ticket_amt > 0 ? "<span class='maptext'>[ticket_amt]</span>" : ""
button.add_overlay(button_text)
/datum/action/innate/admin/ticket/mentor
name = "Mentorhelps"
button_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))
SSmentor_tickets.open_ticket_count_updated() // update the starting count
/datum/action/innate/admin/ticket/mentor/admin_click(mob/user)
SSmentor_tickets.showUI(user)