From fa0d602da64dd87f51955bcdd99d839437d2a1f0 Mon Sep 17 00:00:00 2001 From: Yaroslav Nurkov <78199449+AnywayFarus@users.noreply.github.com> Date: Sat, 13 Jul 2024 01:47:51 +0300 Subject: [PATCH] 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: --- 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 eb5684252f8..fb7bc16cf24 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 949751f2226..9de9b2b3a05 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 && ( -