Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ERM: Вопросы и ответы
DF2 :: ФОРУМЫ > Игровые форумы > Heroes of Might & Magic III > Моды > Скрипты
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52
major
Цитата(Master Of Puppets @ 07 Jun 2009, 00:18)
А у меня - ни в зуб ногой, хотя пробовал уже раз десять. Косяк.

А какую ошибку выдает? Или сразу вылетает?
MasterOfPuppets
Ошибку, указывающую на твой скрипт:

Цитата(ошибка)
!!UN:Cx1/4/y1;
!!VRx1:+4;

ОК - и вылет.
major
Да, похоже ты прав sad.gif. На третьем ТЕ по этому адресу указателя находится совершенно другое.
Ладно, уже ночь, завтра попробую разобраться.
Astaroth
Цитата
!!VRz1:S^имя_звука.wav^;
!!SN:Pz1;


Ну с этим то все понятно, щас вот ищу название файла звука молнии в лоде
major
Цитата(Demon of Time @ 07 Jun 2009, 00:29)
Цитата
!!VRz1:S^имя_звука.wav^;
!!SN:Pz1;


Ну с этим то все понятно, щас вот ищу название файла звука молнии в лоде

Вот LIGHTBLT.WAV.
Astaroth
Цитата
Вот LIGHTBLT.WAV.
good.gif good.gif good.gif
И как ты все это помнишь?

Добавлено ([mergetime]1244313895[/mergetime]):
Код
!?CM4;
!!CM:D?y-1 F?y-2 I?y-3;

!!if&y-3=2008/y-2=512/-96/-95:;
!!IF:Q96^Вы хотите использовать {Длань} {Богов}^;
!!IF:M^Кликните левой кнопкой мыши на то существо, которое хотите убить^;
!!en:;

!!if&y-3=2008/y-2=512/96/95:;
!!IF:M^Вы уже использовали Длань Богов^;
!!en:;

!!if&y-1>=0/y-1<=186/y-2=0/96/-95:;
!!CM:R0;
!!BU:Ey-1/?y-4;
!!FU&y-4=-1:E;
!!BMy-4:V38;
!!VRz-1:^LIGHTBLT.WAV^;
!!SN:Pz-1;
!!BMy-4:N0;
!!BMy-4:K1;
!!BU:R;
!!en:;


Я конечно сильно извиняюсь, но что у меня неправильно в этом коде? idontno.gif Помогите, кто знает

Добавлено ([mergetime]1244314869[/mergetime]):
Моя ошибка после !!VR :S пропустил biggrin.gif
major
Сразу бросилось в глаза
!!VRz-1:S^LIGHTBLT.WAV^;

P.S. Сам нашел - это хорошо.
Такое бывает очень часто. Я иногда в конце строки ; забываю поставить.
Astaroth
Цитата
Я иногда в конце строки ; забываю поставить.

У меня тож такая запара бывает, но самое обидное когда код длинный, найти и исправить бывает сложно... dry.gif
major
Так ЕРМ же выдает сообщение об ошибке и обычно показывает участок кода, где есть ошибка. По нему ее и можно найти.
Astaroth
Нет, это если где-то на карте объект со скриптом, а если в битве, то тупо зависает или вообще в хлам вылетает, а один раз у меня вообще все "моргало", т.е. вроде чернеет экран перед входом в битву, а потом бац! И опять нормальная яркость... вот так вот! spiteful.gif
snalltroll
Люди, посоветуйте, как в переменных не запутаться? Кто как за ними следит?
Astaroth
Snalltroll, Я в каждом скрипте пишу примерно следующее

Код
** Начальные настройки карты**
**Переменные- z100, z101 **
**Переменные - v20, v22, v23, v30**
**Переменные - y-1, y-2**
**Глобальные события Ge1 **
**Временные события Tm 2, Tm 1 **
**Функции - Fu20**


А затем после всех скриптов делаю событие "Флаги и переменные исп. в скриптах", в которое записываю названия скриптов и исп. в них переменные.
Так Я не путаюсь, и всегда знаю, ЧТО мне можно исп., а ЧТО уже использовано
Phoenix - Mod
Использовать другие средства разработки, вроде SCVS. Прога 2007-го года до сих пор актуальна.
Я использую SCVS в совокупности с FileJoiner (тоже вроде в 2007-2008 году писал). В итоге код разбит на отдельные-файлы модули.
Цитата
Программа: FileJoiner 2B
Версия: 1.0
Автор: Berserker
Связь: berserkerx@rambler.ru
Лицензия: GNU PUBLIC
Описание:

