If

Материал из UoPilot
Перейти к навигации Перейти к поиску

Описание

if- условный оператор содержит логическое выражение. Позволяет выполнять определенный код в зависимости от результатов некоторого условия. Так же выполняет проверку цвета пикселя и последнего сообщения от сервера (для ultima online). Операция принимает вид сравнения.
Если логическое выражение истинно (true)- будет выполнен код. Если ложно (false)- код выполняться не будет.
Часто if используется в связке с else. Конструкция if-else имеет тот же вид, что if, но с дополнительной возможностью для выполнения другого кода, если условие не истинно (false).
Для выполнения операций отрицания результата выражения используется приставка _not.
Для поиска цвета пикселя необходимо указать координаты пикселя по оси XY (для абсолютных координат добавить в конце abs) и код цвета (можно найти в заголовке окна). Если указать ещё один код цвета2, то будет проверяться принадлежность пикселя к указанному диапазону цветов. Причем принадлежность к диапазону будет проверяться для каждого из каналов RGB отдельно, и условие IF будет истинным, только если значение каждого из каналов (RGB) пикселя будет между соответствующими значениями (R1..R2), (G1..G2), (B1..B2)
Для операций сравнения используются знаки операций: >, <, =, <=, >=, != идентично <>. Так же используются логические операторы or, and, xor.
or- логическое ИЛИ. Или один или другой или оба.
and- логическое И. И один и другой.
xor- строгое логическое ИЛИ. Или один или другой, но не оба.
Результатом логической операции является число 1, если результат истинный, или 0, если результат ложный.
Для указания приоритета нескольких операций используются круглые скобки: (, ).
В конце операции необходимо поставить end_if для корректного выполнения сценария.

Синтаксис

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

Примеры

// Пример 1
if 2 < 3
   msg два меньше трех
end_if
// Результат: вывод сообщения "два меньше трех"
// Пример 2
if 2 > 3
   msg два больше трех
else
   msg два не может быть больше трех
end_if
// Результат: вывод сообщения "два не может быть больше трех"
// Пример 3
if 345, 567 456456
    log цвет найден
end_if
// Пример 4
if 345, 567 456456
    log цвет найден
else
    log цвет не найден
end_if
// Пример 5
if 345, 567 456456 and 340, 214 13727242
    log Оба цвета найдены
end_if
// Пример 6
if_not 345, 567 456456
   msg цвет пикселя не найден
end_if
// Результат: вывод сообщения "цвет пикселя не найден"
// Пример 7
if_not 345, 567 456456 abs
   msg цвет пикселя не найден
else
   msg найден цвет пикселя 
end_if
// Результат: вывод сообщения "цвет пикселя не найден"
// Пример 8
if 345, 567 456456 2686770 abs
   msg цвет пикселя не найден в диапазоне 456456-2686770 (в шестнадцатеричном виде: 0x08F706 - 0x32FF28)
else
   msg цвет пикселя найден в диапазоне 456456-2686770
end_if
// Результат: вывод сообщения "цвет пикселя не найден в диапазоне 456456-2686770 (в шестнадцатеричном виде: 0x08F706 - 0x32FF28)"
// Пример 9
set #two 2
set #five 5
if (#two < #five) or (3 < #five) 
     msg два меньше пяти или три меньше пяти
end_if
// Результат: вывод сообщения "два меньше пяти или три меньше пяти"
// Пример 10
set #num 3
if (7 != 4) and (#num <> 4)
   msg семь не равно четырём и три не равно четырём
else 
   msg четыре и #num равно семи 
end_if 
// Результат: вывод сообщения "семь не равно четырём и три не равно четырём"
// Пример 11
if 1 xor 0
   msg только 1 или 0 истинно, но не оба
end_if
// Результат: вывод сообщения "только 1 или 0 истинно, но не оба"
// Пример 12
init_arr %a (1) 360 197 13529609    //задаём координаты и цвет в одну строку
set delimiter ' '                   //установить разделитель между элементами 'пробел'
if %a [1]                           //тоже самое что if %a [1 1] %a [1 2] %a [1 3]
    msg Цвет найден
    End_script
end_if
// Пример 13
init_arr %a (1) 360 197 13529609    //задаём координаты и цвет, первая строка
init_arr %a (2) 424, 511 15979864   //задаём координаты и цвет, вторая строка
set delimiter ' '                   //установить разделитель между элементами 'пробел'
    //обратите внимание, когда используется больше 1 условия, то обязательно нужны круглые скобки.
if (%a [1]) and (%a [2])                           //тоже самое что if %a [1 1] %a [1 2] %a [1 3] and %a [2 1] %a [2 2] %a [2 3]
    msg Цвет найден
    End_script
end_if
// Пример 14
// Выполнение действия в определённое время
// Можно использовать переменные hour(час), min(минута), sec(секунда)
if hour = 5 and min = 33        // в 5:33 выполнится условие
    // тут пишем что нужно выполнить, например:
    start_script 3               // запустить скрипт номер 3
    alarm                        // звуковой сигнал
    stop_script                  // остановить текущий скрипт    
end_if
// Пример 15
if_not 100 100 255 or 232 456 13529609    // если отсутствуют оба цвета    
   // что-то делаем
end_if
// с условием if_not часто возникают некоторые недоразумения
// тут подробно и понятно написано что к чему: https://forum.uokit.com/index.php?s=&showtopic=20548&view=findpost&p=179583
// Пример 16
if_not 100 100 255 and 232 456 13529609    // если отсутствуют оба цвета или один из них    
   // что-то делаем
end_if

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

While
For
Get color
Switch

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

0.98 alfa 8
Добавлены операции: >, <, =, <>:

if <значение> <знак операции> <значение>
    ...
end_if

Между знаком операции и значениями должен быть разделитель.

Добавлена проверка последнего сообщения от сервера(только для Ultima Online):
if lastmsg <последнее сообщение от сервера>
    ...
end_if

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

1.01 beta 7
Добавлена логика (and, or, xor) в условных операторах. Приоритетов нет, обрабатывается последовательно:

if hour = 23 and min = 45 or #count = 100
    end_script    
end_if

2.18
Добавил нечеткое сравнение строк. регистронезависимо. поддерживаются операции <, >, =, <>:
<= &thinsp;S2 содержится в S1
>= &thinsp;S1 содержится в S2

2.20
Исправил поиск подстроки одного регистра в строке другого регистра, содержащих символы алфавита отличного от английского и заданных с помощью переменных:

set $substr  таня 
set $str textТАНЯтект
if $substr >= $str
    msg found
end_if

2.21
Научил условные операторы принимать элеменнты массива в качестве параметров для определения цвета точки:

set %a[1] 110 120 8030463
set %a[2] 110 120
set %a[5 1] 110,
set %a[5 2] 120,
set %a[5 3] 8030463
if (%a[1]) and (%a[2] 8030463) and %a[5]
    ...
end_if
Научил условные операторы принимать в качестве параметров для определения цвета точки, координаты и цвет заданные одной строкой:
set $a 110 120 8030463
set $b 110 120
if ($a) and ($b 8030463)
    ...
end_if

2.27.2
Исправил перманентный вис скрипта на конструкциях типа 'if %var = #var', и добавил вывод сообщения об ошибке.

2.33
Исправил проверку последнего сообщения от сервера в конструкции 'if lastmsg anytext', сломанную в предыдущей версии.