Таверна | Столик Картостроителей
Автор | Сообщение | |
---|---|---|
Сэр Kirinyale
HoMM V: Рыцарь |
Сэр stickman, воспользуйтесь ещё какой-нибудь дополнительной переменной для хранения "состояния" арены. Например, выберем переменную v100 и положим, что у неё могут быть следующие значения:
0 (начальное значение) - перед первым боем 1 - перед вторым боем 2 - перед третьим боем 3 - после третьего боя Если я правильно понимаю, то флаги у вас имеют следующий смысл (рекомендую всё это записывать хотя бы для себя - при большом количестве скриптов, да и просто после перерыва, очень трудно разобраться даже в собственной писанине, не помня, какая цифра что означает): 12 - получил ли игрок соперника 13 - флаг боя с соперником 10 - флаг победы над соперником 11 - флаг получения награды Соответственно, в скрипте потребуются примерно следующие изменения: 1) Перед созданием монстра, кроме флага 12, проверяется значение v100. При значениях от 0 до 2 создаются разные монстры, плюс увеличивается на единицу значение v100, при значении 3 не делается ничего (драться больше не с кем). Для удобства написания повторяющиеся команды можно было бы ещё вынести в функцию, примерно так: !?OB1/1/0; !!FU1&-12:P; * FU1 - наша функция ... (здесь идут остальные необходимые действия, как и раньше) * ниже реализация функции (триггеров у неё может быть сколько угодно, это очень удобно использовать вместе с условиями, чтобы не писать их на каждой строчке, особенно когда встречаются варианты сложнее, чем просто три значения одной и той же переменной): !?FU1&v100=0; !!UN:O3/3/0 I3/3/0/54/7; !!MO3/3/0&-12:G1 O1 R1 U1; !!IF:M^Иди на арену и победи крестоносца!^; !?FU1&v100=1; !!UN:O3/3/0 I3/3/0/54/7; * здесь поменять цифры, создав другого монстра !!MO3/3/0&-12:G1 O1 R1 U1; !!IF:M^Иди на арену и победи кого-то ещё!^; !?FU1&v100=2; !!UN:O3/3/0 I3/3/0/54/7; * здесь тоже поменять цифры !!MO3/3/0&-12:G1 O1 R1 U1; !!IF:M^Иди на арену и победи последнего соперника!^; 2) После получения награды, вместо того чтобы устанавливать флаг 11, сбрасываем в 0 значения флагов 12 и 10, и прибавляем 1 к v100. 3) Вешаем на первый триггер со всем этим кодом дополнительное условие: !?OB1/1/0&v100<3; 4) Рядом создаём ещё один такой же триггер с другим условием, обязательно записываем его раньше, чем уже имеющийся, иначе он будет срабатывать сразу же после победы над последним соперником, а мы этого, наверно, не хотим: !?OB1/1/0&v100=3; !!IF:M^Ты уже всех победил!^; * текст поправите на свой вкус 5) В триггере !?BA1 необходимо добавить сброс флага 13, иначе во втором и третьем бою победой на арене будет считаться победа над любым другим монстром на карте. !?BA1&13; !!HE-1:O?y-1; !!IF&y-1>-1:V10/1 V13/0; 6) Если на карте существуют герои компьютера, и они теоретически способны добраться до вашей арены, то на всех триггерах очень желательно добавить проверку флага 1000, означающего что ходит сейчас игрок-человек (для битв это означает участие в битве хоть одного игрока-человека): !?OB1/1/0&1000/v100=3; ... !?OB1/1/0&1000/v100<3; ... !?OB3/3/0&1000; ... !?BA1&1000/13; ... Вот, надеюсь, ничего не забыл... |
|
Сэр stickman
Сообщения: 5 |
Охх... Честно говоря, сер Kirinyale, как то не очень понятно... извините конечно, но можно поподробней разжевать?
|
|
Сэр Kirinyale
HoMM V: Рыцарь |
Ну тут как-то многовато всего, так что подробнее можно только в одном из двух случаев
1) Уточните, что непонятнее всего, с него и начнём. 2) Пришлите мне карту со скриптом, найду время (пока ещё в отпуске) - перепишу прямо на месте с комментариями |
|
Сэр stickman
Сообщения: 5 |
Вот карта с моим скриптом, который ОЧЕНЬ сыроват rghost.ru/217310
там только один соперник. а вообще я недопонял пункты 2, 3, 4. заранее спасибо за помощь в любом виде!) |
|
Сэр Kirinyale
HoMM V: Рыцарь |
Сэр stickman, 22.07.2010 22:45 "Файл удалён". Отправьте карту мне по почте (адрес - на кнопке email под каждым моим сообщением). Сэр stickman, 22.07.2010 22:45 Пункт 2 на человеческом языке: увеличиваем переменную v100 (номер "стадии" арены) на единицу, чтобы перейти к следующему сопернику. Флаги 12 и 10 (к тому времени установленные в 1) сбрасываем обратно в 0 для того, чтобы при следующих посещениях арена вела себя так же, как и раньше (сначала создавала соперника, потом ждала, пока игрок с ним подерётся), но уже с другим соперником. Для большей понятности пунктов 3-4 проведу ещё небольшой ликбез по ERM: 3.1) Триггер (то, что начинается с !?, то есть событие) может точно так же иметь условие (то, что между & и :, и чем вы уже неоднократно пользовались в скрипте), как и ресивер. Если условие установлено на триггере, то ВСЕ команды, находящиеся внутри него, будут выполняться только в том случае, если условие выполняется на момент вхождения в триггер. 3.2) Кроме банальной экономии места, условия на триггерах удобны ещё и в тех случаях, когда по одному и тому же условию нужно сделать много разных действий, некоторые из которых ещё и меняют переменные или флаги, которые проверяет условие. 4.1) На одно и то же событие (например, вход в объект) может одновременно существовать сколько угодно триггеров, разбитых по скольким угодно скриптам в карте. При возникновении этого события поочерёдно срабатывают все соответствующие триггеры (если выполняются висящие на них условия) в том порядке, в котором они указаны в скриптах (или в том порядке, в котором отсортированы сами скрипты, если триггеры находятся в разных). 4.2) Общее правило для работы со скриптованными объектами, которые могут менять свои логические "состояния", и в зависимости от состояния имеют разное поведение: для каждого состояния создаём свой триггер с соответствующим условием, а триггеры выстраиваем в порядке, обратном порядку перехода по состояниям. Пример того, что получится, если порядок будет прямым: !?OB10/20/0&-10; !!IF:V10/1 M^Привет! Меня зовут так-то, а тебя?.......^; !?OB10/20/0&10; !!IF:M^Привет! Мы уже знакомы!........^; Смысл флага 10 здесь в отметке о том, был ли игрок уже ранее в объекте, чтобы при первом посещении выдавать текст, отличающийся от всех следующих посещений (лично в моей практике - очень частый случай). Но из-за порядка выполнения триггеров (а значит, и проверки их условий), когда очередь дойдёт до второго, флаг 10 уже будет установлен в единицу, и условие выполнится, поэтому при первом же посещении игрок получит два сообщения подряд, второе из которых будет явно лишним. Мораль - порядок триггеров должен быть обратным. |
|
Сэр Kirinyale
HoMM V: Рыцарь |
Маленькое полезное дополнение: в ERM последней версии условия могут начинаться не только с &, но и с |. В последнем случае при наличии нескольких условий одновременно вместо логического "и" к ним будет применяться "или".
А ещё есть очень полезная команда !!FU:E, с помощью которой можно мгновенно выйти из текущего триггера, пропустив все следующие команды (кроме тех, которые находятся под нижеследующими такими же триггерами с подходящими условиями). При её использовании сложная логика, требующая последовательных проверок кучи сложных условий (если А и Б, то сделать то-то, иначе проверить В или Г, если выполняются - сделать что-то второе, если опять не выполняется - сделать третье) записывается гораздо короче и, опять же, не требует дословного повторения одного и того же условия в двадцати строчках подряд. |
|
Сэр stickman
Сообщения: 5 |
!!OW:R3/6/v101; попытался при помощи этого ресивера (триггер есть, не волнуйтесь), записать колво денег зеленого игрока в переменную v101, что то не работает, просто исчезают деньги. Как стоит исправить скрипт?
Очень прошу помогите! заранее благодарен!! |
|
Сэр Kirinyale
HoMM V: Рыцарь |
Вместо считывания количества ресурсов в переменную вы записали в него её текущее значение (скорее всего, нулевое). Чтобы прочитать, нужно так:
!!OW:R3/6/?v101; |
|
Сэр KasberaD
HoMM V: Безземельный |
Приветствую, сэр Kirinyale! у меня такой вопрос. Как узнать с помощью ерм, какой день в игре? И в какую переменную лучше записать? В v?
|
|
Сэр Kirinyale
HoMM V: Рыцарь |
Текущий день? Нет ничего проще.
!!VRv1:Sc; Переменная - какая вам удобнее будет в конкретной ситуации. Если нужно просто быстро проверить день и забыть - логичнее воспользоваться локальной (например, y1, если в функции, или y-1, если в любом другом триггере). |
|
Сэр KasberaD
HoMM V: Безземельный |
Спасибо )) теперь буду знать кстати, я помню, Вы мне говорили, что делаете какую-то карту. Давно это было. Она готова?
|
|
Сэр Kirinyale
HoMM V: Рыцарь |
Сэр KasberaD, 19.08.2010 07:28 Почти. В процессе альфа-тестирования и остаточных бета-доработок |
|
Сэр KasberaD
HoMM V: Безземельный |
Это очень радует )) и ещё у меня такой вот вопрос... а можно ли сделать так, чтобы скрипт, который я написал, можно было бы включать и отключать в настройках? )) например, когда выбираю случайную карту, справа есть кнопочка "Настройки ВоГ"... вот имено там.. чтобы скрипт собственный можно было включать в любую случайную карту )) можно ли так каким-нибудь способом? )
|
|
Сэр Kirinyale
HoMM V: Рыцарь |
Подозреваю, что как-то можно, но как именно - понятия не имею. Я не фанат стандартных вогификаций, поэтому в них не разбирался... Могу разве что предложить покопаться в папке Datas - вроде бы стандартные скрипты как раз там лежат. Если и не добавить, то поменять что-нибудь из них наверняка должно получиться.
|
|
Сэр KasberaD
HoMM V: Безземельный |
Таким образом я и сделал скрипт про покупку мифрила )) помните, здесь, за столиком картостроителей, создал тему про очень полезные скрипты)?) которые, к сожалению, никому не нужны)) там я вставил свой скрипт в стандартный скрипт о мифриле)) но вредный маг Mefisto начал ругаться, что это будет мешать картостроителям)) и упоминал что-то про это... Якобы можно так сделать, создать отдельную опцию )) жаль, что Вы тоже не знаете ))
|
|
Сэр E r i c
Сообщения: 12 |
Доброго времени суток!
У меня вот какая проблема: Вот скрипт rghost.ru/2967677 Если его вписать в события карты - все работает прекрасно. Но в виде erm-файла не желает(( Причем ers, по всей видимости, работает, т.к. при наличии скрипта в глобальном событии, но отсутствии вогификации скрипт не включается. (т.е. срабатывает проверка включения WoG-опций !!UN:P253/?y-5; {проверка на включение скрипта} !!FU&y-5=0:E; {выход если выключен}) Может я не сделал чего-то принципиально важного? Или это только у меня такой глюк... Заранее спасибо за любую помощь! Скрипт в предыдущем посте представляет собой новое псевдозаклинание (т.е. не книге) Маяк Ллойда (из мира Меч и Магия). Для активации - правый клик на кнопке "сотворить глобальное заклинание". Уважаемые Сэры, буду крайне признателен за помощь ибо на грани отчаяния... Убрал мелкие недочеты, к сожалению, не относящиеся к проблеме(( файл Если здесь кто-то бывает, помогите! Очень хочется разобраться в проблеме Изменено 22.10.2010 09:14 модератором Werky |
|
Сэр E r i c
Сообщения: 12 |
Прошу прощения за столь неэстетичное сообщение не сразу разобрался что здесь к чему (правку сообщения тоже не обнаружил)
|
|
Сэр Werky
HoMM IV: Безземельный |
Тэги на форуме в чистом виде не работают, а тэги в верхнем регистре это не корректно с точки зрения стандартов.
|
|
Сэр E r i c
Сообщения: 12 |
Сэр Werky, благодарю за исправления, буду иметь ввиду.
|
|
Сэр Kirinyale
HoMM V: Рыцарь |
Ни разу не пробовал писать и подключать скрипты отдельными файлами - только событиями в карте. Так что если через событие работает - вряд ли чем помогу.
|
|
Сэр E r i c
Сообщения: 12 |
Сэр Kirinyale, тогда просьба просто протестировать. Возможно это только у меня такой глюк. Если так, буду думать дальше...
|
|
Сэр pHOMMM
Сообщения: 18 |
Здрав буде, бояре !
Посмотрел я Ваш скрипт , Сэр Эрик, интересный и достаточно простой. Нашёл ошибку - всё дело в использовании у-х переменных, а надо поменять на ух, и всё ! и добавочка - вынести проверку на область щелчка из остальных команд вот так : !!FU&y50<>8:E; чтобы не было лишней работы, да и расширяемость лучше таким образом. С ерс-файлом проблемы, собственно, не было, всё работает норм. Удачи в дальнейшем и успехов в работе со скриптами и прочим героевским добром ))) ! |
|
Сэр E r i c
Сообщения: 12 |
Сэр pHOMMM, огромное героическое спасибо!
ошибку осознал, будем исправляться) я так понимаю после !!FU&y50<>8:E; можно убрать все проверки переменной y50? P.S.: скрипт простой, но на мой взгляд достаточно полезный стало обидно что в Меч и Магия такое заклинание есть, а в Героях нет, хотя игровая вселенная одна. |
|
Сэр E r i c
Сообщения: 12 |
Сэр pHOMMM! Заменил переменные y-x на yx, как Вы посоветовали... Проблема не исчезла...
Вот отредактированный вариант скрипт Причем не работает даже скрипт вида: ZVSE !?CM0; !#FU:C; !!UN:P78/?y5; !!FU&y5=0:E; !!CM:I?y50; !!FU&y50<>8:E; !!IF:M^!!!ПРОВЕРКА!!!^; Который по идее должен уж точно срабатывать при правом клике на книге заклинаний... И еще инструкция !#FU:C; очень уж сильно ругается(( Что делать? К Богам взывал, в бубен бил... |
|
Сэр pHOMMM
Сообщения: 18 |
лично у меня этот скрипт, обновленный, тоже не работает.
и я понял почему... это достаточно обобщенная проблема... я с ней тоже имел дело... суть в том что ерм в файловом виде(отдельным файлом, а не в карте) имеет другую схему строк. он использует несколько другие символы перевода строк, нежели обычные плайн тхт-файлы. блокнотом и иже с ними нельзя пользоваться для правки скриптов. Нужен либо специальный скрипт-эдитор (можно взять тут mmgames.ru/files/hmm/3/soft/erm/erm_editor.rar) или скопировать в карту, сохранить, и скопировать обратно, по идее должно сработать, но для тех редакторов которые ничего больше не меняют (т.е. блокнот ,думаю не подойдёт, а лучше акельпад или бред... )как-то так, первый способ, однако, менее геморный... Ну вот значит открываете, пересохраняете и должно заработать. В первый раз я видимо невнимательно всё проверил и по привычке сохранил после правки минусов, вот и подумал что в них дело. А так, в принципе, не в них проблема, а именно в кодировке символов переноса. Так что, можете и старую версию скрипта обработать Я проверил всё, как говорю поправил, теперь позволяет ставить и прыгать по маякам. Удачи ! ПС. думаю сей факт надо где-то как-то известить для людей силами модераторов/суперов, чтобы не натыкались др люди на такие грабли. Спасибо ) Изменено 28.10.2010 23:53 модератором Werky |
|
Сэр E r i c
Сообщения: 12 |
Во-о-от! Благодарю за труд, Сэр pHOMMM! Возникала такая мысль теперь сомнений нет. Доберусь до дома - протестирую.
P.S.: Просветить людей надо... Хорошо бы создать подробный хелп по созданию erm и ers файлов, с указанием предпочитаемых редакторов. Интернет на эти запросы отвечает довольно скупо |
|
Сэр E r i c
Сообщения: 12 |
Пересохранение в редакторе карт и копирование в блокнот мне не помогло... Зато через ScriptEditor все работает))
|
|
Сэр pHOMMM
Сообщения: 18 |
я же писал, не блокнот ))))) ибо он при сохранении всё равно вставляет отсебятину. надо другой редактор , который сохраняет именно так, как в него вставили(думаю, что так делают texted, akelpad, bred)
ну наконец-то, коль работает, примите поздравления, достопочтенный Сэр Эрик (это я, мол, следую правилам портала по стилю общения))))) |
|
Сэр Kirinyale
HoMM V: Рыцарь |
Сэр pHOMMM, 29.10.2010 06:36notepad++ |
|
Сэр E r i c
Сообщения: 12 |
Небольшое уточнение: AkelPad также отменяется. Я именно в нем и делал, просто по привычке обозвал его блокнотом
Благодарю за поздравления и потраченное на меня время, Сэр pHOMMM! Еще такой вопрос, Уважаемые Сэры. Можно ли с помощью !!UN:C прочитать/записать текстовые параметры в z-переменную? |
|