If: различия между версиями

Материал из UoPilot
Перейти к навигации Перейти к поиску
(Новая страница: «== Описание == '''if'''- условный оператор содержит логическое выражение. Позволяет выполнять...»)
 
 
Строка 1: Строка 1:
 
== Описание ==
 
== Описание ==
 
'''if'''- условный оператор содержит логическое выражение. Позволяет выполнять определенный код в зависимости от результатов некоторого условия. Так же выполняет проверку цвета пикселя и последнего сообщения от сервера (для ultima online). Операция принимает вид сравнения.
 
'''if'''- условный оператор содержит логическое выражение. Позволяет выполнять определенный код в зависимости от результатов некоторого условия. Так же выполняет проверку цвета пикселя и последнего сообщения от сервера (для ultima online). Операция принимает вид сравнения.
<br>Если логическое выражение истинно (true)- будет выполнен код. Если ложно (false)- код выполняться не будет.  
+
<br>Если логическое выражение истинно (true)- будет выполнен код. Если ложно (false)- код выполняться не будет.  
&lt;br>Часто if используется в связке с else. Конструкция if-else имеет тот же вид, что if, но с дополнительной возможностью для выполнения другого кода, если условие не истинно (false).
+
<br>Часто if используется в связке с else. Конструкция if-else имеет тот же вид, что if, но с дополнительной возможностью для выполнения другого кода, если условие не истинно (false).
&lt;br>Для выполнения операций отрицания результата выражения используется приставка _not.
+
<br>Для выполнения операций отрицания результата выражения используется приставка _not.
&lt;br>Для поиска цвета пикселя необходимо указать координаты пикселя по оси XY (для абсолютных координат добавить в конце abs) и код цвета (можно найти в заголовке окна). Если указать ещё один код цвета2, то будет проверяться принадлежность пикселя к указанному диапазону цветов. Причем принадлежность к диапазону будет проверяться для каждого из каналов RGB отдельно, и условие IF будет истинным, только если значение каждого из каналов (RGB) пикселя будет между соответствующими значениями (R1..R2), (G1..G2), (B1..B2)
+
<br>Для поиска цвета пикселя необходимо указать координаты пикселя по оси XY (для абсолютных координат добавить в конце abs) и код цвета (можно найти в заголовке окна). Если указать ещё один код цвета2, то будет проверяться принадлежность пикселя к указанному диапазону цветов. Причем принадлежность к диапазону будет проверяться для каждого из каналов RGB отдельно, и условие IF будет истинным, только если значение каждого из каналов (RGB) пикселя будет между соответствующими значениями (R1..R2), (G1..G2), (B1..B2)
&lt;br>Для операций сравнения используются знаки операций: >, &lt;, =, &lt;=, >=, != идентично &lt;>. Так же используются логические операторы or, and, xor.  
+
<br>Для операций сравнения используются знаки операций: >, <, =, <=, >=, != идентично <>. Так же используются логические операторы or, and, xor.  
&lt;br>or- логическое ИЛИ. Или один или другой или оба.  
+
<br>or- логическое ИЛИ. Или один или другой или оба.  
&lt;br>and- логическое И. И один и другой.
+
<br>and- логическое И. И один и другой.
&lt;br>xor- строгое логическое ИЛИ. Или один или другой, но не оба.
+
<br>xor- строгое логическое ИЛИ. Или один или другой, но не оба.
&lt;br>Результатом логической операции является число 1, если результат истинный, или 0, если результат ложный.
+
<br>Результатом логической операции является число 1, если результат истинный, или 0, если результат ложный.
&lt;br>Для указания приоритета нескольких операций используются круглые скобки: (, ).
+
<br>Для указания приоритета нескольких операций используются круглые скобки: (, ).
&lt;br>В конце операции необходимо поставить end_if для корректного выполнения сценария.
+
<br>В конце операции необходимо поставить end_if для корректного выполнения сценария.
  
 
== Синтаксис ==
 
