IPB

Здравствуйте, гость ( Вход | Регистрация )

11 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Обучение ERM, ERM для чайников :)
SnoRT
сообщение 04 Jun 2006, 09:48 (Сообщение отредактировал Bourn - 23 Jul 2006, 21:34)
Сообщение #1

Супер-злодей
Сообщений: 1 431
Спасибо сказали: 16 раз




Здесь будут разбираться разные скрипты (сложные и не очень) и объясняться сам процесс ЕРМ'ирования с самого начало и со всеми деталями и подробностями. Soul Reaver у нас назначается главным по обучению новичков laugh.gif
Таааккссс... Поработаю на благо настоящих героев. Что бы такое бы написать интересное?? Щас, полазию по своим картам, может чё-нить вспомню... Ничё интересного... Ну ладно, давайте например, создадим из пустого артефакта номер 168 (такая кожаная бронька из Диабло 2), к примеру, плащ глины. А лучше плащ в глине smile.gif А то грязный он какой-то... Будет, например, приносить носящему герою по 13 земляных элементалей в неделю, прибавлять ко всем первичным параметрам по 3, давать герою экспертную магию земли и защищать всё войско героя заклинанием Защита от земли. Предупреждаю сразу, скрипт не для новичков, а так, для более менее среднего уровня. Для самых новеньких в ЕРМ должен писать Soul Reaver. Следующим постом посмотрим smile.gif И так, приступим:

ZVSE (Ну как вы должны знать, без этого не обходится ни один скрипт)
Настройки самого артефакта
!#VRz10:S^Плащ из глины^; (Запомним в переменную z10 название артефакта)
!#VRz11:S^Приносит герою по 13 земляных элементалей в неделю, прибавляет ко всем первичным параметрам по 3, даёт герою экспертную магию земли и защищает всё его войско заклинанием Защита от земли.^; (Запомним в переменную z11 описние плаща)
!#UN:A168/1/5000; (Даём нашему артефакту цену 5000 золотых)
!#UN:A168/3/16; (Ценность нашего плаща. Он у нас реликт. Это 16)
!#UN:A168/9/10; (Присвоим нашему плащу название, запомненное в z10)
!#UN:A168/10/11; (Присвоим нашему плащу описание, запомненное в z11)

Установка прибавления земляных элементалей
!#VRv20:S13*65536+113; (Дадим заранее перенной v20 такое значение. Если вставить его в окно !!IF:Q под подтип картинки, то у нас под картинкой будет написано не просто элементали земли, а будет указано их точное колличество. 13.)
!#TM10:S1/999/7/255; (Сперва создадим таймер. Пронумеруем его 10-тым номером. 1 - это день первого появления, 999 - последнего, 7 - это интервал появлений (т.е. неделя), 255 - значит, что появляется для игроков каждого цвета.)
!?TM10; (Всё что будет написано дальше - это условия, выполняющиеся после пояления нашего таймера.)
!!OW:I-1/?v10; (Проверяем, игрок текущего цвета AI или человек. Если v10=0, значит человек. Если v10=1, то компьютер.)
!!VRv11:S0; (Ставим переменной v10 значение 0. Позже объясню зачем.)
!!DO10/0/155/1&v10=0:P; (Если текущий игок - человек, а не ИИ, то запускаем функцию номер 10. Приёмник !!DO отличается от !!FU тем, что одну и ту же функцию выполняет несколько раз подряд. Мы поставили 155. Именно столько в игре существует героев.)
!?FU10; (Так, теперь сама эта функция 10. Которая повторится 155 раз.)
!!HEv11:A2/168/d/?v12; (Проверяем, надет ли плащ у героя под номером v11 (v11 изначально мы установили на 0). Если v12=1, то надет.)
!!HEv11&v12=1:С2/113/13/0; (Если плащ одет, то даём этому герою 13 элементалей. 113 - это номер земляных элементалей.)
!!HEv11&v12=1:O?v13; (Теперь узнаем, какому цвету принадлежит герой, получивший войско.)
!!OW&v12=1:Iv13/?v14; (Определяем полученный цвет на AI или игрока.)
!!HEv11&v12=1/v14=0:B0/?z10; (Если игрок, который получил элементалей, человек, а не ИИ, то определяем его имя.)
!!IF&v12=1/v14=0:Q1/21/v20/1^К герою по имени %Z10 присоединяются земляные элементали благодаря плащу из глины.^; (Сообщение с текстом и картинкой элементалей. Выводится только если героем, которому даются существа, владеет игрок, а не компьютер. Вместо "%Z10" будет отображаться имя героя, которое мы узнали чуть раньше.)
!!VRv11:Sd1; (После всего этого в любом случае увеличиваем переменную v11 на 1, чтобы при следующем повторе функции проверялся уже герой не под номером 0, а следующий по списку. И так все 155 героев.)

Прибавление к параметрам первичных навыков
(Здесь вообще всё просто.)
!?AE1&v998=168; (Триггер на одевание артефакта номер 168 (наш плащ).)
!!HE-1:Fd3/d3/d3/d3; (Когда герой его одевает - получает по три ко всем параметрам.)
!?AE0&v998=168; (Триггер на снятие артефакта номер 168 (наш плащ).)
!!HE-1:Fd-3/d-3/d-3/d-3; (Когда герой его снимает - теряет по три ко всем параметрам.)

Экспертная магия земли.
!?AE1&v998=168; (Триггер на одевание артефакта номер 168 (наш плащ).)
!!HE-1:S17/?v21; (Запоминаем наличие у героя навыка магии земли до артефакта (v21=0 - нет навыка, v21=1 - базовый, v21=2 - продвинутый, v21=3 - эксперт)
!!HE-1:S17/3; (В любом случае даём герою эксперт земли.Если был базовый или продвинутый уровень, то он заменяется на экспертный.)
!?AE0&v998=168; (Триггер на снятие артефакта номер 168 (наш плащ).)
!!HE-1:S17/v21; (При снятии плаща возвращаем ему его старое значение навыка земли.)

Защита от земли во время боя.
!?BA0; (Триггер на начало битвы.)
!!BA:H0/?v30; (Определяем номер героя-нападающего (слева).)
!!BA:H1/?v31; (Определяем номер героя-защищающегося (справа).)
!!HEv30&v30<>-2:A2/168/d/?v32; (Если герой слева присутствует (v30<>-2), то проверяем у него наличие плаща.)
!!HEv31&v31<>-2:A2/168/d/?v33; (Если герой справа присутствует (v31<>-2), то проверяем у него наличие плаща.)
!!VRv25&v30<>-2/v32=1:S0; (Если плащ надет у левого героя, ставим v25 на 0.)
!!DO23/0/20/1&v30<>-2/v32=1:P; (Если плащ надет, запускаем функцию 23 на 20 раз.)
!!VRv25&v31<>-2/v33=1:S21; (Если плащ надет у правого героя, ставим v25 на 21.)
!!DO23/0/20/1&v31<>-2/v33=1:P; (Если плащ надет, запускаем функцию 23 на 20 раз.)
!?FU23; (Функция 23.)
!!BMv25:M33/99/3; (Ставим монстру v25 (если он есть) заклинание защита от земли экспертного уровня на 99 раундов.)
!!VRv25:Sd1; (Увеличиваем переменную v25 на один, чтобы при следующем обороте наложить заклинание уже на следующего монстра. Заметьте, что у правого и у левого героя переменная v25 будет принимать разные значения.)


Вот как будет выглядеть рабочий скрипт:
Код
ZVSE
!#VRz10:S^Плащ из глины^;
!#VRz11:S^Приносит герою по 13 земляных элементалей в неделю, прибавляет ко всем первичным параметрам по 3, даёт герою экспертную магию земли и защищает всё его войско заклинанием Защита от земли.^;
!#UN:A168/1/5000;
!#UN:A168/3/16;
!#UN:A168/9/10;
!#UN:A168/10/11;
!#VRv20:S13*65536+113;
!#TM10:S1/999/7/255;

!?TM10;
!!OW:I-1/?v10;
!!VRv11:S0;
!!DO10/0/155/1&v10=0:P;
!?FU10;
!!HEv11:A2/168/d/?v12;
!!HEv11&v12=1:С2/113/13/0;
!!HEv11&v12=1:O?v13;
!!OW&v12=1:Iv13/?v14;
!!HEv11&v12=1/v14=0:B0/?z10;
!!IF&v12=1/v14=0:Q1/21/v20/1^К герою по имени %Z10 присоединяются земляные элементали благодаря плащу из глины.^;
!!VRv11:Sd1;

!?AE1&v998=168;
!!HE-1:Fd3/d3/d3/d3;
!?AE0&v998=168;
!!HE-1:Fd-3/d-3/d-3/d-3;

!?AE1&v998=168;
!!HE-1:S17/?v21;
!!HE-1:S17/3;
!?AE0&v998=168;
!!HE-1:S17/v21;

!?BA0;
!!BA:H0/?v30;
!!BA:H1/?v31;
!!HEv30&v30<>-2:A2/168/d/?v32;
!!HEv31&v31<>-2:A2/168/d/?v33;
!!VRv25&v30<>-2/v32=1:S0;
!!DO23/0/20/1&v30<>-2/v32=1:P;
!!VRv25&v31<>-2/v33=1:S21;
!!DO23/0/20/1&v31<>-2/v33=1:P;
!?FU23;
!!BMv25:M33/99/3;
!!VRv25:Sd1;


Вот, вроде всё sorry.gif
Вообще кому интересно, могут зайти сюда. Здесь (на форуме WST spiteful.gif) есть эти же скрипты и плюс ещё другие всякие-разные. В общем, там их побольше. Для всех уровней.


--------------------
Ничего себе сходил за хлебушком о_О

Просьба начинающим скриптерам не обращаться за помощью в ERM. Не помню ни капли. Если только помочь с логической задачей на примерах.
В создания городов не вступаю. WST возрождать не буду. Скорее всего..


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Soul Reaver
сообщение 04 Jun 2006, 09:57
Сообщение #2

А что вы хотите тут увидеть?
Сообщений: 359
Спасибо сказали: 9 раз




Здесь же будем выкладывать простенькие и не очень скрипты. По этой статье мы напишем простенький, но достаточно нужный скрипт о перемещении. Ну? Начнём?

1)Где писать скрипт? Есть два способа: через редактор скриптов (я им пользоваться не умею так что ничего сказать не могу), и собственно в саму карту. Открываем редактор, и открываем меню Инструменты - Спецификация карты. Выбираем вкладыш событие, и создадим новое (добавить). Вот тут то и пишутся скрипты. Начнём писать наш скрипт. Первым делом выбираем английскую раскладку и пишем:

