×
Меню
Индекс

MSFD Проверка условий

Использование условий if… elseif
If (condition)
Elseif (condition)
Else
Endif
 
Большинство скриптов в TES основываются на использовании if… elseif и их вариаций.
Очень важно полностью понимать эти конструкции, так как условия могут запускать события в игровом мире.
Вообще, условие истинно, если оно имеет значение 1 (или просто “не 0”, то есть –1 также истинно) и ложно, если имеет значение 0.
Есть определенные функции в игре, которые возвращают “истину” в определенных условиях.
 
Например, взгляните на функцию GetAIPackageDone ниже.
Она возвращает 1 в том фрейме, когда пакет действий для AI завершен.
Все строчки кода между if и endif (которые называются if-блоком) будут исполняться только, когда условие истинно.
 
Так что:
 
If ( GetAIPackageDone )
     ;[делать что-то]
endif
 
будет исполняться только, когда GetAIPackageDone вернет 1.
 
В дополнение к просто значению, условие может содержать более расширенный набор условий.
Условия, такие как “А равно В” или “А больше чем В” будут оценены, и все выражение будет истинно (равно 1), когда условие будет выполнено. Например:
 
if ( GetAIPackageDone == 1 )
     ;[делать что-то]
endif
 
является эквивалентом приведенному выше.
 
Можно проверять следующие условия:
Обозначение
Условный оператор
равно
==
не равно
!=
больше чем
>
меньше чем
<
больше или равно
>=
меньше или равно
<=
 
 
Если у вас есть несколько независимых блоков условий, каждый будет оценен отдельно.
Например, если у вас в коде такие строки:
 
if ( timer >= 2 )
     ;[Блок  A,делать что-то]
endif
if ( timer <= 3 )
     ;[Блок  B, делать что-то другое]
endif
 
Оба условия будут равны единице и код в блоках будет выполнен, когда timer будет между 2 и 3.
Вы можете создавать вложенные блоки, чтобы условия выполнялись одновременно:
 
if ( timer >= 2 )
     if ( controlvar == 0 )
          ;[делать что-то]
     endif
endif
 
Код в внутреннем блоке будет выполнен, когда оба условия (timer >= 2 и controlvar == 0 ) равны истине одновременно.
 
Для более сложных конструкций используйте Else и Elseif.
Elseif проверяет отдельное условие, если предыдущее условие оказалось ложью (если – истиной, то не проверяет)
 
if ( timer >= 2 )
     ;[Блок A,что-то делать]
elseif ( timer <= 3 )
     ; [Блок B, делать что-то еще]
endif
 
В отличие от вышеприведенного примера, оба блока не могут быть выполнены одновременно.
Если timer >= 2, то исполняется блок А или если timer не >= 2, а <= 3, то есть, в данном случае, если timer < 2, то исполняется блок В.
Во всех других случаях ни один блок не будет исполнен. Можно поставить несколько elseif один за другим:
 
if ( counter == 1 )
     ; [Юлок A,что-то делать]
elseif ( counter == 2 )
     ; [Юлок B, делать что-то другое]
elseif ( counter == 3 )
     ; [Юлок C, делать еще что-то]
endif
 
Else создает условие по умолчанию.
Блок else будет выполнен, если только все предыдущие условия оказались ложью:
 
If ( foo_var == 1 )
[Блок A: делать что-то]
elseif ( foo_var == 2 )
[Блок B: делать что-то еще]
else
[Блок C: делать что-то совершенно другое]
endif
 
В этом примере блок С будет выполнен, если foo_var не 1 и не 2.
 
Примечание: Исходя из моего опыта, самый безопасный способ протестировать разные значение одной переменной – использовать elseif вместо многих отдельных if.
Существует максимальное количество возможных условий if-elseif в одном скрипте.
Согласно последней информации он равно где-то 128 (а не 256, как упоминалось ранее).
Слишком большое расстояние между if и endif может также вызвать проблемы.
Они начнутся, если оно (расстояние) будет больше 120-240 строк. (Информация с форума / MentalElf)