If: различия между версиями
Tatikoma (обсуждение | вклад) (Новая страница: «== Описание == '''if'''- условный оператор содержит логическое выражение. Позволяет выполнять...») |
Tatikoma (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
== Описание == | == Описание == | ||
'''if'''- условный оператор содержит логическое выражение. Позволяет выполнять определенный код в зависимости от результатов некоторого условия. Так же выполняет проверку цвета пикселя и последнего сообщения от сервера (для ultima online). Операция принимает вид сравнения. | '''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 | // Пример 1 | ||
− | if 2 | + | if 2 < 3 |
msg два меньше трех | msg два меньше трех | ||
end_if | end_if | ||
Строка 74: | Строка 74: | ||
set #two 2 | set #two 2 | ||
set #five 5 | set #five 5 | ||
− | if (#two | + | if (#two < #five) or (3 < #five) |
msg два меньше пяти или три меньше пяти | msg два меньше пяти или три меньше пяти | ||
end_if | end_if | ||
Строка 81: | Строка 81: | ||
// Пример 10 | // Пример 10 | ||
set #num 3 | set #num 3 | ||
− | if (7 != 4) and (#num | + | if (7 != 4) and (#num <> 4) |
msg семь не равно четырём и три не равно четырём | msg семь не равно четырём и три не равно четырём | ||
else | else | ||
Строка 137: | Строка 137: | ||
[[While]] | [[While]] | ||
− | + | <br>[[For]] | |
− | + | <br>[[Get color]] | |
− | + | <br>[[Switch]] | |
== История развития == | == История развития == | ||
'''0.98 alfa 8''' | '''0.98 alfa 8''' | ||
− | + | <br>Добавлены операции: >, <, =, <>: | |
− | if | + | if <значение> <знак операции> <значение> |
... | ... | ||
end_if | end_if | ||
Между знаком операции и значениями должен быть разделитель. | Между знаком операции и значениями должен быть разделитель. | ||
:Добавлена проверка последнего сообщения от сервера(только для Ultima Online): | :Добавлена проверка последнего сообщения от сервера(только для Ultima Online): | ||
− | if lastmsg | + | if lastmsg <последнее сообщение от сервера> |
... | ... | ||
end_if | end_if | ||
Строка 156: | Строка 156: | ||
'''1.01 beta 7''' | '''1.01 beta 7''' | ||
− | + | <br>Добавлена логика (and, or, xor) в условных операторах. Приоритетов нет, обрабатывается последовательно: | |
if hour = 23 and min = 45 or #count = 100 | if hour = 23 and min = 45 or #count = 100 | ||
end_script | end_script | ||
Строка 162: | Строка 162: | ||
'''2.18''' | '''2.18''' | ||
− | + | <br>Добавил нечеткое сравнение строк. регистронезависимо. поддерживаются операции <, >, =, <>: | |
− | + | <br><= &thinsp;S2 содержится в S1 | |
− | + | <br>>= &thinsp;S1 содержится в S2 | |
'''2.20''' | '''2.20''' | ||
− | + | <br>Исправил поиск подстроки одного регистра в строке другого регистра, содержащих символы алфавита отличного от английского и заданных с помощью переменных: | |
set $substr таня | set $substr таня | ||
set $str textТАНЯтект | set $str textТАНЯтект | ||
Строка 175: | Строка 175: | ||
'''2.21''' | '''2.21''' | ||
− | + | <br>Научил условные операторы принимать элеменнты массива в качестве параметров для определения цвета точки: | |
set %a[1] 110 120 8030463 | set %a[1] 110 120 8030463 | ||
set %a[2] 110 120 | set %a[2] 110 120 | ||
Строка 192: | Строка 192: | ||
'''2.27.2''' | '''2.27.2''' | ||
− | + | <br>Исправил перманентный вис скрипта на конструкциях типа 'if %var = #var', и добавил вывод сообщения об ошибке. | |
'''2.33''' | '''2.33''' | ||
− | + | <br>Исправил проверку последнего сообщения от сервера в конструкции 'if lastmsg anytext', сломанную в предыдущей версии. | |
[[Категория:Условия]] | [[Категория:Условия]] |
Текущая версия на 10:42, 28 августа 2019
Описание
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
Смотрите также
История развития
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
Добавил нечеткое сравнение строк. регистронезависимо. поддерживаются операции <, >, =, <>:
<=  S2 содержится в S1
>=  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', сломанную в предыдущей версии.