RU/Resource:Votemanager
Этот скрипт управляет любыми опросами с различными вариантами ответов. 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>