We use approval voting to determine the map that is played next. Instead of taking the highest voted map and playing that, we sum the approvals for each map, square them, add one vote to every map, and pick a map randomly with those votes as the bias. Squaring the vote is done to give extra probability to the server favorites, adding one vote is done to add a chance of every map being rolled (for variety), and choosing a map with the bias means that a map with a higher score than another is proportionally more likely to be rolled.
There would be three commands added to make this happen.
mapvote: Opens a menu in chat which allows the player to cast their vote for the next round. Votes are stored by UUID in our database, allowing them to persist over time and making life easier for players. Players would be notified of this fact each time they join.
tempmapvote: Same as mapvote, but only alters the vote for the next round.
abstain: A simplified caller for tempmapvote. Essentially tells the system that the player tempmapvoted for no maps.
After the game ends we would have a 30 second voting period to give players time to cast their votes if they choose to do so.
I think I have a good system that strikes a balance between time and vote accuracy
listMaps lists the maps, of course (and their numeric IDs for ease of entry)
setPreferences sets your map preferences in your personal database entry, will apply on every game you're in. it uses approval voting, so you just tell the server whether or not you like each map and it handles the rest
boostMap essentially just adds some votes to (only one) map of your choosing, and it lasts only one round. Good for if you especially want a particular map at a particular time.
preferences just tells you your current map preferences (and where your boost is going if applicable)
We use approval voting to determine the map that is played next. Instead of taking the highest voted map and playing that, we sum the approvals for each map, square them, add one vote to every map, and pick a map randomly with those votes as the bias. Squaring the vote is done to give extra probability to the server favorites, adding one vote is done to add a chance of every map being rolled (for variety), and choosing a map with the bias means that a map with a higher score than another is proportionally more likely to be rolled.
There would be three commands added to make this happen.
After the game ends we would have a 30 second voting period to give players time to cast their votes if they choose to do so.