Прога предназначена для упрощения массового объединения файлов. Особенности:

0) Основной режим - бинарное объединение
1) Работает из командной строки. В случае ошибки выводит её, иначе всё происходит тихо.
2) Максимально защищена от ошибок и сбоев.
3) Поддерживает плагины для разных типов файлов [0]
4) Поддерживает сценарии. Имя файла со сценарием нужно передать в качестве параметра.

[0]* - Например, txt-файлы можно объединять бинарно, а *.doc и другие типы нет. Вы сами можете написать плагин для объединения любых файлов.

Применение:
FileJoiner.exe имя_файла_сценария.

Файл сценария - любой тектовой документ (Plain Text) с любым расширением (например, script.go).
Структура файла сцерия:

комментарии...
'~' - говорит о том, что далее идёт блок кода
[-|+] - тип объединения ('-' - бинарный, '+' - используя плагины).
имя_выходного_файла
<разрыв строки>
далее идёт серия имён файлов для объединения, 1 файл на строку. Блок кода кончается при достижении нового блока или конца файла.

Простой пример: script.go (в каталоге с программой).
В примере имеется два блока кода. Первый бинарно объединяет три текстовых файла, а второй - два файла ern-скриптов через плагин.
Astaroth
Цитата
Я использую SCVS в совокупности с FileJoiner


То ли я такой варвар, но о чем ты, Феникс (А ты случаем не Берсеркер с КорВога? blink.gif )
Phoenix - Mod
Он самый.

Вот архив из двух прог:



1-ая: SCVS. Это компилятор переменных/констант/массивов/мини-макросов.

2-ая: FJ: для объединения файлов.

Применение:

1) Создать папку SCVS в Data\s
2) Распаковать туда архив.
3) Компиляция осуществляется через запуск Compile.bat.

В архиве два тестовых скрипта: Test1.erm, Test2.erm и их текстовики. Также присутствует хэлп для обоих прог. Задавайте вопросы, если что.
Astaroth
Ну не могу я не спросить! biggrin.gif
Товарищ Берсеркер, а SCVS - тоже ваших рук (а точнее пальцев) дело?
Если да, то жму руку! good.gif good.gif good.gif
snalltroll
Неееет. Я в ЕРМе ещё толком писать не умею, а уже браться за аналог? Как это там говорится... за двумя зайцами погонишся... smile.gif
Phoenix - Mod
Цитата
Товарищ Берсеркер, а SCVS - тоже ваших рук (а точнее пальцев) дело?

Да.
Есть ещё отладчик скриптов и прога для изменения переменных ЕРМ. Все они включены в мод Феникс, но если нужно - выложу.

Добавлено ([mergetime]1244319664[/mergetime]):
Хм, так Astaroth это вы smile.gif

Добавлено ([mergetime]1244319694[/mergetime]):
Цитата
snalltroll

Я могу помочь с примерами-уроками.
Astaroth
Цитата
Хм, так Astaroth это вы

Ну естесно! Просмотрел Хелп по SCVS, полезная вещица, не спорю! good.gif good.gif
Пока я, правда, пишу скрипты только для своей карты, поэтому вряд ли чужию переменные будут там маячить (Вогификация отключена от греха подальше), но вот кагда буду разрабатывать отдельные скрипты-модули, тогда готовься: закидаю вопросами! biggrin.gif biggrin.gif

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

Цитата
Я могу помочь с примерами-уроками.


Аналогично, я тож может чем помогу!
snalltroll
Цитата
Я могу помочь с примерами-уроками.

Цитата
Аналогично, я тож может чем помогу!


Если вы об SCVS - спаасибо, но нет. Главное в поставленной задаче - желание и энтузиазм (ИМХО). Ни того ни другого для аналогии ЕРМа у меня нет...

А вот если вы про помощь в ЕРМе - я буду очень признателен, если дадите пару советов или проведёте пару уроков...
MasterOfPuppets
Цитата
я буду очень признателен, если дадите пару советов или проведёте пару уроков...