ZVSE

ZVSE? Это что ещё за ерунда? Это что то типа волшебного слова. Это даёт компу понять что это скрипт а не просто сообщение. Запомните его хорошенько. Без него ни один скрипт не пашет!

Идём дальше… Есть 3 вида команд.

!? – триггер

!! – реактор

!# - инструкция

Разбираем по порядку. Триггер – это условия выполнение команды. Реактор – сама команда. Всегда идёт после триггера. Инструкция – тот же реактор, но может стоять где угодно. Триггер для его использования не требуется. Действует с самого начала игры.

Идём дальше. Для создания нашего скрипта нам нужно условие выполнение команды. То есть телепортация будет выполняться только при выполнении этого условия. Одним из этих условий является посещение объекта. Добавим в наш скрипт это условие.

ZVSE

!?OB5/28/0;

Разбираемся … !? – условие выполнение команды. OB – приёмник объекта. Это значит что условие будет связано с объектом. 5/28/0 – точка расположения объекта где 5 число клеток сверху, а 28 слева. 0 означает то что объект на поверхности, а если было бы не 0 а 1 то под землёй. Точки 5, и 28 должны указывать точно в точку входа в объект. Чтобы узнать количество клеток с верху и с лева взгляните на разметку у вас в редакторе.
; - означает конец этой строчки.

