forked from https://github.com/rubenwardy/vote
Andrey Stepanov
f9f32d2e1c
Игрок с привилегией `vote_admin` сможет добавлять игроков в специальный список игнорирования. Процедура голосования не будет дожидаться, когда проголосуют эти игроки. Сейчас, когда мы голосуем за день, приходится дожидаться тайм-аута, потому что NashiTut_Bot в голосованиях не участвует. Если же этого бота добавить в список игнорирования, то голосование завершится сразу, как проголосуют все реальные игроки. Игроку с привилегией `vote_admin` доступны следующие команды: `/vote_ignored`: вывести список игнорируемых игроков `/vote_ignore <PlayerName>...`: добавить в список игроков Co-authored-by: Aleksandr Avdeev <reload-gtn@mail.ru> Reviewed-on: #1 Co-authored-by: Andrey Stepanov <standmit@yandex.ru> Co-committed-by: Andrey Stepanov <standmit@yandex.ru> |
||
---|---|---|
textures | ||
description.txt | ||
hudkit.lua | ||
init.lua | ||
mod.conf | ||
README.md | ||
screenshot.png |
Vote
A mod for Minetest adding an API to allow voting on servers.
Created by rubenwardy
Copyright (c) 2015, no rights reserved
Licensed under WTFPL or CC0 (you choose)
Settings
- vote.maximum_active - maximum votes running at a time, votes are queued if it reaches this. Defaults to 1.
Example
local function start_kick_vote(name, param)
if not minetest.get_player_by_name(param) then
minetest.chat_send_player(name, "There is no player called '" ..
param .. "'")
end
vote.new_vote(name, {
description = "Kick player " .. param,
help = "/yes, /no or /abstain",
name = param,
duration = 60,
on_result = function(self, result, results)
if result == "yes" then
minetest.chat_send_all("Vote passed, " ..
#results.yes .. " to " .. #results.no .. ", " ..
self.name .. " will be kicked.")
minetest.kick_player(self.name, "The vote to kick you passed")
else
minetest.chat_send_all("Vote failed, " ..
#results.yes .. " to " .. #results.no .. ", " ..
self.name .. " remains ingame.")
end
end,
on_vote = function(self, name, value)
minetest.chat_send_all(name .. " voted " .. value .. " to '" ..
self.description .. "'")
end
})
end
minetest.register_chatcommand("vote_kick", {
privs = {
interact = true
},
func = start_kick_vote
})
API
Results
- voted - a key-value table. voted[name] = true if a player called name voted.
- abstain - a list of the names of players who abstained.
- - a list of the names of players who voted for this option.
For example:
results = {
voted = {
one = true,
two = true,
three = true,
four = true
}
yes = {"one", "three"},
no = {"two"}
abstain = {"four"}
}
Values
- description - required.
- help - recommended. How to respond to the vote.
- duration - the duration of the vote, before it expires.
- perc_needed - if yes/no, this is the percentage needed to pass.
- options - a list of possible options. (not fully supported yet)
Methods
- can_vote(self, name) - return true if player
name
can vote on this issue. - on_start(self) - called when vote starts. Return false to cancel.
- on_decide(self, results) - see results section. Return the winning result.
- on_result(self, result, results) - when vote ends, result is the winning result
- on_vote(self, name, value) - called when a player casts a vote
- on_abstain(self, name) - called when a player abstains