If

Материал из UoPilot
Версия от 21:00, 27 августа 2019; Tatikoma (обсуждение | вклад) (Новая страница: «== Описание == '''if'''- условный оператор содержит логическое выражение. Позволяет выполнять...»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

Описание

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

Синтаксис

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

Примеры

// Пример 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 <br>For <br>Get color <br>Switch

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

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

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

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

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

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

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

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

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

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

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

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

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 <br>Исправил перманентный вис скрипта на конструкциях типа 'if %var = #var', и добавил вывод сообщения об ошибке.

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