Здравствуйте...
Algor, я уже сотый раз пересматриваю эти так называемые "флаги и переменные" и ничего там не могу для себя отыскать.. Я сначала думал, что может и на самом деле просмотрел что-то, но так и не пойму зачем Вы меня туда всё время перенаправляете.. Там написана, грубо говоря, бурда, непонятная мне вообще и нет никаких примеров!
Я даже на работе помню два дня потратил, чтобы детально всё там прочитать, но написано, ещё раз повторюсь - ерунда!
Вот как из этого можно что-то выбрать Введение
Флаги и переменные - это главнейшая особенность ERM для трансформации Героев в высокодинамичную игру, отвечающую на действия игрока. Пока ERM скрипты могут быть написаны без использования флагов и переменных, но у вас есть великолепный шанс повысить свои навыки, и как факт, количество используемых команд, требующие использование флагов и переменных.
Условные флаги
Флаг - это условный рычаг, который имеет положение Истина (1) или Ложь (0). Как и двоичные числа, они имеют только два статуса. В начале все флаги установлены на Ложь (0). Значение 1 (Истина) обычно называют "установлен", 0 (ложь) - "не установлен".
Установка флагов
В ERM есть 1000 условных флагов и каждый из них обладает своим номером от 1 до 1000. Флаги устанавливаются с помощью ресейвера IF, используя опцию V. Чтобы установить флаг на Истину, используйте значение 1, а чтобы на ложь, значение 0.
Например: установим флаг 4 на Истину (1):
!!IF:V4/1;
В дополнение к опции V, еще есть несколько опций ресейвера IF для установки первых 10 флагов за раз. Смотрите ресейвер IF для подробной информации.
Использование условных флагов
Обычно флаги используют для проверок на что-либо как условие. Например, если вы хотите, чтобы при посещении объекта на карте показывалось сообщение только в первый раз любому герою, и никогда больше, вы можете использовать флаги для этой цели; сообщение будет показываться, если флаг был ложь (не установлен) и дальнейшей командой вы изменили его значение на Истину (1), так, если в следующий раз объект будет посещен, сообщение не будет показываться. Символ для определения флага (или переменной) - & (амперсанд), который обязательно предшествует значению флага (переменной) в ресейверах, или предшествуя точке с запятой в триггерах. Амперсанд указывает, что нужно проверить флаг. Если тест для флага-"истины" (т.е. установленного на 1), просто используется номер флага. Если тест для флага-"лжи" (т.е. установленного на 0), используют негативный знак (-) перед номером. Так, если нужен флаг №5 как Истина, вы должны использовать &5, а если флаг нужен как №5 - ложь, вы должны использовать &-5.
Пример кода:
ZVSE
!?OB10/14/0; - проверим, посещается ли объект в 10/14/0
!!IF&-5:M^Входи. Я ждал тебя.^; - показать это сообщение, если флаг №5 - ложь
!!IF:V5/1; - установить флаг №5 на истину
Проверка нескольких флагов
Иногда вам требуется проверить более одного флага или переменных. Чтобы сделать это, отделите каждый флаг (переменную) слешем (/). Если существует несколько флагов или переменных для проверки, все условия должны быть выполнены перед выполнением ресейвера. Например, если вы хотите, чтобы действовало, когда флаг №7 - истина, флаг №8 - ложь, и флаг 10 - истина, если хоть один из флагов будет иметь другое значение, сообщение не появится.
Пример кода:
ZVSE
!?OB10/14/0; - проверим, посещается ли объект в 10/14/0
!!IF&7/-8/10:M^Входи. Я ждал тебя.^; - данное сообщение будет показано, только если флаги 7 и 10 будут истиной, а флаг 8 - ложью.
Инициализация флагов
При инициализации флаги 1...500 будут сброшены на Ложь (0), но флаги 501...1000 будут хранить свое последнее значение, если вы начали новую карту без перезапуска самой игры. Они могут быть использованы для кампаний, в которых вы хотите использовать значения флагов для последующих карт в кампаниях. Если вы избегаете потенциальной возможности того, что флаги будут отличатся от лжи (т.е, вам нужно, чтобы все флаги были 0), установите флаги от 500 и дальше на 0 в начале карты (или в начале скрипта (команда IF:V)), которые вы хотите использовать.
Особые флаги
Некоторые флаги имеют специализированные значения в игре.
Флаг 1 используется используется некоторыми командами для хранения результата и определения результата условных флагов (проверить значение) (см. выше). Следовательно, не рекомендуется использовать флаг 1 для необходимых в дальнейшем значений. Или для верности, не используйте этот флаг, ведь если и другие.
Флаг 996 автоматически очищается (устанавливается на ложь), когда выполняется любая опция !!LE и устанавливается на 1 (истина) если там (в локации, определенной командой LE) нет локального события (помните, что события исчезают после первого посещения).
Флаг 997 и 998 хранят следующее:
Флаг 997 хранит мультиплеерный статус битвы.
=0 (ложь) если это местная битва,
=1 (истина) если это интернет - битва.
Если флаг 997=1, тогда флаг 998=0, ИИ атакует игрока-человека на другом компьютере.
Заметьте, что битва запускается только на одном ПК, но этот ПК удален от текущего активного игрока.
Флаг 998=1, если битва Человек на Человека. Здесь у нас реальная мультиплеерная битва.
Вы можете использовать оба флага в триггерах BA0 или BA50, например:
!?BA0&997/998;
...
Скрипт сработает, если это битва Человек на Человека (мультиплеер)
Флаг 999, который устанавливается на 1, если текущий игрок (который активировал триггер) - игрок "здесь" и 0, если он или она на другом ПК. ИИ имеет всегда значение 0. Если флаг 999 установлен, вы можете быть уверены, что эта битва - человек против ИИ, причем человек за данным компьютером. Работает для всех триггеров.
Флаг 1000 имеет два значения, зависящих от места использования (триггер битвы или нет). Для не-битвы этот флаг будет установлен на истину, когда хозяин героя, игрок-человек, посетит объект на карте, триггер, как объект или субъект. Если компьютерный (ИИ) герой посетил объект, флаг 1000 будет установлен на ложь. Опять же, вы можете установить значение этого флага, но это не безопасно, поскольку вы можете проверить это значение в определенном скрипте, герой ли игрока или ИИ.
Поэтому, если проверять условные флаги, -1000 значит AI, а 1000 значит человек.
Для боевых триггеров (например, !?BA, !?BG, !?BF, и т.д.) флаг 1000 проверяет, настоящая или теоретическая (ИИ) битва. Если флаг 1000=1 (истина), это значит, что битва настоящая (как минимум имеется один оппонент-человек). Если 1000=0 (ложь), это значит, что теоретическая AI-битва.
Показ значений флагов и переменных в сообщениях
Чтобы показать значение флага (0 или 1) в сообщении, используйте %F, далее - номер флага для показа статуса (1...1000). Для показа значения флага №4 в сообщении, вы должны использовать %F4. Показ значения флага может быть полезен как средство помощи в отладке неработающего скрипта.
Пример:
!!IF:M^Значение флага 4 равно %F4.^;
Сравнение значений
Для сравнения игровых параметров к определенному значению, вы можете использовать следующий способ: ...[знак сравнения] значение...
Результат сравнения записывается во флаг 1. Вы можете использовать это для дальнейших сообщений.
Пример сравнения значений, используя GE-ресейвер:
!!GE100:F5 - установить день первого появления: 5 для Глобального события (стандартный синтаксис)
!!GE100:F=5 - проверить, если день первого появления 5 и установить условный флаг 1 на 0, если не так, на 1, если верно.
!!GE100:F<>5 - проверить, если день первого появления НЕ 5 и установить условный флаг 1 на 0, если не так, на 1, если верно.
!!GE100:F><5 - см. выше
!!GE100:F>5 - проверить, если день первого появления более 5 и установить условный флаг 1 на...
!!GE100:F>=5 - проверить, если день первого появления более или равный 5 и становить условный флаг 1 на...
!!GE100:F=>5 - см. выше
!!GE100:F<5 - проверить, если день первого появления менее 5 и установить условный флаг 1 на...
!!GE100:F<=5 - проверить, если день первого появления меньше или равен 5 и установить условный флаг 1 на...
!!GE100:F=<5 - см. выше
Переменные
Переменные похожи на флаги, т.к. они могут быть установлены и проверены, но отличаются от них тем, что они могут принимать гораздо большее количество значений, чем истина и ложь. В большинстве случаев, переменные используют вместо какого-либо числа. Также, содержимое переменных (установленные значения) могут быть изменены в любое время простым установлением нового значения. Есть еще несколько различных типов переменных, которые могут быть использованы для различных заданий в скрипте.
Если параметр команды показывается как $, это значит, что это значение может быть записано в переменную. Если параметр показан как #, это значит, что его можно только установить, но не прочитать. И если он показан как ?$, это значит, что параметр можно прочитать, но не установить.
Типы переменных и их возможные значения
Все числовые переменные варьируются в значениях от -2147483647 до +2147483647
a - еще не используется
b - еще не используется
c - хранит значение текущего дня (номер игрового дня)
d - добавляет или убавляет значения от переменной
e1...e100 - переменные с плавающей запятой
e-1...e-100 - основные триггерные переменные с плавающей запятой
f...t - стандартные переменные (еще называются быстрыми переменными)
v1...v10000 - стандартные переменные
w1...w200 - переменные героя (уникальны для каждого героя)
x1...x16 - параметры функции (зависит от функции)
y1...y100 - функциональные переменные (уникальны для каждой функции)
y-1...y-100 - основные триггерные переменные
z1...z1000 - текстовые переменные
z-1...z-10 - функциональные текстовые переменные (уникальны для каждой функции)
Запись переменных
Есть несколько путей записи переменных. Ресейвер VR может быть использован для установки значения любой переменной и может быть еще использована для арифметических операций с переменными, такими как сложение, вычитание, умножение или деление. Исключение - переменные z, которые используются для установления текста, в отличии он числовых переменных.
Пример установки значение 17 переменной v5:
!!VRv5:S17;
Второй путь записи значений в переменные - это считывание значений с объектов или установок игры, таких, как номер героя, значение золота, количество драг. камней у игрока 4, или тип или подтип любого объекта. Для установки значения через этот путь, после команды используется знак вопроса (?), далее следует переменная, в которой и будет храниться значение.
Пример установки типа объекта в координатах x=10, y=15, уровень=1 (подземелье) в переменную j: !!OB10/15/1:T?j;
Пример установки количества кристаллов (тип ресурса - 4), которые на данный момент есть у игрока зеленого (номер 3) в переменную v12:
!!OW:R3/4/?v12;
Третий способ установки переменной - внутренняя ссылка. Некоторые ERM команды требуют номер переменной v или z, а не букву. В этом случае, вместо использования знака вопроса, вы просто вводите номер параметра и значение командой для данной переменной (например, если команде нужен номер для v-переменной, вы ставите значение 17, которое будет установлено в переменную v17).
Триггерные локальные переменные
y-1...y-100 - целые переменные
e-1...e-100 - переменные с плавающей запятой
Вы можете использовать эти переменные там, где y и e переменные могли использоваться раньше.
Характерные особенности:
1. Они не сохраняются при сохранении игры. Фактически, каждая секция триггера будет полностью завершена, и вы не сможете сохранить и загрузить игру в работе триггера.
2. Эти переменные различны для каждого триггера, и если один триггер работает внутри другого, они будут иметь разные значения этих переменных. Как вы можете видеть, вы не можете передавать значения из триггера к триггеру используя эти переменные.
3. Все переменные установлены на 0 при старте любого триггера.
Использование переменных вместо чисел
Раз вы можете устанавливать значения переменных, вы можете использовать эти переменные вместо чисел своего кода. Почти везде, где вы можете просто ввести число, вы можете использовать любую переменную, содержащую значение, которое будет использоваться, если оно приемлемо по диапазону значений опции. Исключения - это переменные z, использующиеся для текстовых значений, таких, как имя героя, название артефакта, или слово или фраза. Очевидно, что они должны будут использоваться с командами, отличными от числовых.
Пример использования v-переменных для установки баллов заклинания героев
!!VRv200:R50; - генерировать случайное значение между 0 и 50 в переменную v200
!!HE155:Iv200; - установить герою № 155 баллы заклинания на значение, сгенерированное в переменной v200
Пример использования z-переменных: добавление "Сэр" к начальному имени героя
!!VRz50:S^Сэр ^; - установить слово "Сэр" в переменную z50
!!HE-1:B0/?z51; - установить текущее имя героя в переменную z51
!!VRz52:S50 +z51; - добавить содержимое z51 к z50 и записать в переменную z52
!!HE-1:B0/z52; - установить текущему герою имя, находящееся в переменной z52
Замечание: оба предыдущих примера кода должны иметь триггер.
Условия с переменными
Как и флаги, вы можете использовать значения одной или более переменных как условия. Принцип действия тот же, однако, вместо номера флага (с или без знака минуса впереди), вы вводите имя переменной, далее, за знаком сравнения (=, >, <, <>, >=, или <=) - число (или переменную), с чем вы хотите сравнить.
Пример условия, если v1 больше либо равно 7, показать сообщение:
!!IF&v1>=7:M^Вы были мудры, сделав этот выбор, герой!^;
Пример условия, сравнивающего текст, установленный в переменную z1, с текстом в переменной z2, и если они одинаковы, показать сообщение:
!!IF&z1=z2:M^Вы ввели одинаковые значения!^;
Проверка нескольких переменных
Выполняется тем же путем, что и с флагами, отделяя каждое условие слешем (/). Вы можете смешивать и сравнивать флаги и переменные в одном условии, как в примере ниже, который дает текущему герою артефакт Дивный Доспех, но только если выполнены условия (установлены флаги и переменные с определенным значением):
!!HE-1&7/v2>6/-1/y4=v8:A31;
В примере выше героя получит артефакт, если выполнятся условия::
1. Флаг 7 должен быть Истиной (1);
2. v2-переменная должна быть больше 6;
3. Флаг 1 должен быть ложью (0);
4. y4-переменная должна быть равна v8.
Только если все четыре условия будут выполнены, герой получит артефакт.
Синтаксис проверки - условие ИЛИ: |
!(!|?|#)XX&c1/c2/c3|c4/c5/c6:...;
Полное условие будет таким: (c1 И c2 И c3) ИЛИ c4 ИЛИ c5 ИЛИ c6
Комментарий:
- секция ИЛИ может быть одна, либо обязательно после секции И
- если есть только секция ИЛИ, полное условие будет истиной, если хотя бы одно состояние ИЛИ - истина
- может быть до 16 условий И и до 16 условий ИЛИ
Другие типы переменных
Как ранее упоминалось, есть несколько различных типов переменных, каждая используется для разных нужд кода.
Стандартные переменные (f-t) и (v1-v10000) могут использоваться практически повсеместно, кроме того, быстрые переменные могут хранить числа больше, чем v-переменные, а определенные команды требуют номер v-переменной для записи результата. Оба типа используются для записи целых значений. В ERM нет переменных, способных записывать числа с десятичными знаками.
Переменные героев (w1-w200) хранят тот же тип информации, что и v-переменные. но они уникальны для каждого героя, Т.е. два разных героя могут иметь разные значения, записанные в их переменных w1 (или w2, w10 или более до w200). Для установки или проверки одной или более w-переменных вы сначала должны установить номер героя, у которого будет браться значение командой IF:W. Например, если вы хотите установить или проверить w5 героя 27 (Джем), вы сначала должны вставить
!!IF:W27;
перед условием, относящимся к переменной w5. Для текущего героя используйте -1 вместо номера. Так,
!!IF:W-1;
означает, что следующие обращения к переменным w относятся к текущему герою (до использования другой команды IF:W)
См. также: IF:W, ресейвер VR
Исключение: !!HT:W. Там вы можете использовать только первые 100 w-переменных.
Переменные - параметры функции (x1-x16) также хранят те же типы значений, что и переменные v и w (числовые). Но эти параметры существуют лишь внутри функций (кода после триггера функции) и пропускают в функцию значения командой P (P - параметры). См. ресейвер FU для детальной информации о функциях. Если вы вызываете функцию из другой функции, любые x-переменные, которые не были установлены (как новые параметры), хранят свое старое значение в новой функции. Когда используются с ресейвером DO, параметр x16 хранит номер круга функции.
Локальные переменные (y1-y100) похожи на x-переменные тем, что используются лишь в функциях. Но они уникальны для каждой функции, так, если вы имеете 4 разных функции, каждая имеет свое значение переменной y. Как большинство других переменных, они хранят только числовые значения. Также эти переменные могут быть использованы вне функции, но помните, что при срабатывании другого триггера (HL, BA и т.д.) в середине вашего скрипта, значения этих переменных могут уничтожиться.
Переменные с плавающей запятой (e1..e100) Они используются в основном как y-переменные:
- не записываются в сохраненной игре;
- уникальны для каждой функции;
- установлены на 0 при старте каждой функции/круга функции;
- восстанавливаются при выходе с другой функции.
Вы можете использовать их для установки параметров, но главная особенность - использование выражений с плавающими запятыми и их дальнейшая запись в целое число.
Вы можете использовать команды +,-,* и : ресейвера VR для e-переменных с плавающей запятой, хотя все числа в выражении должны быть целыми.
Вы также можете показать значение e-переменной в сообщении, используя команду %E#. В этом случае будет показано только 3 знака после запятой.
Пример:
!#VRe5:S32;
!#IF:M^e5 теперь имеет значение "%E5"^; [ e5=32.0 ]
!#VRe5:*5;
!#IF:M^e5 теперь имеет значение "%E5"^; [ e5=160.0 ]
!#VRe5::200;
!#IF:M^e5 теперь имеет значение "%E5"^; [ e5=0.8 ]
!#VRe5:+e5*10+5:10;
!#IF:M^e5 теперь имеет значение "%E5"^; [ e5=2.1 ]
!#VRv100:Se5;
!#IF:M^v100 теперь имеет значение "%V100"^; [ v100=2 ]
Текстовые переменные (z1-z1000) хранят символы (один или более) и не могут быть использованы для записи числовых переменных; они могут записывать число как текст, но число нельзя будет приравнять или выполнить с ним арифметические действия в любом виде. z-переменные могут быть соединены, но имеют ограничение в 512 символов каждая. Они могут быть сравнены с другими z-переменными. Когда сравниваются две z-переменных, сравнение не зависит от регистра. Так, если в переменной z1 записано "Это", она будет равна переменной z2, в которой записано "эТО" или любая другая комбинация больших и малых символов. При сравнении пустые линии или строки z-переменных игнорируются. 500 новых z-переменных добавлено в ERM 2.60 (WoG 3.57) к уже существующим 500, но помните, что z501-z1000 не сохраняют свое значение между разными картами.
Для этого используйте z301-z500.
Замечание: сообщения в тестовых переменных не должны содержать символов ; и ^
Пример:
!!VRz567:S^Неправильный текст ; Он содержит ^специальные элементы^. ^;
!!VRz567:S^Это правильный текст. Он не содержит "специальных элементов". ^;
!!IF:M^Это правильный текст. Он не содержит специальных элементов. ^;
Локальные текстовые переменные (z-1-z-10) аналогичны y-переменным, но записывают значение как z-переменные. Если вы установить одну затем вызовете функцию или круги функций, устанавливающие другие значения, при возвращении к начальной функции вы получите значение переменной, равной установленной до вызова функции. Так вы можете использовать передачу переменной от функции к функции, но не можете использовать возвращенное значение. Как обычные z-переменные, они ограничены 512 символами.
Специальные переменные
В ERM есть несколько переменных, имеющих специальное значение. Как флаги 1 и 1000, специальные переменные могут установлены как вы захотите и в любое время, но это не рекомендуется, т.к. есть риск, что другие команды могут использовать их.
Переменная v1 используется для записи результата некоторых команд. Это не частое явление, вы можете использовать ее в своих скриптах для хранения выражения, но на непродолжительное время; другими словами, не устанавливайте значение в переменную v1, если вы хотите хранить ее значение неизменным долгое время.
Переменная z1 используется для записи текста, введенного игроком в расширенном окне диалога. Если вы не используете расширенные диалоговые окна, вы можете не беспокоиться об этом, но все же лучше не использовать z1 для долговременного хранения.
Переменные v998, v999, и v1000 всегда записывают позицию объекта или события, которое посетил текущий герой, или координаты героя (например, в триггере !?HM). Лучше оставить эти переменные исключительно для сравнения их значений или копировать их значения в другие переменные
Переменная x16 (используется в функциях, вызываемых ресейвером DO), хранит текущий номер круга функции. Например, если функция повторяется 12 раз (от 1 до 12), первый раз x16 будет равна значению 1, второй раз - 2 и т.д. Если вы измените значение переменной x16, вы сможете "ускорить" или "замедлить" выполнение функции, или выйти из функции, установив значение x16 на конечное значение (или большее), использованное в ресейвере DO.
Инициализация переменных
Как и флаги, все переменные в начале игры имеют значение 0. Однако, как и флаги, некоторые переменные не будут сброшены между картами без перезапуска самой игры. Опять же, это может помочь вам в создании кампаний.
Когда вы начинаете игру, следующие переменные будут установлены на 0 или примут пустое значение "" (для z-переменных): f...t, v1...v500, v1001-v10000, z1...z300, z501-z1000, w1-w50.
Следующие переменные будут сохранять свое текущее значение между играми (только если вы не перезапустите игру): v501-v1000, z301-z500, w51-w200.
Показ переменных в сообщениях
Как и флаги, значения переменных могут быть показаны в сообщениях, используя специальный код для типа переменной:
%V# - показать быструю или v-переменную. # = f...t или 1...10000
%W# - показать переменную героя. # = от 1 до 200
%X# - показать параметр переменной. # = от 1 до 16
%Y# - показать значение функциональной переменной y. # = от 1 до 100
%Z# - показать текстовую переменную. # = от 1 до 500
%$macro$ - показать переменную, ассоциируемую с макро-именем "macro"
Это важно - для показа значение переменных всегда используются большая буква после знака %, хотя в отношении к переменным всегда используются маленькие буквы..
Пример показа сообщения с быстрой переменной j, обычной переменной v21 и z-переменной z100 в текстовой переменной:
!!IF:M^Простите, %Z100, но вы имеете только %Vj золота, вам еще не хватает %V21 золота для покупки этого артефакта.^;
Здесь подразумевается, что в переменной z100 хранится имя героя (скажем, это Клэнси) и в переменной j хранится количество золота у игрока (скажем, 750) и переменная v21 содержит цену артефакта (скажем, 2000), сообщение будет выглядеть так:
Простите, Клэнси, но вы имеете только 750 золота, вам нужно 2000 золота для покупки этого артефакта.
Внедрение переменных как часть текстовых переменных
Используя команды для показа сообщений (см. выше), вы можете добавлять переменные как часть текстовой переменной. Это удобный способ контакта с переменной z
Пример комбинирования нескольких z-переменных и v-переменных вместе в одной z-переменной:
!!VRz10:S^Клэнси^; - установить в z10 значение "Клэнси"
!!VRz11:S^зеленую^; - установить в z11 значение "зеленый"
!!VRz12:S^красная^; - установить в z12 значение "красный"
!!VRv25:S1 R1000; - установить случайное значение от 1 до 1000 в переменную v25
!!VRz100:S^%Z10 всегда хотел иметь %Z11 лошадь, но его лошадь была %Z12. Ему было %V25 лет, и %Z10 никогда не видел %Z11 лошадь за всю свою жизнь!^; - установить этот текст в переменную z100
!!IF:M^%Z100.^; - показать текст, записанный в переменной z100
Здесь подразумевается генерация случайного числа и запись его в переменную v25 (пусть будет 247), следующее сообщение ниже будет показано игроку:
Клэнси всегда хотел иметь зеленую лошадь, но его лошадь была красная. Ему было 247 лет, и Клэнси никогда не видел зеленую лошадь за всю свою жизнь!
Косвенные ссылки на переменные
Некоторые ресейверы, требующие координат на карте (x, y и уровень) могут быть использованы с косвенными ссылками на переменные. Это одно число, которое идет первым и последующие переменные v содержат x, y и уровень для использования. Например, если у вас значение x записано в переменную v100, y - в v101 и уровень в v102, вы можете использовать число 100 в ресейвере для точки, находящейся в этих координатах.
Пример использования локальных событий с косвенными ссылками:
!!VRv100:S10; - число, используемое как х
!!VRv101:S15; - число, используемое как y
!!VRv102:S0; - число, используемое как уровень
!!LE100:M^Странно... Здесь нет ни звука жизни.^; - установить сообщение в событии, координаты которого лежат в значениях v100, v101, v102
Косвенные переменные
Иногда полезно уметь обращаться к переменной (например, число между 1 и 1000 для переменных v), номер которой записан в другой переменной. В этом случае вы можете использовать повторение функции как в ресейвере DO для записи информации в переменную. Взамен вставки номера после v, вы можете вставить другую переменную и значение, сохраненное в ней, будет номером переменной.
Пример индексных переменных v, используя y-переменные:
!!VRy10:S7;
!!VRvy10:S5;
!!IF:M^Значение переменной v7 равно %V7.^;
Будет показано следующее сообщение:
Значение переменной v7 равно 5.
Это потому, что y10 равно 7. И vy10 значит, что v-переменная имеет номер, сохраненный в переменной y10, которая имеет значение 7. Следовательно, v7 становится равной 5.
Макросы
Если вы хотите обращаться к переменной по более значимому имени, вы можете установить макрос ресейвером MC. Макрос может быть использован почти в любом месте, где используется переменная и взаимодействует с переменной.
Макрос - это ссылка с именем, ограниченная знаками доллара: $treasure$.
Для большей информации по макросам см. ресейвер MC.
Руководство по использованию переменных
Вы можете использовать любую комбинацию номеров переменных в вашем скрипте, но желательней использовать переменные из какого-либо промежутка, чтобы затем можно было применять скрипт к карте без страха перекрытия переменных друг другом (естественно, вы будете знать, какие использовали в скрипте, и сможете изменить их при возникновении неполадок). Также рекомендуется для временных данных (нужных только в данном триггере) использовать быстрые переменные, а для долговременных - обычные глобальные. Кроме того, неплохо использовать y-переменные в функции, так освобождается больше обычных переменных для вашего скрипта. Переменные героя (w) будут полезны только для специальных нужд, нет нужды записывать в них какие-либо долгосрочные данные, если они не нужны самому герою (т.е. скрипт будет действовать не только на героя).
Использование y-переменных вне функций
Есть сто y-переменных [1...100]. Вы можете использовать их почти везде. Но каждый триггер функции сохраняет все текущие значения y в специальных слотах, сбрасывая их на 0 и после выполнения последнего ресейвера восстанавливает их обратно.
Пример:
ZVSE
!#VRy15:S3;
....
!?...;
!!IF:M^%Y15^; покажется 3
...
!!FU234:P;
!!IF:M^%Y15^; покажется 3
...
!?FU234;
!!IF:M^%Y15^; покажется 0
!!VRy15:S5;
!!IF:M^%Y15^; покажется 5
!?FU234;
!!IF:M^%Y15^; покажется 0
!!VRy15:S7;
!!IF:M^%Y15^; покажется 7
Дополнительные примеры:
Как использовать переменные героя?
Для использования w-переменных, сперва вы должны использовать команду !!IF для героя, у которого хотите изменять или узнать (используйте -1 для текущего героя). Использовав эту команду. все w-переменные далее ищутся у указанного героя до тех пор, пока вы не смените героя. Используйте эту команду перед установкой, тестированием или проверкой w-переменных. Так, если вам нужно использовать w-переменные героя #147 (Дракон), команда будет такова:
!!IF:W147;
Тогда вы сможете установить переменную w1 в точности так же, как и любую другую переменную (см. пример ниже).
Вы имеете 1 объект и 1 событие. Если герой посетил объект, событие узнает это.
Хорошо, поставим объект Волшебный колодец в позицию 10/15/0.
Поставим событие в 27/18/0.
ZVSE
!?OB10/15/0;
!!IF:W-1;
!!VRw1:S1;
!?LE27/18/0;
!!IF:W-1;
!!IF&w1=0:M^Принесите мне воды из волшебного колодца!^;
!!IF&w1=1:M^Вы принесли мне воды! Я отблагодарю вас!^;
Как я могу узнать номер текущего дня?
Это просто.
!!VRv123:Sc;
Модификатор "с" работает так же, как и "d", но добавляет текущий день.
Вы можете добавлять текущий день к любым другим значениям.
!!HE-1:Fcd/c/1/2;
Добавить к атаке текущего героя номер текущего дня, установить защиту равную номеру текущего дня.
Подсказка о генерации случайного значения
Давайте поговорим о генерировании чисел от 1-100, но кроме 42, 81, или 99.
Здесь 3 ненужных номера, так что генерируется число от 1 до 97. Затем если это 42 или выше, добавляем 1. Затем, если это 81 или выше, добавляем 1. Если это 99 или выше, добавляем 1. Вы теперь имеете случайное значение, от 1 до 100, но кроме 42, 81, или 99.
Так, если вы хотите генерировать число от 1 до 100, исключая 10-19 и 73, вы генерируете число от 1 до 89, затем, если оно 10 или выше, добавляете 10, если 73 или выше, добавляете 1.
- я здесь ничего не могу понять. Есть что-то простенькое разобранное, но к моему сокращению никакого образа не имеет!
Цитата Quote:Help'е, скачай ERA Scripts
- нет, в ЭРУ я даже заглядывать не буду.. Она кардинально отличается от ВОГа и то что там сделано - не сработает в ВОГ и наоборот!
Quote:Все те сотни скриптов, что ты привел как пример, навскидку, можно сократить в 25 раз используя FU и v998/999/1000. Отдельные - в 100 раз. Вот и решение нехватки памяти.
- понятие не имею как это сделать и тем более во столько раз
|