Go to file
Andrey Stepanov f9f32d2e1c Список игнорируемых игроков (#1)
Игрок с привилегией `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>
2024-12-09 11:56:59 +03:00
textures Add HUD support 2015-07-16 18:01:57 +01:00
description.txt Create description.txt 2016-03-08 18:24:34 +00:00
hudkit.lua Add HUD support 2015-07-16 18:01:57 +01:00
init.lua Список игнорируемых игроков (#1) 2024-12-09 11:56:59 +03:00
mod.conf Add mod.conf and screenshot.png 2016-05-04 22:32:33 +01:00
README.md Better formatting in README.md 2015-08-12 12:32:40 +01:00
screenshot.png Add mod.conf and screenshot.png 2016-05-04 22:32:33 +01:00

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