RU/Resource:Votemanager: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
(new page)
 
No edit summary
Line 1: Line 1:
{{RU/Resource page}}
{{RU/Resource page}}
__NOTOC__
__NOTOC__
This script manages any kind of poll with multiple options. '''votemap''', '''votekick''', '''votekill''' and '''voteban''' are built in.
Этот скрипт управляет любыми опросами с различными вариантами ответов. '''votemap''', '''votekick''', '''votekill''' и '''voteban''' встроены.
==Built-in polls==
==Встроенные опросы==


'''votemap''' (starts a vote between a random list of up to 9 maps compatible with the current gamemode, if one is running)
'''votemap''' (начинает голосование за выбранные случайным образом карты (до 9), совместимые с модом, если он запущен)


'''votemap gamemode''' (starts a vote between a random list of up to 9 maps compatible with the specified gamemode)
'''votemap gamemode''' (начинает голосование за выбранные случайным образом карты (до 9), совместимые с указанным модом)


'''votemap gamemode map''' (starts a vote to launch the specified gamemode with the specified map)
'''votemap gamemode map''' (начинает голосование за указанные мод и карту)


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


'''votemap map''' (starts a vote to change to another map for the current gamemode, if one is running)
'''votemode''' (начинает голосование за выбранные случайным образом моды (до 9). по окончании голосования и старте мода, атоматичсеки начинается 'votemap gamemode')


'''votemode''' (starts a vote between a random list of up to 9 gamemodes. once the vote is done and a new gamemode is picked, automatically starts 'votemap gamemode')
'''votekick player''' (начинает голосование за кик указанного игрока)


'''votekick player''' (starts a vote to kick the specified player)
'''votekill player''' (начинает голосование за убийство указанного игрока сервером)


'''votekill player''' (starts a vote to kill the specified player)
'''voteban player''' (начинает голосование за бан указанного игрока)


'''voteban player''' (starts a vote to ban the specified player)
==Серверные функции==
 
==Serverside functions==
===startPoll===
===startPoll===
<syntaxhighlight lang="lua">bool, int startPoll ( table pollData )</syntaxhighlight>
<syntaxhighlight lang="lua">bool, int startPoll ( table pollData )</syntaxhighlight>
Creates a poll. Returns ''true'' if the poll was created successfully, ''false'' and an error code otherwise (see the source for error codes).
Создает опрос. Возвращает ''true'' при успешном создании, в противном случае - ''false'' и код ошибки (см. source для кода ошибки).


* '''pollData''' is a table containing poll settings and an array of ''at least two'' options. Each option comes in the form:
* '''pollData''' таблица, содержащая настройки опроса и массив из ''как минимум двух'' опций. Каждая опция указывается по такой форме:
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
{
{
Line 39: Line 37:
}
}
</syntaxhighlight>
</syntaxhighlight>
The chosen option will trigger eventToTrigger from the triggerFrom element with ''arguments...'' as parameters when the poll ends.
Выбранная опция вызовет eventToTrigger от элемента triggerFrom с параметрами ''arguments...'' по окончании опроса.


If there's not enough votes, the default option will be executed if there's one.
Если голосов недостаточно, будет выполнена опция по умолчанию, если таковая имеется.


Example:
Образец:
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
local playerToKill = getRandomPlayer()
local playerToKill = getRandomPlayer()
Line 60: Line 58:
}
}
</syntaxhighlight>
</syntaxhighlight>
*'''title''' (required): the poll title which will be seen by clients on the manager GUI
*'''title''' (требуется): заголовок опроса, который увидят клиенты на GUI менеджера
*'''percentage''' (optional, defaults to default.percentage): percentage needed for an option to pass
*'''percentage''' (опционально, по умолчанию - default.percentage): нужный % для победы опции в номинации
*'''timeout''' (optional, defaults to default.timeout): poll timeout in seconds
*'''timeout''' (опционально, по умолчанию - default.timeout): время опроса в секундах
*'''allowchange''' (optional, defaults to default.allowchange): specifies if changing your vote is allowed
*'''allowchange''' (опционально, по умолчанию - default.allowchange): отвечает за возможность изменять свой голос
*'''maxnominations''' (optional, defaults to default.maxnominations): specifies the max number of nominations in case there's a draw
*'''maxnominations''' (опционально, по умолчанию - default.maxnominations): отвечает за максимальное количество номинаций в случае ничьи
*'''visibleTo''' (optional, defaults to [[getRootElement]]()): a table or players that will be able to see the poll, OR an element that contains the players.
*'''visibleTo''' (опционально, по умолчанию - [[getRootElement]]()): таблица игроков, которым будет виден опрос, или элемент, который содержит игроков.
If it is root, new players joining the server will be able to vote.
Если это root (корень), игроки, зашедшие уже после старта опроса смогут проголосовать.


''voteconfig.xml'' defaults will be used for missing optional settings.
Умолчания из ''voteconfig.xml'' будут использованы для пропущенных опциональных параметров.


===stopPoll===
===stopPoll===
<syntaxhighlight lang="lua">bool, int stopPoll ( )</syntaxhighlight>
<syntaxhighlight lang="lua">bool, int stopPoll ( )</syntaxhighlight>
Stops the running poll. Returns ''true'' if the current poll was stopped successfully, ''false'' and an error code otherwise.
Останаваливает запущенный опрос. Возвращает ''true'', если опрос был успешно остановлен, иначе - ''false''.


===voteMap===
===voteMap===
<syntaxhighlight lang="lua">bool, int voteMap ( string mapName )</syntaxhighlight>
<syntaxhighlight lang="lua">bool, int voteMap ( string mapName )</syntaxhighlight>
Starts a votemap. Returns ''true'' if it was successfully started, ''false'' and an error code otherwise.
Стартует голосование за карту. Возвращает ''true'', если опрос успешно стартовал, иначе - ''false'' и код ошибки.


===voteBetweenMaps===
===voteBetweenMaps===
<syntaxhighlight lang="lua">bool, int voteBetweenMaps ( resource map1, resource map2, [ resource map3, ... ] )</syntaxhighlight>
<syntaxhighlight lang="lua">bool, int voteBetweenMaps ( resource map1, resource map2, [ resource map3, ... ] )</syntaxhighlight>
Starts a poll to choose a map. Returns ''true'' if it was successfully started, ''false'' and an error code otherwise.
Стартует голосование между картами. Возвращает ''true'', если опрос успешно стартовал, иначе - ''false'' и код ошибки.


===voteKick===
===voteKick===
<syntaxhighlight lang="lua">bool, int voteKick ( player thePlayer )</syntaxhighlight>
<syntaxhighlight lang="lua">bool, int voteKick ( player thePlayer )</syntaxhighlight>
Starts a votekick. Returns ''true'' if it was successfully started, ''false'' and an error code otherwise.
Стартует голосование за кик. Возвращает ''true'', если опрос успешно стартовал, иначе - ''false'' и код ошибки.


===voteKill===
===voteKill===
<syntaxhighlight lang="lua">bool, int voteKill ( player thePlayer )</syntaxhighlight>
<syntaxhighlight lang="lua">bool, int voteKill ( player thePlayer )</syntaxhighlight>
Starts a votekill. Returns ''true'' if it was successfully started, ''false'' and an error code otherwise.
Стартует голосование за убийство. Возвращает ''true'', если опрос успешно стартовал, иначе - ''false'' и код ошибки.


===voteBan===
===voteBan===
<syntaxhighlight lang="lua">bool, int voteBan ( player thePlayer )</syntaxhighlight>
<syntaxhighlight lang="lua">bool, int voteBan ( player thePlayer )</syntaxhighlight>
Starts a voteban. Returns ''true'' if it was successfully started, ''false'' and an error code otherwise.
Стартует голосование за бан. Возвращает ''true'', если опрос успешно стартовал, иначе - ''false'' и код ошибки.
 
==Серверные события==
===onPollStarting===
<syntaxhighlight lang="lua">void onPollStarting ( table pollData )</syntaxhighlight>
Срабатывает перед тем, как опрос начинает стартовать. Позволяет другим ресурсам изменять опрос. Используйте onPollModified, чтобы отозвать опрос.
 
===onPollModified===
<syntaxhighlight lang="lua">void onPollModified ( table pollData )</syntaxhighlight>
Вы можете использовать ее для отправки опроса с изменениями.


==Serverside events==
===onPollStart===
===onPollStart===
<syntaxhighlight lang="lua">void onPollStart (  )</syntaxhighlight>
<syntaxhighlight lang="lua">void onPollStart (  )</syntaxhighlight>
Fired before a poll starts. Cancelling it aborts the poll.
Срабатывает перед стартом опроса. Отмена отменяет опрос.


===onPollStop===
===onPollStop===
<syntaxhighlight lang="lua">void onPollStop (  )</syntaxhighlight>
<syntaxhighlight lang="lua">void onPollStop (  )</syntaxhighlight>
Fired before a poll is halted. Cancelling it prevents the poll from being halted.
Срабатывает перед остановкой опроса. Отмена предотвращает отмену опроса.


===onPollEnd===
===onPollEnd===
<syntaxhighlight lang="lua">void onPollEnd (  )</syntaxhighlight>
<syntaxhighlight lang="lua">void onPollEnd (  )</syntaxhighlight>
Fired after a poll finished. Cancelling it has no effect.
Срабатывает по окончании опроса. Отмена не дает никакого эффекта.


===onPollDraw===
===onPollDraw===
<syntaxhighlight lang="lua">void onPollDraw (  )</syntaxhighlight>
<syntaxhighlight lang="lua">void onPollDraw (  )</syntaxhighlight>
Fired when a poll ends in a draw. Cancelling it aborts renominations.
Срабатывает, когда опрос оканчивается ничьей. Отмена предотвращает повторные номинации.


===onClientSendVote===
===onClientSendVote===
<syntaxhighlight lang="lua">void onClientSendVote ( int vote )</syntaxhighlight>
<syntaxhighlight lang="lua">void onClientSendVote ( int vote )</syntaxhighlight>
Fired when a vote is sent to the server. ''client'' is the client who sent the vote. Cancelling it makes the manager ignore the client's choice.
Срабатывает, когда на сервер посылается голос. ''client'' - клиент, отправивший голос. Отмена выливается в игнорирование голоса клиента менеджером.


==Default settings==
==Настройки по умолчанию==
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<settings>
<settings>
Line 152: Line 158:
</settings>
</settings>
</syntaxhighlight>
</syntaxhighlight>
[[en:Resource:Votemanager]]

Revision as of 20:16, 18 May 2012

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

Срабатывает по окончании опроса. Отмена не дает никакого эффекта.

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>