Поставьте любой объект не имеющий свойств в эту точку (или в свою но тогда впишите в скрипт новые координаты объекта вместо старых. Например !?OB1/1/0. Не забудьте сохранить скрипт перед тем как выйти в редактор!

Вот и готово. Это означает то что при посещении объекта в точке 5/28/0 будет выполняться команда.
Пришло время написать саму команду. Пишем:

ZVSE

!?OB5/28/0;
!!IF:Q1^Хотите телепортироваться? ^;

Снова разбираемся. !! – реактор, или команда. IF – приёмник вывода сообщений. :Q1 – сообщение с вариантом «Да», «Нет». ^Хотите телепортироваться?^ - само сообщение. ; -конец строчки. Кстати если прописать так !!IF:^Текст^, то просто появиться сообщение без «да», и «нет».

Что у нас получилось теперь? Это означает то что при посещении объекта в точке 5/28/0 выдать сообщение с двумя вариантами «ДА», и «НЕТ»

Теперь нужно прописать саму телепортацию если ответ «ДА».

ZVSE

!?OB5/28/0;
!!IF:Q1^Хотите телепортироваться? ^;
!!HE-1&1:P48/58/0;

Разбираемся: !! – команда. HE-1 – приёмник героя. То есть команда связана с героем ( а -1 означает текущего героя. Тоесть команда произойдёт с тем героем который подошёл к объекту). &1 – сработает если объект «Да». Если нет то вроде 0 хотя не уверен. :P48/58/0; – Телепортация в точку 48/58/0; Вот и всё!

Что у на получилось? ? Это означает то что при посещении объекта в точке 5/28/0 выдать сообщение с двумя вариантами «ДА», и «НЕТ», и если ответ «да», то телепортировать героя в точку 48/58/0: Поставьте день выполнения события 600 внизу окна и нажмите окей. Зачем 600? Чтобы скрипт не появился в первый же день как простое сообщение с текстом. Не забудьте сохранить карту. Готово. Можете тестить. Если что не ясно пишите. Отвечу. Как видите всё очень просто!


--------------------
by-nokia.ru - темы, игры, и видео для Nokia.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Гость_BloodPhoeniX_*
сообщение 08 Jun 2006, 11:31 (Сообщение отредактировал BloodPhoeniX - 08 Jun 2006, 11:33)
Сообщение #3







Я здесь вот скрипт доработал по созданию Драколича. Теперь можно улучшать и в экране города и в экране героя. Немного изменил цену и добавил полное описание. Может его тоже разместить?

Только вот не смог настроить его включение и отключение в опциях. Где можно почитать про это?
Прикрепленные файлы
Прикрепленный файл  script78.zip ( 3.15 килобайт ) Кол-во скачиваний: 625
 
Go to the top of the pageAdd Nick
 
+Quote Post
Horn
сообщение 08 Jun 2006, 16:33 (Сообщение отредактировал Horn - 08 Jun 2006, 16:34)
Сообщение #4

Power Member
Сообщений: 160
Спасибо сказали: 7 раз




Есть скрипты вогификации (scriptNN.erm, лежат в папке Data\s), которые выполняются, если вы при старте игры вогифицируете карту, а есть скрипты, предназначенные для конкретных карт (если включены оба типа, то скрипт карты выполняется раньше скриптов вогификации).
Подключить скрипт карты можно двумя способами, у каждого из них есть свои плюсы и минусы. Один способ (в тексте глобального события) уже был описан выше Soul Reaver'ом. В этом случае текст скрипта хранится в карте, а значит, и в созданных на этой карте сейвах. Поэтому если вам после месяца игры встретится критическая ошибка - даже если ее исправить в скрипте, прохождение придется начать заново. Зато в этом варианте игрок может не вдаваться ни в какие тонкости, плюс меньше возможностей для нечестной игры. nunu.gif
Второй способ - создать скрипт в отдельном файле, имя которого должно совпадать с именем карты, расширение "erm", и лежать он тоже должен в папке Maps. Для его написания лучше всего пользоваться редактором скриптов (erm_s.exe в папке erm_s). Блокнот не годится из-за одной маленькой особенности - в текстовых файлах и в скриптах чуть различаются концы строк. Но редактор ничем не хуже Блокнота, наоборот, там есть дополнительные удобства, а интерфейс столь же прост.
Если скрипт хранится во внешнем файле, то его можно изменить, потом загрузить игру, и изменения вступят в силу! Только надо закрыть Героев и запустить их заново.

Что бы я посоветовал исходя из личного опыта? На этапе разработки и отладки мне кажется более удобным второй способ. А вот когда скрипт полностью готов, его можно уже вставить в событие, а erm-файл переименовать или удалить.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Soul Reaver
сообщение 16 Jun 2006, 15:07 (Сообщение отредактировал DracoLich - 31 Aug 2007, 18:26)
Сообщение #5

А что вы хотите тут увидеть?
Сообщений: 359
Спасибо сказали: 9 раз




Писал письмо Гудвину. Он просил сделать так чтоб в замке нанимались те существа которых он хочет. Писал письмо а получилась статья. Читайте! Написанно как письмо а не как статья! Сразу извиняюсь за такой ОГРОМНЫЙ пост. Из за таблицы так.

Таблицу обрезал, т.к. ее любой желающий найдет по адресу папки_героев/erm_help
Не знаю как. Я скриптер не такой профессионал как кажется. Но могу сделать так чтоб в жилище (то что на карте), нанимались те существа какие ты хочешь... А в замке вроде тоже можно но мне это никогда небыло нужно. И я в это не влазил. Навсякий случай напишу скрипт чтоб в жилищах нанимались другие существа.

ZVSE

!#DW140/138/0:M0/53/2;

Вот и всё! Одна строчка! Объясняю...

!# - Означает то что строчка будет выполняться с самого начала игры.

DW - инструкция управления жилищем.

140/138/0 - координаты жилища в котором мы хотим установить новых существ для найма.

M0/53/2; - MO (управление монстром, 53(номер монстра который будет наниматься. В данном случаи Эфрит султан.) 2 - (количество эфритов для найма за неделю. В данном случаи 2 штуки). Значит что в жилище 140/138/0 будут наниматься Эфрит султаны по 2 штуки в неделю... Всё. Тут возникает вопрос, а какие номера у других существ? *Ответ: смотри таблицы*

Вот и всё! И ещё. Пока писал письмо разобрался с заменой монстров в замке. Все что ты просил но учти, что если на карте есть другие замки такие-же что и у тебя, то вних будут наниматься те же существа что и в твоём.

ZVSE

!#UN:T0/0/1/172;

Так-же всего одна строчка. Объясняю.

!# - Означает то что строчка будет выполняться с самого начала игры.

UN - Инструкця универсальных команд.

T - Приёмник города (от слова Town).

0 - Номер города (В данном случаи это Замок (люди)).

0 - Уровень жилища в городе.( от 0 до 6. Тоесть 0 - жилище копейщиков. 1 - жилище лучников и. т. п.)

1 - Существо улучшенное или не улучшенное для найма.(0 не улучшенное, 1 улучшенное). Это значит что если улучшить жилище копейщиков, то будут наниматься те монстры которых мы укажем.

172 - Номер существа которое будет наниматься. Таблицу я уже давал. В данном случаи это Кошмары.

Вот таблица городов.

№ Название и комментарии
0 Замок (люди)
1 Оплот (Эльфы)
2 Башня (Маги)
3 Инферно (демоны)
4 Некрополис (нежить)
5 Темница (Подземелье)
6 Цитадель (Орки)
7 Крепость (ящеры)
8 Сопряжение (элементали).


--------------------
by-nokia.ru - темы, игры, и видео для Nokia.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Soul Reaver
сообщение 16 Jun 2006, 17:36
Сообщение #6

А что вы хотите тут увидеть?
Сообщений: 359
Спасибо сказали: 9 раз




А откуда ещё? Прикол я бы всё писал это сам? Каждого монстра...

Добавлено ([mergetime]1150468580[/mergetime]):

Ещё одна моя статья с нашего форума WST.


Новый скрипт!!!

Ну? Поняли основы? Надеюсь что да. Переходим дальше.

Вот один простенький, но очень нужный скрипт.

!#OW:D1/254 D-2/254; Он позволяет не умирать после истечения 7 дней без замка. Объяснять что где не буду, ибо что где не помню. Да и надо ли?

Далее идёт симпатичный скрипт. При загрузке вашей карты появляется сообщение. Какое уже ваше дело. Можно написать благодарность, описание карты, просто что-то от вас. Также скрипт проверяет версию WoG и может указать если ваша версия для него не подходит.

ZVSE

!#MA:P7/?v100;

!#UN:V?v1/?v2;
!#IF&v1<357:V4/1;
!#IF&v1<250:V4/1;
!#IF&4:M^{ВНИМАНИЕ!} Эта карта создавалась с использованием WoG 3.58f и ERM 2.50! Поскольку у вас обнаружена более ранняя версия, то во время игры возможны ошибки!

{(Ваша версия WoG - %V1, ERM - %V2)}^;
!#IF:M^{Название карты } - © 2006-02 by {Имя автора карты }

{Примечания автора:}
{Само примечание автора .}
{Версия карты:} 1.0 (10.01.2006)^;

Далее… Поговорим о переменных. Я конечно надеюсь что о них расскажут или SnoRT или Fly так как вних я меньше всего и смыслю. Но пока расскажу о текстовых переменных. Переменные обозначаются приёмником VR. Переменные делятся на несколько видов. Сейчас поговорим о текстовых переменных. Они обозначаются буквой «z». Помните наш прошлый скрипт о телепортации? Давайте немного его модифицируем.
Добавим в него несколько новых строчек.

ZVSE

!#VRz1:S^Портал ^;

!?OB5/28/0;
!!IF:Q1^Хотите телепортироваться? ^;
!!HE-1&1:P48/58/0;

Разбираемся: !# - инструкция. Она работает с самого начала карты. VR – приёмник переменной. z – текстовая переменная. 1 – записать в текстовую переменную 1:S. ^Портал^ - описание. Мы записали этот текст в переменную 1. Это что-то типа карты памяти. Текст «портал» будет храниться в ней. Идём дальше. Добавим в наш скрипт ещё одну строчку.
ZVSE

!#VRz1:S^Портал ^;
!#OB5/28/0:H1;

!?OB5/28/0;
!!IF:Q1^Хотите телепортироваться? ^;
!!HE-1&1:P48/58/0;

Разбираемся: !# - инструкция. OB5/28/0 – объект в точке 5/28/0 (наш телепортёр). :H1 – дать объекту описание из переменной 1. Как вы поняли у объекта теперь будет название «портал». Если раньше в игре наш телепортёр назывался просто «объект», то теперь он носит гордое название «портал»! Сохраните карту и вернитесь в игру. Наведите курсором на наш объект и взгляните на его название. Круто? Текст может быть любой. Но если у вас на карте будет несколько объектов с названиями то всегда создавая новую переменную меняйте её номер. То есть 2, 3, 4…

Также можно интегрировать текст переменной прямо в сообщение. Давайте сделаем это.

ZVSE

!#VRz1:S^Портал ^;
!#OB5/28/0:H1;

!?OB5/28/0;
!!HE-1:R2/?v32;
!!VRz50&v32=1:S^Парень^;
!!VRz50&v32=0:S^Девушка^;
!!IF:Q1^Хотите телепортироваться %Z50? ^;
!!HE-1&1:P48/58/0;

Разбираем всё новое: Чтоб наглядно показать зачем это может пригодиться определим пол героя !!HE-1:R2/?v32; !! –реактор. HE – приёмник героя. -1 текущего героя. :R2/?v32; - определить пол героя и записать в переменную 32. Мы в первый раз сталкиваемся с логическими переменными. Обозначаются они буквой v. У них может очень много значений. Но о них потом. Я в этом к сожалению не очень понимаю. Может другие объяснят… Идём дальше.

!!VRz50&v32=1:S^Парень^;
!!VRz50&v32=0:S^Девушка^;

Записать в переменную 50, значение переменной 32. Если значение 1 то Парень, если 0 то Девушка.


!!IF:Q1^Хотите телепортироваться %Z50? ^;

Тоже сообщение что и раньше, но теперь добавлено %Z50. Тоесть текст в переменной z50 теперь будет в сообщении, но сама строчка %Z50 отображаться не будет. НО УЧТИТЕ!!!! Если вы интегрируете текст в сообщение как в нашем случае, в самом сообщении буква Z пишется с большой буквы!!!

%Z50 – Правильно!

%z50 – Неправильно!

А в коде пишется как обычно с маленькой. Вот мы и познакомились с текстовыми переменными. Надеюсь что всё понятно. Если нет то спрашиваете.

Также меня интересует ваше мнение. А нужна ли эта темка? Учиться писать ERM кто-то будет? Очень хочу знать…


Объясните ктонить как скрипт едитором пользоваться


--------------------
by-nokia.ru - темы, игры, и видео для Nokia.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 18 Jun 2006, 20:32 (Сообщение отредактировал gamecreator - 18 Jun 2006, 20:33)
Сообщение #7

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




Цитата(Soul Reaver @ 16 Jun 2006, 18:36)
Объясните ктонить как скрипт едитором пользоваться

Может скриптером? Скрипт едитор не разрешен.

Ща попытаюсь.

ERM Scripter поставляется дополнительным пакетом улучшений. Он необходим для написания и изменения скриптов (*.erm).

Для начала работы нужно нажать кнопку "новый", что на панели вверху окна. Далее нужно выбрать тип файла.
ERM Document - содержит тело скрипта
Text Document - стандартные текстовые документы
CMD Document - используется для написания таблиц, например rmg.txt и подобных
ERS Document - необходим для подключения авторских скриптов в меню
ERT Document - используется для записи содержимого строковых z-переменных (о них вам уже рассказал Soul Reaver)

Также вы можете нажать на кнопку "открыть" для изменения существующих файлов.
Go to the top of the pageAdd Nick
 
+Quote Post
DracoLich
сообщение 02 Jul 2006, 18:43
Сообщение #8

Banished
Сообщений: 1 782
Спасибо сказали: 116 раз




Теперь разберем создание артефактов. Возьмем, например, артефакт № 170 (пустой). Он должен находиться в одном из пяти слотов для различных артефактов.
Дадим для каждого слота свои свойства:
!#VRz80:S^{Рог} {Божественного} {благословления}^; - дадим артефакту название, записанное в z80
!#VRz81:S^{Рог} {Божественного} {благословления}

дает:

1-ый слот: +2 к атаке, +2 к защите
2-ой слот: +2 к знаниям, +2 к силе магии
3-ий слот: дает навык Лидерства
4-ый слот: дает герою специальность по родным существам первого уровня
5-ый слот: дает герою максимум удачи^; - мы только что дали описание артефакту в z80
!#UN:A170/1/10000 A170/9/z80 A170/10/z81; - разберем по порядку. А170 - означает артефакт № 170, 1 - означает цену, 10000 - значение, 9 - это имя артефакта, 10 - описание. z80 и z81 - переменные с тектами.

!?AE1&v998=170; - проверяем, надет ли артефакт, в переменную v998 ВСЕГДА заносится номер ставящегося/снимающегося артефакта, АЕ1 проверяет, если надевается артефакт.
!!HE-1&v998=170/v999=9:Fd+2/d+2/d/d; - Если артефакт № 170 надет в слот № 9 (первый слот под разное), добавляем +2 к атаке и защите
!!HE-1&v998=170/v999=10:Fd/d/d+2/d+2; - если артефакт № 170 надет в слот № 10 (второй слот под разное), добавляем +2 к силе магии и знаниям
!!HE-1&v998=170/v999=11:S6/?v99; - в переменную v99 заносим уровень лидерства у героя
!!HE-1&v998=170/v999=11:S6/3; - установить герою навык лидерства уровня эксперт
!!UN&v998=170/v999=11:R3/-1; - обновить данные
!!HE-1&v998=170/v999=12:B2/?v107 X?v100/?v101/?v102/?v103/?v104/?v105/?v106; - занести специальность героя в переменные (X) и узнать расу героя (В2) в переменную v107
!!VRv108&v107<2:S0; - установить значения переменной v108 в зависимости от класса героя: если раса Люди, установить 0
!!VRv108&v107>1/v107<4:S14; - если Эльфы, установить 14
!!VRv108&v107>3/v107<6:S28; - если Башня, установить 28
!!VRv108&v107>5/v107<8:S42; - если Инферно, установить 42
!!VRv108&v107>7/v107<10:S56; - если Некрополис, установить 56
!!VRv108&v107>9/v107<12:S70; - если Темница, установить 70
!!VRv108&v107>11/v107<14:S84; - если Цитадель, установить 84
!!VRv108&v107>13/v107<16:S98; - если Крепость, установить 98
!!VRv108&v107>15/v107<18:S118; - если Сопряжение, установить 118
!!HE-1&v998=170/v999=12:X1/v108/0/0/0/0/0; - установить специальность героя на монстра расы
!!UN&v998=170/v999=12:R3/-1; - обновить данные
!!HE-1&v998=170/v999=18:R6/1; - если слот 5, дать максимум удачи

!?AE0&v998=170; - проверяем, если снимается артефакт (АЕ0) под номером v998=170
!!HE-1&v998=170/v999=9:Fd-2/d-2/d/d; - если верно, отнимаем добавленные бонусы
!!HE-1&v998=170/v999=10:Fd/d/d-2/d-2;
!!HE-1&v998=170/v999=11:S6/v99; - установить значение Лидерства до артефакта
!!HE-1&v998=170/v999=12:Xv100/v101/v102/v103/v104/v105/v106; - возвратить специальность
!!HE-1&v998=170/v999=18:R6/0; - убрать удачу


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
DracoLich
сообщение 03 Jul 2006, 13:03 (Сообщение отредактировал DracoLich - 03 Jul 2006, 15:19)
Сообщение #9

Banished
Сообщений: 1 782
Спасибо сказали: 116 раз




При посещении объекта используются в основном его координаты. Но можно также сделать, чтобы при посещении ЛЮБОГО из этих объектов срабатывал один и тот же скрипт. Все добавленные объекты имеют тип 63, и какой-то подтип. Например, чтобы скрипт срабатывал при посещении холмика из черепов, нужно прописать:
!?OB63/15; - где 63 - тип объекта, а 15 - его подтип (черепки)
!?OB98/1; - будет срабатывать при посещении города (98) Оплота (1)
!?OB98; - будет срабатывать при посещении любого города
И так далее...


--------------------


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
SnoRT
сообщение 04 Jul 2006, 16:00 (Сообщение отредактировал SnoRT - 05 Jul 2006, 06:21)
Сообщение #10

Супер-злодей
Сообщений: 1 431
Спасибо сказали: 16 раз




Наверно что-нибудь напишу ещё. Наверное, многие хотели бы размещать свои объекты на карте. На любой карте. Объекты со своими свойствами, со своими названиями.
Во-первых, нам нужно выбрать новый объект. Конечно, можно взять старый, или используемый WOG'ом и затереть его свойства, поставив свои. Но конечно же, лучше на роль подопытного кролика брать пустой объект. Я взял маленький домик Zyzop2.def, повёрнутый вправо. Этот объект имеет тип 63 и подтип 56 (вообще, все ВОГ'овские объекты имеют 63-й тип). Пойдём дальше, о размещении. Конечно, можно размещать этот объект произвольно при создании карты, но так мы рискуем загородить какие-нибудь важные проходы или доступы. Поэтому, как сделано в большинстве ВОГ'овских скриптов, мы заменим уже имеющиеся на карте объекты. Конечно, заменим не все, а в процентном соотношении. Естественно, если вы недолюбливаете какое-то строение, вы можете заменить их полностью. Важно иметь в виду, что желательно, чтобы заменяемый и новый объекты занимали одинаковое пространство, т.е. имели одинаковое количество клеточек. Это можно проверить в редакторе.
И так, мы заменим 25% колодцев на домики. Не буду мудрить со свойствами нового объекта, суть этого поста не в этом. В избушке нам будут просто говорить: "Здесь был колодец."
Использовать буду свободные переменные, поэтому скрипт спокойно можно будет вставлять в любую карту.

ZVSE
!#VRz730:S^Типа Избушка^; Создадим название домика.
!#VRv7133:C0/0/0/0/0/0/0; На всякий случай обнуляем все используемые переменные.
!#TM93:S1/999/998/255; Создаём таймер, который подействует в первый день и больше никогда. То есть он то и вызовет замену.

!?TM93;
!!FU873&v7133=0:P;
!!VRv7133&v7133=0:S1;

!?FU873; Начинаем замену.
!!UN:U49/-1/?v7134; Считаем в переменную v7134, сколько на карте заменяемых объектов, т.е. колодцев.
!!VRv7135:Sv7134:4;Считаем 25% от всех колодцев, проще говоря, определяем, сколько поставим домиков.
!!DO874/1/v7135/1:P; Запускаем функцию 874 столько раз, сколько домиков нам нужно поставить.

!?FU874;
!!VRv7134:-1; От количества колодцев отнимаем один, чтобы после замены одного из них не попытатся заменить колодец по счёту, которого уже нет.
!!VRv7136:S0Tv7134; Задаём случайное число от нуля до количества колодцев, чтобы заменять случайный колодец на карте, а не все поочереди, чтобы не было такого, что заменятся только в одном районе.
!!UN:U49/-1/v7136/v7137; В определим координаты случайного колодца в переменные v7137/v7138/v7139.
!!UN:Ov7137/v7138/v7139; Удаляем этот колодец.
!!UN:Iv7137/v7138/v7139/63/56/d/1; Ставим на его место домик.
!!OBv7137/v7138/v7139:H730; Поставим нашему домику название "Типа Избушка".

!?OB63/56; Посещение любой избушки.
!!IF:M^Здесь был колодец.^;


Вот, скрипт готов smile.gif Если нужно, вот чистая версия:

Код
ZVSE
!#VRz730:S^Типа Избушка^;
!#VRv7133:C0/0/0/0/0/0/0;
!#TM93:S1/999/998/255;
!?TM93;
!!FU873&v7133=0:P;
!!VRv7133&v7133=0:S1;
!?FU873;
!!UN:U49/-1/?v7134;
!!VRv7135:Sv7134:4;
!!DO874/1/v7135/1:P;
!?FU874;
!!VRv7134:-1;
!!VRv7136:S0Tv7134;
!!UN:U49/-1/v7136/v7137; v7137/v7138/v7139.
!!UN:Ov7137/v7138/v7139;
!!UN:Iv7137/v7138/v7139/63/56/d/1;
!!OBv7137/v7138/v7139:H730;
!?OB63/56;
!!IF:M^Здесь был колодец.^;


--------------------
Ничего себе сходил за хлебушком о_О

Просьба начинающим скриптерам не обращаться за помощью в ERM. Не помню ни капли. Если только помочь с логической задачей на примерах.
В создания городов не вступаю. WST возрождать не буду. Скорее всего..


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
DracoLich
сообщение 11 Jul 2006, 12:10
Сообщение #11

Banished
Сообщений: 1 782
Спасибо сказали: 116 раз




Рассмотрим использование переменных
Основные типы переменных:

Переменные с текстами (z$). Используются, если один и тот же текст нужно вызвать в нескольких разных местах.

Например, нужно, чтобы при посещении артефакта или монстра, выводился текст "Вы нарушили условия пребывания в этой зоне."
!#VRz50:S^Вы нарушили условия пребывания в этой зоне.^; - в текстовую переменную № 50 заносим текст
!?OB54; - проверяем, посетил ли игрок какого-либо монстра (54)
!!IF:Mz50; - вывести на экран сообщение
!?OB5; - проверяем, посетил ли игрок какой-либо артефакт (подобрал)
!!IF:Mz50; - выводим на экран ссобщение

Как видно, переменные z помогают снизить количество печатной работы.

Переменные с числами (v$). Используются для записи числовых значений.

Например, нужно узнать номер артефакта в слоте № 18 (разное, 5-ый слот)

!!HE-1:A1/?v100/18; - проверяем, что находится у героя в слоте № 18, и заносим номер артефакта в числовую переменную v100
Далее идет проверка: если номер артефакта больше -1, то скрипт работает дальше. Если равно -1 (т.е. когда там нет артефакта), то скрипт прекращается
!!UN&v100>-1:N0/z35/v100; - с помощью команды узнаем название артефакта под номером v100 и записываем название в z35
!!IF&v100>-1:M^В слоте № 5 находится артефакт %Z35^; - Сообщаем название артефакта.
Теперь в переменной v100 хранится номер артефакта, в переменной z35 - название.

Дополнительные переменные:
с - номер дня с начала игры. Поэтому !!VRv100:Sc; означает, что в переменную v100 заносится текущий день

Теперь разберем использование переменных для определения положения на карте

!?OB27; - посещен ли объект Глаз мага
!!HE-1:P?v96/?v97/?v98; - занести координаты Глаза, посещенного героем и заносим его координаты в v96 (96) v97 v98
!!UN:U49/-1/-1/99; - строка задает счет положения колодца (49), любого (-1). Здесь первого (-1) и заносит его координаты в v99 (99), v100 и v101
!?OBv99/v100/v101; - посещен ли первый колодец
!!HE-1:Pv96/v97/v98; - если посещен, телепортируем героя на посещенный Глаз мага


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
DracoLich
сообщение 11 Jul 2006, 18:53 (Сообщение отредактировал DracoLich - 11 Jul 2006, 18:55)
Сообщение #12

Banished
Сообщений: 1 782
Спасибо сказали: 116 раз




y$ - переменная функции, уникальная для каждой
x$ - параметр функции, зависит от функции
w$ - переменная героя. Например

!?OBx/y/l; - посещен ли объект в ккординатах
!!IF:Wx16; - выбрать героя х16 для переменных w, т.е. в х16 будет храниться номер героя
!!VRw62:S-1; - установить переменную w62 для текущего героя на -1

Переменные героя (w1-w200) хранят некий тип информации как переменные v, но уникальные для каждого героя. Это значит, что два разных героя будут иметь разные значения в переменной w1 (или w2, w10 или какое-либо еще до w200 включительно). Чтобы установить или проверить одну или более w-переменных, вы должны сначала указать номер героя с помощью команды IF:W. Например, если вы хотите установить или проверить w5 у героя номер 27 (Джем), вы должны сначала написать !!IF:W27; прежде чем устанавливать/проверять его (героя) w5-переменную. Для текущего героя используйте -1 как номер. Так, !!IF:W-1 значит что далее идущие значения w-переменных будут привязаны к текущему герою (до того момента, пока другая функция IF:W не заработает, будет работать для текущих героев).

Функциональные параметры - тип переменных (x1-x16) так же хранят некоторые типы значений (числовых) как v и w переменные. Однако, эти переменные существуют только вместе с функцией (код, следующий за триггером функции) и первоначально устанавливаются на значения текущей функции в ресейвере (код функции)после команды P. Если вы вызываете функцию из другой функции, любая x-переменная, которая не была установлена (как новый параметр), будет поддержана как значение в новой функции. Когда используется с DO-ресейвером, параметр x16 устанавливается как текущий круг функции.

Функциональные переменные (y1-y100) похожи на x-переменные, т.е. нормально работают только с использованием функции. Однако, они (y-переменные) уникальны для каждой функции, так, если вы имеете 4 различных функции, каждая будет иметь y-переменную одного и того же номера для каждой функции разную. Как и другие переменные, они записывают только числовые значения.

PS. Плюс/минус ставится только после 10 сообщений.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
DracoLich
сообщение 13 Jul 2006, 17:34 (Сообщение отредактировал DracoLich - 13 Jul 2006, 17:38)
Сообщение #13

Banished
Сообщений: 1 782
Спасибо сказали: 116 раз




Введение

Флаги и переменные - это главнейшая особенность ERM для трансформации Гроев в высокодинамичную игру, что отвечает действию и выбору игрока. Пока ERM скрипты могут быть прочитанны без использования флагов и переменных, у вас есть великолепный шанс повысить свои навыки, и как факт, количество команд, требующие использование флагов и переменных.

Условные флаги
Условные флаги еще называют сокращенно CFs. Флаг - это условный рычаг, который имеет положение правду (1) или ложь (0). Как и двойные числа, они имеют только два положение и не больше. В начале все флаги установлены на Ложь (0). Значение 1 (правда) называют "установлен", 0 (ложь) - "не установлен".

Установка флагов
В ERM есть 1000 условных флагов и каждый из них обладает номером от 1 до 1000. Флаги устанавливаются с помощью IF-ресейвера, используя V-команду. Чтобы установить флаг на правду, используйте значение 1, а чтобы на ложь, значение 0.
Например: установим флагу 4 правду (1): !!IF:V4/1;
В дополнение к V-команде, еще есть несколько IF-команд для установки первых 10 флагов за раз. Смотрите IF-ресейвер для подробной информации.

Использование условных флагов
Обычно используют флаги для контроля, есть или отсутствует код ERM (например, как триггер или ресейвер). Например, если вы хотите, чтобы при посещении объекта на карте показывалось сообщение ТОЛЬКО в первый раз любому герою, и никогда больше, вы можете использовать флаги для этой цели; это сообщение будет показываться, если флаг был ложь (не установлен) и дальнейшей командой вы изменили его значение на правду (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 - ложью.

Инициализация флагов
Пока все флаги установленны как ложь (т.е, значение 0 или не установленно), флаги от 501 до 1000 будут сохранять их последнее значение, когда вы начинаете новую карту без выхода и перезапуска самой игры. Они могут быть использованы для кампаний, в которых вы хотите использовать значения флагов для последующих карт в кампаниях. Если вы избегаете потенциальной возможности того, что флаги будут отличатся от лжи (т.е, вам нужно, чтобы все флаги были 0), установите флаги от 500 и дальше на 0 в начале карты или скрипта (команда IF:V), т.е. все флаги, которые вы хотите использовать.

Специальные флаги

Некоторые флаги имеют специализированные значения в игре.

Флаг 1 используется используется некоторыми командами для определения результата и определения результата условных флагов (проверить значение)(см. выше). Следовательно, это хорошая идея - никогда не использовать флаг 1 для любого значения, нужного на долгое время. Или для верности, не используйте это и используйте вышестоящие флаги.

Флаг 996 автоматически очищается (устанавливается на ложь), когда любая !!LE-команда исполняется и устанавливается на 1 (правда) если там (в локации, определенной командой LE) не локальное событие (вы знаете, что события удаляются после первого посещения?).

Флаг 997 и 998 хранят следующее:

Флаг 997 хранит мультиплееровский статус битвы.
=0 (ложь) если это локальная битва,
=1 (правда) если это Интеренетная битва.

Значит, если флаг 997=1, тогда флаг 998=0 если AI атакует игрока-человека на отдаленном компьютере.

Флаг 998=1 если битва Человек на Человека. Здесь у нас реальная мультиплеерная битва.

Вы можете использовать оба флага в триггерах BA0 или BA50, например:

!?BA0&997/998;
...

Здесь скрипт идет, если битва Человек на Человека (мультиплеер)

Флаг 999, который устанавливается на 1, если текущий игрок (который активировал триггер) - игрок "здесь" и 0, если он или она на другом PC. AI имеет всегда значение 0. Если флаг 999 установлен, вы можете быть уверены, что эта битва - человек против ИИ, причем человек за данным компьютером. Это работает для всех триггеров.

Флаг 1000 имеет два значения, зависящих от места использования (триггер битвы или нет). Для не-битвы этот флаг будет установлен на правду, когда хозяин героя, игрок-человек, посетит объект на карте триггер, как объект или субъект. Если компьютерный (AI) герой посетил объект, флаг 1000 будет установлен на ложь. Опять же, вы можете установить значение этого флага, но это не безопасно, поскольку вы можете проверить это значение в определенном скрипте, если этогерой игрока или ИИ.

Поэтому, если проверять условные флаги, -1000 значит AI, а 1000 значит человек.

Для боевых триггеров (например, !?BA, !?BG, !?BF, и т.д.) флаг 1000 проверяет, настоящая или теоритическая (AI) битва. Если флаг 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 (CF1)
!!GE100:F<>5 - проверить, если день первого появления НЕ 5 и установить условный флаг 1 (CF1)
!!GE100:F><5 - см. выше
!!GE100:F>5 - проверить, если день первого появления более 5 и установить CF1
!!GE100:F>=5 - проверить, если день первого появления более или равный 5 и становить CF1
!!GE100:F=>5 - см. выше
!!GE100:F<5 - проверить, если день первого появления менее 5 и установить CF1
!!GE100:F<=5 - проверить, если день первого появления меньше или равно 5 и установить CF1
!!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, которые используются для установления текста, в отличии он числовых переменныз.

Пример установки значение 18 переменной 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 - переменные с плавающей запятой

Вы можете использовать эти переменные в некоторых местах.
Характерные особенности:
1. Они НЕ сохраняются при сохранении игры. Фактически каждая секция триггера будет полность завершена и вы не сможете сохранить и загрузить игру, пока работает секция триггера.
2. Эти переменные "местные" для каждого триггера и если один триггер работает вне другого триггера, они будут иметь разные значения. Как вы можете видеть, вы не можете передавать значения из триггера к триггеру используя эти переменные.
3. Все переменные установлены на 0 при старте любого триггера, так вы можете использовать это как значение по умолчанию.

Использование переменных взамен чисел
Раз вы можете устанавливать значения переменных, вы можете использовать эти переменные в определенных местах своего кода. Почти везде, где вы можете просто ввести число, вы можете использовать любую переменную, содержащую значение, которое будет использоваться с приемлиевым значением для команд или параметров. Опять же, исключения - это переменные z, использующиеся для текстовых значений, таких, как имя героя, название артефакта, или слово или фраза. В большинстве случаев это будет очевидно, когда переменная 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, и если 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.

Только если ВСЕ четыре условия будут выполнены, герой получит артефакт.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
DracoLich
сообщение 14 Jul 2006, 10:42 (Сообщение отредактировал DracoLich - 14 Jul 2006, 11:04)
Сообщение #14

Banished
Сообщений: 1 782
Спасибо сказали: 116 раз




Синтаксис проверки - значение ИЛИ: |
!(!|?|#)XX&c1/c2/c3|c4/c5/c6:...;
Полное значение будет таким: (c1 И c2 И c3) ИЛИ c4 ИЛИ c5 ИЛИ c6
Комментарии

- секция ИЛИ может быть одна либо обязательно после секции И
- если есть только секция ИЛИ, полное значение будет истиной, если хотя бы одно состояние ИЛИ - истина
- может быть до 16 состояний И и до 16 состояний ИЛИ

Другие типы переменных
Как ранее упоминалось, есть несколько различных типов переменных, каждая используется в разных местах кода.

Стандартные переменные (f-t) и (v1-v10000) годятся для большого количества взаимозаменяющих частей, кроме "быстрых переменных", т.к. они не имеют номера, в отличии от v-переменных, и определенные команды требуют номер v-переменной для записи результата. Оба типа используются для записи числовых значений. В ERM нет переменных, способных записывать числа с десятичными знаками.

Функциональные переменные с плавающей запятой (e1..e100) Они используются в основном как y-переменные:
- не записываются в сохраненной игре;
- уникальны для каждой функции;
- установленны на 0 при старте каждой функции;
- сохраняются при вызове другой функции.
Вы можете использовать их для установки параметров, но главная особенность - использование счета плавающих запятых, выражение и сохранение результата в другую переменную.
Вы можете использовать +,-,* и : команды VR-ресейвера для e-переменных с плавающей запятой.

Вы также можете показать значение e-переменной в сообщении, ислользуйте команду %E#.

Пример:
!#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-переменные. Они уникальны для каждой функции. Однако, они отличаются от y-переменных тем, что они удерживают свое значение, когда вы вызываете другую функцию, так вы можете использовать передавание переменной от функции к функции, но не можете использовать старое значение. Как обычные z-переменные, они имеют максимум 512 символов.

Специальные переменные
В ERM есть несколько переменных, имеющих специальное значение. Как флаги 1 и 1000, специальные переменные могут установлены как ы захотите и в любое время, но это не советованно, т.к. есть степень риска, что другие команды могут использовать их.

v1-переменная иногда ипользуется для записи результата некоторых команд. Так, вы можете использовать ее в своих скриптах, но на непродолжительное время для хранения выражения; другими словами, не устанавливайте значение в переменную v1, если вы хотите использовать ее значение неизменным на долгое время.

z1-переменная используется для записи текста, введеного игроком в расширенном окне диалога. Если вы не используете расширенные диалоговые окна, вы можете не беспокоиться об этом, но все же это хорошая идея - не использовать z1 для долговременного хранения.

v-переменные 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.

Макросы
Если вы хотите дать переменной много кодовых имен, вы можете установить макрос с помощью MС-ресейвера.
Макрос может быть использован почти в любом месте, где используется переменная и взаимодействует с переменной.
Макрос - это ссылка с имене, ограниченная знаками доллара: $сокровище$.
Для большей информации смотрите MC-ресейвер.

Дополнительные примеры:

Как использовать переменные героя?

Для использования w-переменных, сперва вы должны использовать !!IF-команду для героя, у которого и будете изменять (используйте -1 для текущего героя). Раз использовав эту команду, вы не сможете использовать ее снова, пока не переключитесь на другого героя. Перед использованием этой команды установите или проверьте переменную 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;
Изменяя 'c' можно несколькими путями, например, 'd' в виде добавления "the current day".
Вы можете добавлять текущий день к любым другим значениям.
!!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.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
DracoLich
сообщение 14 Jul 2006, 11:05
Сообщение #15

Banished
Сообщений: 1 782
Спасибо сказали: 116 раз




Вот все про флаги и переменные:

PS. Стоит писать про ресиверы или триггеры? idontno.gif
Прикрепленные файлы
Прикрепленный файл  Flags___Variables.rar ( 9.16 килобайт ) Кол-во скачиваний: 443
 


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
DracoLich
сообщение 21 Jul 2006, 08:48
Сообщение #16

Banished
Сообщений: 1 782
Спасибо сказали: 116 раз




Введение
Если игрок активирует триггер, это вызывает некоторые действия (ресейверы). Триггером может быть событие, объект или герой, который посещает герой игрока, или это может быть ERM-функцией, вызываемой из другого ERM-кода или события, установленного на определенное время или интервал. Ресейвером может быть событие, герой, объект на карте или другие вещи. Поскольку многие вещи в игре могут быть использоваться как триггеры или ресейверы, важно не перепутать, что куда относится.

Как использовать триггеры
Свойства триггеров событий или объектов не связаны с целью существования триггера. Действие триггера должно быть описано во временных событиях. В скриптах ERM триггер идет как главный (начальный), и следующие после триггера строки - ресейверы. Если вы помещаете более одного триггера в некоторое событие, ресейверы будут следовать по последнему триггеру.

Синтаксис триггеров
Каждый триггер начинается со знаков (!?) и заканчивается (wink.gif. После !? следует двубуквенное имя триггера , например BA, OB или HE. После имени триггера идут параметры, показанные как # на листе хелпа. Каждый параметр (#) должен иметь определенный номер в вашем коде, например !?HE47;. Значение чисел для каждого типа триггеров разное. Для HE-триггера, число - это номер героя (у каждого героя есть собственный порядковый номер) для LE-триггера число - это положение события на карте по x, y и l.

Использование переменных в триггерах
Переменные не могут быть использованы в местах параметров триггера. Если вы попробуете, переменная будет игнорирорваться или приниматься за ноль. Если вы используете постоянные переменные, например v4, буква (v) будет игнорироваться, и это будет принято за число 4.

Двойные триггеры
Если некоторые триггеры используются более чем один раз на карте, в этом случае ВСЕ ресейверы для этого триггера будут выполняться, следуя ресейверам с первого триггера (т.е. если у вас при посещении события X/Y/L сначала идет один кусок скрипта, а после другой, то работать все равно будет первый, и после заканчиваться последним.)

Заметьте, что !?BA0; - это отличный от !?BA1; триггер, и также !?HE47; - это отличный от !?HE48; триггер.

Условия триггеров
Условия могут быть добавлены к триггеру, так что ресейверы к этому триггеру будут работать только если условие правильно. Для этого используют знак (&) сразу после последнего параметра и до точки с запятой. После &, вставьте ваше условие. Это условие должно содержать флаг или переменную, сравнивающие знаки (=, >, <, >=, <=, или <>) и вторую переменную либо значение.

Пример:
!?BA0&v10=51; это значит, что ресейверы для этого триггера будут работать, только если v10 имеет значение 51. Вы можете включать несколько проверок, используя (/), например !?BA0&v10=51/v2>=5; ресейверы будут работать только если v10 равно 51, и если v2 равно 5 или более. См. флаги и переменные для более продвинутого обучения.


Введение

Ресейверы - ЕRM-коды, действующие на героев, объекты, события таймеры, функции, сообщения или игровые установки. Большинство ресейверов имеют несколько команд, что может быть использованно для самых разных вещей. Например, LE-ресейвер действует на локальные события на карте и имеет несколько различных команд для изменения свойств события.

Как использовать ресейверы

Ресейверы помещаются во временнЫх событиях после триггера, который их запускает. Триггер может быть только один. На одну строчку можно писать одну команду или более, но для ясности и понятности вашего скрипта (так же для поиска ошибок), лучше писать на каждую строку по команде.

Синтаксис ресейвера

Все ресейверы начинаются с двойного восклицательного знака (!!) и заканчиваются точкой с запятой (wink.gif. Немедленное исполнение !! - это функция ресейвера, например, для артефактов - AR, HE - для героев, LE - для локальных событий или OB для объектов. Следующая часть этого кода зависит от типа ресейвера. Ресейверы имеют один или более параметров, находящихся до (smile.gif. После двоеточия идет команда ресейвера. Команды могут принимать много форм и могут включать один или более параметров каждый; они представляются (у меня) как ZZZZZ. Изменяйте ZZZZZ на нужную команду или команды. После последней команды вы должны поставить (wink.gif, что будет означать конец ресейвера.

Все ERM команды (ресейверы и инструкции) имеют лист доступных команд.

Если параметр команды показан как $, это значит, что это значение может быть устанловлено в переменную. Если показано как #, это значит, что это можно только установить, но не прочитать. И если показывается как ?$, это значит, что может быть ТОЛЬКО прочитано, но не установлено.

Пример синтаксиса ресейвера:

!!LE12/21/0:E1000;

В примере выше, событие в координатах x=12, y=21 и уровень=0 (верх) станет модифицированным и будет давать 1000 опыта для героя.

Родственный синтаксис

Часто вам нужно добавить или убавить значение. Например, если вы хотите дать герою опыт, вы установите герою количество опыта без учета текущего значения, т.е. опыт будет установлен на новое, установленное значение. Так же будет и с ресурсами игроков. Для добавления, мы используем расширенный синтаксис: ставим d как первое значение.

Пример расширенного синтаксиса:

!!HE-1:Ed+500;

В этом примере 500 опыта будет добавленно к уже имеющемуся опыту. Если бы мы использовали E500, а не Ed+500,
у героя опыт стал бы равняться 500, а не увеличен на 500. Для отнимания 500 опыта, используйте Ed-500 соответственно. если вы хотите оставить
параметр неизменнным, используйте d+0 или просто d.

Инструкции

Инструкции - ресейверы, которые действуют только один раз, при загрузке карты, обозначаются (!#). Не все ресейверы могут стать инструкциями, поэтому будьте осторожны.

Пример инструкции:

!#VRv10:S25; - установить v10 на 25


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
DracoLich
сообщение 21 Jul 2006, 14:50
Сообщение #17

Banished
Сообщений: 1 782
Спасибо сказали: 116 раз




Разберем простенький скрипт с участием монстра - квестора
v9 - хранит переменную с артефактом
v10 - хранит номер посещения (первый или дальнейший)

ZVSE
!#OBx/y/l:S; - отключаем свойства объекта для всех игроков
!?OBx/y/l; - посещается ли объект?
!!HE-1&v9<>-5:A2/7/?v9/d; - проверяем наличие артефакта 7, причем только если v9 не равна -5
!!IF&v10=1/v9=0:Q11/8/7/1^Тебе что, жизнь не дорога? Принеси артефакт, потом поговорим!^; - если это не первое посещение, и артефакта нет, выводим это сообщение
!!IF&v10=0/v9=0:Q10/8/7/1^Если хочешь пройти, принеси сперва артефакт.^; - если это первое сообщение, и арта нет, выводим это сообщение
!!IF&v9>0:M^Молодец. Можешь идти.^; - если артефакт присутствует, выводим это сообщение
!!UN&v9>0:Ox/y/l; - если артефакт присутствует, убираем монстра
!!VRv9&v9>0:S-5; - если артефакт присутствует, ставим v9 в -5, чтобы больше не проверялось наличие артефакта (это необходимо, если объект можно посещать несколько раз, здесь это не обязательно, но если это объект, который не должен удаляться, лучше сделать так)
!!VRv10&v10=0:S1; - если первое посещение, установить, что оно уже было


--------------------


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
DracoLich
сообщение 23 Jul 2006, 14:54
Сообщение #18

Banished
Сообщений: 1 782
Спасибо сказали: 116 раз




Так... Сейчас мы разберем способ заставить убежать монстра...
Пусть в 18/12/0 стоит ЛЮБОЙ монстр...

ZVSE
!#OB18/12/0:S; - деактивировать монстра
!?OB18/12/0; - посещается монстр?
!!OB18/12/0:U?v10; - узнаем, что за монстр (если там случайный монстр, то в самый раз wink.gif) в v10
!!MO18/12/0:G?v11; - узнаем их кол-во, заносим в v11
!!UN:N3/z50/v10/1; - узнаем имя, заносим в z50
!!IF:Q5/21/v10/2^Вы видите что %Z50 убегают, хотите догнать их и подраться?^; - спрашиваем игрока с картинкой монстра
!!HE-1&5:O?v53 T18/12/0/v10/v11 O?v54; - по порядку: узнаем хозяина героя (1-ый раз), провоцируем битву с монстром v10 и количеством v11, проверяем хозяина героя (2-ой раз)
!!UN&v53=v54:O18/12/0; - если герой выиграл и жив, убираем монстра

Монстр мертв, и мы только что симулировали битву с настоящим монстром!


--------------------


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Soul Reaver
сообщение 23 Aug 2006, 14:01 (Сообщение отредактировал sergroj - 09 Sep 2007, 12:41)
Сообщение #19

А что вы хотите тут увидеть?
Сообщений: 359
Спасибо сказали: 9 раз




Вот решил наскоро объяснить переменные. Они уже конечно были объяснены, но всё же этого не достаточно. Так что такое переменные? Это числа которые могут менять своё значение. Если вы читали мои уроки в самом начале темки, то уже знаете основы. Есть условия при выполнении которых выполняются команды. Возьмём к примеру простенький диалог.

!?OB#/#/#;
!!IF:M^Текст.^;

Это означает что при посещении объекта в точке #/#/#, выдать сообщение с надписью «Текст». Вроде всё просто. А если вам хочется чтоб после посещения этого объекта, и посещении его повторно выдавалось другое сообщение? Как это сделать? Вот тут нам и помогут переменные. Как уже было сказано переменные это числа которые могут менять своё значение. Так сделаем так чтоб в зависимости от значений переменной выдавались разные сообщения. Сразу скажу что «целые» переменные обозначаются маленькой буквой v. В данный момент существует 10000 переменных (вроде, если нет то модеры подправят) Остальное объясню на примере.

!?OB1/1/0;
!!IF&v1=0:M^Текст.^;

Вот она переменная! Сначала о способе записи. Разберу всю команду. !! – реактор, & - после этого знака как правило идут переменные, v – знак переменной, 1- номер переменной, =0 – значение переменной. Остальное вроде понятно. Как видите переменные могут иметь разные значения. К тому же они являются дополнительным условием для команды (помимо триггера). В данном случаи сообщение будет выдаваться только если переменная 1 будет равна 0. Так как с самого начала игры все переменные всегда = 0. То сообщение будет выдаваться. Теперь объясню пример сложнее.


!?OB1/1/0;
!!IF&v1=0:M^Текст.^;
!!IF&v1=1:M^Текст 2.^;
!!VRv1&v1=0:S1;

Как видите добавилось 2 новые строчки. Объясняю четыертую. !!VRv1&v1=0:S1;
!! – реактор (ресивер), VR – приемник операций с переменными (это значит что строка будет посвящена переменным), v – знак целых переменных, 1 – будем править переменную 1,
&v1=0 – условие ( если переменная 1=0), S1 – установить переменную в 1. Прочитаем строку.

Если переменная 1 равна 0, то установить её значение в единицу (1).

Третья строка практически не отличается от то второй, за исключением того что теперь сообщение будет выдаваться если переменная 1=1. Всё это означает что при втором посещении объекта будет выдаваться второе сообщение. Прочитаем всё это вместе.

При посещении объекта в точке B1/1/0, выдать сообщение «Текст», при условии что переменная 1=0, и после выдачи сообщения если переменная 1=0, то установить её в 1. Если посетить этот объект второй раз, то так как переменная 1уже равна 1 (1=1) выдать сообщение «Текст 2».

Так как переменная 1=1, то сообщение «Текст» не будет выдано ( потому что по условию выдачи сообщения переменная 1 должна ровняться 0 (v1=0)).

Видите, ничего сложного. Причём не обязательно чтоб при посещении именно объекта в точке 1/1/0 установить 1 в единицу. Можно сделать и так:

!?OB1/1/0;
!!IF&v1=0:M^Текст.^;
!!IF&v1=1:M^Текст 2.^;

!?OB2/2/0;
!!VRv1&v1=0:S1;

Это означает что при посещении объекта в точке 1/1/0 будет выдаваться сообщение «Текст» до тех пор пока не будет посещён объект в точке 2/2/0 (при посещении этого объекта переменная 1 будет установлена в 1 (1=1)). После посещения объекта в точке 2/2/0, при посещении объекта в точке 1/1/0 будет выдаваться сообщение «Текст 2».

Как видите это очень полезно. Также при записи можно использовать не только знак =. Можно и знаки больше и меньше (< >). То есть 1>1, или 1<1 (если переменная 1 больше 1, или меньше 1).

Но переменные могут использоваться не только для выдачи сообщений. Очень много команд используют переменные. Допустим приведу пример для выдачи артефакта.


!?OB1/1/0;
!!IF&v1=0:M^Текст.^;
!!IF&v1=1:M^Текст 2.^;
!!HE-1&v1=1:A7;

!?OB2/2/0;
!!VRv1&v1=0:S1;

Как видите в наш пример добавилась ещё одна строчка. Разберём её.
!!- реактор, HE-1 – приёмник героя (-1 означает текущего героя, то есть команда будет срабатывать для любого героя), &v1=1 – если переменная 1=1, A7 – дать герою артефакт номер 7 (секира кентавра).

Вот. Это значит что артефакт будет выдаваться только если переменная 1=1(а для этого нужно посетить объект в точке 2/2/0. Правда у этого скрипта есть не большая оплошность. При КАЖДОМ посещении объекта в точке 1/1/0 если переменная 1=1 ВЫДАВАТЬ герою «Секиру кентавра»!!! Вот читерство! Сколько не зайди, столько артов и получишь. Будем исправлять.

!?OB1/1/0;
!!IF&v1=0:M^Текст.^;
!!IF&v1>=1:M^Текст 2.^;
!!HE-1&v1=1:A7;
!!VRv1&v1=1:S2;

!?OB2/2/0;
!!VRv1&v1=0:S1;


Добавилась строчка !!VRv1&v1=1:S2;
Как видите после посещения объекта в точке 1/1/0, а 1=1 поставить переменную 1 в 2, но так как команда о смене значения переменной стоит после команды о выдачи артефакта, то артефакт будет выдан, и только после значение переменной измениться.

Также немного изменена строчка о выдачи сообщения «Текст 2». Теперь сообщение будет выдаваться если переменная 1 больше или = 1. Так как после получения артефакта переменная 1 будет равна 2 (1=2), то старое сообщение переставало бы работать (потому что условием для работы сообщение было значение переменной 1 (1=1)). Теперь сообщение будет работать при любом значении переменной 1 ели это значение больше или ровно 1.

Вообще всё это не очень сложно и быстро запоминается. Если что-то не понятно то спрашиваете. Вот и всё. Там конечно ещё куча всего но основы объяснил. Нужно ещё объяснить флаги. Надёюсь это сделает кто-то другой. Если нет… Эх! Придётся и это объяснять.

[sergroj] Исправил ошибку, которую нашел gamecreator


--------------------
by-nokia.ru - темы, игры, и видео для Nokia.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Рогатый Змий
сообщение 23 Aug 2006, 14:34 (Сообщение отредактировал Black_Dragon - 23 Aug 2006, 14:40)
Сообщение #20

Великий Змий
Сообщений: 279
Спасибо сказали: 2 раза




Цитата
Soul Reaver:А если вам хочется чтоб после посещения этого объекта, и посещении его повторно выдавалось другое сообщение?

Еще можно то же самое сделать c помощью флагов...
Вот так
!?OB1/1/0;
!!IF&-10:M^Текст при первом посещении^;
!!IF:V10/1;
!!IF&10:M^Текст при последующих посещениях^;

Ну это понятно уже что !?OB1/1/0; - проверка посещения объекта.
!!IF&-10:M^Текст при первом посещении^; - !!IF- менеджер флагов, &-10 ресейвер сработает если флаг 10 установлен на ложь
(по умолчанию это так)
!!IF:V10/1; - После первого сообщения ставим флаг 10 на правду
и при последдующих посещениях будет срабатывать только
вот этот ресейвер:
!!IF&10:M^Текст при последующих посещениях^;
и соответственно этот ресейвер !!IF&-10:M^Текст при первом посещении^;
срабатывать больше не будет...


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post

11 страниц V   1 2 3 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 18 April 2024 - 09:20
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика