- Баллы
- 153
Версия плагина устарела!
Используйте VarScript более поздней версии и учите Groovy
-----------------------------------------------------
Разработка VarScript 0.5 (ссылки на другие уроки, полезные функции, и т.д.)
VarScript на dev.bukkit.org (скачать можно тут)
-----------------------------------------------------
Условный оператор IF
Существует две формы этого оператора:
(условие) IF (действие) THEN
(условие) IF (действие1) ELSE (действие2) THEN
Сразу привожу пример:
ME ^DIRT 2 HASITEMS IF ## если у игрока есть 2 блока земли
Условием может быть любое выражение или любой объект
Правила, по которому происходит конвертирование в Boolean:
Конструкции с IF можно вкладывать друг в друга, глубина не ограничена.
оператора ELSEIF не существует.
Цикл BEGIN - REPEAT
Самая простая реализация цикла - это бесконечный цикл. Выглядит он таким образом:
BEGIN (действие) REPEAT
Действие будет исполняться до следующей перезагрузки сервера/плагина/окружения или до принудительной остановки программы.
И сразу пример:
BEGIN ## начало цикла
Эта программа будет выводить в чат "Hello world" раз в минуту
Завершить этот цикл можно тремя способами:
- остановить программу
- остановить поток
- командой RUNTIME::disable остановить все программы
Циклы были бы бесполезны, если бы не было выхода по условию:
BEGIN (условие) WHILE (действие) REPEAT
Действие будет исполняться до тех пор, пока условие истинно
Еще один пример:
BEGIN ## начало цикла
Программа каждую секунду наносит игроку 1 ед. урона, пока его hp больше пяти.
Допускаются следующие конструкции:
BEGIN (условие1) WHILE (условие2) WHILE (действие) REPEAT
И даже такие
BEGIN (действие) (условие1) WHILE (условие2) WHILE (действие) REPEAT
Как только хотя бы одно условие окажется ложным, цикл завершается
Цикл BEGIN - UNTIL
Этот цикл аналогичен предыдущему, за исключением того, что в конце добавляется проверка условия. Имеет такой вид:
BEGIN (действие) (условие) UNTIL
В данной конструкции (действие) обязательно исполнится хотя бы однажды.
В этом цикле также допускается использование оператора WHILE:
BEGIN (условие1) WHILE (действие) (условие2) UNTIL
причем, как и в предыдущем, можно WHILE использовать более одного раза.
Циклы можно вкладывать друг в друга.
Управление циклами
Для управления циклами BEGIN - UNTIL и BEGIN - REPEAT существуют такие команды:
CONTINUE - начать цикл сначала
BREAK - принудительно завершить цикл
Цикл со счетчиком
Цикл со счетчиком полезен, когда нужно выполнить функцию определенное количество раз. Имеет такой вид:
Конец Начало @DO{ (действие) }
Внутри цикла используется оператор I чтобы получить значение счетчика
Вот пример:
5 0 @DO{ ## цикл с 5 до 0
результат будет такой:

Счетчик после каждой итерации увеличивается на единицу. Счетчик в обратную сторону не предусмотрен.
В случае вложенности команда I будет брать счетчик последнего цикла. Чтобы получить значение предыдущего счетчика, нужно заблаговременно записать его в переменную:
5 0 @DO{ ## внешний цикл с 5 до 0
Используйте VarScript более поздней версии и учите Groovy
-----------------------------------------------------
Разработка VarScript 0.5 (ссылки на другие уроки, полезные функции, и т.д.)
VarScript на dev.bukkit.org (скачать можно тут)
-----------------------------------------------------
Это третий тутор по плагину VarScript 0.5
В нем будут рассмотрены некоторые логические конструкции языка.
Предполагается, что все действия пишутся в текстовом файле.
Условный оператор IF
Существует две формы этого оператора:
(условие) IF (действие) THEN
(условие) IF (действие1) ELSE (действие2) THEN
Сразу привожу пример:
ME ^DIRT 2 HASITEMS IF ## если у игрока есть 2 блока земли
ME ^GLASS TAKE ## дать ему блок стекла
ELSE ## а иначеME KILL ## убить
THENУсловием может быть любое выражение или любой объект
Правила, по которому происходит конвертирование в Boolean:
Null -> false
Число -> true, если оно не равно нулю
Строка -> true, если она не пустая
Entity -> true, если он жив
Vector -> true, если он не нулевой
Block -> true, если не воздух
Inventory -> true, если содержит хоть один предмет
Массив, набор, map -> true, если не пустой.
в другом случае -> true
Таким образом, для проверки наличия игроков на сервере, следующее условиеЧисло -> true, если оно не равно нулю
Строка -> true, если она не пустая
Entity -> true, если он жив
Vector -> true, если он не нулевой
Block -> true, если не воздух
Inventory -> true, если содержит хоть один предмет
Массив, набор, map -> true, если не пустой.
в другом случае -> true
PLAYERS SIZE 0 > IF ... (размер массива игроков больше нуля)
можно заменить на такое:PLAYERS IF ... (массив игроков не пуст)
Конструкции с IF можно вкладывать друг в друга, глубина не ограничена.
оператора ELSEIF не существует.
Цикл BEGIN - REPEAT
Самая простая реализация цикла - это бесконечный цикл. Выглядит он таким образом:
BEGIN (действие) REPEAT
Действие будет исполняться до следующей перезагрузки сервера/плагина/окружения или до принудительной остановки программы.
И сразу пример:
BEGIN ## начало цикла
"Hello world" BROADCAST ## вывести в чат Hello world
1200 TICKS ## подождать минуту
REPEAT ## повторяем все сначала1200 TICKS ## подождать минуту
Эта программа будет выводить в чат "Hello world" раз в минуту
Завершить этот цикл можно тремя способами:
- остановить программу
- остановить поток
- командой RUNTIME::disable остановить все программы
Циклы были бы бесполезны, если бы не было выхода по условию:
BEGIN (условие) WHILE (действие) REPEAT
Действие будет исполняться до тех пор, пока условие истинно
Еще один пример:
BEGIN ## начало цикла
ME HEALTH 5 > ## пока у игрока больше 5 жизней
WHILEME 1 DAMAGE DROP ## наносим 1 ед. урона
20 TICKS ## ждем секунду
REPEAT20 TICKS ## ждем секунду
Программа каждую секунду наносит игроку 1 ед. урона, пока его hp больше пяти.
Допускаются следующие конструкции:
BEGIN (условие1) WHILE (условие2) WHILE (действие) REPEAT
И даже такие
BEGIN (действие) (условие1) WHILE (условие2) WHILE (действие) REPEAT
Как только хотя бы одно условие окажется ложным, цикл завершается
Цикл BEGIN - UNTIL
Этот цикл аналогичен предыдущему, за исключением того, что в конце добавляется проверка условия. Имеет такой вид:
BEGIN (действие) (условие) UNTIL
В данной конструкции (действие) обязательно исполнится хотя бы однажды.
В этом цикле также допускается использование оператора WHILE:
BEGIN (условие1) WHILE (действие) (условие2) UNTIL
причем, как и в предыдущем, можно WHILE использовать более одного раза.
Циклы можно вкладывать друг в друга.
Управление циклами
Для управления циклами BEGIN - UNTIL и BEGIN - REPEAT существуют такие команды:
CONTINUE - начать цикл сначала
BREAK - принудительно завершить цикл
Цикл со счетчиком
Цикл со счетчиком полезен, когда нужно выполнить функцию определенное количество раз. Имеет такой вид:
Конец Начало @DO{ (действие) }
Внутри цикла используется оператор I чтобы получить значение счетчика
Вот пример:
5 0 @DO{ ## цикл с 5 до 0
I PRINT ## напечатать значение счетчика
}результат будет такой:

Счетчик после каждой итерации увеличивается на единицу. Счетчик в обратную сторону не предусмотрен.
В случае вложенности команда I будет брать счетчик последнего цикла. Чтобы получить значение предыдущего счетчика, нужно заблаговременно записать его в переменную:
5 0 @DO{ ## внешний цикл с 5 до 0
I %%i ## записываем счетчик внешнего цикла в переменную i
3 0 @DO{ ## внутренний цикл с 3 до 0
}3 0 @DO{ ## внутренний цикл с 3 до 0
I %%j ## записываем счетчик внутреннего цикла в переменную j
"i = " @i S+ PRINT "выводим значение переменной i"
"j = " @j S+ PRINT "выводим значение переменной j"
}"i = " @i S+ PRINT "выводим значение переменной i"
"j = " @j S+ PRINT "выводим значение переменной j"
Последнее редактирование:
