While

Материал из UoPilot
Версия от 11:29, 28 августа 2019; Tatikoma (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

Описание

While - оператор цикла. Создает цикл, который выполняется до того момента, пока условие является истиной(либо ложью при while_not). Выполняет операцию сравнения, а так же проверку цвета пикселя и последнего сообщения от сервера (для ultima online).
Для отрицания сравнения используется while _not.
Для выхода из цикла используются операторы break и continue.
Для операций сравнения используются знаки операций: >, <, =, <=, >=, != идентично <>. Так же используются логические операторы or, and, xor:

or - логическое ИЛИ. Или один или другой или оба.
and - логическое И. И один и другой.
xor - строгое логическое ИЛИ. Или один или другой, но не оба.

Для указания приоритета нескольких операций используются круглые скобки: (, ).
В конце операции необходимо поставить end_while для корректного выполнения сценария.

Синтаксис

Привязка к окну: опционально.
Работа со свернутым окном: частично.

Примеры

// Пример 1
set #i 2
while #i != 1
    set #i #i * 2
    msg #i
end_while
Результатом работы является умножение значения переменной #i на два, каждый раз, до того момента,
пока значение переменной #i не  станет равной единице, т.е. бесконечно.
// Пример 2. Бесконечный цикл
 // Здесь сделаем подготовку
set #счетчик 1
msg На счетчике число: #счетчик , будем увеличивать...
// А теперь зацикленный кусок скрипта
while 1 = 1 // условие всегда будет выполняться, а значит цикл - бесконечный
  set #счетчик #счетчик + 1 // увеличим значение на 1
  msg Теперь на счётчике число: #счетчик 
end_while
// Пример 3
while 329 289 14386954        // цикл будет выполняться пока присутствует цвет
    send {F1}                 // нажать F1
    wait 500                  // ждать 0,5 секунды
end_while
End_script
// Пример 4
while_not 329 289 14386954    // ждать пока не появится указанный цвет 
    wait 10
end_while
log Цвет найден
End_script
// Пример 5
while 329, 289 14386954 and 517, 834 8582073    // цикл будет выполняться пока присутствуют оба цвета
    // нужные действия
end_while
End_script
// Пример 6
while 329, 289 14386954 or 517, 834 8582073    // цикл будет выполняться пока присутствует 1 из цветов или оба
    // нужные действия
end_while
End_script
// Пример 7
while 329, 289 14386954 xor 517, 834 8582073    // цикл будет выполняться пока присутствует 1 из цветов, но не оба
    // нужные действия
end_while
End_script
// Пример 8
while_not 329, 289 14386954 and 517, 834 8582073    // цикл будет выполняться пока не появятся оба цвета
    wait 20
end_while
End_script
// Пример 9
while_not 329, 289 14386954 or 517, 834 8582073    // цикл будет выполняться пока не появится один из цветов или оба
    wait 20
end_while
End_script
// Пример 10
// Выход из цикла через break
while 1 = 1                            // условие всегда будет выполняться, а значит цикл - бесконечный   
    set #счетчик #счетчик + 1      // увеличим значение на 1
    msg Теперь на счётчике число: #счетчик 
    if #счетчик = 3                    //если переменная '#счетчик' = 3
        break                          //выходим из цикла
    end_if
end_while
msg Вышли из while
End_script

Смотрите также

For
Repeat
Break

История развития

0.99 alfa 8
Добавлен цикл while ... end_while:

while <коорд> <цвет> [цвет2]
    ...
end_while

Цвет в точке <коорд> равен <цвет>, если задан цвет2, то цвет точки проверяется на принадлежность диапазону от цвет до цвет2.

while <параметр> <знак оп.> <знач.>
    ...
end_while

Параметры: hits,mana,stam,wght,ar, coordx,coordy либо переменные.
Поддерживаются следующие операции: >,<,=,<>. Между знаком операции и значениями должен быть разделитель.

while lastmsg <последнее сообщение>
    ...
end_while

Сообщение от сервера можно писать не целиком.

1.05 beta 3
Добавил возможность использования скобок в условных операторах:

while (#a > 1 and #a < 3) or ((#a = 1 and 130, 9 7295) or #a = 5)