Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
04 Jun 2006, 09:48
(Сообщение отредактировал Bourn - 23 Jul 2006, 21:34)
Сообщение
#1
|
|
|
Супер-злодей Сообщений: 1 431 Спасибо сказали: 16 раз |
Здесь будут разбираться разные скрипты (сложные и не очень) и объясняться сам процесс ЕРМ'ирования с самого начало и со всеми деталями и подробностями. Soul Reaver у нас назначается главным по обучению новичков
Таааккссс... Поработаю на благо настоящих героев. Что бы такое бы написать интересное?? Щас, полазию по своим картам, может чё-нить вспомню... Ничё интересного... Ну ладно, давайте например, создадим из пустого артефакта номер 168 (такая кожаная бронька из Диабло 2), к примеру, плащ глины. А лучше плащ в глине 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; Вот, вроде всё Вообще кому интересно, могут зайти сюда. Здесь (на форуме WST -------------------- Ничего себе сходил за хлебушком о_О
Просьба начинающим скриптерам не обращаться за помощью в ERM. Не помню ни капли. Если только помочь с логической задачей на примерах. В создания городов не вступаю. WST возрождать не буду. Скорее всего.. |
|
|
|
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.
|
|
|
|
| Гость_BloodPhoeniX_* |
08 Jun 2006, 11:31
(Сообщение отредактировал BloodPhoeniX - 08 Jun 2006, 11:33)
Сообщение
#3
|
|
|
Я здесь вот скрипт доработал по созданию Драколича. Теперь можно улучшать и в экране города и в экране героя. Немного изменил цену и добавил полное описание. Может его тоже разместить?
Только вот не смог настроить его включение и отключение в опциях. Где можно почитать про это?
Прикрепленные файлы
|
|
|
|
08 Jun 2006, 16:33
(Сообщение отредактировал Horn - 08 Jun 2006, 16:34)
Сообщение
#4
|
|
|
Power Member Сообщений: 160 Спасибо сказали: 7 раз |
Есть скрипты вогификации (scriptNN.erm, лежат в папке Data\s), которые выполняются, если вы при старте игры вогифицируете карту, а есть скрипты, предназначенные для конкретных карт (если включены оба типа, то скрипт карты выполняется раньше скриптов вогификации).
Подключить скрипт карты можно двумя способами, у каждого из них есть свои плюсы и минусы. Один способ (в тексте глобального события) уже был описан выше Soul Reaver'ом. В этом случае текст скрипта хранится в карте, а значит, и в созданных на этой карте сейвах. Поэтому если вам после месяца игры встретится критическая ошибка - даже если ее исправить в скрипте, прохождение придется начать заново. Зато в этом варианте игрок может не вдаваться ни в какие тонкости, плюс меньше возможностей для нечестной игры. Второй способ - создать скрипт в отдельном файле, имя которого должно совпадать с именем карты, расширение "erm", и лежать он тоже должен в папке Maps. Для его написания лучше всего пользоваться редактором скриптов (erm_s.exe в папке erm_s). Блокнот не годится из-за одной маленькой особенности - в текстовых файлах и в скриптах чуть различаются концы строк. Но редактор ничем не хуже Блокнота, наоборот, там есть дополнительные удобства, а интерфейс столь же прост. Если скрипт хранится во внешнем файле, то его можно изменить, потом загрузить игру, и изменения вступят в силу! Только надо закрыть Героев и запустить их заново. Что бы я посоветовал исходя из личного опыта? На этапе разработки и отладки мне кажется более удобным второй способ. А вот когда скрипт полностью готов, его можно уже вставить в событие, а erm-файл переименовать или удалить. |
|
|
|
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.
|
|
|
|
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.
|
|
|
|
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) Также вы можете нажать на кнопку "открыть" для изменения существующих файлов. |
|
|
|
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; - убрать удачу -------------------- |
|
|
|
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; - будет срабатывать при посещении любого города И так далее... -------------------- |
|
|
|
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^Здесь был колодец.^; Вот, скрипт готов Код 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 возрождать не буду. Скорее всего.. |
|
|
|
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; - если посещен, телепортируем героя на посещенный Глаз мага -------------------- |
|
|
|
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 сообщений. -------------------- |
|
|
|
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. Только если ВСЕ четыре условия будут выполнены, герой получит артефакт. -------------------- |
|
|
|
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. -------------------- |
|
|
|
14 Jul 2006, 11:05
Сообщение
#15
|
|
![]() Banished Сообщений: 1 782 Спасибо сказали: 116 раз |
Вот все про флаги и переменные:
PS. Стоит писать про ресиверы или триггеры?
Прикрепленные файлы
-------------------- |
|
|
|
21 Jul 2006, 08:48
Сообщение
#16
|
|
![]() Banished Сообщений: 1 782 Спасибо сказали: 116 раз |
Введение
Если игрок активирует триггер, это вызывает некоторые действия (ресейверы). Триггером может быть событие, объект или герой, который посещает герой игрока, или это может быть ERM-функцией, вызываемой из другого ERM-кода или события, установленного на определенное время или интервал. Ресейвером может быть событие, герой, объект на карте или другие вещи. Поскольку многие вещи в игре могут быть использоваться как триггеры или ресейверы, важно не перепутать, что куда относится. Как использовать триггеры Свойства триггеров событий или объектов не связаны с целью существования триггера. Действие триггера должно быть описано во временных событиях. В скриптах ERM триггер идет как главный (начальный), и следующие после триггера строки - ресейверы. Если вы помещаете более одного триггера в некоторое событие, ресейверы будут следовать по последнему триггеру. Синтаксис триггеров Каждый триггер начинается со знаков (!?) и заканчивается ( Использование переменных в триггерах Переменные не могут быть использованы в местах параметров триггера. Если вы попробуете, переменная будет игнорирорваться или приниматься за ноль. Если вы используете постоянные переменные, например 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-ресейвер действует на локальные события на карте и имеет несколько различных команд для изменения свойств события. Как использовать ресейверы Ресейверы помещаются во временнЫх событиях после триггера, который их запускает. Триггер может быть только один. На одну строчку можно писать одну команду или более, но для ясности и понятности вашего скрипта (так же для поиска ошибок), лучше писать на каждую строку по команде. Синтаксис ресейвера Все ресейверы начинаются с двойного восклицательного знака (!!) и заканчиваются точкой с запятой ( Все 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 -------------------- |
|
|
|
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; - если первое посещение, установить, что оно уже было -------------------- |
|
|
|
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; - узнаем, что за монстр (если там случайный монстр, то в самый раз !!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; - если герой выиграл и жив, убираем монстра Монстр мертв, и мы только что симулировали битву с настоящим монстром! -------------------- |
|
|
|
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.
|
|
|
|
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^Текст при первом посещении^; срабатывать больше не будет... |
|
|
|
27 Aug 2006, 12:28
Сообщение
#21
|
|
![]() strange thing Сообщений: 2 586 Спасибо сказали: 94 раза |
Код все команды делятся на две принципиальные части - триггеры и реакторы.
триггеры - это особые команды, принимающие на себя обработку события. код триггера состоит из двух частей: заголовка (собственно команда триггера) и последующий код обработчика, составленный из реакторов. формат триггера: !{?|$}WW[p][c]; где XX - имя триггера, p - параметры, а c - условия. львиная доля триггеров работает для формата !?, но для некоторых есть и формат !$, означающий ПОСТ-триггер. например, !?OB выполнится ПЕРЕД посещением объекта, а !$OB - ПОСЛЕ. реакторы, в свою очередь, делятся на собственно реакторы и инструкции. формат реактора: !{!|#}WW[p][c]:[X]; где WW - имя реактора, p - параметры, а c - условия. !! означает обычный реактор, !# - инструкцию. отличие инструкций в том, что они не требуют вышестоящего триггера и выполняются при старте карты. X - это раздел команд. общий формат команд реактора: W[p] где W - имя команды, p - параметры. в одном реакторе может быть несколько команд. параметры, как видно, присущи как основным командам, так и подкомандам и имеют общий формат. V[/V[/V[/V[/V[/V[/V[/V[/V[/V[/V[/V[/V[/V[/V[/V]]]]]]]]]]]]]]] то есть до 16 параметров, разделенных слешем. V может быть нулем, числом, переменной. второй и последующие параметры могут быть пустыми. последний параметр может быть строковым, причем тогда он НЕ отделяется от предыдущего слешем. строки в ERM выделяются символами "^" и не могут содержать символов "^" или ";". примеры команд реактора: T //без параметров R0 //параметр1=0 P1/v1 //параметр1=1;параметр2=значению переменной v1 M1/5^text^ //параметр1=1;параметр2=5;параметр3=строка "text"; для каждого триггера, реактора, инструкции или команд реактора или инструкции требуется свой набор параметров - смотри соответствующие страницы справки условия определяют, будут ли выполняться подкоманды реактора или нижележащий код триггера. общий формат условий: {AND[OR]|OR} то есть может быть до двух секций условий. три возможных варианта: AND AND+OR OR никаких других вариантов, типа OR+AND и дублирования секций быть не может. формат AND: &C[/C[/C[/C[/C[/C[/C[/C[/C[/C[/C[/C[/C[/C[/C[/C]]]]]]]]]]]]]]] и выполняется только когда ВСЕ условия истинны формат OR: |C[/C[/C[/C[/C[/C[/C[/C[/C[/C[/C[/C[/C[/C[/C[/C]]]]]]]]]]]]]]] и выполняется, когда хотя бы одно условие истинно. связка AND+OR выполняется, когда истинны ВСЕ условия AND и/или хотя бы одно из условий OR C может быть условием флага или сравнения. флаги в ERM - это массив логических значений 1..1000; чтобы проверить флаг на истинность, условие содержит его номер. чтобы проверить на ложность, условие содержит номер*-1. условие сравнение выглядит в виде V1?V2, где V1,V2 - данные для сравнения, которые могут быть числами, переменными, строками, а ? - знак сравнения в виде = равно <> не равно > больше < меньше >= больше или равно <= меньше или равно в ERM имеется большое количество переменных. все переменные имеют вид T[i] где i - индекс. подробнее о типах и количестве переменных каждого типа смотри на странице VR; примеры условий: &1 //если флаг 1 true &5/-15/1000/v1<>5 //если флаги 5, 1000 true И флаг 15 false И v1 не равна 5 |y1=7/z1=^Result^ //если y1 равно 7 ИЛИ z1 равно строке "Result" &v1=1/1|2 //если (флаг 1 true И v1 равно 1) ИЛИ флаг 2 false условия пишутся после параметров триггера, реактора или инструкции -------------------- anyway the wind blows...
|
|
|
|
28 Aug 2006, 15:59
Сообщение
#22
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз |
Цитата(Soul Reaver @ 23 Aug 2006, 15:01) !?OB1/1/0; !!IF&v1=0:M^Текст.^; !!VRv1&v1=0:S1; !!IF&v1=1:M^Текст 2.^; Чтобы при первом посещении не показывались оба текста нужно строчку с "Текст 2." поставить перед строчкой "Текст". Вот так: !?OB1/1/0; !!IF&v1=1:M^Текст 2.^; !!IF&v1=0:M^Текст.^; !!VRv1&v1=0:S1; Скриптеры, не забывайте об этом! |
|
|
|
23 Sep 2006, 11:03
Сообщение
#23
|
|
![]() Banished Сообщений: 1 782 Спасибо сказали: 116 раз |
Как создать свой первый скрипт
Erm для чайников, by Qurqirish Dragon Первое, что вы должны знать в любом случае - скрипт должен помещаться в карте во временных событиях. Для этого зайдите в редактор карт, заходите в "Спецификации карты" и нажмите на табличку "События". Поскольку вам не нужно, чтобы скрипт показывался как обычное сообщение, запретите всем игрокам-людям возможность его активирования. Также рекомендуется использовать наибольший день появления (макс. 672). В этом случае будет удобней заходить в файл, назодящийся в конце списка, да и редко карта длится дольше года. Наконец, вы должны дать имя событию и описанию скрипта. Теперь вставьте скрипт в сообщение события. Вы можете делать скрипт прямо здесь или в скрипт-редакторе и затем вставлять его в окно события. Если вы будете использовать скрипт-редактор, это поможет вам избежать многих проблем: 1) Если вы делаете какие-либо изменения в скрипте, вы сможете сохранить его снова. 2) Выбрать целый скрипт (ctrl+A), и скопировать его (ctrl+C) 3) Идите в редактор карт, и вставляйте скрипт (ctrl+V) Если вы используете любой другой редактор (типа блокнота), чтобы написать скрипт, затем откройте скрипт-редактор, скопируйте туда скрипт и сохраните. Многие редакторы - особенно WordPad и текстовые редакторы помещают невидимые символы и визуальные коды в файл, и это може привести к ошибкам ERM. ---------------------- Теперь собственно о скриптинге. Я приму за факт, что вы используете последнюю версию ERM-редактора, и включили подсветку команд (кнопка H у основания окна редактора). Кроме того, я не буду предполагать, знаете ли вы ЧТО-НИБУДЬ, из того, что я напишу здесь. Первое - каждый раз, когда вы изменяете скрипт, я предлагаю писать на листе бумаги - именно на листе, не в текстовом редакторе, - требования к скрипту, т.е. его действия. Сделайте "мозговую атаку", чтобы понять, что именно вы хотите от скрипта. Например, я написал скрипт Карт Пророчества (Папка_героев/data/s/script34.erm) для игры с параметрами героя при начале сражения. К счастью, у меня были мои примечания относительно скрипта, и могу разделить их здесь. Заметьте, что когда я начинал скрипт, я прежде ВООБЩЕ не видел ERM-скриптинга. Сначал я записал это: Артефакт, который в начале каждой битвы дает от -1 до +4 очка случайного первичного навыка. Это было целой идеей. Выглядит просто, правда? Я думал также. Затем я описал основные шаги: Начало битвы - проверка на артефакт. Имеется? нет - выход да - установить флаг, выбрать случайный номер параметра (0...3) И так далее, только общий эскиз. Я больше не буду входить в детали, я только хотел показать вам, что желательно сделать перед скриптописанием. Поверьте - если вы сделаете это сразу, то дальше будет намного легче. ------------------------- Теперь время писать код! Первая строка скрипта: ZVSE Это говорит WoG, что это не простое событие, а скрипт. Без этой строки вся ваша трудная работа будет игнорироваться игрой. Все команды состоят из четырех символов, и одного из трех основных типов, не включая ZVSE. В редакторе скриптов команды подсвечиваются разными цветами. Триггеры - команды, которые означают "Если что-то происходит в игре, я начинаю работу". Все триггеры начинаются со знаков !? Например, возьмите эту линию кода из моего скрипта Карт (помните, скрипт 34): !?BA0&v1321=1; [начало битвы] Это первый триггер в моем скрипте. Не беспокойтесь о действии команды, я объясню действие попозже. Но заметьте точку с запятой в конце строки. Все ERM-команды КОНЧАЮТСЯ точкой с запятой. После этого знака дальнейший текст считается комментарием, и показывается зеленым. Ресейверы - команды, которые устанавливают, проверяют или изменяют что-либо в игре. Они не сработают, если перед ними нет триггера. Все ресейверы начинаются с !! Пример: !!BA:E?v1331; [проверить на мультиплеерную игру] Опять отьметьте точку с запятой в конце команды. В комментарии вы можете объяснить значение команды, но об этом позже. Наконец, инструкции - как и ресейверы, за исключением того, что они работают только один раз - при начале карты. Они начинаются на !# Пример: !#UN:P34/?v1321; [скрипт включен?] Для тех, кто смотрит на скрипт: отьметье, что есьт и просто зеленые строки - комментарии. Для этого я использовал **. это необходимо, и другие авторы ERM используют в большинстве такой же метод. Пока вы не начинаете линию с команды, ERМ игнорирует линию. Для окончания этого введения, я объясню вам пару простых команд, с помощью каких вы сможете КОЕ_ЧТО сделать. Второй урок даст немного больше - но не стесняйтесь экспериментировать. Этот скрипт просто рассчитает, как часто любой герой посещал ревый верхний угол надзмного уровня карт (координаты 0, 0, 0). Всякий раз, когда я ввожу команды, я не боюсь использовать ERM-помощь (F1). Первая линия, конечно: ZVSE Далее, мы должны установить счетчик на 0. Так как мы хотим начать счет с 0, нам нужна инструкция. Инструкция должна быть назначена на переменную (!#VR) Прежде чем двигаться дальше, мы должны выбрать переменную для записи счета. Обычно вы должны сверяться со списком использованных переменных, находящихся там же, где и скрипты, и потом выбрать неиспользованную переменную. Но в целях обучения я буду всегда пользоваться v-переменными с малыми индексами. V-переменные - это те, которые вы будете использовать чаще всего. Я введу другие типы по необходимости. Так, теперь используем команду: !#VRv1:S0; Теперь разберем. что есть что: !#VR ... Выполнить команду в начале карты, команда работает с переменными ... v1 ... операция проходит над переменной v1 ... : ... Любая команда, которая что-либо делает, используется двоеточие для отделения команды от опции. Триггеры не имеют этого знака, но остальные - имеют. ... S0 ... Выбрать опцию S для VR. Это сообщает, что вы хотите установить значение переменной. В данном случае мы устанавливает его на 0. ... ; Как я упоминал выше, точка с запятой заканчивает команду. Теперь мы должны установить триггер. На карте поместите событие в 0,0,0. Это нужно, чобы позволить всем игрокам активировать событие, и позволить событию повторяться несколько раз. Теперь установим триггер: !?LE0/0/0; Триггер LE - "Когда событие в данных координатах активируется..." Эти три числа - x, y и z-координата в данном случае. Если вы откроете помощь для триггера !?LE, вы заметите, что также есть триггер !$LE (знак доллара вместо впросительного). Это - "После того, как событие в координатах посещено...". Если событие на карте делает что-либо без ERM, вы можете запустить его до или после кода (соответственно !$ и !?). Далее, теперь мы должны добавить один к значению. Для этого используем другую опцию команды VR, но теперь мы используем ресейвер (!! вместо !#): !!VRv1:+1; ERM использует + для указания действия прибавления. Таким образом, эта команда обозначает "добавить 1 к переменной v1". Другие математические операции: отнимание: используйте "-" умножение: используйте "*" деление: используйте ":" для остатка от деления: используйте "%" Заметьте, что кроме e-переменных все числа целые, т.е. 7, деленое на 4, будет равняться 1, а не 1.75. Наконец, мы должны показать сообщение игроку, в котором будет указано, какой раз посещается это место: !!IF:M^Вы посетитель номер %V1 в этом северо-западном углу поверхности!^; IF - команда для открытия интерфейса с игроком. Это может быть столь же простым, как простой показ сообщения, или задавать вопросы, показывать картинки и даже меню выбора. Опция M - "Показ сообщения". Есть только несколько ограничений того, что может быть в сообщении. Вы не можете использовать "^" или ";". Вы также должны быть осторожны с процентом. Если вы хотите показать %, вы должны напечатать %%. Вы, вероятно, заметили, что я имею ввиду один знак % в сообщении. если вы используете один %, то следующая вещь - нечто специальное, в чем вы нуждаетесь. В данном случае %V1 (заметьте, что здесь вместо строчных букв используются заглавные) вместо этих символов будет показано значение переменной v1. Если вы посмотрите на лист помощи для ресейвера !!IF, вы увидите список команд для %. Это весь скрипт. Так, объединя все вышенаписанное, мы имеем следующее: ZVSE !#VRv1:S0; [установить переменную v1 на 0] !?LE0/0/0; [посещение события в северо-западном углу поверхности] !!VRv1:+1; [добавить 1 к v1] !!IF:M^Вы посетитель номер %V1 в этом северо-западном углу поверхности!^; [показать сообщение] -------------------- |
|
|
|
23 Sep 2006, 18:58
Сообщение
#24
|
|
![]() Banished Сообщений: 1 782 Спасибо сказали: 116 раз |
Как создать свой первый скрипт (часть 2)
Erm для чайников, by Qurqirish Dragon Я собираюсь взять скрипт, сделанный ранее, и расширить действие этого скрипта - каждый герой, посещающий северо-западный угол карты в десятый раз, стал сказочно сильным, слабым или обычным (циклически). Другими словами, после того, как 10 героев посетят событие, все герои удвоят свою силу магии во время битвы. После 20го сила магии в бою будет установлена на 1, и после 30го станет обычной. Затем цикл повторится. Сначала мы собираемся вставить строку, между командами !!VR и !!IF. Эта строка проверит на то, какой по счету вы посетитель. Так как это значение необходимо, чтобы сохранять счет, я использую временную переменную. Временные переменные в ERM - это y-переменные. Они не сохраняются между скриптами, так что вы не можете использовать эту переменную для длительного хранения. Но вы можете не беспокоиться о том, что не испортите другие скрипты, используя эти переменные. Так давайте добавим линию: !!VRy1:Sv1%10; [переменная v1 делится на 10?] эта команда использует два оператора в одной команд. Все действия в ERM идут слева направо. Помните, что если у вас несколько операций для выполнения - лучше разбить их на несколько линий. В этом случае мы сначала устанавливаем переменную y1 в значение переменной v1, и затем находим остаток при делении на 10. Если y1 = 0, значит v1 - число, кратное 10. Теперь, если это число не кратно 10, мы должны только показать сообщение, уже указанное прежде. Но нужно сделать мелочь: !!IF&y1<>0:M^Вы посетитель номер %V1 северо-западного угла поверхности!^; [показать это сообщение, если ничего более не происходит] Кроме изменения в комментарии, я добавил перед двоеточием условие & (амперсанд) и y1<>0. Амперсанд - "позволю команде работать, если мое условие выполнено". Дальнейшее выражение y1<>0 говорит об условии (здесь нужно, чтобы y1 был больше или меньше 0). Таким образом это сообщение будет показано только если y1 больше или меньше 0. Теперь, если v1 - число, кратное десяти, мы хотим сообщить, что волшебство изменяет мир. Но для этого мы должны узнать, какое изменение делается. Мы будем использовать другую y-переменную для проверки на это: !!VRy2:Sv1:10%3; [найти номер изменения] Эта команда возьмет v1 и разделит его на 10, затем возьмет остаток при делении на 3. Это даст значение переменной y2: если v1 будет меньше 10 или между 30 и 39, 60 и 69 и т.д., то значение y2 будет равно 0. y2 будет равно 1, если v1 будет между 10 и 19, 40 и 49 и т.д., и тот же принцип при y2 = 2. заметьте, что даже если v1 - число, не кратное 10, оно все равно вычислится. Теперь нам нужно еще три команды !!IF - одна для каждого типа изменения. Но, я могу ввести еще несколько понятий, при этом пойдя по чуть более длинному пути. Нам нужно сообщение, в котором говорится "Вы посетитель номер [ч-л], вы чувствуете, что магические влияние увеличились!" Также нужно сообщение, содержащее "Вы посетитель номер [ч-л], вы чувствуете, что магия мира ослабевает." И последнее, что нам нужно: "Вы посетитель номер [ч-л], вы чувствуете, что магия Мира стабилизируется." Заметьте, что эти три предложения говорят почти одно и то же самое, но с небольшими изменениями. Нам точно не нужны лишние символы. Это особо важно, если позже мы захотим добавить больше возможностей. Для этого мы собираемся использовать z-переменную. z-переменные - единственные переменные, способные хранить текстовые данные. Точно так же, как и v-переменные, z-переменные постоянно сохраняются. Но есть несколько z-переменных, являющиеся временными, как y-переменные. Быстрый взгляд на "Флаги и переменные" в ERM-помощи, и вам известно, что временные z-переменные обозначаются немного по-другому: от z-1 до z-10. Давайте используем переменную z-1, чтобы записать кусок текста, который изменяется. Это будет три линии: !!VRz-1&y2=0:S^магия Мира стабилизируется.^; [для визита 30, 60, 90, ...] !!VRz-1&y2=1:S^магические влияния увеличились!^; [для визита 10, 40, 70,...] !!VRz-1&y2=2:S^магия мира ослабевает.^; [для визита 20, 50, 80, ...] Здесь вы полностью должны понять эти строчки. Вместе они устанавливают переменную z-1 в тот текст, который нужен в данном случае. Отьметье, что правила помещения текста в z-переменную аналогичны правилам для текста в команде !!IF:M, вы можете использовать команду % для показа значения других переменных, и вы должны напечатать %% для знака процентов. "^" и ";" не позволительны!. Теперь мы должны показать новое сообщение: !!IF&y1=0:M^Вы посетитель номер %V1, вы чувствуете, что %Z-1.^; [показать измененное сообщение] В этот раз условие состоит в том, что y1 равняется 0. Мы только хотим, чтобы это сообщение появилось и изменялось. Теперь у нас готовы все сообщения. Затем нужен код, чтобы изменить статистику героя в битве. Я хочу добавить, что линия ниже - комментарий, т.е. в редакторе скриптов будет изображаться зеленым: ** начало кода эффектов в битвах Нам нужна проверка на начало битвы. Это означает, что нам нужен новый триггер: !?BA0; Так как мы использовали новый триггер, предыдущий код прекратит работу при достижении этого места. Триггер BA активируется при битвах. BA0 (ноль, на не о) - триггер на начало сражения. Нам понадобится так же триггер на конец битвы. Знайте, что многие скрипты часто имеют проблемы в игре человек-против-человека и мультиплеерных битв. Хотя данный скрипт не должен иметь проблем, я все равно собираюсь проверить на этот случай и не позволить коду работать в этом случае. Есть специальная команда для этой проверки: !!BA:E?y1; [это сетевая битва?] Это ресейвер BA. Опция E - "я узнаю, какое это сражение". В ?y1 запишется результат проверки. Отметьте, что я многократно использую y1 с самого начала - это и есть преимущество временных переменных: вы можете не волноваться о старом значении, если вы хотите использовать переменную. Если вы просмотрите ERM-помощь по ресейверу BA, то узнаете, что y1 может принимать значения: Если битва - между ИИ и игроком-человеком, ход ИИ на компьютере хозяина игры, то y1 будет равна 2. Если это битва человек-на-человека, кроме Хот-сита, y1 установится на 1. Если иначе, то y1 устанавливается на 0. Теперь нам нужно, чтобы код работал в последнем случае. Пока вы не знаете, какие типы скриптов сражений работают в случаях 1 и 2, самое безопасное - сделать это. Теперь мы имеем следующую линию: !!FU1&y1=0:Pv1; [если нет, продолжить скрипт] Это - новый ресейвер. Ресейвер FU вызывает другие сторки кода, в этом случае - кода под функцией 1. Опяьт же, учловие для этого - y1 = 0. Иначе функция не начнется. Опция P означает, что следующие параметры нужно передать в функцию. Хотя в этом случае они не необходимы, я передал переменную v1. Это позволит мне управлять переменной v1 внутри функции, не изменяя сохраненное значение. Мы не должны сделать что-либо в начале сражения, таким образом мы можем перейти прямо к функции. Мы начинаем триггер функции, указывая новую секцию кода вместе с комментариями: ** за миг до сражения !?FU1; Так как мы хотим изменить силу магии каждого героя в сражении, мы должны знать, какие герои борются, если они вообще имеются. Это делается двумя ресейверами для сражений: !!BA:H0/?v5; [получить номер героя-атакующего] !!BA:H1/?v6; [получить номер героя-защищающегося] Опция H узнает номер героя. H0 записывает номер нападающего, H1 - защищающегося. Если героя-защитника нет, то BA:H1 устанавливается на -2. Все номера героев перечисленны в ERM-помощи под форматом H, но так как мы применяем это действие ко всем героям, мы не заботимся об определенном числе. Я выбрал переменные v5 и v6 для записи номеров, потому что переменным v3 и v4 я оставил другое назначение. Теперь мы должны узнать силу магии для изменения. Наша y-переменная выше, которая хранила силу магии для изменения, уже потеряла свое значение. Но у нас есть доступ к переменной v1. Давайте снова получим тип изменения: !!VRx1::10%3; [получить тип изменения] Это выглядит знакомо, но несколько изменений все же есть. Первое - использована переменная x1, а не v1. Это потому, что значение переменной v1 теперь сохранилось в x1. x-переменные пронумерованы от x1 до x15, и содеражт параметры, в которые их передавали ресейвером FU. Так как я передал v1, x1 получила свое значение. Так же существует x16, и вы можете передать значение этой переменной, но она имеет особое назначение (дело с которым мы будем иметь чуть позже), т.е. вы должны пытаться избегать использования этой переменной. Также отьметьте, что эти переменные могут содержать только целые числа, т.е. вы не можете передать z-переменную. Кроме того, не волнуйтесь из-за двойного двоеточия. Превое двоеточие отделяет команду от опции, а второе - производит операцию деления. Теперь x1 содержит значение, которое мы записывали в первой части скрипта. Теперь мы почти готовы. Мы просто должны узнать силу магии героев: !!HEv5:F?y5/?y6/?y3/?y7; [получить параметры атакующего] !!HEv6&v6>=0:F?y5/?y6/?y4/?y7; [получить параметры защищающегося] Ресейвер HE используется для изменений аспектов любого героя. Первая линия просматривает героя, номер v5, а вторая - v6. Во второй линии мы добавили проверку v6>=0, чтобы, если нет героя-защитника, WoG не пробовал искать героя -2. Это бы вызвало ошибку при запуске скрипта. Опция F смотрит параметры героя. Следующие четыре числа разделены слэшами "/" - атака, защита, сила магии, знания, в именно таком порядке. Если вы поместите число или переменную туда, это изменит параметр на значение числа или переменной. Если вы помещаете знак ? перед именем переменной, тогда берется текущее значение навыка и хранится в этой переменной. В этом случае переменные y3 и y4 будут содержать силу магии героев. Переменные y5, y6, и y7 - просто удерживают значение, и я могу использовать их повторно. Здесь я хочу отметить, что хорошая идея - записывать на отдельной бумаге то, что хранит каждая переменная. Это поможет, если вы вдруг это забыли. Теперь мы должны настроить изменения силы магии. Так как мы должны знать, какие параметры восстанавливать после изменений (для восстановления старых параметров), мы будем записывать их в две v-переменных. Я буду использовать переменные v3 и v4, соответствуя y3 и y4. Это - то, почему я пропустил их ранее. !!VRv3&x1=1:Sy3; [если волшебство усилилось - увеличение силы магии] !!VRv3&x1=2:S1-y3; [если волшебство ослабилось, установить силу магии на 1] !!VRv4&x1=1/v6>=0:Sy4; [если волшебство усилилось, увеличить силу магии] !!VRv4&x1=2/v6>=0:S1-y4; [если волшебство ослабилось, установить силу магии на 1] Новая вещь, замеченная здесь в третьей и четвертой линии. Слэш в условиях - то же самое, что и логическое "и". Так, &x1=1/v6>=0 означает "если x1=1 и v6>=0, тогда пускайте команду." Теперь мы должны только сделать изменения: !!HEv5&x1<>0:Fd0/d0/dv3/d0; [изменить силу магии] !!HEv6&x1<>0/v6>=0:Fd0/d0/dv4/d0; [то же для защищающегося] Здест вы изменяем параметры героев, но только если x1 не 0. Помните, чот если x1 = 0, то наш счетчик определяет "нет никаких изменений". Снова мы используем команду HE:F. Знак d перед любым числом или переменной говорит, что число или переменная должны быть добавлены к параметру. d0 оставляет параметр без изменений. Мы теперь завершили до-битвенную функцию! Теперь наш скрипт похож на: ZVSE !#VRv1:S0; [установить v1 на 0] !?LE0/0/0; [когда посещается событие в северо-западном углу карты] !!VRv1:+1; [добавить 1 к v1] !!VRy1:Sv1%10; [v1 делится на 10?] !!IF&y1<>0:M^Вы посетитель номер %V1 северо-западного угла повехности!^; [показать сообщение, если более ничего не происходит] !!VRy2:Sv1:10%3; [найти тип изменения] !!VRz-1&y2=0:S^магия Мира стабилизируется.^; [для визита 30, 60, 90, ...] !!VRz-1&y2=1:S^магические влияния увеличились!^; [для визита 10, 40, 70,...] !!VRz-1&y2=2:S^магия мира ослабевает.^; [для визита 20, 50, 80, ...] !!IF&y1=0:M^Вы посетитель номер %V1, вы чувствуете, что %Z-1.^; [show change message] ** эффект скрипта в битве !?BA0; !!BA:E?y1; [это сетевая битва?] !!FU1&y1=0:Pv1; [если нет, продолжить скрипт] ** за миг до битвы !?FU1; !!BA:H0/?v5; [получить номер героя - атакующего] !!BA:H1/?v6; [получить номер героя-защитника] !!VRx1::10%3; [получить тип изменения] !!HEv5:F?y5/?y6/?y3/?y7; [получить параметры атакующего] !!HEv6&y2>0:F?y5/?y6/?y4/?y7; [получить параметры защитника] !!VRv3&x1=1:Sy3; [если магия усилилась, увеличить силу магии] !!VRv3&x1=2:S1-y3; [если магия ослабла, уменьшить силу магии до 1] !!VRv4&x1=1/v6>=0:Sy4; [Если магия усилилась, увеличить силу магии] !!VRv4&x1=2/v6>=0:S1-y4; [если магия ослабла, уменьшить силу магии до 1] !!HEv5&x1<>0:Fd0/d0/dv3/d0; [изменить силу магии] !!HEv6&x1<>0/v6>=0:Fd0/d0/dv4/d0; [мо же для защищающегося] Заметьте, как линии комментария помогают просмотру секций. Теперь, после битвы, мы должны вернуть изменения обратно. Сначала мы делаем триггер конца битвы: ** пост-триггер битвы !?BA1; !!BA:E?y1; [сетевая битва?] !!FU2&y1=0:Pv1; [если нет - уничтожить изменения] Выглядит схоже, да? Хорошо, изменения находятся в триггере и номере функции. Триггер теперь BA1, это означает, что триггер сработает в конце битвы. И, так как нам нужно вернуть изменения обратно, нам нужна отдельная функция. К счастью, мы сохранили номер героев и изменений в v-переменных, так что нам не нужно снова вычислять их. Давайте начнем уборку: !?FU2; !!VRx1::10%3; [получить тип изменений] !!VRv3:*-1; [перевернем параметр нападавшего] !!VRv4:*-1; [перевернем параметр защищающегося] Чтобы v3 и v4 изменились, мы умножили их на -1. Теперь, если мы добавим их, как мы сделали прежде, то это уничтожит наши изменения. !!HEv5&x1<>0:Fd0/d0/dv3/d0; [восстановить силу атакующего] !!HEv6&x1<>0/v6>=0:Fd0/d0/dv4/d0; [восстановить силу защищающегося] Опять же имеется проверка на изменение и существование героя-защитника. Мы должны были хранить числа героев, потому что если герой убежал с поля битвы, мы бы уже не смогли найти его параметры. Наш скрипт готов! -------------------- |
|
|
|
05 Oct 2006, 15:05
Сообщение
#25
|
|
![]() Banished Сообщений: 1 782 Спасибо сказали: 116 раз |
Как создать свой первый скрипт (часть3)
Erm для чайников, by Qurqirish Dragon До сих пор скрипт, который мы спроектировали, активизирует герой, когда посещает северо-западный угол карты. Зачем кто-либо отправил бы туда героя? Конечно, вы могли всегда помещать событие на карту, уведомляя об игрока, но я не стану следовать этим путем. Вместо этого я собираюсь создать нечто, что привлечет игрока. Если вы зайдете в редактор карт, посмотрите на страницу городов. Если вы не смотрели здесь прежде, то увидите, что здесь много объектов после этих 10 (9 типов и случайный) городов. Большинство этих объектов незаскриптованно, т.е. даже если вы поместите их на карту, они ничего не делают, даже при WoG-ификации. Мы используем один из них. Для этого скрипта я собираюсь использовать 4ый объект в 3ем ряду. Это похоже на пентаграмму с маленькими обелисками на лучах, и большим обелиском в середине. Поместите это на карту максимально близко к углу, не отключая никакого изображения. Если вы этого обычно не делали, включите инструмент "проходимость" (Ctrl+P) - разбивку карты на красные и желтые площади. Любой красный квадрат герой не может посетить или пройти сквозь него. Любой желтый квадрат - это квадрат триггера объекта. Если C=свободно, R=красный, и Y=желтый, тогда этот объект в редакторе будет выглядеть так: CCCCC CRCRC RCYCR CCRCC Как я предполагаю, желтый квадрат должен быть расположен в (2,2,0). Теперь давайте изменять скрипт, чтобы использовать этот объект вместо события, помещенного ранее. Если вы сделали эту часть обучения, вы можете удалить участок события - я не буду снова использвать его. Теперь мы собираемся заменить линию !?LE, чтобы чтобы подогнать наш скрипт к желтому квадрату. Помните, старая линия была: !?LE0/0/0; [когда событие в северо-западном углу поверхности посещено] Теперь мы просто изменяем местоположение на желтый квадрат (2,2,0) и изменяем команду LE на OB: !?OB2/2/0; [когда объект в (2,2,0) посещен] Заметьте, что фактически триггер OB похож на триггер LE. Если вы не имели никаких проблем с LE, значит у вас не будет проблем и с OB. Только помните, что LE поддерживает только события, а OB поддерживает любые объекты, и вы будете знать, когда и какой нужен триггер. Теперь скрипт будет работать так же, как и прежде, кроме точки запуска. Но я собираюсь сделать еще одно изменение линии: !$OB2/2/0; [ПОСЛЕ того, как объект (2,2,0) посещен] Я изменил эту строку из триггера предпосещения (!?) на пост-посещение (!$). Сейчас это не имеет никаких последствий для скрипта, но теперь скрипт сработает после того, что мы еще добавим: мы сделаем дополнительную возможность, что когда вы посетите магический счетчик, за 100 золота вы сможете получить сразу пять посещений вместо одного. Далее мы собираемся поместить существующий туда - так как есть смысл заменить пентаграмму на Звездную Ось. Это только мой выбор, если хотите, заменяйте на какой-либо другой объект, имеющий свою функцию. Только убедитесь, что помещенный объект имеет лишь одну точку входа, и этот вход расположен в (2,2,0). Если вы теперь запустите карту, то когда вы посещаете эту Звездную ось (и только ЭТУ!), вы получите, как обычно, +1 к силе магии (или ничего, если ваш герой уже посетил ось ранее), и затем счетчки увеличится. Теперь давайте скрипт с "мистическим солшебным колесом" установим вне звездной оси. Я думаю, что из-за природы скрипта нам подойдет Сказочный дракон. Так или иначе, давайте начинать скриптинг: !?OB2/2/0; [Когда объект в (2,2,0) посещается] Это простой триггер предпосещения. Теперь мы должны закодировать вопрос да или нет. Первое, что мы должны понять - мы собираемся задать вопрос, на который нужно ответить. Это вызывает проблему, если ИИ посылает героя, чтобы посетить точку. Так что мы должны посмотреть, является ли текущий игрок человеком или ИИ. Мы делаем эту операцию ресейвером OW. OW позволяет нам проверять или устанавливать почти все параметры игрока (но не героя). Ну, пишем: !!OW:C?y1; [Получить цвет текущего игрока] !!OW:Iy1/?y2; [текущий игрок - ИИ?] Опция C? проверяет цвет текущего игрока. Вы не можете изменить текущего игрока, так что знак ? - это часть кода. Я записываю этот цвет в y1. Следующей линией я использую опцию I. Эта команда проверяет цвет на управляющего: человек это или игрок ИИ. Первое число - это цвет игрока для проверки, в нашем случае - y1. Второе число - значение: 1, если ИИ, или 0, если человек. Вы можете установить этот параметр, чтобы добавить или удалить игрока-человека с карты! Но сейчас мы хотим лишь узнать это значение. Если это герой ИИ, то y2 получит значение 1, иначе - 0. Теперь мы можем задать вопрос. Так как мы должны показать вопрос, нам понадобится ресейвер IF: !!IF&y2=0:Q1/6/0/21/134/33/0/2^Вы замечаете маленький стенд, настроенный около Зведной Оси. Сказочных Дракон подзывает вас: - Позабавьтесь с магией! За сто золота счетчик магии прыгнет на целых пять единиц посещений! Вы согласны?^; Как вы видите, здесь я добавил условие y2=0. Если ИИ посетит ось, то вопрос не будет задаваться! В любом случае, в этой команде много чисел, не так ли? Их восемь. Я собираюсь разобрать их ниже по частям. Если у вас есть ERM-помощь, зайдите в раздел !!IF и найдите опцию Q#1/#2/#3/#4/#5/#6/#7/#8^текст^; для точной информации. Сначала опция: Q. Это стандартный вопрос. Дальше - число 1. Это флаг, в который занесется ваш ответ. Флаги похожи на переменные, но могут принимать только два значения: 0 (ложь) и 1 (истина). В отличие от переменных, здесь нет указателя переменной. Например, v-переменная 1 пишется как "v1", z-переменная 1 как "z1", а флаг 1 просто 1. Я еще вернусь к этому моменту позднее. Следующие шесть чисел добавляют картинки к диалогу под написанным текстом. Каждая пара чисел обозначает одну картинку. Первое число - ТИП картинки, а второе число - ПОДТИП. Все возможные картинки для использования можно найти внизу страницы !!IF-ресейвера. В этом случае мы описали первое изображение как 6/0. Тип 6 - это ресурс, золото. Подтип для ресурса - это его количество, которое будет показано. Так как я установил подтип 0, то количество не будет отображаться - просто картинка. Второе изображение - 21/134. Тип 21 - это монстр, подтип - номер монстра. Если вы нажмете на гиперссылку в файле помощи по !!IF:Q, вы получите таблицу их номеров. В данном случае подтип 134 - это Сказочный дракон. Третье изображение - это 33/0. Тип 33 это один из первичных навыков, в данном случае - колдовская сила. Опять же подтип ставим 0, то есть без какого-либо количества. Когда скрипт будет запущен, под текстом будут изображения золота, Сказочного Дракона и Колдовской силы. Последнее число 2 говорит о том, что эта команда - вопрос да или нет. Когда скрипт запустится, внизу картинок будут привычные кнопки да или нет. Если вы выберете "Да", флаг флаг установится на "Истина" (1), если вы выбрали "Нет", флаг установится на "Ложь" (0). Теперь мы должны проверить, имеет ли игрок 100 золота для оплаты. Используем ресейвер !!OW. Вот код следующей линии: !!OW:R-1/6/?y3; [узнать, сколько золота имеет текущий игрок] Опция R означает, что мы хотим сделать что-либо с ресурсами игрока. Первое число - цвет игрока, у которого мы будем менять ресурсы. Это значение не-побитно, т.е. 0 для красного, 1 для синего, и так далее. Также можете посмотреть цвета в разделе помощи, но все они пронумерованы от 0 до 7 в порядке том же, что и в игре. Для этого скрипта я устанавливаю игрока -1. Это значит, что мы узнаем опции текущего игрока, кто бы это ни был. Мы уже проверили цвет текущего игрока выше (он сохранен в y1, если вы забыли), но я хотел использовать именно -1, чтобы показать эту возможность. Вы должны проверить синтаксис для каждой опции, чтобы узнать, может ли -1 использоваться для текущего игрока. Хотя это может обратиться к нейтральному игроку, т.е. никому. Число 6 - номер ресурса, здесь - золото. Последнее чесло - переменная, в которую мы хотим записать количество. В этом случае мы используем переменную y3, и перед ней ставим знак ? , что означает "Записать значение в эту переменную". Затем мы проверяем, что ответил игрок, и может ли он позволить себе покупку. Мы покажем соответствующий ответ для каждого случая. Для этого используем 3 команды IF -первая, если нажата кнопка "Нет", еще одна для "Да" и если игрок может позводить себе покупку, и последняя, если "Да" и игрок не может позволить себе покупку: !!IF&y2=0/-1:M^Дракон разочарованно поворачивается к другому потенциальному клиенту.^; !!IF&y2=0/1/y3>=100:M^"Отлично! Я знал, что вам понравится предложение!"^; !!IF&y2=0/1/y3<100:M^"Я рад, что вы заинтересовались, но у вас недостаточно золота для покупки. Возвращайтесь позднее!"^; Здесь условие "Это именно человеческий игрок" находится во всех трех командах. Второе условие проверяет флаг 1, который устанавливается в зависимости от ответа игрока В первой линии число флага отрицательно. Это означает, что мы делаем условие "Если флаг - Ложь, то проверка пройдена". В двух других линиях флаг положителен, что означает "Если флаг - Истина, то проверка пройдена"? Еще во второй и третьей линии есть проверка на количество золота "Значение больше или меньше?". Прежде чем вычесть 100 золота у игрока, мы должны решить, что сделает ИИ. Позвольте ИИ тоже купить пять посещений - 50%-ый шанс, что он сделает это. Мы сделаем это двумя командами: !!VRy4:S0R1; [генерируем значение от 0 до 1 включительно] !!IF&y2=1:V1/y4; [установить флаг в y4] Здесь вы признаете первую линию, но с новой опцией, которую мы прежде не использовали - R. Опция R генерирует случайное значение между 0 и числом после R (в нашем случае 1), и добавляет его к старому значению. Данный ресейвер VR устанавливает y4 на 0, и затем добавляет 0 или 1. Это и является нашим генерируемым шансом. Следующая линия - наш старый знакомый, ресейвер IF. На этот раз условие состоит в том, что ходит игрок-ИИ. Опция V шспользуется для установки значения флага. В данном случае, флаг 1 устанавливается на результат генерации. Теперь, когда мы сделали все возможные пути, мы кодируем вычитание золота командой OW. !!OW&1/y3>=100:R-1/6/d-100; [вычесть 100 золота, если все правильно: игрок согласился, золота хватает] Эти два условия должны быть ясны, но мы все равно резюмируем: первое условие для флага, т.е. если он Истина, независимо от того, был ли это сгенерированный флаг или сам игрок выбрал его. Второе условие - проверка, достаточно ли золота у игрока. Как и с колдовской силой, мы используем оператор d для вычитания 100 от текущего значения золота (ну, фактически мы добавляем -100). Мы должны сделать еще несколько строк - сейчас, например, добавление счетчика при оплате. Так как мы не использовали v2, я сделаю это здесь: !!VRv2:S0; [установить v2 на 0] !!VRv2&1/y3>=100:+4; [установить v2 на 4 если оплата была произведена] Заметьте, что хотя золота игрока и изменилось, y3 все еще содержит значение золота до оплаты. Таким образом, та же самая проверка, которую мы делали в команде OW, будет работать и здесь. Эта часть кода теперь сделана. Но мы еще должны изменить часть кода, который мы уже написали, так как мы должны добавить эти четыре посещения и получить соответствующее сообщение. Вспомните следующие линии из начала скрипта: !!VRv1:+1; [Добавить 1 к v1] !!VRy1:Sv1%10; [v1 делится на 10?] В этой части скрипта y1 - значение счетчика посещений. Для начала мы изменим первую линию: !!VRv1:+1+v2; [добавить 1+v2 к v1] Если опалта была произведена, то это добавит 5 к v1, иначе - только 1. Далее добавим линию после вычисления y1: !!VRy1&y1<=v2:S0; [сброс y1, если число уже не кратно 10] Если дополнительные пять посещений перескочили через число, кратное десяти, то означает, что v2 была равна 4, таким образом y1 между 1 и 4. Так, если y1 меньше или равен v2, это означает, что магический статус должен сработать - таким образом мы устанавливаем y1 на 0. Оставшаяся часть кода может оставаться без изменений! Теперь, после небольших изменений скрипт выглядит так: ZVSE !#VRv1:S0; [установить v1 на 0] ** триггер пост-посещения !$OB2/2/0; [ПОСЛЕ посещения объекта в (2,2,0)] !!VRv1:+1+v2; [добавить 1+v2 к v1] !!VRy1:Sv1%10; [v1 делится на 10?] !!VRy1&y1<=v2:S0; [сброс y1, если число, кратное 10 уже перепрыгнули] !!IF&y1<>0:M^Добро пожаловать на звездную ось. Магический счетчик показывает значение %V1^; [Показать сообщение, если ничего не произошло] !!VRy2:Sv1:10%3; [найти тип изменения магии] !!VRz-1&y2=0:S^return to normal.^; [для визита 30, 60, 90, ...] !!VRz-1&y2=1:S^strengthen.^; [для визита 10, 40, 70,...] !!VRz-1&y2=2:S^weaken.^; [для визита 20, 50, 80, ...] !!IF&y1=0:M^Магический счетчик теперь равен %V1... Вы чувствуете, что магия %Z-1.^; [показать измененное сообщение] ** эффект скрипта в битве !?BA0; !!BA:E?y1; [это сетевая битва?] !!FU1&y1=0:Pv1; [если нет, запускаем скрипт] ** за миг до битвы !?FU1; !!BA:H0/?v5; [получить номер героя - атакующего] !!BA:H1/?v6; [получить номер героя - защитника] !!VRx1::10%3; [получить тип изменения магии] !!HEv5:F?y5/?y6/?y3/?y7; [получить параметры атакующего] !!HEv6&v6>0:F?y5/?y6/?y4/?y7; [получить параметры защищающегося] !!VRv3&x1=1:Sy3; [если магия усилена, увеличить значение] !!VRv3&x1=2:S1-y3; [если магия ослаблена, установить на 1] !!VRv4&x1=1/v6>=0:Sy4; [если магия усилена, увеличить значение] !!VRv4&x1=2/v6>=0:S1-y4; [если магия ослаблена, установить на 1] !!HEv5&x1<>0:Fd0/d0/dv3/d0; [изменить силу магии] !!HEv6&x1<>0/v6>=0:Fd0/d0/dv4/d0; [то же для защитника] ** пост-битвенный триггер !?BA1; !!BA:E?y1; [это сетевая битва?] !!FU2&y1=0:Pv1; [если нет, продолжить] !?FU2; !!VRx1::10%3; [получить тип изменений] !!VRv3:*-1; [изменим параметр атакующего на отрицательный] !!VRv4:*-1; [изменим параметр защищающегося на отрицательный] !!HEv5&x1<>0:Fd0/d0/dv3/d0; [восстановим силу атакубщего] !!HEv6&x1<>0/v6>=0:Fd0/d0/dv4/d0; [восстановим силу защищающегося] ** триггер посещения объекта !?OB2/2/0; [объект (2,2,0) посещен] !!OW:C?y1; [получить текущий цвет] !!OW:Iy1/?y2; [текущий игрок - ИИ?] !!IF&y2=0:Q1/6/0/21/134/33/0/2^Вы замечаете маленький стенд, настроенный около Зведной Оси. Сказочных Дракон подзывает вас: - Позабавьтесь с магией! За сто золота счетчик магии прыгнет на целых пять единиц посещений! Вы согласны?^; !!OW:R-1/6/?y3; [Найти количество золота игрока] !!IF&y2=0/-1:M^Дракон разочарованно поворачивается к другому потенциальному клиенту.^; !!IF&y2=0/1/y3>=100:M^"Отлично! Я знал, что вам понравится предложение!"^; !!IF&y2=0/1/y3<100:M^"Я рад, что вы заинтересовались, но у вас недостаточно золота для покупки. Возвращайтесь позднее!"^; !!VRy4:S0R1; [генерируем значение] !!IF&y2=1:V1/y4; [устанавливаем флаг в значение] !!OW&1/y3>=100:R-1/6/d-100; [забираем 100 золота, если согласны] !!VRv2:S0; [устанавливаем v2 на 0] !!VRv2&1/y3>=100:+4; [устанавливаем v2 на 4, если плата произведена] -------------------- |
|
|
|
13 Jun 2007, 23:54
(Сообщение отредактировал Demiurg - 13 Jun 2007, 23:55)
Сообщение
#26
|
|
![]() Immortal Сообщений: 670 Спасибо сказали: 14 раз |
Получение/Определение/Установка типа артефакта у утопающего:
!!OBx/y/l:C#; # - номер артефакта, x, y, l - координаты утопающего. Получение/Определение/Установка типа сундука: !!OBx/y/l:C#; Если # = -7, то сундук +1500 золота Если # = -8, то сундук пустой Если # < -8, то сундук содержит артефакт + золото Для определения типа артефакта !!VR@:S#+2147483648%2048:8; После этого @ - номер артефакта Для установки в сундук артефакта !!VR#:S@*8+4294959106; @ - тип устанавливаемого артефакта !!OBx/y/l:C#; -------------------- |
|
|
|
09 Sep 2007, 12:45
Сообщение
#27
|
|
![]() В миру GrayFace Сообщений: 2 529 Спасибо сказали: 817 раз |
Код В: Как установить, что имеется в "Обломках", находящихся на воде? О: Используем команду OB:C, возможные значения: 0 - ничего ценного 1 - 5 древесины 2 - 5 древесины, 200 золота 3 - 10 древесины, 500 золота (с) пост DracoLich'а -------------------- ДНК банана на 50% состоит из человека.
|
|
|
|
11 Sep 2007, 20:31
Сообщение
#28
|
|
![]() Immortal Сообщений: 670 Спасибо сказали: 14 раз |
Как управлять содержимым пандоры?
Для пандоры работает ресивер !!LE Данное свойство уже используется в скрипте 25 WoG в разделе spell banning. -------------------- |
|
|
|
15 Sep 2007, 14:25
Сообщение
#29
|
|
![]() Immortal Сообщений: 670 Спасибо сказали: 14 раз |
Как пользоваться !!UN:C?
!!UN:C#/#/$; 1) Чтение !!UN:C<address>/<number of bytes>/?<value>; 2) Запись !!UN:C<address>/<number of bytes>/<value>; Примечание. Обычно адреса записываются в 16ричной системе счисления. Так что прийдется перевести в 10чную. Количество байт может быть прочитано или записано от 1 до 4. Значение записывается или считывается в 10чной системе счисления. --- Под WoG данная команда не всегда работает в записывающем режиме. Под TE с помощью этой команды можно сделать больше. Но в любом случае вы ее используете на свой страх и риск. -------------------- |
|
|
|
27 Sep 2007, 22:46
Сообщение
#30
|
|
![]() Immortal Сообщений: 670 Спасибо сказали: 14 раз |
MR2 Trigger features
Для понимания дальнейшего повествования пригодится этот простенький код. Этот код заставляет игру при каждом вызове триггера MR2 спрашивать нас, будет ли этот стек Сопротивляться магии или нет. !?MR2&999; !!IF:Q1/-1/-1/2^kill it?^; !!MR&1:F0;// not resistance !!MR&-1:F100;// max resistance "Да" - !!MR:F0;(0% сопротивление) "Нет" - !!MR:F100;(100% сопротивление) Некоторые мелкие особенности работы MR2 описаны в конце документа в разделе Другие особенности. 1) После выбора заклинания в книге для каждого стека срабатывает !?MR2 триггер при проверке, может ли заклинание применяться на этот стек. Если заклинание может применяться только на дружественные существа, то срабатывает для каждого дружественного. Аналогично для действующих на существа противника и на всех. Если действует хотя бы на одно существо, то остальные стеки не проверяются, происходит переход к следующей фазе и герой замахивает руку для каста заклинания. Иначе выдается сообщение, что заклинание ни на кого не подействует и заклинание отменяется. 2) Срабатывает при наведении на потенциальную цель. Если нажать да, то курсор меняется на книгу и можно кастовать на этот стек. Если нажать нет, то курсор не меняется на книгу и нельзя кастовать на этот стек. При нажатии мышки или при последующем наведении на стек будет опять дан выбор. Далее срабатывает триггер !?BG0; 3) Срабатывает при использовании заклинания на цель. Если "Да", то заклинание применяется. Если "Нет", то заклинание блокируется (анимация сопротивления магии). Порядок срабатывания на стеки для площадной магии*: #(3)(6) (1)(4)(7) #(2)(5) от центра (в скобочках для нечетной строки): (1) = -1 (2) = +17(+16) (3) = -17(-18) (4) = 0 (5) = +18(+17) (6) = -16(-17) (7) = +1 ####(8)(13)(17) ##(4)(9)(14)(18) (1)(5)(10)(15)(19) ##(2)(6)(11)(16) ####(3)(7)(12) от центра (в скобочках для нечетной строки): (1) = -2 (2) = +16(+15) (3) = +33 (4) = -18(-19) (5) = -1 (6) = +17(+16) (7) = +34 (8) = -35 (9) = -17(-18) (10) = 0 (11) = +18(+17) (12) = +35 (13) = -34 (14) = -16(-17) (15) = +1 (16) = +19(+18) (17) = -33 (18) = -15(-16) (19) = +2 *Для Берсерка порядок срабатывания обратный описанному. Для двухклеточного стек срабатывает только на большей позиции. Например пусть для инферно грифон занимает позиции 14 и 18. Тогда !?MR2 для грифона сработает только на позиции 18. Другие особенности MR2 1) MR2 не срабатывает никогда для стеков под антимагией. 2) При касте Массовой Дружественной магии MR2 не срабатывает на дружественных существ, на которых враг наложил гипноз. А также не срабатывает на существ противника, на которых мы наложили гипноз, при касте Массовой Враждебной магии. 3) MR2 не перехватывает массовый Dispel и некоторые другие заклинания. Впрочем для других заклинаний это очевидно. Цепная Молния и MR2 Рассмотрим срабатывание триггера MR2 при касте цепной молнии, в 3ей фазе (цель уже выбрана, !?BG0 уже отработал). 0) MR2 срабатывает для самой цели. Если мы заблокируем заклинание здесь, то цепная молнии сразу отразится и никуда дальше не пойдет. 1) Далее на каждом шаге MR2 срабатывает для каждого, еще не пораженного Цепной Молнией (с учетом других особенностей MR2) стека. Из всех стеков, для которых выпало (или мы выбрали), что они могут быть сейчас поражены, выбирается 1 стек по принципам выбора стека для Цепной Молнии. Эта особенность позволяет нам на очередном шаге направить Цепную Молнию на любой стек, для которого срабатывает MR2 на данном шаге. P.S. Такое вот бесхитростное описание, в очередной раз нас убеждает, что пути разработчиков Heroes 3 воистину неисповедимы. Created by Demiurg at 2007/08/09 -------------------- |
|
|
|
07 Oct 2007, 18:17
Сообщение
#31
|
|
![]() В миру GrayFace Сообщений: 2 529 Спасибо сказали: 817 раз |
Передача переменных между картами компании
Для передачи информации между картами можно использовать только переменные v501-v997, z301-z500, w51-w100 и "полученные" переменные нельзя менять не протяжении карты. Если есть желание их изменить, их нужно копировать в новые переменные на старте карты и работать с новыми, спокойно их меняя. Причина: Переходят между картами только переменные v501-v997, z301-z500, w51-w100, остальные обнуляются на старте карты. Более того, если изменить переходящие переменные внутри карты, то при рестарте карты они останутся измененными, а не загрузятся из состояния перехода между картами. основные исследования by Druin -------------------- ДНК банана на 50% состоит из человека.
|
|
|
|
18 Oct 2007, 13:04
Сообщение
#32
|
|
![]() Banished Сообщений: 1 782 Спасибо сказали: 116 раз |
Документы ERS
Если вы создаете новый скрипт для WoGификации, вы можете добавить его в диалог WoG-опций файлом ".ers". Этот файл должен иметь имя, что и у скрипта, например, script78.erm должен иметь ers-файл script78.ers. Этот файл - таблица, содержащая информацию о номере скрипта, внутренний номер скрипта, используемый для включения или отключения (номер может отличаться от номера скрипта), место появления в диалоге настроек WoGификации и текст описания. Быстрое описание каждого поля: 1. Комментарий - вы можете писать здесь что захотите. Обычно я вставляю имя или описание скрипта, но это поле лишь для вас, оно не влияет и не показывается в игре. 2. Номер скрипта (например, для script78.erm в поле напишите 78) 3. Страница, на которой он будет расположен (начинается со страницы 0) 4. Группа: 0=сверху справа, 1=снизу справа, 2=сверху слева, 3=снизу слева 5. Номер (первый = 0, второй = 1 и т.д.). Вы можете ввести -1, чтобы опция поместилась прямо за последним скриптом в таблице. Обычно я использую -1. 6. Статус по умолчанию: 0=отключен, 1=включен 7. Статус по умолчанию для сетевой игры (если вы нажмете на кнопку "По умолчанию для сети") 8. Код ERM для UN:P, используемый для определения статуса. Вы можете прочесть его командой UN:P#/?v1;, где # - ERM-номер. Я использовал номера 0-10 для встроенных опций (правый клик, Командиры, Стрелковые Башни и т.д.). 11-99 - для соответствующих скриптов. Если скрипт ниже 11, я добавлял 100. Так, скрипт 1 имеет номер 101, скрипт 2 - 102 и т. д. Дополнительно я использовал ERM-номера для дополнительных опций (например, много опций используют Правила карты), начиная от 111. 9. Текст - текст, показывающийся в окне опций рядом со статусом 1 0. Подсказка - текст внизу экрана опций, появляющийся при наводке мыши на опцию 11. Текстовое сообщение при правом клике по опции. Замечание: любой скрипт WoGификации - это чекбокс (вкл. или откл.), кроме нескольких скриптов, которых Слава объединил в группы (например, Основные настройки). Вы не можете сделать такое же файлом .ers, т.к. это код WoG. -------------------- |
|
|
|
30 Oct 2007, 20:14
Сообщение
#33
|
|
![]() замолкаю. Сообщений: 2 340 Спасибо сказали: 1010 раз |
В справке не совсем понятно, как работает арсширенный синтаксис !!EA:F
Вот что там сказано: Цитата(ERM-Help © DracoLich) F$1/$2/$3 Здесь не понятно, что писать для $2 (толи как для модификатора 6 в HE:C; толи как для модификатор в EA:$1 - номер способности $2 - модификатор (-1 = не имеет значения, выбирается самая первая подходящая линия) $3 - переменная для записи результата И с $3 не совсем понятно, что там писать... либо номер v-переменной, либо полностью переменную (типа y5) причём не указано, какую именно переменную здесь использовать (можно ли любую, или опять же только v#) Разъясните кто-нибудь -------------------- |
|
|
|
31 Oct 2007, 10:31
Сообщение
#34
|
|
![]() Banished Сообщений: 1 782 Спасибо сказали: 116 раз |
2Bes
Ну, раз мы имеем ПОИСК линии бонуса, то логично предположить (хоть это и не указано в справке А переменная $3 может быть любой (по крайней мере, обратное не указано) -------------------- |
|
|
|
31 Oct 2007, 16:05
Сообщение
#35
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз |
так:
$1 - номер способности (формат SE1) $2 - номер подспособности (форматы расширения SE2-5) $3 - номер линии т.е. подспособность - это параметр способности, т.е. например способность иммунитет к спелам - подспособность ко всем |
|
|
|
| Гость_Д'якон_* |
09 Nov 2007, 15:48
Сообщение
#36
|
|
|
Решил поделиться небольшим опытом в использовании !!UN:C. Вроде обучения по этому вопросу не было.
Так что я начну, а кто-нибудь продолжит. Надеюсь для новичков в этом деле будет полезно. Немного теории !!UN:C - ресивер позволяющий как записывать так и считывать данные по определенному адресу. И так для работы с данным ресивером, Вам потребуется Арт Мани и Герои. Адреса бывают статические и динамические. Сатитеческие адреса - это адреса ехе файла, т.е. 00401000 - 006АСЕС0 и 00701000 - 0293512С. Динамические адреса - выделяются программой во время загрузки. (Возможно совпадение динамических адресов в разных версиях героев, т.е. ТЕ и ВОГ, а также на разных компьютерах, но лучше все же привязывать динамические адреса к статическим Динамичские адреса можно привязать к статическим через указатели. Указатели, также бывают динамические и статические.). Все это будет рассмотрено ниже. Пока просто можете запомнить Что искать и как? На эту тему приведенно масса примеров в руководстве к АртМани (поэтому начинать нужно с чтения данного руководства). Памятка: лучшим прерыванием процесса является !!IF:M^^; (дальше поясню. Вообще с использованием ЕРМ поиск значительно облегчается) Чтож я приведу пару практических примеров. Начнем с простенького. Задача1: найти адрес содержащий ресерс "золото". Данная задача является наиболее простой. Ресурс отображается в определенном значении, значит и искать мы будем "точное значение". Создайте карту для эксперементов, где Вам не будут мешать противники. (не обязательно, но желательно). Запустите героев. Запустите Вашу карту (у Вас должен быть хотя бы замок, либо золотая шахта - для того чтобы золото меняло значение). Запомните значение ресурса. Нажмите Alt+Tab. Запустите АртМани. 1. Выберите процесс: ![]() 2. Нажмите на кнопку искать. И выберите: "точное значение" , введите кол-во золота, и выберите "Целые (стандартные)" (к последнему и следующим пунктам в меню поиска еще вернемся). ![]() ![]() ![]() 3. Нажимем ОК. В левом поле отоброзятся все найденные адреса с заданным значением. В моем случае при значении золота 20000 - 542 адреса. ![]() 4. Нажимаем Alt+Tab. Возвращаемся в героев и пропускаем ход. Золото увеличилось (у меня 20500). 5. Alt+Tab. Нажимаем на кнопку "Отсеять". И вводим в поле новое значение золота. Нажимаем ОК. Остался 1 адрес. Это и есть адрес по которому содержится значение золото. Значение целое - 4 байта. Т.е. при спользовании UN:C записываем или считываем 4 байта. Полученный адресс - в 16ричной системе исчесления, переводим в 10ричную (можно при помощи стандартного калькулятора Виндоус), для записи в UN:C. ![]() ![]() ![]() Вывод: определится с целью поиска, постараться чтобы в игре изменялся только этот параметр. Ну вот с первым примером закончили. |
|
|
|
| Гость_Д'якон_* |
09 Nov 2007, 16:21
(Сообщение отредактировал Д'якон - 09 Nov 2007, 21:17)
Сообщение
#37
|
|
|
Задача2: найти адрес содержащий стоимость постройки в городе .
Сложность данной задачи заключается в том что, стоимость постройки есть константа. 1. Запускаем героев. Запускаем АртМани. (В данном примере возьмем Конфлюкс). 2. Цену лучше искать по золоту, т.к. получаем меньше адресов. Поиск по другим ресурсам даст более 30000 адресов, что не очень удобно. 3. Итак. Смотрим стоимость первого, допустим двелинга, - 300 золота и по 5 дерева и руды. В поиске выбираем: "точное значение" , "300" , "Целые (стандартные)". Выполняем поиск. Найдено 376 адресов. 4. Добавляем все адреса в правое поле. Если адресов больше тысячи, то нужно изменить значение отображаемых адресов в правом поле. Данная опция находится в меню "искать", в "настройках" в закладке "дополнительные". И перезапустить АртМани. ![]() ![]() 5. Т.к. адресов в данном случае не более 376. То выставлять данную опцию не следует (а вообще рекомендую поставить сразу тысяч на 8-10 для удобства). 6. После добавления адресов в правое поле. Выбираем следующее: "изменить" - "выбрать все". Далее в контекстном меню выделенных адресов выбираем "установить значение" 1 с шагом 1. Можете увидеть как становились значения в адресах. Далее заходим в героев и смотрим цену двелинга. Цена в золоте 85. Находим адрес со значением 85, это и будет наш искомый адрес 06АА4D8. Для того чтобы найти адреса дерева и руды войдем в меню адреса, двойной щелчок на адресе и при помощи скролинга стрелками вниз (т.е. на уменьшение адреса) будем искать необходимые значения, т.е. 5 и 5. Можно заметить что ресурсы между собой находятся на смещении равное 4-ем. Соответственно дерево находится на смешении 24 от золота 06АА4С0. В этом легко убедится вычтя из адреса золота адрес дерева и переведя в 10ричную систему исчисления. ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вывод: обычно похожие по смыслу значения хранятся в близком диапазоне - блоке памяти или массиве значений. Чтобы найти откланения между значениями, в данном случае между значением стоимости двелингов, нужно найти еще значение стоимости второго двелинга и найти разницу между адресами. Можно быть уверенным, что и остальные стоимости двелингов находятся на одинаковом смещении друг от друга. |
|
|
|
| Гость_Д'якон_* |
09 Nov 2007, 21:26
Сообщение
#38
|
|
|
Задача3: заменить ресивер MR:N .
Задача стоит в том, чтобы определить номер стэка при наложении на него магии. Чтобы выделить данный момент в игре потребуется ЕРМ, а именно код следующего характера: Код ZVSE !?MR2; !!IF:M^^; Данный код позволит зафиксировать необходимый момент в игре, а именно, когда герой подымает руку перед кастом магии. Именно с этим моментом и будем работать. Следущая задача, наиболее сложная, определить как хранится информация о том на какой стек кастится магия. Я перебирал следующие варианты: 1) В виде номера стека, т.е. при касте на 21 стэк, нужно искать значение 21 и т.д. Но, оказалось, что понятия номер стэка вообще отсутствует в коде. Т.е. как бы Вы не старались найти в коде значения номеров стэка - ничего не выйдет. 2) Неизвестное значение, постоянное для каждого стека соответственно. (см. инструкцию к АртМани. Поиск неизвестного значения) 3) 40 булевых переменных со значением 1 и 0. Т.е. если магия кастится на стэк, то по определенному адресу переменная меняет значение на 1. Тоже увенчалось неудачей (хотя не совсем... Но применить это не получилось) 4) В битовой форме. Т. е. кастим на 0 стек - ищем 1, кастим на 1 - ищем 2, кастим на 3 - ищем 4 и т.д. Опять неудача. 5) Ну и последнее. Нужно искать указатель, который бы указывал на определенное постоянное значение для каждого стека. Вот здесь то и была зарыта собака. Теперь по-подробнее. Значит создав карту и поместив в нее код, запускаем героев и начинаем бой, желательно против человека - просто удобнее. Далее кастим магию на стэк и когда герой подымает руку для каста магии и выводится сообщение - переходим к АртМани и ищем необходимое нам значение. В первых четырех случаях проблем нет с поиском и отсеиванием. А вот в пятом нужно сравнивать значения для каждого стека. Для этого воспользуемся отсеиванием по формуле (см. АртМани инструкцию). Кастим на противника цепь молнию. Когда молния поражает 1-ый отряд - сохраняем 1-ый дамп памяти 2-ой отряд - 2-ой дамп 3-ий отряд - 3-ий дамп 4-ый отряд - 4-й дамп Далее кастим на каждый из пораженных отрядов магическую стрелу и сохраняем еще 4-ре дампа 5,6,7 и 8 соответственно. Далее записываем следующую формулу. (M1=M4)and(M2=M6)and(M3=M7)and(M4=M8)and(M[1,2,3,4,5,6,7,8]>0)and(M1<>M[2,3,4]) - этого достаточно. Запускаем отсеивание. Получаем около 30 значений. Далее выделяем их все и выбираем в выпадающем меню "изменить"-"изменить выбранные". Ставим вместо "адрес" - "указатель". Удаляем указатели, которые не указывают на адрес, а также указатели, которые не изменяются при касте на новый стек. Остается один адрес. Этот адрес - динамический указатель. Т.е. при касте на стек, по этому адресу хранится адрес с нулевым значением из массива данного стэка. Далее находим адрес координат стэка и находим между этими адресами смещение. Вот и все. И так что же такое указатель? Указатель - это адрес хранящий в себе 10ричное значение адреса на который он ссылается. Все об указателях можно прочесть в инструкции к АртМани. И последнее немаловажное. После того как Вы получили необходимые значения и все протестировали, обязательно нужно, что бы это было потестено на другом компе. Это то о чем я говорил в начале, что динамические адреса могут не совпасть на разных компьютерах и версиях героев. Если такое произошло, нужно записать динамический адрес через статический и смещение. Для этого в контекстном меню адреса, который Вы хотите выразить через статический выбираем: "Больше"- "Искать" - "Искать указатель на начало блока памяти". ![]() Далее выбираем диапазон поиска. Этот диапазон должен быть из статической области (см. первый урок). ![]() Далее найдя указатели. Выходим из одной версии героев (например ТЕ) и запускаем другую (т.е. ВОГ). И сразу отсеиваем указатели по значению адреса, которое они должны иметь. Если адресов осталось больше одного, выбираем любой и через него записываем динамический адрес. Все. P.S. UN:C - ассемблер для ЕРМ. Фантазируйте. Р.Р.S. За объяснениями в использовании ресивера или приведенных уроков пишите в ПМ. |
|
|
|
| Гость_Aнгeл_* |
01 Dec 2008, 15:06
Сообщение
#39
|
|
|
Цитата Но, оказалось, что понятия номер стэка вообще отсутствует в коде. Т.е. как бы Вы не старались найти в коде значения номеров стэка - ничего не выйдет. Присутствуют. Два массива, номера стёков: 0..20/21. |
|
|
|
19 Feb 2009, 12:39
(Сообщение отредактировал Master Of Puppets - 26 Feb 2009, 02:18)
Сообщение
#40
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз |
Просто открыл для себя, когда делал кнопки передачи отрядов в городе.
Команды !!HE:C и !!EX:A сильно различаются и занимаются каждая своим делом. Вторую нельзя использовать для установки кол-ва и типа монстров, ею можно лишь это проверить. Поэтому, как это ни громоздко, в случае, если вы передаёте опыт и арты, нужно использовать подряд три команды: !!HE:C установит информацию по типу и количеству, !!EX:E R - по опыту и артефактам. Даже если вы обнулили слот, в нём всё равно хранится инфо для EX. Если в городе в этот слот нанять монстра, он будет иметь опыт и знамя удалённого отряда. Значит, следует делать так: !!EX#/X:E0 R-1/-1 (или R0/d/0/0);!!HE#:C0/X/-1/-1; -------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
|
| Гость_Ньюб_* |
25 Feb 2009, 16:27
Сообщение
#41
|
|
|
Здравствуйте уважаемые.
А не могли бы вы подсказать, как еаписать скрипт (конечно если это возможно) как бы наделить юнита новой спасобностью ну например при атаки этот юнит имеет шанс кастануть магию на того которого атакует ну например взрыв. И если можно описать все шаги по подробнее. Зарание благодарен. |
|
|
|
01 Mar 2009, 10:07
Сообщение
#42
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз |
Операция удаления бит из переменной не вопринимает переменные с отрицательным знаком перед ними. То есть, команда типа !!VRv1:&-y1; выдаст вам ошибку. Минус должен быть "внутри", в самой переменной:
!!VRy1:S0-65;!!VRv1:&y1; - удалить 7-ой бит из переменной v1. -------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
|
08 Mar 2009, 06:07
(Сообщение отредактировал Master Of Puppets - 08 Mar 2009, 06:16)
Сообщение
#43
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз |
В подавляющем большинстве случаев индекс z-переменной для синтаксиса "Установить" вообще не нужен. Вместо этого можно поставить либо просто её номер, либо переменную, куда этот номер занесён. К примеру, прекрасно работают такие конструкции:
Код !!VRz999:S^button.wav^;!!SN:P999; Код !!VRz-1:S^mop.txt^;!!DL:N-1; Код !#HT63/27:V590/0/2419; А эти две команды лучше не путать: Код !!VRz-1:S2430+1; - установить z-1 на z2430(ERT)+z1 !!VRy1:S2320+x16;!!VRz1:Sy1; - прибавить к номеру ERT-переменной значение текущего круга функции и передать значение y1, после чего установить z1 на значение ERT, чей номер хранит y1. Широкий простор для круговых функций и возможность использовать ERT-файл вместо ini: Код !!DO1/0/155/1:P180000/180156; !?FU1; !!VRy1:Sx1+x16;!!VRy2:Sx2+x16; !!HEx16:B0/y1 B1/y2; Установить героям имена из секций 180000-180155 и биографии из секций 180156-180310 ERT-файла. Код *towns building, dialog box !?FU2040; !!VRvx3&x16=0:S2; !!VRy1:Sx1+x16;!!VRy2:Sx2+x16; !!VRvx3&vy1>=vy2:+1; !!if&x16=7:;!!DL159&vx3<>10:Ax4/4/2;!!DL159&vx3=10:Ax4/4/1;!!en:; !?FU2041; !!if&x16<>x1:;!!VRy1:S30+x16;!!VRy2:S10+x16;!!VRz1:S^^;!!DL159:Ay1/3/z1;!!DL159&vx16=10:Ay2/4/1;!!DL159&vx16<>10:Ay2/4/2;!!en:; !?FU2042; !!if&v999=x16:;!!VRy1:S30+x16;!!VRy2:S10+x16;!!VRy3:S2320+x16;!!VRz1:Sy3;!!VRz2:S2331; !!DL159:A98/3/z2 Ay1/3/z1;!!DO2041/1/10/1:Px16; !!if&vx16=10:;!!DL159:Ay2/4/0 E100/1;!!SN:P999;!!VRv9022:S-1+x16;!!en:; !!if&vx16<>10:;!!DL159:E100/0;!!VRy66:S0 R1;!!VRz-1:S^no%Y66.wav^;!!SN:P-1;!!en:;!!en:; !?FU2043; !!VRy1:Sx1+x16;!!VRz1:Sy1;!!VRy2:Sx2+x16;!!VRvy2:Vz1; !!DO2040/0/7/1&x16=7:P24; !?FU2044; !!VRy1:Sx1+x16;!!VRz-1:Sy1;!!VRy2:Sx2+x16;!!DL159:Ay2/3/z-1; - всего 5 функции, описывающие у меня диалог постройки города. Сжатие, на мой взгляд, шедевральное.) В подсказках для объектов стоит "ограничение" на z32000. Учитывая это, а также использование почти повсеместно локальных переменных, жалобы Aleee на недостаток 1000 глобальных стрингов несколько беспочвенны. !!IF:Q1/9999999998; !!FU&-1:E; !!VRz1:S^^; !!IF:D1/1/9999999999/1/1/1/1/1/1/1/1/1/1/1/1/1; - здесь ограничение по номеру бог знает где. Если ERT с таким номером есть, то диалог её покажет. Прим.: команда, в которой ни ERT-номер, ни отсутствие индекса z-переменной не действуют - VR:V. Однако косвенного обращения вроде !!VRv2:Vzv1; - никто не отменял. Юзайте ERT-формат и пишите хоть целые романы по слову на переменную.) -------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
|
08 Mar 2009, 17:37
Сообщение
#44
|
|
|
Immortal Сообщений: 668 Спасибо сказали: 58 раз |
Попробуй через статические переменные названия артов и их описания поставить.
|
|
|
|
21 Mar 2009, 13:16
Сообщение
#45
|
|
|
Advanced Member Сообщений: 114 Спасибо сказали: 7 раз |
Пытаюсь вспомнить ерм... не получается... а ведь когда-то такие скрипты писал...
так вот. скрипт в файле в папке мапс. 1. #UN:G1/170/0/S^Наёмные стрелки^; На команду не ругается, но имя снайперов остаётся тем же. Почему? Не работает так же !#VRz179:S^Наёмные стрелки^; !!UN:G1/170/0/z179; 2. Попытка вставить любой ресивер или триггер потом ресивер кончается ошибкой. пример !#TM4:1/1/0/1; !?TM4; !!UN:G1/171/0/z179; Что делать? Добавлено ([mergetime]1237630611[/mergetime]): Пытаюсь вспомнить ерм... не получается... а ведь когда-то такие скрипты писал... так вот. скрипт в файле в папке мапс. 1. #UN:G1/170/0/S^Наёмные стрелки^; На команду не ругается, но имя снайперов остаётся тем же. Почему? Не работает так же !#VRz179:S^Наёмные стрелки^; !!UN:G1/170/0/z179; 2. Попытка вставить любой ресивер или триггер потом ресивер кончается ошибкой. пример !#TM4:1/1/0/1; !?TM4; !!UN:G1/171/0/z179; Что делать? |
|
|
|
21 Mar 2009, 14:32
Сообщение
#46
|
|
![]() могу укусить! Сообщений: 450 Спасибо сказали: 116 раз |
Надо так наверное
!#UN:G1/170/0/S^Наёмные стрелки^; В общем проблема в первых двух символах. -------------------- И ты можешь лгать, и можешь блудить, и друзей предавать гуртом.
А то, что придется потом платить - так ведь это ж, пойми, - потом! (А.Галич) |
|
|
|
21 Mar 2009, 18:22
Сообщение
#47
|
|
|
Immortal Сообщений: 668 Спасибо сказали: 58 раз |
наверно так надо
!#VRz178:S^Наёмный стрелок^; !#VRz179:S^Наёмные стрелки^; !#UN:G1/170/0/178; !#UN:G1/170/1/179; |
|
|
|
21 Mar 2009, 21:47
Сообщение
#48
|
|
|
Advanced Member Сообщений: 114 Спасибо сказали: 7 раз |
Цитата(major @ 21 Mar 2009, 19:22) наверно так надо !#VRz178:S^Наёмный стрелок^; !#VRz179:S^Наёмные стрелки^; !#UN:G1/170/0/178; !#UN:G1/170/1/179; Большое спасибо, отлично работает!!! Только непонятно, почему только с переменными - где же я столько переменных подряд возьму? Ужасно неудобно!!! Цитата(Virsavia @ 21 Mar 2009, 15:32) Надо так наверное !#UN:G1/170/0/S^Наёмные стрелки^; В общем проблема в первых двух символах. Нет, так увы не работает, хотя очень хотелось бы. Эта инструкция "не ест" строки, только строковые переменные Добавлено ([mergetime]1237661241[/mergetime]): А есть какая-нибудь нормальная справка по ерм для программеров? Я когда начинал много лет назад, как раз читал такую Подскажите плиз "правильную" справку, буду очень благодарен |
|
|
|
21 Mar 2009, 22:46
Сообщение
#49
|
|
![]() допустим, мяў Сообщений: 24 115 Спасибо сказали: 13427 раз |
Да, переменные будут использоваться.
Есть выход - создать ERT-файл. Там будут использоваться уникальные z-переменные с очень большими номерами. -------------------- Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская) |
|
|
|
22 Mar 2009, 20:06
Сообщение
#50
|
|
|
Immortal Сообщений: 668 Спасибо сказали: 58 раз |
!!UN статические переменные не берет зараза.
|
|
|
|
22 Mar 2009, 23:03
Сообщение
#51
|
|
|
Advanced Member Сообщений: 114 Спасибо сказали: 7 раз |
Цитата(hippocamus @ 21 Mar 2009, 23:46) Да, переменные будут использоваться. Есть выход - создать ERT-файл. Там будут использоваться уникальные z-переменные с очень большими номерами. Где почитать можно? |
|
|
|
23 Mar 2009, 01:23
Сообщение
#52
|
|
![]() допустим, мяў Сообщений: 24 115 Спасибо сказали: 13427 раз |
Опытным путём
Скачай новый ERM Editor (в полезных програмах) -------------------- Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская) |
|
|
|
23 Mar 2009, 18:33
Сообщение
#53
|
|
|
Прошаренный Сообщений: 102 Спасибо сказали: 10 раз |
erm-manual читать не хотим? И чего хотИм?
-------------------- DracoLich Fan
|
|
|
|
24 Mar 2009, 13:59
Сообщение
#54
|
|
|
Advanced Member Сообщений: 114 Спасибо сказали: 7 раз |
Цитата(ShadowDF2 @ 23 Mar 2009, 19:33) erm-manual читать не хотим? И чего хотИм? По-моему, я из него в последнии дни не вылажу. Да и когда-то всё-таки на ранних версиях что-то хорошее писал А хорошего ерм-хелпа я не нашёл, хотя спрашивал на форуме. |
|
|
|
24 Mar 2009, 14:57
Сообщение
#55
|
|
![]() Князь Бореи Сообщений: 5 171 Спасибо сказали: 1349 раз |
G.I. если тебе хелп по ЭРМ нуно посмотри тут
http://dracolich.narod.ru/rus.htm |
|
|
|
24 Mar 2009, 18:59
Сообщение
#56
|
|
|
Advanced Member Сообщений: 114 Спасибо сказали: 7 раз |
Спасибо! правда, это у меня уже есть, но всё равно моё вам благодарю
|
|
|
|
24 Mar 2009, 23:46
(Сообщение отредактировал DracoLich - 17 Apr 2009, 09:52)
Сообщение
#57
|
|
|
Newbie Сообщений: 2 Спасибо сказали: 0 раз |
Народ, помогите со скриптом с героев. Он прописывает Wogификацию карты и не разрешает стрить Грааль в сопряжении. Кто-нибудь может помочь как снять этот запрет? А то у меня не получается. Вот скрипт. Помогите плиз
CODE ZVSE
_WARNING_#1=IMPORTANT! This file is not in a plain text format. NEVER use any editor except ERM_S for making any kind of changes! ERMS_PoweredBy=ERM Scripter v. 2003.2.13.2353 WoGify Name: script01.erm WoGify ERM code: 101 (0-4) plus 111-130 (0-1) for individual rules 101 code value: 0=choose map rules each game 1=use rules selected in options dialogue 2=use two random map rules 3=use two random map rules from those selected in options dialogue 4=disable all map rules ** Map Rules ERM script v1.9 - Donald X. Vaccarino ** Requires WOG version 3.55 or later ** Adds rules to a map on day one ** Several rules were suggested by Timothy Pulver ** WoGify Options editing by Timothy Pulver ** Rules: (Number in parenthesis is ERM code) ** 1. Fliers can't fly but instead aren't retaliated against. (111) ** 2. Monster speed is inverted. (112) ** 3. Monsters are half price on 7th day of week. (113) ** 4. Heroes create magic plains each day. (114) ** 5. All monsters attack twice. (115) ** 6. Monster stacks in hero armies grow by 4% each day, to 10000 max. (116) ** 7. Most dwellings also have boars. (117) ** 8. Heroes start at 5th level (+5000 experience). (118) ** 9. Heroes pick up double artifacts. (119) ** 10. Perpetual darkness. (120) ** 11. Heroes have double movement. (121) ** 12. Mines change resources once/week. (122) ** 13. +1 places can be revisited each month. (123) ** 14. Heroes get 9th-10th skills. (124) ** 15. A hero's upgraded 7th level monsters automatically become 8th level. (125) ** 16. Heroes gain an artifact each level. (126) ** 17. Rogues attack heroes at random. (127) ** 18. All creatures have a breath weapon. (128) ** 19. Shooters can't shoot but instead have +50% hit points. (129) ** 20. All towns have a grail (only used if no confluxes on map) (130) ** To use this code, put it into a Global Event, set to never happen. ** Make sure this event is prior to other events that may be affected by it. ** Variables Used: w46, z280-z299, z326-z328, z332-z354, v1-v4, v549-v559, v564-v579, v600-v602, v610-v639, v700-v739, v1219, v1262 ** Flags Used: 1-3, 875 ** Functions Used: 690-726 ** Timers Used: 84 (was 72) ** Variables w46, v549-v559, v572-v579, z280-z299, and z332-z354 must not be modified by other programs! ** functions for use during initialization ** see if player x16 is with player x1 on team x2, if not use for their shroud !?FU719; !!OW:Tx16/?y1; [get team number if any] !!VRy1&y1=-1:S-2; [treat no team as not the same team] !!VRvv600&x1<>x16/x2<>y1:Sx16; [store player number if usable for shroud-placing] ** find nonteammate for player x16 !?FU720; !!VRv600:S564 +x16; [number of variable holding non-teammate] !!VRvv600:Sx16; [default for 8-player-team game] !!OW:Tx16/?y1; [get team number if any] !!DO719/0/7/1:Px16/y1; [check each player for not being on this team] ** end of initialization functions ** Initialization Code !#VRv1:S0; [make sure v1 starts as 0] !#UN:P101/?v1; [check wogify options number - 4 means no rules] !#TM84&v1<>4:S1/999/1/255; [timer every day for all players] !#VRv579:S0; [first 10 bits of rules - none chosen yet] !#VRv578:S0; [previous day in game] !#VRv577:S0; [creatures are normal price] !#VRv576:S0; [second 10 bits of rules - none chosen yet] !#UN:X?v574/?v575; [get size/underground] !#VRv573:Sv574 :2; [get half of size = middle of map] !#VRv572:S0; [day of last rogue attack] !#VRv550:C1/2/4/8/16/32/64/128/256/512; [bit table] !#VRz332:S^Летающие не могут летать, но им не отвечают.^; [rule names for menu/papyrus] !#VRz333:S^Инвертированная скорость монстров.^; !#VRz334:S^В 7й день недели монстры вполовину дешевле.^; !#VRz335:S^Герои каждый день создают магич. равнины.^; !#VRz336:S^Все монстры атакуют дважды.^; !#VRz337:S^Армии героев растут на 4% в день.^; !#VRz338:S^Большинство вн. жилищ продают и кабанов.^; !#VRz339:S^Герои стартуют на 5-м уровне.^; !#VRz340:S^Герои поднимают двойные артефакты.^; !#VRz341:S^Постоянная тьма скрывает карту.^; !#VRz342:S^Герои ходят в два раза дальше.^; !#VRz343:S^Шахты меняют ресурсы каждую неделю.^; !#VRz344:S^Одноразовые места доступны в новый месяц.^; !#VRz345:S^Герои могут иметь 9й-10й навыки.^; !#VRz346:S^В армии героя ул. монстры 7 --> 8 ур.^; !#VRz347:S^Герои с каждым уровнем получают артефакт.^; !#VRz348:S^Воры случайным образом атакуют героев.^; !#VRz349:S^Все твари бьют на две клетки.^; !#VRz350:S^Стрелки не стреляют, но имеют +50% здоровья.^; !#VRz351:S^Грааль во всех городах (если не Сопряжение).^; !#DO720/0/7/1&v1<>4:P; [find an enemy for each player, for Perpetual Darkness] ** end of Initialization Code ** Timer routine !?TM84; !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !?TM84&v1<>4; [Continue timer only if map rules aren't disabled in wogify options] !!VRy1:Sc0; [get day of game] !!VRy2:Sy1 %7; [get day of week in y2] !!VRy3:S0; !!VRy3&y1<>v578:S1; [y3=1 if this is the first human turn on this day] !!VRv578:Sy1; [store day] !!VRy4:Sy1 %28; [day of month] !!FU690&y1=1/y3=1:P; [choose rules and implement some] !!VRv600:S0; [flag for 1st rule announced] !!DO691/1/20/1&1000/y1=1/y3<>1:P; [announce rules to humans after 1st player on day 1] !!FU709:P3; [check for rule 3] !!VRy5:S0; [assume creatures should be normal price] !!VRy5&3/-1000:S1; [for AI with this rule they're always half price] !!VRy5&3/1000/y2=0:S1; [for humans just half price on sunday] !!DO694/0/173/1&y5=1/v577=0:P; [make creatures half price when needed] !!DO695/0/173/1&y5=0/v577=1:P; [make creatures double price when needed] !!VRv577:Sy5; [remember whether creatures currently are normal or half price] !!FU709:P6; [check for rule 6] !!DO699/0/155/1&3:P; [grow hero monster stacks by 5%] !!FU709:P8; [check for rule 8] !!OW:C?y5; [get current player] !!DO702/0/155/1&3/y1=1:Py5; [upgrade this player's heroes to 5th level on day 1] !!FU709:P11; [check for rule 11] !!DO703/0/155/1&3:P; [double hero movement] !!FU709:P12; [check for rule 12] !!UN&3/y2=1/y3=1/y1<>1:U53/-1/?y1; [count mines] !!DO706/1/y1/1&3/y2=1/y3=1/y1<>1:P; [change mine production once/week] !!FU709:P13; [check for rule 13] !!DO704/0/155/1&3/y4=1/y1<>1:P; [clear learning stones etc. on day 1 of month] !!FU709:P4; [check for rule 4] !!DO696/0/155/1&3:P; [create magic plains by today's heroes] !!FU709:P15; [check for rule 15] !!DO697/0/155/1&3:P; [upgraded 7th level creatures become 8th for all heroes] !!FU709:P10; [check for rule 10] !!OW:C?y6; [get current player] !!OW:Iy6/?y5; [get AI 1 or human 0] !!UN&3/y5=1:Sv573/v573/0/y6/v574; [reveal entire map, surface] !!UN&3/y5=1/v575=1:Sv573/v573/1/y6/v574; [reveal entire map, underground] !!FU721&3/y5=0:Py6; [replace shroud for human, to handle AI teammate] !!UN&3/y5=0:R1; [redraw screen] ** end of timer routine ** function to choose rules and implement rules that only take effect at start !?FU690; !!VRv1:S0; [make sure v1 starts as 0] !!VRv2:S0; [make sure v2 starts as 0] !!VRv3:S0; [make sure v3 starts as 0] !!VRv4:S0; [make sure v4 starts as 0] !!VRv579:S0; [initialize map rules page 1 to none selected] !!VRv576:S0; [intialize map rules page 2 to none selected] !!UN:P101/?v1; [check wogify options number: 0=choose rules each game ] [ 1=use rules selected in wogify options ] [ 2=means random,3=random from selected,4=disable] !!IF:V2/0; [Clear flag 2] !!IF&v1<>2:V2/1; [If v1=2 use random rules] !!VRz326&2/v1=0:S^Отметьте правила этой игры - на ваш выбор (список 1 из 2).^; !!IF&2/v1=0:G0/579/0/326/332/333/334/335/336/337/338/339/340/341; [get bit choices in v579] !!VRz326&2/v1=0:S^Отметьте правила этой игры - на ваш выбор (список 2 из 2).^; !!IF&2/v1=0:G0/576/0/326/342/343/344/345/346/347/348/349/350/351; [get bit choices in v576] [Use Map Rules selected in WoGify if this option was chosen] !!DO723/111/120/1&v1=1:P; [set v579] !!DO724/121/130/1&v1=1:P; [set v576] !!UN|-2/v1=3:U98/8/?y1; [count confluxes] !!VRy2|-2/v1=3:S18; [normally 19 rules] !!VRy2&-2/y1=0:S19; [20 rules if no confluxes] !!VRy2&v1=3/y1=0:S19; [20 rules if no confluxes] !!VRy3&-2:S1 Ry2; [pick a random rule] !!VRy4&-2:S1 Ry2; [pick another one] !!VRy4&-2/y3=y4:S1 Ry2; [if the same, try again] !!VRy4&-2/y3=y4:S1 Ry2; [if the same, try again] !!VRy4&-2/y3=y4:S1 Ry2; [if the same, try again, just one rule if still the same] !!DO725/1/100/1&v1=3:Py2; [get 1st random rule from selected rules if that option was chosen] !!DO726/1/100/1&v1=3:Py2; [get 2nd random rule from selected rules if that option was chosen] !!VRy3&v1=3:Sv3; [random from selected rule 1] !!VRy4&v1=3:Sv4; [random from selected rule 2] !!FU722|-2/v1=3:Py3 Py4; [set the bits for our random rules] !!DO718/1/20/1:P; [add papyrus messages for any rules that are active] !!VRv600:S0; [flag for 1st rule announced] !!DO691/1/20/1:P; [announce rules to first player, who is always human] !!FU709:P1; [check for rule 1] !!DO692/0/173/1&3:P; [fliers lose flying but can't be retaliated against] !!FU709:P2; [check for rule 2] !!VRv700:C25/21/18/15/13/11/9/7/6/5; [table of new monster speeds] !!VRv710:C5/5/4/4/4/4/4/3/3/3; !!DO693/0/173/1&3:P; [invert monster speeds] !!FU709:P5; [check for rule 5] !!DO698/0/173/1&3:P; [all monsters attack/shoot twice] !!FU709:P7; [check for rule 7] !!UN&3:U17/-1/?y1; [count dwellings] !!DO701/1/y1/1&3:P; [add boars to dwellings] !!FU709:P8; [check for rule 8] !!DO702/0/155/1&3:P-1; [upgrade unowned heroes to 5th level] !!FU709:P18; [check for rule 18] !!DO715/0/173/1&3:P; [all monsters gain breath weapon] !!FU709:P19; [check for rule 19] !!DO716/0/173/1&3:P; [shooters lose shooting but gain +50% hit points] !!FU709:P20; [check for rule 20] !!UN&3:U98/-1/?y1; [count towns] !!DO717/1/y1/1&3:P; [build grails in towns] ** end of function ** function to announce a rule to human players if set !?FU691; !!FU709:Px16; [check for rule x16] !!VRz326:S^На этой странной земле, ^; !!VRz326&v600=1:S^А еще, ^; !!VRv600&3:S1; !!IF&3/x16=1:M^%Z326нет летающих тварей, а тем, кто когда-то были летающими, теперь не отвечают.^; !!IF&3/x16=2:M^%Z326медленные твари становятся быстрыми, а быстрые - медленными.^; !!IF&3/x16=3:M^%Z326на 7й день недели твари стоят лишь половину своей обычной цены.^; !!IF&3/x16=4:M^%Z326место, где герой стоит в начале дня 'обрастает' магической равниной.^; !!IF&3/x16=5:M^%Z326все твари атакуют дважды (как крестоносцы или налетчики).^; !!IF&3/x16=6:M^%Z326каждый отряд в армии героя увеличивает численность на 4% в день, стремясь к максимуму в 10000 тварей.^; !!IF&3/x16=7:M^%Z326большинство внешних жилищ продают кабанов рядом со своим обычным ополчением.^; !!IF&3/x16=8:M^%Z326герои стартуют на 5-м уровне (+5000 опыта).^; !!IF&3/x16=9:M^%Z326герои каждый раз поднимают два одинаковых артефакта там, где на карте лежал один.^; !!IF&3/x16=10:M^%Z326карта скрыта постоянной тьмой. Видимость сохраняется вокруг своих (и союзных) героев, замков и зданий.^; !!IF&3/x16=11:M^%Z326каждый ход герои начинают с удвоенным количеством (от обычного) очков передвижения.^; !!IF&3/x16=12:M^%Z326шахты меняют ресурсы каждую неделю.^; !!IF&3/x16=13:M^%Z326каждый месяц можно заново посещать одноразовые объекты.^; !!IF&3/x16=14:M^%Z326герои могут выучить 2 секретных навыка в дополнение к 8ми нормальным.^; !!IF&3/x16=15:M^%Z326в армии героя улучшенные монстры 7го уровня автоматически улучшаются до 8го в начале дня.^; !!IF&3/x16=16:M^%Z326каждый раз при повышении уровня герой получает артефакт.^; !!IF&3/x16=17:M^%Z326шайки воров бродят по сельской местности (невидимы), готовые напасть на героя.^; !!IF&3/x16=18:M^%Z326все твари бьют на две клетки (если не стреляют).^; !!IF&3/x16=19:M^%Z326нет стреляющих тварей, а твари, бывшие такими когда-то имеют +50% очков здоровья.^; !!IF&3/x16=20:M^%Z326все города имеют построенный Грааль (только если это не Сопряжение).^; ** end of function ** function to make monster x16 lose flying but gain no-retaliation if it flew !?FU692; !!MA:Xx16/?y1; [get flags] !!VRy2:Sy1; !!VRy2:&2; [just look at flying bit] !!VRy1:&-3; [lose flying] !!VRy1&y2=2:|65536; [can't be retaliated against] !!MA&x16<145|x16>149:Xx16/y1; [save flags, except for war machines] ** end of function ** function to invert the speed of monster x16 !?FU693; !!MA:Sx16/?y1; [get speed] !!VRy2:S3; [default of 3 for very fast monsters] !!VRy3:S700 +y1; !!VRy2&y1<20:Svy3; [look up new speed] !!MA&x16<145|x16>149:Sx16/y2; [set speed, except for war machines] ** end of function ** function to make monster x16 cost half as much !?FU694; !!MA:Cx16/6/?y1; [get gold cost] !!VRy1::2; [half price] !!MA&x16<145|x16>149:Cx16/6/y1; [save gold cost, except for war machines] ** end of function ** function to make monster x16 cost twice as much !?FU695; !!MA:Cx16/6/?y1; [get gold cost] !!VRy1:*2; [double price] !!VRy2:Sy1 %10; [check low digit of price] !!VRy1&y2=4:+1; [turn 4's to 5's] !!MA&x16<145|x16>149:Cx16/6/y1; [save gold cost, except for war machines] ** end of function ** function to place magic plains by current player's hero !?FU696; !!OW:C?y1; [get current player] !!HEx16:O?y2; [get hero's owner] !!HEx16:P?y3/?y4/?y5; [get hero x/y/l] !!VRy3:+2; !!VRy4:+1; [place so that hero is kind of in the middle] !!TRy3/y4/y5:P?y6; [get y6=0 if red square] !!TRy3/y4/y5:E?y7; [get y7=0 if yellow square] !!TRy3/y4/y5:T?y8/d/d/d/d/d/d/d; [get terrain in y8, 8 = water] !!UN&y1=y2/y5=0/y6<>0/y7<>0/y8<>8:Iy3/y4/y5/46/0; [place magic plains] ** end of function ** function to make hero's upgraded 7th level troops into 8th level !?FU697; !!OW:C?y1; [get current player] !!HEx16:O?y2; [get hero's owner] !!DO708/0/6/1&y1=y2:Px16; [check each slot] ** end of function ** function to make monster x16 attack/shoot twice !?FU698; !!MA:Xx16/?y1; [get flags] !!VRy1:|32768; [set attack twice bit] !!MA&x16<145|x16>149:Xx16/y1; [save flags, except for war machines] ** end of function ** function to make hero x16's monster stacks grow by 4%, to 10000 !?FU699; !!OW:C?y1; [get current player] !!HEx16:O?y2; [get hero's owner] !!DO700/0/6/1&y1=y2:Px16; [handle each slot if it's this hero's player's turn] ** end of function ** function to make slot x16 of hero x1's army grow by 4%, to 10000 !?FU700; !!HEx1:C0/x16/?y1/?y2; [get y1 type y2 qty] !!VRy3:Sy2 *104 :100; [add 4%] !!VRy3&y3>10000/y2<10000:S10000; [limit to 10000] !!HEx1&y2<10000:C0/x16/y1/y3; [store new qty] ** end of function ** function to add boars to dwelling number x16 if not first level !?FU701; !!UN:U17/-1/x16/600; [get dwelling location into v600-v602] !!DW600:M0/?y1/?y2; [get y1 type y2 qty in slot 0] !!VRy3:S1; [assume we will add boars] !!VRy1::2; [divide type by 2 to factor in upgraded 1st level creatures] !!VRy3&y1=59:S0; [pixies/sprites] !!VRy3&y1=69:S0; [halflings/peasants] !!VRy1&y1<56:%7; [now all normal level 1's are 0] !!VRy3&y1=0:S0; !!DW600&y3=1:M1/140/12; [12 boars in slot 1] ** end of function ** function to make hero x16 at least 5th level if it has owner x1 !?FU702; !!HEx16:O?y1; [get hero's owner] !!HEx16&y1=x1:Ed5000; [give 5000 experience] ** end of function ** function to double hero x16's movement !?FU703; !!OW:C?y1; [get current player] !!HEx16:O?y2; [get hero's owner] !!IF:Wx16; [set w for hero being checked] !!VRw46&y1=y2:S0; [reset hero's w46 variable if it's this hero's player's turn] ** end of function ** artifact trigger !?OB5; !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !?OB5&v1<>4; [Continue trigger only if rules aren't disabled] !!FU709:P9; [check for rule 9] !!OB998:U?y1; [get artifact number] !!HE-1:A2/y1/?y2/?y3; [get y2 number carried y3 number equipped] !!HE-1&y2=0/3:Ay1; [give an extra copy if they don't already have one] !!UN:N0/326/y1; [get name of artifact into z326] !!IF&1000/y2=0/3:M^Вы нашли еще один %Z326 рядом с первым.^; ** end of artifact trigger ** hero movement trigger !?HM-1; !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU709&v1<>4:P10; [check for rule 10] !!FU711&3/v1<>4:P; [handle replacing shroud] !!FU709&v1<>4:P11; [check for rule 11] !!IF&3/v1<>4:W-1; [set to current hero] !!HE-1&3/v1<>4/w46=0:W?v2; [get movement] !!VRv2&3/v1<>4/w46=0:*2; [double it] !!HE-1&3/v1<>4/w46=0:Wv2; [set hero's movement to double value] !!VRw46&3/v1<>4/w46=0:S-1; [set hero's w46 variable to -1] ** end of hero movement trigger ** function to let hero x16 revisit objects !?FU704; !!HEx16:O?y1; [get owner] !!OW:C?y2; [get current player] !!DO705/0/9/1&y1=y2:Px16; [mark learning stones through schools of war as unvisited] ** end of function ** function to let hero x1 revisit object x16 !?FU705; !!HEx1:Vx16/0; [set hero to have not visited all objects of this type] ** end of function ** function to change a mine's produced resource !?FU706; !!UN:U53/-1/x16/600; [get mine location into v600-v602] !!VRy1:S0 R6; [random 0-6] !!MN600:Ry1/1; [set random resource produced] ** end of function ** hero level-up trigger !?HL-1; !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU709&v1<>4:P14; [check for rule 14] !!FU710&3/v1<>4:P; [handle giving hero a 9th-10th skill] !!FU709&v1<>4:P16; [check for rule 16] !!FU712&3/v1<>4:P; [give hero an artifact] ** end of hero level-up trigger ** function to count skills for a hero !?FU707; !!HE-1:Sx16/?y1; [check for presence of skill] !!VRv549&y1>0:+1; [count it] ** end of function ** function to convert a stack of upgraded 7th level to 8th level ** hero x1, slot x16 !?FU708; !!HEx1:C0/x16/?y1/?y2; [get y1 type y2 qty] !!VRy1&y1=13:S150; [archangel] !!VRy1&y1=27:S151; [gold dragon] !!VRy1&y1=41:S152; [titan] !!VRy1&y1=55:S153; [archdevil] !!VRy1&y1=69:S154; [ghost dragon] !!VRy1&y1=83:S155; [black dragon] !!VRy1&y1=97:S156; [ancient behemoth] !!VRy1&y1=111:S157; [chaos hydra] !!VRy1&y1=131:S158; [phoenix] !!HEx1:C0/x16/y1/y2; [set creature type/qty] ** end of function ** function to set flag 3 if rule x1 has been chosen !?FU709; !!IF:V3/0; !!VRy1:S579; [variable # of rule] !!VRy1&x1>10:S576; !!VRx1:-1 %10 +550; [variable # of bit value] !!VRy2:Svy1 &vx1; [get just our bit] !!IF&y2>0:V3/1; [set flag 3 if our bit set] ** end of function ** function to handle giving a 9th-10th skill to a hero going up a level !?FU710; !!VRv549:S0; [count of skills for this hero] !!DO707/0/27/1:P; [count the skills] !!VRy1:S0 R27; [pick a random skill to offer] !!HE-1:Sy1/?y2; [check for presence of random skill] !!HE-1:B0/?z352; [get hero name] !!UN:N4/353/y1; [get skill name] !!HE-1:R2/?y3; [get hero sex] !!VRz354&y3=0:S^он^; !!VRz354&y3=1:S^она^; !!VRy4:Sy1 *3 +3; [get picture of skill] !!IF:V2/0; [assume won't learn skill] !!IF&1000/y2=0/v549>=8/v549<=9:Q2/20/y4/2^%Z352 может выучить секретный навык, %Z353. Хочет ли %Z354 выучить это?^; !!IF&-1000/y2=0/v549>=8/v549<=9:V2/1; [AI always learns it] !!HE-1&2:Sy1/1; [give skill] ** end of function ** function to handle replacing shroud for a hero !?FU711; !!HE-1:O?y1; [get owner] !!OW:Iy1/?y2; [get AI 1 or human 0] !!FU721&y2=0:Py1; [do a Cover Of Darkness for a non-teammate of a human player] ** end of function ** function to give hero an artifact based on experience !?FU712; !!HE-1:E?y2; [get experience] !!VRv700:C7/13/19/20/25/37/41/45/46/47; [table of treasure artifacts] !!VRv710:C48/49/50/51/52/53/54/60/63/64; !!VRv720:C73/74/75/76/77/78/84/85/94/97; !!VRv730:C100/102/103/104/105/107/118; !!VRy1:S700 R36; [now vy1 is a random treasure artifact] !!VRy3:Svy1; [default is treasure] !!VRv700:C8/9/14/15/21/22/26/27/31/38; [table of minor artifacts] !!VRv710:C42/55/61/65/70/95/98/112/114/119; !!VRv720:C120; !!VRy1:S700 R20; [now vy1 is a random minor artifact] !!VRy3&y2>=6200/y2<20600:Svy1; [6th-12th level gets minor] !!VRy6:S39; [y6 is initial number of relics in table if none banned] !!UN:A83/?y7; [y7=1 if Recanter's Cloak is disabled] !!VRy6&y7=1:-1; [subtract 1 if artifact disabled] !!VRv700:C10/11/16/17/23/28/29/39/43/56; [table of major artifacts] !!VRv710:C57/58/62/66/67/68/69/70/71/79; !!VRv720:C80/81/82/83/91/92/96/99/101/106; !!VRv730:C108/109/110/111/113/116/117/121/122/125; !!VRy1:S700 Ry6; [now vy1 is a random major artifact] !!VRy1&y7=1/y1>=723:+1; [Recanter's Cloak banned] !!VRy3&y2>=20600/y2<57533:Svy1; [12th-18th level gets major] !!VRy6:S39; [y6 is initial number of relics in table if none banned] !!UN:A72/?y7; [y7=1 if Angel Wings is disabled] !!VRy6&y7=1:-1; [subtract 1 if artifact disabled] !!UN:A86/?y8; [y8=1 if Tome of Fire Magic is disabled] !!VRy6&y8=1:-1; [subtract 1 if artifact disabled] !!UN:A87/?y9; [y9=1 if Tome of Air Magic is disabled] !!VRy6&y9=1:-1; [subtract 1 if artifact disabled] !!UN:A88/?y10; [y10=1 if Tome of Water Magic is disabled] !!VRy6&y10=1:-1; [subtract 1 if artifact disabled] !!UN:A89/?y11; [y11=1 if Tome of Earth Magic is disabled] !!VRy6&y11=1:-1; [subtract 1 if artifact disabled] !!UN:A90/?y12; [y12=1 if Boots of Levitation is disabled] !!VRy6&y12=1:-1; [subtract 1 if artifact disabled] !!UN:A93/?y13; [y13=1 if Orb of Vulnerability is disabled] !!VRy6&y13=1:-1; [subtract 1 if artifact disabled] !!UN:A123/?y14; [y14=1 if Sea Captain's Hat is disabled] !!VRy6&y14=1:-1; [subtract 1 if artifact disabled] !!UN:A124/?y15; [y15=1 if Spellbinder's Hat is disabled] !!VRy6&y15=1:-1; [subtract 1 if artifact disabled] !!UN:A126/?y16; [y16=1 if Orb of Inhibition is disabled] !!VRy6&y16=1:-1; [subtract 1 if artifact disabled] !!VRv700:C12/18/24/30/32/33/34/35/36/40; [table of relics] !!VRv710:C44/59/72/86/87/88/89/90/93/115; !!VRv720:C123/124/126/127/128/129/130/131/132/133; !!VRv730:C134/135/136/137/138/139/140/141/142/143; !!VRy1:S700 Ry6; [now vy1 is a random relic] !!VRy1&y7=1/y1>=712:+1; [Angel Wings banned] !!VRy1&y8=1/y1>=713:+1; [Tome of Fire Magic banned] !!VRy1&y9=1/y1>=714:+1; [Tome of Air Magic banned] !!VRy1&y10=1/y1>=715:+1; [Tome of Water Magic banned] !!VRy1&y11=1/y1>=716:+1; [Tome of Earth Magic banned] !!VRy1&y12=1/y1>=717:+1; [Boots of Levitation banned] !!VRy1&y13=1/y1>=718:+1; [Orb of Vulnerability banned] !!VRy1&y14=1/y1>=720:+1; [Sea Captain's Hat banned] !!VRy1&y15=1/y1>=721:+1; [Spellbinder's Hat banned] !!VRy1&y16=1/y1>=722:+1; [Orb of Inhibition banned] !!VRy3&y2>=57533:Svy1; [18th level on gets relic] !!HE-1:Ay3; [give artifact] !!HE-1:B0/?z352; [get hero name] !!HE-1:O?y4; [get hero owner] !!OW&y4<>-1:Iy4/?y5; [get AI 1 or human 0] !!IF&y4<>-1/y5=0:Q2/8/y3/1^За старания, %Z352 награжден артефактом.^; ** end of function ** Object triggers for Rogue fights !?OB12/-1; [campfire] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB17/-1; [most creature dwellings] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB29/-1; [flotsam] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB32/-1; [garden of revelation] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB39/-1; [lean to] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB47/-1; [school of magic] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB51/-1; [mercenary camp] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB53/-1; [mine] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB55/-1; [mystical garden] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB57/-1; [obelisk] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB58/-1; [redwood observatory] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB60/-1; [pillar of fire] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB61/-1; [star axis] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB79/-1; [resource] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB82/-1; [sea chest] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB88/-1; [shrine of magic incantation] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB94/-1; [stables] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB100/-1; [learning stone] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB101/-1; [treasure chest] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB102/-1; [tree of knowledge] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB104/-1; [university] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB105/-1; [wagon] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB107/-1; [school of war] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB109/-1; [water wheel] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB112/-1; [windmill] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] !?OB113/-1; [witch hut] !!VRv1:S0; [make sure v1 starts as 0] !!UN:P101/?v1; [check wogify options number - 4 means no rules] !!FU713&v1<>4:P; [handle generating roving bands of Rogues] ** end of set of object triggers ** function to generate roving bands of Rogues !?FU713; !!FU709:P17; [check for rule 17] !!OW:C?y1; [get current player] !!OW:Iy1/?y2; [get AI 1 or human 0] !!VRy1&y2=0:S0 R15; [1 in 16 chance for human] !!VRy1&y2=1:S0 R63; [1 in 64 chance for AI] !!VRy3:Sc0; [get current day] !!IF&3:V875/0; !!FU714&3/y1=0/y3<>v572:Py2; [continue if odds are met and rule active and no other Rogues today] ** end of function ** function to actually cause a Rogue fight !?FU714; !!HE-1:B0/?z326; [get hero name] !!IF&x1=0:M^%Z326 атакован шайкой воров!^; !!VRy1:Sc0; [get day of game] !!VRy1:+6; !!VRy1::7; [get week of game] !!VRv1262:Sy1 *20; [20 Rogues per elapsed week: v1262] !!HE-1:P?y2/?y3/?y4; [get hero location] !!IF:V875/1; (For mithril and chest scripts) !!HE-1:N?v1219; [get hero number] !!HE-1:Ty2/y3/y4/143/v1262; [provoke Rogue battle] !!HEv1219:O?y2; [get hero owner] !!VRv1262:*25; [25 gold per Rogue] !!OW&y2<>-1:Ry2/6/dv1262; [give gold if hero lived] !!IF&y2<>-1:V875/0; (For mithril and chest scripts) !!IF&x1=0/y2<>-1:Q2/6/v1262/1^У воров есть сокровище!^; !!VRv572:Sc0; [set day of last Rogue fight] ** end of function ** function to make monster x16 gain a breath weapon !?FU715; !!MA:Xx16/?y1; [get flags] !!VRy1:|8; [breath weapon] !!MA&x16<145|x16>149:Xx16/y1; [save flags, except for war machines] ** end of function ** function to make monster x16 lose shooting but gain +50% hit points if it shot !?FU716; !!MA:Xx16/?y1; [get flags] !!VRy2:Sy1; !!VRy2:&4; [just look at shooting bit] !!VRy1:&-5; [lose shooting] !!VRy1:|4096; [no penalty in close combat] !!MA&x16<145|x16>149:Xx16/y1; [save flags, except for war machines] !!MA:Px16/?y3; [get hit points] !!VRy3&y2=4:*15 :10; [+50% if creature shot] !!MA&x16<145|x16>149:Px16/y3; [set hit points, except for war machines] ** end of function ** function to build a grail in town # x16 !?FU717; !!UN:U98/-1/x16/600; [get town location into v600-v602] !!CA600:B1/26; [build grail] !!CA600:T?y1; [get town type] !!CA600:O?y2; [get town owner] !!UN&y1=2:Sv573/v573/0/y2/v574; [remove entire shroud, surface, for tower's skyship] !!UN&y1=2:Sv573/v573/1/y2/v574; [remove entire shroud, underground] ** end of function ** function to add rule x16 to the papyrus if active !?FU718; !!FU709:Px16; [check for rule x16] !!VRy1:S331 +x16; [z variable for this rule] !!QW&3:Ay1/-2/-2/y1; [set papyrus message] ** end of function ** function to replace shroud for player x1 via Cover Of Darkness for their enemy !?FU721; !!VRy1:S564 +x1; [variable # of non-teammate player] !!UN:Hv573/v573/0/vy1/v574; [replace entire shroud, surface] !!UN&v575=1:Hv573/v573/1/vy1/v574; [replace entire shroud, underground] ** end of function ** function to set rule bit for numbered rule x1 !?FU722; !!VRy1:S579; [variable # of bit] !!VRy1&x1>10:S576; !!VRx1:-1 %10 +550; [variable # of bit value] !!VRvy1:|vx1; [set bit] ** end of function ** functions to add map rules selected in WoGify options dialogue !?FU723; !!UN:Px16/?y1; [Check if each map rule is enabled (111-120) !!VRy2:Sx16 -111; [Get loop number] !!VRy3&y1=1:S550 +y2; [Get corresponding variable with bit number] !!VRv579&y1=1:+vy3; [If it's enabled, add bit number to v579] !?FU724; !!UN:Px16/?y1; [Check if each map rule is enabled (121-130) !!VRy2:Sx16 -121; [Get loop number] !!VRy3&y1=1:S550 +y2; [Get corresponding variable with bit number] !!VRv576&y1=1:+vy3; [If it's enabled, add bit number to v579] ** end of functions ** functions choose two random rules, calling themselves again a rule wasn't selected ** If it can't find two unique selected rules after 100 loops, use only 1 or none. !?FU725; !!VRv3:S1 Rx1; [Random rule] !!VRy1:Sv3 +110; [Convert to ERM number] !!UN:Py1/?y2; [See if it's selected in Wogify options] !!VRv3&y2=0:S0; [set no rule found if it wasn't a selected rule] !!VRx16&y2=1:S101; [exit loop if a selected rule is found] !?FU726; !!VRv4:S1 Rx1; [Random rule] !!VRy1:Sv4 +110; [Convert to ERM number] !!UN:Py1/?y2; [See if it's selected in Wogify options] !!VRv4&y2=0:S0; [set no rule found if it wasn't a selected rule] !!VRx16&y2=1/v3<>v4:S101; [exit loop if a unique selected rule is found] ** end of functions |
|
|
|
25 Mar 2009, 00:16
Сообщение
#58
|
|
![]() допустим, мяў Сообщений: 24 115 Спасибо сказали: 13427 раз |
Хм... Граали строятся функцией 717 в цикле DO. Но там нет проверки на Сопряжение!!!
-------------------- Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская) |
|
|
|
25 Mar 2009, 10:09
(Сообщение отредактировал Сатарыч - 25 Mar 2009, 10:13)
Сообщение
#59
|
|
|
Advanced Member Сообщений: 133 Спасибо сказали: 0 раз |
Гипо, привет!
Нужно в 282 строке в скрипте !!DO717/1/y1/1&3/y1>0/y5=0:P; удалить последнее условие. Должно получиться !!DO717/1/y1/1&3/y1>0:P; Единственное НО, лично у меня всё работает хорошо, а вот у друга включён какой-то скрипт и он с ним конфликтует. Попробуй И ещё. Не пиши больше весь скрипт в сообщении. Можно было бы просто номер его указать. В крайнем случае пользуйся CODE |
|
|
|
25 Mar 2009, 12:59
Сообщение
#60
|
|
|
Прошаренный Сообщений: 102 Спасибо сказали: 10 раз |
Цитата Спасибо! правда, это у меня уже есть, но всё равно моё вам благодарю Так а что там отсутствует лол? Добавлено ([mergetime]1237975141[/mergetime]): Цитата Народ, помогите со скриптом с героев. Он прописывает Wogификацию карты и не разрешает стрить Грааль в сопряжении. Кто-нибудь может помочь как снять этот запрет? А то у меня не получается. Вот скрипт. Помогите плиз Огребешь банхаммером за такие посты. Код [codebox][/codebox] тебе в помощь
-------------------- DracoLich Fan
|
|
|
|
25 Mar 2009, 13:11
(Сообщение отредактировал Сатарыч - 25 Mar 2009, 13:14)
Сообщение
#61
|
|
|
Advanced Member Сообщений: 133 Спасибо сказали: 0 раз |
Цитата(ShadowDF2 @ 25 Mar 2009, 13:59) Так а что там отсутствует лол? Ну например нормальное описание ERT, UN:C, DL Очень много вот такого: Код äåéṇ̃âèå (èëè ôóíêöèÿ â ïđîăđà́́èđîâàíèè) - ựî äåéṇ̃âèå, êị̂îđîå áóäạ̊ èñïîëíåíî (âûçâàíî, åñëè đå÷ü èä¸̣ î ôóíêöèè) ïî âûơîäó èç ̣åêóùåăî áëîêà êîäà (îáû÷íî ôóíêöèè). Íà ïđè́åđàơ Ñëàâû (ZVS) âèäíî, ÷̣î ïđè êàæäî́ ñîáụ̂èè äèàëîăà (̣àêè́, êàê äâèæåíèå ́ûøü₫) âûçûâàạ̊ñÿ îïđåäåë¸ííàÿ ÅR̀-ôóíêöèÿ, êị̂îđàÿ è óïđàâëÿạ̊ âñåé îṇ̃àëüíîé ëîăèêîé.  ôóíêöèè ́û âûáèđàǻ, íà êàêèå äåéṇ̃âèÿ êàê đåàăèđîâạ̀ü, à ÷̣î èăíîđèđîâạ̀ü. Êî́àíäà DL:C1 áûëà áû îáû÷íîé ôóíêöèåé, åñëè áû çàêđûâàëà äèàëîă è ̣ọ́ æå âûơîäèëà èç ̣åêóùåăî áëîêà êîäà. Íî âûïîëíåíèÿ êîäà èä¸̣ âïëị̂ü äî êîíöà ̣đèăăåđà. Кстати читал пост про возможность создавать свои z переменные через ERT. Можно поподробнее? Как создать этот ERT? Как создавать новые z? Как присваивать и узнавать их значения? |
|
|
|
25 Mar 2009, 14:20
(Сообщение отредактировал DracoLich - 17 Apr 2009, 09:54)
Сообщение
#62
|
|
|
Newbie Сообщений: 2 Спасибо сказали: 0 раз |
Цитата Нужно в 282 строке в скрипте !!DO717/1/y1/1&3/y1>0/y5=0:P; удалить последнее условие. Должно получиться !!DO717/1/y1/1&3/y1>0:P; У меня не получается. А как насчет этих строк: Код !!UN|-2/v1=3:U98/8/?y1; [count confluxes]
!!VRy2|-2/v1=3:S18; [normally 19 rules] !!VRy2&-2/y1=0:S19; [20 rules if no confluxes] !!VRy2&v1=3/y1=0:S19; [20 rules if no confluxes] |
|
|
|
25 Mar 2009, 14:33
Сообщение
#63
|
|
|
Advanced Member Сообщений: 114 Спасибо сказали: 7 раз |
Цитата(ShadowDF2 @ 25 Mar 2009, 13:59) Так а что там отсутствует лол? Система. С объяснениями всё в порядке, понятно и подробно, но например, чтобы вывести первое сообщение, нужно прочитать весь материал, пока не наткнёшься на ресивер !!IF. И, честно говоря, никогда бы не догадался, что описание вывода сообщений находится в этом ресивере. Сначала увидел на примерах, а потом уже, когда написал почти весь свой мегаскрипт, наткнулся случайно в этой справке. Описание любого языка (тем более интерактивное) должно не только со ссылок типа "быстрый старт, или как новичку быстро сляпать на этом языке нечто", но и со ссылок на то, как 1) выводить сообщения (самое главное оружие отладки!) 2) описание синтаксиса 3) конструкции цикла, условные конструкции 4) переменные, работа с переменными 5) альтернативный синтаксис 6) функции 7) самые главные возможности ( здесь должны быть ссылки на странички, посвящённые программированию замков, героев, полей битвы и пр. - т.е. ресиверы и триггеры по группам. текста особо не нужно, в основном ссылки с краткими комментариями - где искать нужный материал) Вообще, бумажные книги делятся на книги для новичков или книги для профи. Новичку нужно объяснять подробно и понятно, профи нужно излагать кратко и полно, он уже всё это видел много раз, просто не знает, как тот же цикл реализован именно в этом языке. Но это для бумажных. В интерактивных такой вопрос не стоит - грамотно организовать систему ссылкок, добавить несколько страничек с тематическими ссылками - и всё в порядке |
|
|
|
25 Mar 2009, 19:34
Сообщение
#64
|
|
|
Advanced Member Сообщений: 114 Спасибо сказали: 7 раз |
Upd.
т.е. это всё-таки справочник, а не учебник. И как справочник - не плохой. Только смысл, ведь как я уже говорил, из хорошего справочника сделать хороший учебник - полчаса работы. Добавлено ([mergetime]1237998854[/mergetime]): Хм, вопрос. Монстров своих я переделал, а теперь делаю им абилити. Как естественным образом поставить заклинание юниту? Например, воскрешение копейщику? где устанавливать число этих заклинаний, вроде нашёл, а через триггер BF шаманить как-то не хочется... |
|
|
|
25 Mar 2009, 19:42
Сообщение
#65
|
|
|
Immortal Сообщений: 668 Спасибо сказали: 58 раз |
"естесственным" - напрямую в экзешке.
эмуляцией - да скоко хош, где-то здесь был скрипт, который как раз-таки позволял эмулировать заклы. |
|
|
|
26 Mar 2009, 00:14
Сообщение
#66
|
|
|
Advanced Member Сообщений: 114 Спасибо сказали: 7 раз |
Цитата(major @ 25 Mar 2009, 20:42) "естесственным" - напрямую в экзешке. эмуляцией - да скоко хош, где-то здесь был скрипт, который как раз-таки позволял эмулировать заклы. Плохо Быстрее самому написать, чем искать |
|
|
|
26 Mar 2009, 08:44
Сообщение
#67
|
|
|
Advanced Member Сообщений: 114 Спасибо сказали: 7 раз |
И вот ещё вопрос, как поставить свойство (и, желательно, естественным способом) пассивного заклинания, вроде файершилд на лаваснайперов или зеркало на монахах войны
|
|
|
|
26 Mar 2009, 12:17
Сообщение
#68
|
|
![]() Князь Бореи Сообщений: 5 171 Спасибо сказали: 1349 раз |
а модеры могли бы пост этот длинный отредактировать...
|
|
|
|
26 Mar 2009, 17:29
Сообщение
#69
|
|
|
Прошаренный Сообщений: 102 Спасибо сказали: 10 раз |
Цитата С объяснениями всё в порядке, понятно и подробно, но например, чтобы вывести первое сообщение, нужно прочитать весь материал, пока не наткнёшься на ресивер !!IF. И, честно говоря, никогда бы не догадался, что описание вывода сообщений находится в этом ресивере. Сначала увидел на примерах, а потом уже, когда написал почти весь свой мегаскрипт, наткнулся случайно в этой справке. Но например для обучения создан раздел обучения by quidrish. -------------------- DracoLich Fan
|
|
|
|
26 Mar 2009, 17:49
Сообщение
#70
|
|
|
Immortal Сообщений: 668 Спасибо сказали: 58 раз |
Цитата(G.I. @ 26 Mar 2009, 11:44) И вот ещё вопрос, как поставить свойство (и, желательно, естественным способом) пассивного заклинания, вроде файершилд на лаваснайперов или зеркало на монахах войны Ну, как ты уже мог догадаться, - редактирование exe. |
|
|
|
26 Mar 2009, 19:09
Сообщение
#71
|
|
|
Advanced Member Сообщений: 114 Спасибо сказали: 7 раз |
Цитата(ShadowDF2 @ 26 Mar 2009, 18:29) Цитата С объяснениями всё в порядке, понятно и подробно, но например, чтобы вывести первое сообщение, нужно прочитать весь материал, пока не наткнёшься на ресивер !!IF. И, честно говоря, никогда бы не догадался, что описание вывода сообщений находится в этом ресивере. Сначала увидел на примерах, а потом уже, когда написал почти весь свой мегаскрипт, наткнулся случайно в этой справке. Но например для обучения создан раздел обучения by quidrish. Целесообразно дополнить его деревом ссылок На первой страничке ссылки на 1) полное и формализованное определение синтаксиса - синтаксический справочник 2) Условия, циклы и печать сообщений 3) Менеджмент диалогов 4) Управление объектами на карте и самой картой 5) Управление битвой 6) Управление героем 7) Управление игрой 8) Параметры воинов, артефакты, навыки, описания монстров, замки и т.п. .... .... .... xx) Полезные важности Каждый пункт - ссылка на отдельную страничку, на которой есть все ссылки по данной теме, начиная от описания команд, и кончая примерами и объяснениями. При этом в ней желательно давать ссылку не на ресивер, а на конкретную команду. Самое интересное, что простейшую форму этой структуры можно организовать до неприличия быстро. Вряд ли там работы больше чем на час. Раздел, о котором ты говоришь, не решает проблемы поиска_перебором_всех_ресиверов_пока_не_найдёшь_то_что_нужно Со временем, конечно, основные ресиверы запоминаешь, но согласись, это не подход. Первое время уходит на прочтение всей информации по порядку пока на наткнёшься на нужное, а не на программирование скриптов. |
|
|
|
26 Mar 2009, 19:48
Сообщение
#72
|
|
|
Advanced Member Сообщений: 133 Спасибо сказали: 0 раз |
Цитата(major @ 26 Mar 2009, 18:49) Цитата(G.I. @ 26 Mar 2009, 11:44) И вот ещё вопрос, как поставить свойство (и, желательно, естественным способом) пассивного заклинания, вроде файершилд на лаваснайперов или зеркало на монахах войны Ну, как ты уже мог догадаться, - редактирование exe. До начала битвы кастонуть на всех монахов зеркало через скрипты |
|
|
|
26 Mar 2009, 20:31
Сообщение
#73
|
|
![]() допустим, мяў Сообщений: 24 115 Спасибо сказали: 13427 раз |
Когда случается вот такое:
Íà ïđè́åđàơ Ñëàâû (ZVS) âèäíî, ÷̣î ïđè êàæäî́ ñîáụ̂èè äèàëîăà (̣àêè́, êàê äâèæåíèå ́ûøü₫) âûçûâàạ̊ñÿ îïđåäåë¸ííàÿ ÅR̀-ôóíêöèÿ, êị̂îđàÿ è óïđàâëÿạ̊ âñåé îṇ̃àëüíîé ëîăèêîé.  ôóíêöèè ́û âûáèđàǻ, íà êàêèå äåéṇ̃âèÿ êàê đåàăèđîâạ̀ü, à ÷̣î èăíîđèđîâạ̀ü. Êî́àíäà DL:C1 áûëà áû îáû÷íîé ôóíêöèåé, нужно скопировать в Word, затем сохранить как простой текст в кодировке "Западноевропейская ISO", а затем открыть как "Кириллица ISO", вообще AkelPad автоматически распознает. -------------------- Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская) |
|
|
|
26 Mar 2009, 20:50
Сообщение
#74
|
|
|
Member Сообщений: 92 Спасибо сказали: 23 раза |
Цитата(hippocamus @ 26 Mar 2009, 22:31) Когда случается вот такое: Íà ïđè́åđàơ Ñëàâû (ZVS) âèäíî, ÷̣î ïđè êàæäî́ ñîáụ̂èè äèàëîăà (̣àêè́, êàê äâèæåíèå ́ûøü₫) âûçûâàạ̊ñÿ îïđåäåë¸ííàÿ ÅR̀-ôóíêöèÿ, êị̂îđàÿ è óïđàâëÿạ̊ âñåé îṇ̃àëüíîé ëîăèêîé.  ôóíêöèè ́û âûáèđàǻ, íà êàêèå äåéṇ̃âèÿ êàê đåàăèđîâạ̀ü, à ÷̣î èăíîđèđîâạ̀ü. Êî́àíäà DL:C1 áûëà áû îáû÷íîé ôóíêöèåé, нужно скопировать в Word, затем сохранить как простой текст в кодировке "Западноевропейская ISO", а затем открыть как "Кириллица ISO", вообще AkelPad автоматически распознает. Или просто скопировать ещё раз в буфер обмена при этом сменив раскладку на Ru |
|
|
|
26 Mar 2009, 21:10
Сообщение
#75
|
|
![]() допустим, мяў Сообщений: 24 115 Спасибо сказали: 13427 раз |
Не думаю, что поможет...
-------------------- Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская) |
|
|
|
26 Mar 2009, 21:13
Сообщение
#76
|
|
|
Immortal Сообщений: 668 Спасибо сказали: 58 раз |
Цитата(Сатарыч @ 26 Mar 2009, 22:48) Цитата(major @ 26 Mar 2009, 18:49) Цитата(G.I. @ 26 Mar 2009, 11:44) И вот ещё вопрос, как поставить свойство (и, желательно, естественным способом) пассивного заклинания, вроде файершилд на лаваснайперов или зеркало на монахах войны Ну, как ты уже мог догадаться, - редактирование exe. До начала битвы кастонуть на всех монахов зеркало через скрипты Ну если имеется в виду не пассивная способность (эфрит, волшебный дракон), тогда каждый раунд устанавливаешь нужный закл на нужный стек монстров. |
|
|
|
27 Mar 2009, 09:26
Сообщение
#77
|
|
![]() Immortal Сообщений: 6 285 Спасибо сказали: 12721 раз |
Цитата(hippocamus @ 26 Mar 2009, 21:10) Не думаю, что поможет... Поможет, проверено Добавлено ([mergetime]1238135198[/mergetime]): Цитата(G.I. @ 26 Mar 2009, 08:44) И вот ещё вопрос, как поставить свойство (и, желательно, естественным способом) пассивного заклинания, вроде файершилд на лаваснайперов или зеркало на монахах войны Добавить им в настройках опыта. -------------------- |
|
|
|
27 Mar 2009, 14:08
Сообщение
#78
|
|
|
Прошаренный Сообщений: 102 Спасибо сказали: 10 раз |
Цитата(Сатарыч @ 25 Mar 2009, 13:11) Цитата(ShadowDF2 @ 25 Mar 2009, 13:59) Так а что там отсутствует лол? Ну например нормальное описание ERT, UN:C, DL Очень много вот такого: Код äåéṇ̃âèå (èëè ôóíêöèÿ â ïđîăđà́́èđîâàíèè) - ựî äåéṇ̃âèå, êị̂îđîå áóäạ̊ èñïîëíåíî (âûçâàíî, åñëè đå÷ü èä¸̣ î ôóíêöèè) ïî âûơîäó èç ̣åêóùåăî áëîêà êîäà (îáû÷íî ôóíêöèè). Íà ïđè́åđàơ Ñëàâû (ZVS) âèäíî, ÷̣î ïđè êàæäî́ ñîáụ̂èè äèàëîăà (̣àêè́, êàê äâèæåíèå ́ûøü₫) âûçûâàạ̊ñÿ îïđåäåë¸ííàÿ ÅR̀-ôóíêöèÿ, êị̂îđàÿ è óïđàâëÿạ̊ âñåé îṇ̃àëüíîé ëîăèêîé.  ôóíêöèè ́û âûáèđàǻ, íà êàêèå äåéṇ̃âèÿ êàê đåàăèđîâạ̀ü, à ÷̣î èăíîđèđîâạ̀ü. Êî́àíäà DL:C1 áûëà áû îáû÷íîé ôóíêöèåé, åñëè áû çàêđûâàëà äèàëîă è ̣ọ́ æå âûơîäèëà èç ̣åêóùåăî áëîêà êîäà. Íî âûïîëíåíèÿ êîäà èä¸̣ âïëị̂ü äî êîíöà ̣đèăăåđà. Кстати читал пост про возможность создавать свои z переменные через ERT. Можно поподробнее? Как создать этот ERT? Как создавать новые z? Как присваивать и узнавать их значения? По поводу иероглифов - учите китайский Я честно хз почему, у меня все показано корректно, у некоторых возникают такие проблемы, но почему то НИКТО не знает, как ее решить. (да и вообще молчат много Добавлено ([mergetime]1238152127[/mergetime]): Цитата(G.I. @ 26 Mar 2009, 19:09) Целесообразно дополнить его деревом ссылок На первой страничке ссылки на 1) полное и формализованное определение синтаксиса - синтаксический справочник 2) Условия, циклы и печать сообщений 3) Менеджмент диалогов 4) Управление объектами на карте и самой картой 5) Управление битвой 6) Управление героем 7) Управление игрой 8) Параметры воинов, артефакты, навыки, описания монстров, замки и т.п. .... .... .... xx) Полезные важности Каждый пункт - ссылка на отдельную страничку, на которой есть все ссылки по данной теме, начиная от описания команд, и кончая примерами и объяснениями. При этом в ней желательно давать ссылку не на ресивер, а на конкретную команду. Самое интересное, что простейшую форму этой структуры можно организовать до неприличия быстро. Вряд ли там работы больше чем на час. Потрудитесь помочь в этом деле? Родина вас не забудет. Цитата Раздел, о котором ты говоришь, не решает проблемы поиска_перебором_всех_ресиверов_пока_не_найдёшь_то_что_нужно Первое время я вообще по скриптам некой карты с отсутствием комментариев Со временем, конечно, основные ресиверы запоминаешь, но согласись, это не подход. Первое время уходит на прочтение всей информации по порядку пока на наткнёшься на нужное, а не на программирование скриптов. -------------------- DracoLich Fan
|
|
|
|
27 Mar 2009, 17:42
Сообщение
#79
|
|
|
Advanced Member Сообщений: 114 Спасибо сказали: 7 раз |
Цитата(ShadowDF2 @ 27 Mar 2009, 15:08) Потрудитесь помочь в этом деле? Родина вас не забудет. То, что она меня не забудет, я понял, когда мне пришла повестка... Цитата(ShadowDF2 @ 27 Mar 2009, 15:08) Потрудитесь помочь в этом деле? Родина вас не забудет. А я chm не знаю Цитата(ShadowDF2 @ 27 Mar 2009, 15:08) Потрудитесь помочь в этом деле? Родина вас не забудет. скрипт или хелп? Скрипт. пока, во всяком случае. Добавлено ([mergetime]1238164924[/mergetime]): Цитата(Сатарыч @ 26 Mar 2009, 20:48) Цитата(major @ 26 Mar 2009, 18:49) Цитата(G.I. @ 26 Mar 2009, 11:44) И вот ещё вопрос, как поставить свойство (и, желательно, естественным способом) пассивного заклинания, вроде файершилд на лаваснайперов или зеркало на монахах войны Ну, как ты уже мог догадаться, - редактирование exe. До начала битвы кастонуть на всех монахов зеркало через скрипты Я кастую каждый ход. Ещё и в начале - лень. Хочу естественно, поставил в первый день и забыл. Цитата(major @ 26 Mar 2009, 22:13) Ну если имеется в виду не пассивная способность (эфрит, волшебный дракон), тогда каждый раунд устанавливаешь нужный закл на нужный стек монстров. В идеале - пассивная способность. На каждый ход уже сделал. Цитата(Iv @ 27 Mar 2009, 10:26) Добавить им в настройках опыта. Спасибо! С опытом я ещё не разбирался, увы. |
|
|
|
27 Mar 2009, 18:22
Сообщение
#80
|
|
|
Прошаренный Сообщений: 102 Спасибо сказали: 10 раз |
chm = пак .html файлов. Забацай плз страничку с твоими
Цитата 1) полное и формализованное определение синтаксиса - синтаксический справочник 2) Условия, циклы и печать сообщений 3) Менеджмент диалогов 4) Управление объектами на карте и самой картой 5) Управление битвой 6) Управление героем 7) Управление игрой 8) Параметры воинов, артефакты, навыки, описания монстров, замки и т.п. Ссылки и тп я приделаю, тебя в авторах запомним. -------------------- DracoLich Fan
|
|
|
|
27 Mar 2009, 21:06
Сообщение
#81
|
|
|
Advanced Member Сообщений: 114 Спасибо сказали: 7 раз |
Пробовал с опытом
!#EA7:B0/1/114/100/100/100/100/100/100/100/100/100/100/100/100/100; There no effect. Бестолку. |
|
|
|
27 Mar 2009, 21:29
Сообщение
#82
|
|
![]() допустим, мяў Сообщений: 24 115 Спасибо сказали: 13427 раз |
Попробуй так:
!#EA7:F114/?v1 Bv1/1/114/100/100/100/100/100/100/100/100/100/100/100/100/100; -------------------- Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская) |
|
|
|
27 Mar 2009, 21:48
Сообщение
#83
|
|
|
Advanced Member Сообщений: 114 Спасибо сказали: 7 раз |
Да нет, я просто не знал, что систему опыта надо через ерм включить
спасибо за код, учту на будущее... |
|
|
|
28 Mar 2009, 01:39
Сообщение
#84
|
|
|
Advanced Member Сообщений: 114 Спасибо сказали: 7 раз |
И снова вопрос: как вызвать анимацию атаки или стрельбы? А лучше саму атаку или стрельбу, но, к сожалению, BG работает только на текущем юните, а мне это не подходит
|
|
|
|
28 Mar 2009, 12:44
Сообщение
#85
|
|
![]() допустим, мяў Сообщений: 24 115 Спасибо сказали: 13427 раз |
Через стандартные функции ЕРМ - никак.
-------------------- Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская) |
|
|
|
28 Mar 2009, 14:19
Сообщение
#86
|
|
|
Advanced Member Сообщений: 114 Спасибо сказали: 7 раз |
Понятно
Ладно, возвращаюсь к старому вопросу. Как сделать юнит-таран. Можно ли программно разрушить стену? |
|
|
|
29 Mar 2009, 18:10
Сообщение
#87
|
|
|
Прошаренный Сообщений: 102 Спасибо сказали: 10 раз |
Не видел подобного.
-------------------- DracoLich Fan
|
|
|
|
01 Apr 2009, 16:50
Сообщение
#88
|
|
|
Advanced Member Сообщений: 114 Спасибо сказали: 7 раз |
Не получается управлять силой магии в бою!!! Пытался менять параметры героя(силу магии) через !!HE, не выходит! Или я опять задаю вопросы, которые решаются только через правку exe?
|
|
|
|
01 Apr 2009, 17:13
Сообщение
#89
|
|
|
Immortal Сообщений: 668 Спасибо сказали: 58 раз |
Я тоже менял этот параметр через Артмани, и тоже не было никакого эффекта. Видимо, это значение считывается в начале битвы для расчета урона заклинаний и т.д. и в течение битвы не играет роли...
|
|
|
|
01 Apr 2009, 20:18
(Сообщение отредактировал G.I. - 01 Apr 2009, 20:16)
Сообщение
#90
|
|
|
Advanced Member Сообщений: 114 Спасибо сказали: 7 раз |
Цитата(major @ 01 Apr 2009, 18:13) Я тоже менял этот параметр через Артмани, и тоже не было никакого эффекта. Видимо, это значение считывается в начале битвы для расчета урона заклинаний и т.д. и в течение битвы не играет роли... Да, я проверял, если менять до боя, то эффект есть, если во время, эффекта нет... Пока нашёл вроде путь - меняю число существ, и колдую стэком через !BM:C, потом возвращаю старое число существ... но я не знаю точно формулы... будет ли зависимость от уровня данной школы магии героя/юнита, взрыв и стрелка будут наносить один урон или разный? Кто-нибудь знает формулу урона атакующей магии стэка? Добавлено ([mergetime]1238606298[/mergetime]): Цитата(ShadowDF2 @ 27 Mar 2009, 19:22) chm = пак .html файлов. Забацай плз страничку с твоими Цитата 1) полное и формализованное определение синтаксиса - синтаксический справочник 2) Условия, циклы и печать сообщений 3) Менеджмент диалогов 4) Управление объектами на карте и самой картой 5) Управление битвой 6) Управление героем 7) Управление игрой 8) Параметры воинов, артефакты, навыки, описания монстров, замки и т.п. Ссылки и тп я приделаю, тебя в авторах запомним. Тут проблема в том, что это должен делать хороший спец, а я пока тонкостей не знаю и не узнаю возможно никогда. Плюс, всё равно не так просто, наверняка всё равно придётся осваивать chm, а времени у меня пока даже на свой скрипт не хватает. После скрипта можно было попробовать, но что делать с компетенцией? |
|
|
|
02 Apr 2009, 17:41
Сообщение
#91
|
|
|
Advanced Member Сообщений: 114 Спасибо сказали: 7 раз |
Ссори, просто совпадение чисел... сила магии не зависит от числа юнитов в стеке!!! А !!MR работает немного не так, как описано в хелпе. Например, если я кастую взрыв силой 1000 ед на чёрного дракона, то через все MR так и проходит 1000 ед урона, при этом триггер MR2 не срабатывает. если эту цифру в финале поменять командой !!MR:F, то взрыв сработает несмотря на иммунитет к магии!!!
Это очень неудобно, вот если бы расчётный урон для имунных к магии был бы 0, тогда было бы проще. Теперь, чтобы мне сделать атакующую магию для стека, мне нужно запрограммировать все возможные сопротивления магии, включая линии опыта надеюсь, коревог учтёт это в следующих версиях |
|
|
|
03 Apr 2009, 16:47
Сообщение
#92
|
|
|
Прошаренный Сообщений: 102 Спасибо сказали: 10 раз |
Цитата(G.I.) взрыв сработает несмотря на иммунитет к магии!!! Цитата(ERM-Help) F$ The final (corrected) damage. Though it is very useful to be set in !?MR1. Using this way you can ignore a default WoG resistance and set yourown value that will be returned as a final damage applied to the creature stack. Цитата(erm-help_rus) Этим путем вы можете игнорировать обычное WoG-сопротивление Цитата(G.I.) на чёрного дракона Цитата(G.I.) при этом триггер MR2 не срабатывает Цитата(erm-help) !?MR2 - Trigger for Dwarf-style Magic Resistance. !?MR2; will work out when the game calculates dwarf-style magic resistance. Цитата(erm-help_rus) !?MR2; - Триггер для сопротивления магии стиля Гномов. Срабатывает при вычислении сопротивления магии по стилю Гномов.
-------------------- DracoLich Fan
|
|
|
|
05 Apr 2009, 13:04
Сообщение
#93
|
|
|
Advanced Member Сообщений: 114 Спасибо сказали: 7 раз |
[quote=ShadowDF2,03 Apr 2009, 17:47]
[quote=G.I.]взрыв сработает несмотря на иммунитет к магии!!![/quote] [quote=ERM-Help]F$ The final (corrected) damage. Though it is very useful to be set in !?MR1. Using this way you can ignore a default WoG resistance and set yourown value that will be returned as a final damage applied to the creature stack.[/quote] [quote=erm-help_rus]Этим путем вы можете игнорировать обычное WoG-сопротивление[/quote] Это я уже понял. только от этого не легче, абсолютно странно сделано Вопрос. Пытаюсь сделать некоторое подобие берсерка для своих целей - юниты атакуют ближайшую цель вне зависимости от действий игрока. задаю отряду команду идти и атаковать - иногда атакует иногда нет!!! Точнее, или не атакует никто, или атакует первый отряд, а остальные - нет! Пробовал варианты !!BG: A6 Dy-1; !!BG: A6 Ey-2; !!BG: A6 Dy1 Ey-2; y-1 - позиция атакуемого стека, y-2 - номер атакуемого стека |
|
|
|
05 Apr 2009, 21:09
(Сообщение отредактировал Сатарыч - 05 Apr 2009, 21:10)
Сообщение
#94
|
|
|
Advanced Member Сообщений: 133 Спасибо сказали: 0 раз |
Цитата(G.I. @ 05 Apr 2009, 14:04) Вопрос. Пытаюсь сделать некоторое подобие берсерка для своих целей - юниты атакуют ближайшую цель вне зависимости от действий игрока. задаю отряду команду идти и атаковать - иногда атакует иногда нет!!! Точнее, или не атакует никто, или атакует первый отряд, а остальные - нет! Пробовал варианты !!BG: A6 Dy-1; !!BG: A6 Ey-2; !!BG: A6 Dy1 Ey-2; y-1 - позиция атакуемого стека, y-2 - номер атакуемого стека А не пробовал указать номер стека? !!BG: Ny-3 A6 Dy-1 Ey-2; y-3 - номер стека |
|
|
|
06 Apr 2009, 17:30
Сообщение
#95
|
|
|
Прошаренный Сообщений: 102 Спасибо сказали: 10 раз |
Проще кастуй на юнита Берсерк. И гемора нет, и совместимость есть
-------------------- DracoLich Fan
|
|
|
|
06 Apr 2009, 17:32
Сообщение
#96
|
|
![]() Immortal Сообщений: 23 633 Спасибо сказали: 19912 раза |
ShadowDF2, а разве имелась в виду не автоматическая атака лишь врагов?
-------------------- |
|
|
|
06 Apr 2009, 17:38
Сообщение
#97
|
|
|
Прошаренный Сообщений: 102 Спасибо сказали: 10 раз |
Цитата юниты атакуют ближайшую цель вне зависимости от действий игрока. Читаю как "берсерк" -------------------- DracoLich Fan
|
|
|
|
08 Apr 2009, 07:12
(Сообщение отредактировал Master Of Puppets - 08 Apr 2009, 07:14)
Сообщение
#98
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз |
Особенность статических стрингов – привязанность к порядку числа. Можно, например, слить все вог-скрипты в один, слив заодно в один ERT их текстовики (что я и сделал), потому что все строки их лежат в пределах 100000-199999. Можно пропускать отдельные номера и даже целые секции. Можно оставлять их пустыми. Однако, если добавить в файл строку <100000 или >199999 – пойдут глюки.
P.S. пожадничал и урвал для мода сразу миллион ERT – с 1000000 до 1999999. -------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
|
08 Apr 2009, 17:25
Сообщение
#99
|
|
|
Прошаренный Сообщений: 102 Спасибо сказали: 10 раз |
^Представь себе процесс дебага или совместной работы с таким "скриптом" )
-------------------- DracoLich Fan
|
|
|
|
08 Apr 2009, 17:30
Сообщение
#100
|
|
|
Immortal Сообщений: 668 Спасибо сказали: 58 раз |
Интересно, я вот буквально на днях экспериментировал с !#HT:T, так вот для этой инструкции требуется z-переменная <32000. Загнал в ERT статические переменные 1100-1104, и все работало ОК.
|
|
|
|
![]() ![]() |
| Текстовая версия | Сейчас: 26 October 2025 - 15:08 |
|
Copyright by Алексей Крючков
Programming by Degtyarev Dmitry |
|