Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Votekick functionality #32005

Open
wants to merge 12 commits into
base: master
Choose a base branch
from

Conversation

SlamBamActionman
Copy link
Member

@SlamBamActionman SlamBamActionman commented Sep 9, 2024

About the PR

This PR adds the ability for trusted users to initiate a votekick against problematic players, for which other users that meet a total playtime threshold can participate and vote on. If a votekick is successful the target player will be temporarily banned for a short duration.

This functionality is only available when no admins are online, and is meant to supplement admin enforcement by temporarily remove a problem player until an admin can review and process appropriate actions.

The Votekick option is found under the Call Vote option in the player menu. The following requirements must be met to be able to initiate a votekick:

  • The user must be whitelisted (this requirement will likely be replaced by a separate player list in the future)
  • The user must be a ghost/observer
  • The user must have been a ghost/observer for at least 3 minutes
  • There must be at least 10 eligible players online that can vote.

To be eligible to vote on a votekick, the criteria below must have been met. If you are not eligible, the vote does not show up for your client. Votekicks do not show the vote count for the available options (unless you are an admin), and there is a button to teleport to the user being targetted for the votekick.

  • The user must have over 20 hours total playtime.
  • The user must be a ghost/observer
  • The user must have been a ghost/observer for at least 3 minutes

When initiating a votekick, you are given a list of all players currently in the round. You also have the option to follow the selected player to ensure you are votekicking the correct player and not someone just impersonating someone else. You must then provide one of three reasons for the votekick:

  • Raiding
  • Cheating
  • Spamming

Abuse of the votekicking system is a heavily punishable offense.

Why / Balance

While the ideal scenario for SS14 would be to have 24/7 coverage of admins on all servers, in reality this is very resource-intensive to achieve. This votekick system is meant to give players an option to deal with highly problematic players when admins are not online - essentially provide a stopgap until an admin can log on and resolve the issue.

For a votekick to pass, there must be 60% Yes votes (Abstain votes are not counted). If a votekick passes, the player is banned for 3 hours.

The votekick feature is meant to only deal with players who are blatantly breaking core rules of the game. This is why only the options Raiding, Cheating and Spamming are available, as grayzone issues like "powergaming", "self-antagging" and "metagaming" are more subjective and often less malicious. To prevent real antags who are a bit too murderbone-happy from being kicked for "raiding", any antag with 10+ hours of playtime is immune from the Raiding votetype.

  • Players eligible for antag protection still show up in the votekick player list and the vote still goes active, but nothing happens when the vote completes.
  • Admins do not show up in the votekick player list and are of course immune to votekicks.
  • Deadmins do show up in the votekick player list, but are immune to votekicks (nothing happens when the vote completes).
  • If an admin is online, the vote still goes active, but nothing happens when the vote completes.

Please keep in mind that the values listed are cvars and can be edited by admins. Please do not let the discussion get bogged down in whether 60% or 80% is the correct threshold for a votekick to pass. That is up to the admins to decide.

Technical details

Hoo boy where to start.

The votekick system is relying on the existing createvote system to create default votes. When the menu is first opened the server is queried whether the player is allowed to make a votekick, and if they are the UI presents the options to the player once they select the votekick option. There's a bunch of querying different systems to check eligibility and get names.

VoterEligibility is a new struct that can be used to set whether a vote should only show to a certain subset of players. Currently only All, Ghost and GhostMinimumPlaytime exists.

IVoteHandle on the server also keeps track of the cast votes, to include the player votes in the admin log. This functionality could also be used for a separate system to track and display vote results.

The way entity systems are being checked in VoteManager.DefaultVotes is probably scuffed.

The UI is functional but not the best, but since I am completely unfamiliar with RT's UI conventions I am opening up the floor to having the UI improved in a subsequent PR.

Media

Create vote menu when eligible to initiate a vote:
image

Create vote menu when not eligible to initiate a vote:
image

How the vote looks like (admin view! Normal users do not see the vote count):
image

Admin client left, alive player client right (alive player client does not get the vote):
image

Messages from votes:
image
image
image

Cvars:
image

Admin logger:
image

Requirements

Breaking changes

Changelog

🆑

  • add: Trusted players can now initiate votekicks for serious rulebreaks, when admins are unavailable.

@github-actions github-actions bot added the Changes: UI Can be reviewed or fixed by people who are knowledgeable with UI design label Sep 9, 2024
@Dutch-VanDerLinde
Copy link
Contributor

CHANGELOG FAIL

@SlamBamActionman
Copy link
Member Author

CHANGELOG FAIL

image

@lzk228
Copy link
Contributor

lzk228 commented Sep 9, 2024

it feels kinda odd that you should be a ghost, because you can spot a raider while being a passenger or secoff and you just have to rely on ghosts

@slarticodefast
Copy link
Member

I think the vote kick menu info text should tell the voters about the fact that antags cannot be vote kicked:

  • Players might be unsure if someone should be vote kicked because they don't know if they are a self-antag or not. This would allow them to vote, even when in doubt.
  • Players might think the vote kick system is broken due to lack of feedback.

