Операции: AND OR XOR Арифметические

Опции VR:   A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Ресивер VR (переменные)


!!VR@:XXXX; - менеджмент переменных. Используется для действий с переменными (установка, сравнение, математические действия).

См. также: команды над z-переменными, соединение z-переменных, переменные в сообщениях, флаги и переменные


C$1/$2/$3/$4/$5/$6/$7/$8/$9/$10/$11/$12/$13/$14/$15/$16
Установить/проверить v-переменные
         $ – значение для v-переменной @
         $1 – установить/проверить v-переменную (@)
         $2 – установить/проверить v-переменную (@+1)
  
  
         $16 – установить/проверить v-переменную (@+15)
Команда поддерживает до 16 параметров.
Замечание: в ERA добавлена поддержка v, y, x и w-переменных.
Пример (показать)

Пример от Donald'а:
Можно использовать эту команду для составления таблицы; это простой метод получения случайного заклинания. К примеру:


Rx
Генерировать случайное значение от 0 до x (включительно) и ДОБАВИТЬ его к текущему значению.
Пример:


R#/$
Установить генератор случайных чисел на одно значение.
        $ – номер случайного числа в генераторе для синхронизации.
        # – фантомный параметр (не используется)
Если вы не уверены, что генератор случайных чисел в одинаковой позиции на обоих компьютерах, вы можете просто перезапустить их на один ритм.


S#
Установить переменную @ на # (здесь и ниже # может означать имя другой переменной).
Пример:


T$
Генерировать случайное значение от 0 до $ и добавить его к текущему значению переменной. Значение базируется на значении времени.
Комментарий (показать)

При использовании этой команды, если вы сгенерируете два или более значения за один ресивер, они могут быть равными, поэтому в таких ситуациях используйте VR:R.
Состояние генератора НЕ синхронизируется автоматически между удалёнными ПК. Не используйте команду в режиме битвы для повышения совместимости вашего кода с мультиплеером.


Логические битовые операции

См. также: Логические битовые операции в WoG

&$

AND 0 и 0 → 0 0 и 1 → 0 1 и 0 → 0 1 и 1 → 1

«&» - битовая операция И над битами переменной, может быть использована для проверки, был ли установлен определённый бит.
Например, проверим, есть ли в v1-переменной 4ый бит (16):
Так, эта команда может быть очень полезна, к примеру, при проверке на флаги существ.
Пример (показать)

Вы также можете удалить определённый бит без удаления остальных бит в переменной.
Для этого используйте: &-(N+1), где N - значение удаляемого бита.
Пример (показать)

Для удаления у монстра флага «живой» (бит 16), используйте: -(16+1) = -17. Вместе с тем, часто многими скриптерами используется такой способ удаления флага, когда перед самим удалением этот же флаг прибавляется. Такой способ исключает ситуацию, когда вы будете удалять флаг, которого у монстра изначально не было (эдакая защита "от дурака").


|$

OR 0 и 0 → 0 0 и 1 → 1 1 и 0 → 1 1 и 1 → 1

«|» - битовая операция ИЛИ над битами переменных, может быть использована для установки определённого бита без изменения других бит. Например, установим 5й бит (32) в v1: Если v1 уже имеет этот бит, ничего не изменится. Если нет, бит будет установлен.
Это может быть полезно для добавления новых флагов монстрам, если вы не знаете, какие флаги они уже имеют, и фактически, это единственный полностью безопасный синтаксис для этого действия.


X$

XOR 0 и 0 → 0 0 и 1 → 1 1 и 0 → 1 1 и 1 → 0

Выполняет битовое исключающее ИЛИ над битами переменной.
Например, X-1 инвертирует биты переменной.
Для проверки разницы между двумя переменными используйте синтаксис: !!VR@:X$, где @ - переменная, являющаяся одной из переменных для сравнения и также получающая результат сравнения; $ - вторая переменная для сравнения.
Пример (показать)

Скажем, v1=163 (10100011) и v2=106 (01101010). Тогда.. Итак, v1=201 (11001001).
Давайте теперь инвертируем статус бита переменной:


Арифметические операции с переменными.

+#Добавить # к переменной
-#Отнять # от переменной
*#Умножить переменную на #
:#Разделить переменную на # (не пытайтесь разделить на 0)
%#Установить переменную на значение остатка от деления на #
Пример: Комментарии (показать)


