RU/Resource:Votemanager

From Multi Theft Auto: Wiki
Revision as of 03:05, 1 April 2016 by Ccw (talk | contribs) (Reverted edits by Bonzo (talk) to last revision by Vincent)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Этот скрипт управляет любыми опросами с различными вариантами ответов. votemap, votekick, votekill и voteban встроены.

Встроенные опросы

votemap (начинает голосование за выбранные случайным образом карты (до 9), совместимые с модом, если он запущен)

votemap gamemode (начинает голосование за выбранные случайным образом карты (до 9), совместимые с указанным модом)

votemap gamemode map (начинает голосование за указанные мод и карту)

votemap map (начинает голосование за смену карты, если таковая запущена, на указанную)

votemode (начинает голосование за выбранные случайным образом моды (до 9). по окончании голосования и старте мода, атоматичсеки начинается 'votemap gamemode')

votekick player (начинает голосование за кик указанного игрока)

votekill player (начинает голосование за убийство указанного игрока сервером)

voteban player (начинает голосование за бан указанного игрока)

Серверные функции

startPoll

bool, int startPoll ( table pollData )

Создает опрос. Возвращает true при успешном создании, в противном случае - false и код ошибки (см. source для кода ошибки).

  • pollData таблица, содержащая настройки опроса и массив из как минимум двух опций. Каждая опция указывается по такой форме:
{
string optionName,
string eventToTrigger,
[element triggerFrom = getRootElement()],
default = [bool isDefaultOption = false],
var argument1,
var argument2,
...
}

Выбранная опция вызовет eventToTrigger от элемента triggerFrom с параметрами arguments... по окончании опроса.

Если голосов недостаточно, будет выполнена опция по умолчанию, если таковая имеется.

Образец:

local playerToKill = getRandomPlayer()
local notEnoughVotesMessage = "Not enough votes to kill "..getPlayerName(playerToKill).."."
startPoll {
   --start settings (dictionary part)
   title="Kill "..getPlayerName(playerToKill).."?",
   percentage=75,
   timeout=30,
   allowchange=false,
   maxnominations=3,
   visibleTo=getRootElement(),
   --start options (array part)
   [1]={"Yes", "doKillPlayer", playerToKill},
   [2]={"No", "doOutputChatBox", notEnoughVotesMessage, getRootElement(), vR, vG, vB; default=true},
}
  • title (требуется): заголовок опроса, который увидят клиенты на GUI менеджера
  • percentage (опционально, по умолчанию - default.percentage): нужный % для победы опции в номинации
  • timeout (опционально, по умолчанию - default.timeout): время опроса в секундах
  • allowchange (опционально, по умолчанию - default.allowchange): отвечает за возможность изменять свой голос
  • maxnominations (опционально, по умолчанию - default.maxnominations): отвечает за максимальное количество номинаций в случае ничьи
  • visibleTo (опционально, по умолчанию - getRootElement()): таблица игроков, которым будет виден опрос, или элемент, который содержит игроков.

Если это root (корень), игроки, зашедшие уже после старта опроса смогут проголосовать.

Умолчания из voteconfig.xml будут использованы для пропущенных опциональных параметров.

stopPoll

bool, int stopPoll ( )

Останаваливает запущенный опрос. Возвращает true, если опрос был успешно остановлен, иначе - false.

voteMap

bool, int voteMap ( string mapName )

Стартует голосование за карту. Возвращает true, если опрос успешно стартовал, иначе - false и код ошибки.

voteBetweenMaps

bool, int voteBetweenMaps ( resource map1, resource map2, [ resource map3, ... ] )

Стартует голосование между картами. Возвращает true, если опрос успешно стартовал, иначе - false и код ошибки.

voteKick

bool, int voteKick ( player thePlayer )

Стартует голосование за кик. Возвращает true, если опрос успешно стартовал, иначе - false и код ошибки.

voteKill

bool, int voteKill ( player thePlayer )

Стартует голосование за убийство. Возвращает true, если опрос успешно стартовал, иначе - false и код ошибки.

voteBan

bool, int voteBan ( player thePlayer )

Стартует голосование за бан. Возвращает true, если опрос успешно стартовал, иначе - false и код ошибки.

Серверные события

onPollStarting

void onPollStarting ( table pollData )

Срабатывает перед тем, как опрос начинает стартовать. Позволяет другим ресурсам изменять опрос. Используйте onPollModified, чтобы отозвать опрос.

onPollModified

void onPollModified ( table pollData )

Вы можете использовать ее для отправки опроса с изменениями.

onPollStart

void onPollStart (  )

Срабатывает перед стартом опроса. Отмена отменяет опрос.

onPollStop

void onPollStop (  )

Срабатывает перед остановкой опроса. Отмена предотвращает отмену опроса.

onPollEnd

void onPollEnd ( chosenOption )

Срабатывает по окончании опроса. Отмена не дает никакого эффекта.
chosenOption: Возвращает номер выбранной опции.

onPollDraw

void onPollDraw (  )

Срабатывает, когда опрос оканчивается ничьей. Отмена предотвращает повторные номинации.

onClientSendVote

void onClientSendVote ( int vote )

Срабатывает, когда на сервер посылается голос. client - клиент, отправивший голос. Отмена выливается в игнорирование голоса клиента менеджером.

Настройки по умолчанию

<settings>
	<setting name="*color" value="#DF6464" />
	<setting name="*log_votes" value="[true]" />

	<setting name="*default.timeout" value="[30]"/>
	<setting name="*default.allowchange" value="[false]"/>
	<setting name="*default.percentage" value="[75]"/>
	<setting name="*default.maxnominations" value="[3]"/>

	<setting name="*votemap.enabled" value="[true]"/>
	<setting name="*votemap.timeout" value="[30]"/>
	<setting name="*votemap.locktime" value="[60]"/>
	<setting name="*votemap.percentage" value="[70]"/>
	<setting name="*votemap.allowchange" value="[true]"/>
	
	<setting name="*votekick.enabled" value="[true]"/>
	<setting name="*votekick.timeout" value="[30]"/>
	<setting name="*votekick.locktime" value="[120]"/>
	<setting name="*votekick.percentage" value="[75]"/>
	<setting name="*votekick.allowchange" value="[true]"/>
	
	<setting name="*voteban.enabled" value="[false]"/>
	<setting name="*voteban.timeout" value="[30]"/>
	<setting name="*voteban.locktime" value="[120]"/>
	<setting name="*voteban.percentage" value="[85]"/>
	<setting name="*voteban.allowchange" value="[true]"/>
	
	<setting name="*votekill.enabled" value="[true]"/>
	<setting name="*votekill.timeout" value="[30]"/>
	<setting name="*votekill.locktime" value="[120]"/>
	<setting name="*votekill.percentage" value="[75]"/>
	<setting name="*votekill.allowchange" value="[true]"/>

</settings>