== Синтаксис ==
 
Привязка к окну: опциональна.
 
Привязка к окну: опциональна.
&lt;br>Работа со свернутым окном: частично.
+
<br>Работа со свернутым окном: частично.
  
 
== Примеры ==
 
== Примеры ==
 
  // Пример 1
 
  // Пример 1
  if 2 &lt; 3
+
  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 &lt; #five) or (3 &lt; #five)  
+
  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 &lt;> 4)
+
  if (7 != 4) and (#num <> 4)
 
     msg семь не равно четырём и три не равно четырём
 
     msg семь не равно четырём и три не равно четырём
 
  else  
 
  else  
Строка 137: Строка 137:
  
 
[[While]]
 
[[While]]
&lt;br>[[For]]
+
<br>[[For]]
&lt;br>[[Get color]]
+
<br>[[Get color]]
&lt;br>[[Switch]]
+
<br>[[Switch]]
  
 
== История развития ==
 
== История развития ==
  
 
'''0.98 alfa 8'''
 
'''0.98 alfa 8'''
&lt;br>Добавлены операции: >, &lt;, =, &lt;>:
+
<br>Добавлены операции: >, <, =, <>:
  if &lt;значение> &lt;знак операции> &lt;значение>
+
  if <значение> <знак операции> <значение>
 
     ...
 
     ...
 
  end_if
 
  end_if
 
Между знаком операции и значениями должен быть разделитель.
 
Между знаком операции и значениями должен быть разделитель.
 
:Добавлена проверка последнего сообщения от сервера(только для Ultima Online):
 
:Добавлена проверка последнего сообщения от сервера(только для Ultima Online):
  if lastmsg &lt;последнее сообщение от сервера>
+
  if lastmsg <последнее сообщение от сервера>
 
     ...
 
     ...
 
  end_if
 
  end_if
Строка 156: Строка 156:
  
 
'''1.01 beta 7'''
 
'''1.01 beta 7'''
&lt;br>Добавлена логика (and, or, xor) в условных операторах. Приоритетов нет, обрабатывается последовательно:
+
<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'''
&lt;br>Добавил нечеткое сравнение строк. регистронезависимо. поддерживаются операции &lt;, >, =, &lt;>:
+
<br>Добавил нечеткое сравнение строк. регистронезависимо. поддерживаются операции <, >, =, <>:
&lt;br>&lt;= &amp;thinsp;S2 содержится в S1
+
<br><= &amp;thinsp;S2 содержится в S1
&lt;br>>= &amp;thinsp;S1 содержится в S2
+
<br>>= &amp;thinsp;S1 содержится в S2
  
 
'''2.20'''
 
'''2.20'''
&lt;br>Исправил поиск подстроки одного регистра в строке другого регистра, содержащих символы алфавита отличного от английского и заданных с помощью переменных:
+
<br>Исправил поиск подстроки одного регистра в строке другого регистра, содержащих символы алфавита отличного от английского и заданных с помощью переменных:
 
  set $substr  таня  
 
  set $substr  таня  
 
  set $str textТАНЯтект
 
  set $str textТАНЯтект
Строка 175: Строка 175:
  
 
'''2.21'''
 
'''2.21'''
&lt;br>Научил условные операторы принимать элеменнты массива в качестве параметров для определения цвета точки:
+
<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'''
&lt;br>Исправил перманентный вис скрипта на конструкциях типа 'if %var = #var', и добавил вывод сообщения об ошибке.
+
<br>Исправил перманентный вис скрипта на конструкциях типа 'if %var = #var', и добавил вывод сообщения об ошибке.
  
 
'''2.33'''
 
'''2.33'''
&lt;br>Исправил проверку последнего сообщения от сервера в конструкции 'if lastmsg anytext', сломанную в предыдущей версии.
+
<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

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

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', сломанную в предыдущей версии.