Команды над текстовыми переменными

!!VRz#
Есть следующие текстовые переменные:
z1…z1000. Они могут быть изменены (любая переменная) для использования.


H#
Установить, содержит ли z-переменная пустое значение или нет.
         # – номер флага для сохранения результата     
          = 1 – если там текст
          = 0 – если переменная пуста
Все знаки вроде пробела, новых строк будут игнорированы и расценены как пустые.
Пример (показать)


M#
!!VRz#:M1/z#1/#2/#3

Получить подтекст из переменной z#1 и установить его в z#
         z# – переменная, куда сохранять результат
         z#1 – переменная-исходник
         #2 – позиция, откуда начинать копирование (0 – по умолчанию) (в символах)
         #3 – длина подтекста для копирования (в символах)
Пример (показать)

Получим: z2 = «попытаемся»


!!VRz#:M2/z#1/#2
Получить слово с порядковым номером #2 из переменной z#1 и установить его в z#
         z# – переменная, куда сохранится слово
         z#1 – переменная-исходник
         #2 – номер слова (по умолчанию – 0)
Комментарий (показать)

Разделители: пробелы, точки, запятые, знаки табуляции, новые строки, – не нумеруются.
Пример:
«Переменная, которая содержит.. И ещё много         слов»
Мы получим следующие слова:


!!VRz#:M3/#1/#2
!!VRz#:M3/#1

Конвертирует число в текст.
         z# – переменная, которая будет содержать результат
         #1 – любое число (переменная) для конвертирования
         #2 – система исчисления (по умолчанию – 10)
Пример (показать)


!!VR#:M4/?$
Получить длину текста
         # – z-переменная
         $ – любая числовая переменная (для записи длины)
В длину включаются пробелы.


!!VR#:M5/?$
Получить кол-во пробелов в начале текстовой переменной
         # – z-переменная
         $ – любая числовая переменная (для записи номера позиции)
Счёт начинается с 0 (нет пробелов). Если переменная (текстовая) пуста, позиция равна -1.


!!VR#:M6/?$
Получить номер последнего символа (не пробела)
         # – z-переменная
         $ – любая числовая переменная (для записи номера позиции)
Счёт начинается с 0. Если переменная пуста, позиция равна 0.
Пример (показать)


!!VR$:Vz#
Конвертировать текст в целое значение или значение с плавающей запятой.
         $ – любая переменная для интегрирования (f…t, v#, w#, x#, y#) или с плавающей запятой (e)
         z# – переменная-исходник (z)
Вы можете использовать синтаксис …е… (инженерский стандарт чисел с плавающей запятой). Если значение не может быть конвертировано, то устанавливается на 0. Знаки пробела игнорируются.
Пример (показать)

«123» → 123
«+123» → 123
«-123» → -123
«.325» → 0.325
«-1.25e+1» → -12.5 (-1.25 * 10^1)


S^Текст^
Установить текст текстовой переменной.

S#
Копировать текст из переменной z# в текущую.
Комментарий (показать)

Здесь можно указывать переменную без префикса z. ERM учитывает только индекс.
В ERA рекомендовано писать с префиксом z.


!!VRz#1:Uz#2
!!VRz#1:U^текст^

Подтекстный поиск в z-переменных.
Поиск слова/символа/знака из переменной z#2 или из строки ^текст^ в переменной z#1, с последующей установой флага 1 на ИСТИНА, если найдено.
В обоих случаях z-переменная может быть любого типа (обычная, локальная, ERT).
Эта команда может быть с лёгкостью ERT'ифицирована.
Комментарий (показать)

Не зависит от регистра. Так «Меч» будет найден и в «мЕЧ». Пробелы игнорируются, так что «Привет    », «   привЕт» и «   ПривЕт      » - все будут значить просто "привет". Но эта команда не пропускает пробелы, если после них идёт какой-либо текст. Так что
«привет,    это я» и «привет,  это я» будут различными.
Пример (показать)
Здесь вы получите два сообщения: «Да!» и «Снова да!»


Соединение текстовых переменных

+#
Соединить текстовую переменную z# с текущей (добавляется в конец)

+^текст^
Соединить текстовую переменную z# с определённым текстом (добавляется в конец)