ИМХО, лучше всего учиться поначалу на чужих скриптах, сравнивая разные варианты одного и того же, ища оптимальные способы и т.д. А таких примеров тут полно.
Phoenix - Mod
P.S Нашёл хэлп по некоторым прогам:
http://files.heroes35.net/phoenix/manual/Soft.html
major
Берс, у нас тут с Master Of Puppets загвоздка вышла. Сможешь помочь?
Нам нужно менять арты на черных рынках. Я нашел указатель, но дело в том, что адреса загружаются по разному. У меня практически всегда указатель на таблицу артов черного рынка находится по адресу 0440F6CCh, а у Мастера, как я понял, 0430F6CCh. Почему иногда происходит сдвиг на 100000h и как это определить?
И еще я откопал, что этот самый указатель находится через 4 байта после таблицы артефактов в городе. К сожалению, команда !!UN:J7/8/?y1; всегда выводит значение -1, а я надеялся, что она как раз покажет нужный указатель.
В общем, need help.gif.
Phoenix - Mod
Это динамическая память. У меня там вообще мусор.
Какой формат таблицы?
Да, для каждого рынка свой набор артов.
major
Там таблица по 4 байта на артефакт, 7 артефактов на рынок.
Может как-нибудь пропатчить ехе, чтобы использовать городских торговцев артефактами?
MasterOfPuppets
Цитата
происходит сдвиг на 100000h

Фигасе сдвиг! ohmy.gif Да ещё так ровно... А точно, что либо так, либо сяк? Может, ещё бывают варианты?
Цитата
Может как-нибудь пропатчить ехе, чтобы использовать городских торговцев артефактами?

+ так, чтобы !!UN:J7 тоже распространялась на рынки. smile.gif

Цитата(major @ 07 Jun 2009, 09:35)
У меня практически всегда указатель на таблицу артов черного рынка находится по адресу 0440F6CCh, а у Мастера, как я понял, 0430F6CCh.