@SlamBamActionman
Copy link
Member Author

SlamBamActionman commented Sep 9, 2024

it feels kinda odd that you should be a ghost, because you can spot a raider while being a passenger or secoff and you just have to rely on ghosts

I glossed it over in the PR description but the reason we want you to have to be a ghost is because:
a) You need to get a list of players in the round in the dropdown to select who to votekick.
b) Impersonation is part of the gameplay, which ghosts are able to see through. Active players can't, and raiders tend to steal IDs.
c) As a player you have more limitations for your knowledge. A ghost can call other ghosts to follow the suspected raider and explain the situation without being hindered by gameplay (following is even part of the vote pop-up), but this is not possible for an active player.

@0x6273
Copy link
Contributor

0x6273 commented Sep 9, 2024

Ghost requirement should probably be a cvar

@Plykiya
Copy link
Contributor

Plykiya commented Sep 9, 2024

a text field so they can write more info about what the person is being votekicked for?

@ArtisticRoomba
Copy link
Contributor

ArtisticRoomba commented Sep 9, 2024

A cvar to hide the vote counts to prevent dogpiling might be nice. I believe there's a PR open right now that adds the option to hide vote counts.

Another suggestion: maybe allow whitelisted players over a certain amount of hours to vote, even if they're in the round. Most whitelisted players in wizden can separate IC/OOC enough to vote on a person to be booted. This would curb the 10 ghosts problem a little bit.

Although, voting might involve a lot of OOC information when coming from a person in the round. Just a suggestion.

@PopGamer45
Copy link
Contributor

A cvar to hide the vote counts to prevent dogpiling might be nice. I believe there's a PR open right now that adds the option to hide vote counts.

The vote counts already show up only to admins.

How the vote looks like (admin view! Normal users do not see the vote count):

@ArtisticRoomba
Copy link
Contributor

(You know, maybe I should actually read the PR a little bit more instead of speeding through it, lmao)

@Everturning
Copy link

Everturning commented Sep 9, 2024

should defo allow people ingame to report, but maybe make it a verb menu action you get when rightclicking the problem player

@whateverusername0
Copy link
Contributor

this will 100% will not be abused in any way whatsoever :trollface:
million traitors must be votekicked

@ArtisticRoomba
Copy link
Contributor

Antags can't be vote kicked
And shrimply ban the people that abuse it

@retequizzle
Copy link
Contributor

retequizzle commented Sep 9, 2024

would like to see increases across the board for timers, we can relax them further down the line once it's been rolled out to a theoretically smaller group since whitelist is currently just "has this player been a pain in the ass from an administrative standpoint within the last month/several weeks and how old is their account" (there is a bit more to it but i'm summarizing).

  • increase time requirement from 10 hours to 20 (in theory this would at least cast a more direct net on players more likely to have some sort of command role experience through sheer playtime and have a sharper expectation of what is and isn't permissible)
  • ghost only makes sense due to information the player is provided or has access to within the menus proposed
  • total online player count seems reasonable
  • relax ghost duration from 5 minutes to 3 minutes

@PunishedHideo
Copy link

so basicaly cs 1.6

@SlamBamActionman
Copy link
Member Author

Ghost requirement should probably be a cvar

Implemented. I am not implementing a verb menu to start a vote or anything since that is a lot of extra work for something that is not going to be used upstream, so as-is this system would allow non-ghosts to see all active players from the vote menu if votekick.initiator_ghost_requirement is false.
votekick.voter_ghost_requirement is a separate Cvar and can be used in conjunction with the playtime and whitelist requirements to let trusted non-ghosts vote.

To summarize, nothing has changed with the ghost requirements, but now they have cvars.

increase time requirement from 10 hours to 20
relax ghost duration from 5 minutes to 3 minutes

Done.

@deltanedas
Copy link
Contributor

imo only ghosts should be calling votes since they know who the shitter really is, but anyone should be able to vote. if you see the raider you have to let him kill you to vote him out which is silly, it should just let any trusted player vote regardless of alive/dead, let them trust the vote caller is using their ghost information for good and not lying about who the raider is

@SlamBamActionman
Copy link
Member Author

let them trust the vote caller is using their ghost information for good and not lying about who the raider is

I want to avoid players voting blindly and just assuming the person initiating the vote is right. As a ghost you can warp to the problem player and see yourself.

if you see the raider you have to let him kill you to vote him out which is silly

I agree! I don't like it much, and it feels like a compromise. But on the other hand if you are alive you can kill the bastard. ;)

@mirrorcult
Copy link
Contributor

if the votekick fails the user that called the votekick should be banned instead :trollface:

@SlamBamActionman
Copy link
Member Author

SlamBamActionman commented Sep 21, 2024

Cvar for votekick eligibility is raised to 100 based on admin discussion on Discord.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Changes: UI Can be reviewed or fixed by people who are knowledgeable with UI design
Projects
None yet
Development

Successfully merging this pull request may close these issues.