From 5741e1893d54a2f333a2d2a03565efe6ffc66d69 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 13 Jul 2024 11:29:47 +0200 Subject: [PATCH] [MIRROR] Toggle the ability for the dead to vote in-game + understandability for the dead whether voting is disabled. (#28819) * Toggle the ability for the dead to vote in-game + understandability for the dead whether voting is disabled. (#84352) ## About The Pull Request Adds a convenient switch to change the ability to vote dead (previously only in the config), and also turns off the button and adds a tooltip to let players know why they can't vote (previously, you could just click, since the button wasn't turned off, but the vote didn't count). https://github.com/tgstation/tgstation/assets/78199449/404aac9c-0b41-4c16-8ffd-2a435cf25e2c ## Why It's Good For The Game At the right moments, you can just stop considering the opinions of dead players. The dead players will be able to understand why they can't vote. ## Changelog :cl: Vishenka0704 qol: With voting turned off for the dead, you can now understand why you can't vote (being dead). admin: Voting switch for the dead players /:cl: * Toggle the ability for the dead to vote in-game + understandability for the dead whether voting is disabled. --------- Co-authored-by: Yaroslav Nurkov <78199449+AnywayFarus@users.noreply.github.com> --- code/controllers/subsystem/vote.dm | 19 +++++++++++ code/modules/admin/verbs/server.dm | 3 ++ tgui/packages/tgui/interfaces/VotePanel.tsx | 36 +++++++++++++++++---- 3 files changed, 51 insertions(+), 7 deletions(-) diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index b7c26acf375..1c519e8aff1 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -274,6 +274,15 @@ SUBSYSTEM_DEF(vote) return FALSE return TRUE + +/datum/controller/subsystem/vote/proc/toggle_dead_voting(mob/toggle_initiator) + var/switch_deadvote_config = !CONFIG_GET(flag/no_dead_vote) + CONFIG_SET(flag/no_dead_vote, switch_deadvote_config) + var/text_verb = !switch_deadvote_config ? "enabled" : "disabled" + log_admin("[key_name(toggle_initiator)] [text_verb] Dead Vote.") + message_admins("[key_name_admin(toggle_initiator)] [text_verb] Dead Vote.") + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Dead Vote", text_verb)) + /datum/controller/subsystem/vote/ui_state() return GLOB.always_state @@ -293,6 +302,7 @@ SUBSYSTEM_DEF(vote) data["user"] = list( "ckey" = user.client?.ckey, + "isGhost" = CONFIG_GET(flag/no_dead_vote) && user.stat == DEAD && !user.client?.holder, "isLowerAdmin" = is_lower_admin, "isUpperAdmin" = is_upper_admin, // What the current user has selected in any ongoing votes. @@ -377,6 +387,15 @@ SUBSYSTEM_DEF(vote) end_vote() return TRUE + if("toggleDeadVote") + if(!check_rights_for(voter.client, R_ADMIN)) + message_admins("[key_name(voter)] tried to toggle vote abillity for ghosts while having improper rights, \ + this is potentially a malicious exploit and worth noting.") + return + + toggle_dead_voting(voter) + return TRUE + if("toggleVote") var/datum/vote/selected = possible_votes[params["voteName"]] if(!istype(selected)) diff --git a/code/modules/admin/verbs/server.dm b/code/modules/admin/verbs/server.dm index 71000fd310d..e3a66dcd1b3 100644 --- a/code/modules/admin/verbs/server.dm +++ b/code/modules/admin/verbs/server.dm @@ -74,6 +74,9 @@ ADMIN_VERB(toggle_ooc_dead, R_ADMIN, "Toggle Dead OOC", "Toggle the OOC channel message_admins("[key_name_admin(user)] toggled Dead OOC.") SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Dead OOC", "[GLOB.dooc_allowed ? "Enabled" : "Disabled"]")) +ADMIN_VERB(toggle_vote_dead, R_ADMIN, "Toggle Dead Vote", "Toggle the vote for dead players on or off.", ADMIN_CATEGORY_SERVER) + SSvote.toggle_dead_voting(user) + ADMIN_VERB(start_now, R_SERVER, "Start Now", "Start the round RIGHT NOW.", ADMIN_CATEGORY_SERVER) var/static/list/waiting_states = list(GAME_STATE_PREGAME, GAME_STATE_STARTUP) if(!(SSticker.current_state in waiting_states)) diff --git a/tgui/packages/tgui/interfaces/VotePanel.tsx b/tgui/packages/tgui/interfaces/VotePanel.tsx index 2ae1fb8e006..2d135727ba6 100644 --- a/tgui/packages/tgui/interfaces/VotePanel.tsx +++ b/tgui/packages/tgui/interfaces/VotePanel.tsx @@ -43,6 +43,7 @@ type ActiveVote = { type UserData = { ckey: string; + isGhost: BooleanLike; isLowerAdmin: BooleanLike; isUpperAdmin: BooleanLike; singleSelection: string | null; @@ -88,12 +89,24 @@ export const VotePanel = (props) => { title="Create Vote" buttons={ !!user.isLowerAdmin && ( -