Крашится на обоих значениях.(
DracoLich
Цитата
+ так, чтобы !!UN:J7 тоже распространялась на рынки.

Тогда уж J13 или J7/x/x/1 biggrin.gif
MasterOfPuppets
Цитата(major @ 07 Jun 2009, 09:35)
И еще я откопал, что этот самый указатель находится через 4 байта после таблицы артефактов в городе.

Кстати, а что в этих четырёх байтах? Пусто?
major
Да там тупо 00000000.
Aleee
Можно как-нибудь округлить число? Положим, я хочу отталкиваясь от силы героя получить значение с коэффицентом 0.2. Для всех значений силы, не кратных пяти, получится дробное число. А нужно целое.
major
Ну так в v-переменных хранятся только целые числа, он тебе сам и округлит. Если речь идет и "правильном" округлении, тогда используй e-переменные. Например,

Код
!!VRe1:Sv1 :5;
!!VRv2:Se1;
!!VRe2:Se1-v2;
!!VRe2:*10;
!!VRv2&e2>=5:+1;


Если v1=14, при стандартном округлении получится 2, а используя код - 3.
Aleee
А как убрать существо с поля боя "по тихому": чтобы без надписей в чате, трупов и т.п? Был вот - и вдруг нет.
major
Ну что-нибудь типа такого
Код
!!BM$number$:Fd4194304 N0 K1;
!!BU:R;
MasterOfPuppets
major - пробил свои значения. Указатель - 041AF6CC, сама таблица - 0EC5F1F0.
Чорд! А я-то думал, почему не могу её найти. У меня комп слабый, и я часто жму Отмену, не доведя поиск до конца. Как оказалось - зря. ArtMoney нашла последовательность из трёх артов только на 94% поиска.
major
Кстати, даже на одном экзешнике одного компа указатель время от времени меняется. Видимо придется дождаться совета/помощи/подсказки/пинка Берса.
Astaroth
Master Of Puppets, major Ребят подскажите, что в поиске ArtMoney вводить, дабы эту таблицу артефактов найти? (Т.е. укахатели на нее)
MasterOfPuppets
Запускаешь редактор карт.
Ставишь на карту Чёрный Рынок и героя.
Сохраняешь карту и выходишь.
Запускаешь игру, запускаешь карту.
Запускаешь Артмани.
Входишь в Рынок и смотришь, какие артефакты в нём есть.
Ищешь в хэлпе номера этих артефактов (достаточно первых трёх)
В Артмани выбираешь "Процесс", "Heroes of Might and Magic 3".
Нажимаешь в Артмани "Искать".
Выбираешь "Последовательность значений", количество - 3, тип - 4 байта.
Пишешь номера артефактов как значения.
Начинаешь поиск.
Находится адрес начала последовательности - таблицы. Если изменить значения в таблице, то изменится и арт на Рынке.
Копируешь адрес начала таблицы в виндовский калькулятор, переводишь число в десятеричную систему.
Снова нажимаешь "Искать". Выбираешь "Указатель". Тип - 4 байта.
Найдётся один или два адреса. Если два - то один обычно левый. Над настоящим сверху через 4 байта располагается таблица городских Торговцев Артефактами.
Astaroth
Надо будет попробовать
snalltroll
Читал ЕРМ-хелп, там есть Таблица Использованнных Переменных...
Это как? То есть перечисленные переменные уже используются ВоГ-ом и их не следует трогать? Или Как?
major
Ну в общем, да. Эти переменные используются в ВОГ скриптах.
snalltroll
А конкретнее...
Не будут пахать те скрипты, которые появляются при ВоГификации, или те, на которых работает сам ВоГ?
sergroj
Еще можно делить с округлением к ближайшему так: !!VRv2:Sv1 +2 :5; где 2 - это 5/2 с округлением вниз.
Т.е. для произвольного делителя в v3 будет так:
!!VRy1:Sv3 :2;
!!VRv2:Sv1 +y1 :v3;

Цитата(Master Of Puppets @ 09 Jun 2009, 01:10)
Копируешь адрес начала таблицы в виндовский калькулятор, переводишь число в десятеричную систему.

ArtMoney умеет работать с шестнадцатеричными, достаточно, например, добавить h в конце.
DracoLich
Цитата
Не будут пахать те скрипты, которые появляются при ВоГификации, или те, на которых работает сам ВоГ?

Будет перекрытие переменных - будут ой ляля какие баги. Не надо допускать такого, вообще оптимально использовать как можно меньше глобальных переменных.
MasterOfPuppets
Цитата
Не будут пахать те скрипты, которые появляются при ВоГификации, или те, на которых работает сам ВоГ?

М-м-м... А это не одно и то же?
В любом случае, их просто лучше не трогать, а использовать зарезервированные или из промежутков между массивами тех, что заюзаны. И конечно же,
Цитата
вообще оптимально использовать как можно меньше глобальных переменных.
snalltroll
Спасибо. Приму к сведению...
sergroj
[[0x699538] + 0x1F684] - массив Black Market'ов.
[[0x699538] + 0x1F684] + n*0x1C - конкретный Black Market, n - номер из OB:C.
[] - взятие значения по указателю.

А еще [6AAADC] - текущий (последний посещенный) Black Market.
snalltroll
Вопрос 1й:
Что бы не разбрасываться переменными, решил после завершения функции сбрасывать их... и, так и не понял, как это делать. В конце функции задавать каждой переменной значение 0? Или какой то VR-функцией?

Вопрос 2й:
Впринципи, относится он к первому.
Как записывать несколько переменных в одну строку? Всмысле, что бы не писать в столбик !!VRv1=1 !!VRv2=2 !!VRv3=3 !!VRv4=4...

(по мере возможности стараюсь ставить плюсики)
MasterOfPuppets
1)Если ты используешь локальные переменные (y, e, y-, e-, z-), то сбрасывать их не надо - они сами сбрасываются в конце триггера или функции.
Если обнулять v-переменные (бывает, надо такое), лучше использовать команду С вместо S. Например:
!!VRv1:C0/0/0/0/0/0/0/0/0/0; - обнулить v1-v10
2)Не понял. Выражений вроде !!VRv2=2 не бывает. Есть !!VRv2&условие(я):команда; или !!VRv2|условие(я):команда;
snalltroll
Спасибо большое!
Про локальные переменные я знаю, а вот за VR@:C спасибо!
А во втором вопросе как раз об вышеуказанной функции я и хотел узнать. Без неё мне пришлось бы записывать:
!#VR@:S$;
!#VR@:S$;
!#VR@:S$;
!#VR@:S$;
!#VR@:S$;
!#VR@:S$;
...
MasterOfPuppets
Эта команда лишь для v-переменных - для других типов она не действует. Другие можно обнулять круговыми функциями. Простой пример: как обнулить переменные w1-w200 для всех героев на старте карты?

!?PI; - пост-инструкция
!!DO1/0/155/1:P;

!?FU1; - функция для всех героев
!!IF:Wx16; - обращение к переменным героя x16
!!DO2/1/200/1:P;

!?FU2; - функция для всех переменных героя
!!VRwx16:S0; - обнулить переменную wx16
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.