Тонкости ЕРМ, использование UN:C, ERM для профессионалов :) |
Здравствуйте, гость ( Вход | Регистрация )
Тонкости ЕРМ, использование UN:C, ERM для профессионалов :) |
17 Aug 2009, 09:29
(Сообщение отредактировал Master Of Puppets - 17 Aug 2009, 09:53)
Сообщение
#41
|
|
Анти-Всë Сообщений: 2 989 Спасибо сказали: 2376 раз |
Небольшой пример изменения внешнего вида города на карте:
CODE ZVSE !?PI; !!VRz10:S^^; обнуляем переменную z10 !!VRz11:S^avchforx.def^; задаём значение z11 на деф обычного вида Конфлюкса !!VRv10:S10*512+9597416; адрес z10 !!VRv11:S11*512+9597416; адрес z11 !!VRy1:S0; номер города, в данном примере - замок !!VRv12:Sy1*16+7919680; адрес названия дефа, который подменяем !!VRz2:S^Angel.dll^; !!SN:Lz2/?v3; получить адрес библиотеки !!VRz2:S^CopyMemory^; !!SN:Av3/z2/?v2; получить адрес процедуры !!SN:Ev2/0/16/v12/v10; запомнить название исходного дефа в z10 !!SN:Ev2/0/16/v11/v12; вставить название нового дефа из z11 !!UN:U98/y1/?y2; сосчитать Замки !!VRv4:S-2; !!DO20100/1/y2/1:Py1; !!SN:Ev2/0/16/v10/v12; возвратить исходное имя дефа !?FU20100; !!UN:U98/x1/-2/4; !!CA4:I1; Ожидаемые вопросы: Что произойдёт на старте карты, если использовать этот пример? Внешний вид всех Замков изменится на вид Сопряжения. ТОЛЬКО внешний вид. Почему это делается через ЭРУ? Можно ведь через UN:C... Не знаю, но через UN:C у меня ничего не вышло - в память записался лишь мусор (защита?). А зачем мне такие задвиги? Я могу использовать UN:O и I c 8-9 параметрами. Во-первых, команда эта глючная сама по себе. Во-вторых, в случае с городами она глючнее во сто раз. В-третьих, чтобы изменить вид отстроенного города, нужно копировать кучу информации о нём (здания, монстры, герои в гарнизоне), чтобы возвести его снова точь-в точь таким же. Здесь же легко и просто меняется внешний вид. Какие дефы можно использовать? Объектные и предпочтительно с той же конфигурацией, что и у города. -------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
18 Aug 2009, 08:30
(Сообщение отредактировал Master Of Puppets - 18 Aug 2009, 08:30)
Сообщение
#42
|
|
Анти-Всë Сообщений: 2 989 Спасибо сказали: 2376 раз |
Проблема возвращения вида города при посещении на "слабо разрушенный" решается привязкой значения вида к какому-нибудь РО-номеру города и использованием подобного приведённому выше кода в триггере в пост-триггере 98, а также в СМ-клике на кнопке ОК в экране города.
Проверено в том числе на ИИ. -------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
27 Dec 2009, 06:03
Сообщение
#43
|
|
Анти-Всë Сообщений: 2 989 Спасибо сказали: 2376 раз |
Простенькая функция, с помощью которой можно заставить пункт "V" в шаблоне DL показать нужное нам bik-видео:
*x1 - номер z-переменной, в которой хранится название видео (раcширение *bik указывать не нужно) !?FU1; !!VRzx1:M4/?y1; !!VRx1:*512+9597416; !!DO2/0/y1/1:Px1/6834836; !?FU2; !!UN:Cx1/1/?y1 Cx2/1/y1; !!VRx1:+1;!!VRx2:+1; *Пример: !#VRz1:S^cneutral^; !#FU1:P1; вызвать функцию !#DL№:N ... S; инициализировать некий диалог, провести с ним какие-то действия, закрыть !#UN:C6834836/4/862873943 C6834840/4/0 C6834844/4/1635017060 C6834848/4/1684624988; - возврат исходного текста в памяти. Обязательная строка. -------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
02 Jan 2010, 13:23
Сообщение
#44
|
|
Анти-Всë Сообщений: 2 989 Спасибо сказали: 2376 раз |
Вместо MM:M? для города:
!?FU@Получение подсказки в окне города@; *x1 - номер z-переменной для получения текста !!UN:C42231952/4/?y1; WoG 3.58f = 42144104 !!VRx1:*512+9597416; !!DO@Копирование строк@/1/512/1:Py1/x1; !?FU@Копирование строк@; !!UN:Cx1/1/?y1; !!if&y1=0; !!UN:Cx2/1/0; !!VRx16:S600; !!FU:E; !!en; !!UN:Cx2/1/y1; !!VRx1:+1; !!VRx2:+1; -------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
Гость_Berserker_* |
02 Jan 2010, 13:39
(Сообщение отредактировал Berserker - 02 Jan 2010, 13:40)
Сообщение
#45
|
|
!?MM1;
!!MM:M |
|
|
02 Jan 2010, 13:52
Сообщение
#46
|
|
Анти-Всë Сообщений: 2 989 Спасибо сказали: 2376 раз |
А что, так работает? Думал, что нет, поэтому и функцию накатал. Если работает, можно пост потереть как бесполезный.
-------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
Гость_Berserker_* |
02 Jan 2010, 17:49
(Сообщение отредактировал Berserker - 02 Jan 2010, 17:50)
Сообщение
#47
|
|
Кнопка Банка, если не ошибаюсь, меняет подсказку. Сам менял когда-то так.
Стирать не нужно. |
|
|
03 Jan 2010, 07:26
Сообщение
#48
|
|
Анти-Всë Сообщений: 2 989 Спасибо сказали: 2376 раз |
Установка-то работает, только тут речь не об установке, а о получении. А получение через MM:M? выдаёт в любом месте лишь прирост существ в двеллинге, старшем по уровню.
-------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
Гость_Berserker_* |
03 Jan 2010, 19:55
Сообщение
#49
|
|
А зачем тебе получение?
|
|
|
04 Jan 2010, 11:01
Сообщение
#50
|
|
Анти-Всë Сообщений: 2 989 Спасибо сказали: 2376 раз |
Понадобилось, например, для скрипта быстрого найма - для соответствия иконок существ с двеллингами. Получаю название существа из подсказки, затем узнаю его номер, затем уровень. Исходя из этого, нанимаю из нужного двеллинга. Морока, наверное, но работает.
-------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
04 Jan 2010, 15:16
Сообщение
#51
|
|
пират с чёрной меткой Сообщений: 23 645 Спасибо сказали: 12919 раз |
Цитата(Master Of Puppets @ 17 Aug 2009, 09:29) Какие дефы можно использовать? Объектные и предпочтительно с той же конфигурацией, что и у города. Так эта функция позволит менять внешний вид города в зависимости от отстроенности? Например: Сельская управа - Префектура - Муниципалитет- Капитолий; Форт - Цитадель - Замок? Меняется навсегда или до следующей отстройки, как при разрушении городов? -------------------- Давший быка на убой не выпросил и печень на жаркое.
|
|
|
05 Jan 2010, 10:13
(Сообщение отредактировал Master Of Puppets - 05 Jan 2010, 10:41)
Сообщение
#52
|
|
Анти-Всë Сообщений: 2 989 Спасибо сказали: 2376 раз |
Вид меняется, как при команде CA:I. Я просто подменяю деф на время этой процедуры. При заходе и выходе из города информация обновляется, поэтому нужно её восстанавливать в триггере и пост-триггере. Зато можно менять вид в зависимости от чего угодно.
При загрузке игры виды городов не обновляются, поэтому восстанавливать ничего не надо. А ещё - для заменяющих дефов не нужны файлы *msg и *msk. При постройке в городе оборонительных зданий вид тоже меняется на соответствующий стандартный. В идеале нужно просто расширить таблицу видов городов, и заморочки отпадут. Но указателя на неё я лично не нашёл. -------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
05 Jan 2010, 15:06
Сообщение
#53
|
|
Member Сообщений: 97 Спасибо сказали: 80 раз |
Отрываю от сердца (шучу)
AVCtown0 db 'DATA_CASTLE/AVCtown0.str',0 BufAVCtown0 dd 4C9823h AVCtowx0 db 'DATA_CASTLE/AVCtowx0.str',0 BufAVCtowx0 dd 4C9810h AVCtowz0 db 'DATA_CASTLE/AVCtowz0.str',0 ;BufAVCtowz0 dd 1 dup (4C97C4h,70AA21h) BufAVCtowz0 dd 4C97C4h это из моего исходника к городам новым. Адреса - это указатели на указатели на таблицу дефов замков в разных ситуациях (при разрушении, целых и т.п.) Тут по-моему только нет вида замка при неотстроенном форте, ну по аналогии, если захочешь - найдешь. |
|
|
06 Jan 2010, 06:30
Сообщение
#54
|
|
Анти-Всë Сообщений: 2 989 Спасибо сказали: 2376 раз |
Спасибо большое! :-)
Ещё: при работе с !!DL (и не только), часто бывает нужно получить название портрета героя. Так как ни один из HE:L не работает с синтаксисом получения, то... *x1 - номер героя *x2 - номер z-переменной для записи названия малого портрета *x3 - номер z-переменной для записи названия большого портрета !?FU1; !!VRx1:*92+8144112; !!UN:Cx1/4/?y1; !!VRx1:+4; !!UN:Cx1/4/?y2; !!VRx2:*512+9597416; !!VRx3:*512+9597416; !!DO2/1/512/1:Py1/x2 Py2/x3; !?FU2; !!UN:Cx1/1/?y1 Cx2/1/y1; !!VRx16&y1=0:S600; !!VRx1:+1; !!VRx2:+1; -------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
11 Jan 2010, 22:01
(Сообщение отредактировал feanor - 29 Jan 2010, 10:01)
Сообщение
#55
|
|
laughed as one fey Сообщений: 12 166 Спасибо сказали: 20585 раз |
Работа с функциями WinAPI.
Скрипт по правому клику на панельке с игровой датой выводит реальное время и заряд батарейки. Код ZVSE
!?CM0; !!CM:I?y1 F?y2; !!if&y1=1008/y2=512:; !!CM:R0; !!VRz1:S^kernel32.dll^; !!SN:Lz1/?y2; !!VRz1:S^GetSystemPowerStatus^; !!SN:Ay2/z1/?y3; !!SN:Ey3/1/?y4; сейчас в y4-y6 структура SystemPowerStatus. http://msdn.microsoft.com/en-us/library/aa373232(VS.85).aspx !!VRy10:Sy4; !!VRy10::65536; берем только заряд, остальные параметры в печку !!VRz1:S^GetLocalTime^; !!SN:Ay2/z1/?y3; !!SN:Ey3/1/?y4; y4-y7 - структура SystemTime http://msdn.microsoft.com/en-us/library/ms724950(VS.85).aspx !!VRy8:Sy6; !!VRy9:Sy6; !!VRy8::65536; !!VRy9:%65536; выдираем из нее время !!IF:M0/4/^Time:%Y9:%Y8 Capacity:%Y10%%^; !!en:; |
|
|
20 Jan 2010, 14:19
Сообщение
#56
|
|
Организатор лиги WCL Сообщений: 981 Спасибо сказали: 632 раза |
положительные у-переменные вроде не рекомендуется использовать в Эре/ТЕ?
-------------------- Постоянно играю на рейтинг www.heroes-III.com в онлайне через сервер GameRanger - в HoMM3 SOD или WT. Присоединяйтесь! Чужие подписи и аватары не читаю - отключил
|
|
|
Гость_Berserker_* |
20 Jan 2010, 18:02
Сообщение
#57
|
|
Отрицательные.
|
|
|
14 Feb 2010, 01:22
(Сообщение отредактировал feanor - 14 Feb 2010, 01:31)
Сообщение
#58
|
|
laughed as one fey Сообщений: 12 166 Спасибо сказали: 20585 раз |
И еще раз о Граале. Точнее, о неуспешных попытках его выкопать.
Код ZVSE !#UN:C4255839/4/262170720; !#UN:C4255843/4/817364992; !#UN:C4255847/4/4278219982; !#UN:C4255851/4/79987664; !#UN:C4255855/4/2416896865; !#UN:C4255859/4/90909090; !#UN:C4255863/4/90909090; вместо окна "Ничего нет. Куда подевалось?" вызывается функция #4000. (Номер можно переопределить в байтах 40F061-65) Cуть в подмене участка кода с вызовом этого мессагбокса на код CODE CPU Disasm , где 0074CE30 - адрес C_FUNC_ZVS_CALLFU.Address Hex dump Command Comments 0040F05F 60 PUSHAD 0040F060 68 A00F0000 PUSH 0FA0 0040F065 B8 30CE7400 MOV EAX,Era_1_6.0074CE30 ; Entry point 0040F06A FFD0 CALL EAX 0040F06C 83C4 04 ADD ESP,4 0040F06F 61 POPAD 0040F070 EB 0E JMP SHORT 0040F080 0040F072 90 NOP 0040F073 90 NOP 0040F074 90 NOP 0040F075 90 NOP 0040F076 90 NOP 0040F077 90 NOP 0040F078 90 NOP 0040F079 90 NOP 0040F07A 90 NOP Огромное спасибо Берсеркеру за сорцы Эры. Добавлено ([mergetime]1266099741[/mergetime]): Added: код неоптимален - можно убрать PUSHAD, POPAD и MOV EAX, 74CE30, CALL EAX заменить на CALL 74CE30. Added again: код для Эры. Теоретически можно адаптировать для 3.58 - но есть ли в этом смысл? |
|
|
14 Feb 2010, 08:41
(Сообщение отредактировал tolich - 14 Feb 2010, 08:42)
Сообщение
#59
|
|
😸🧡✊✌️ Сообщений: 16 027 Спасибо сказали: 2669 раз |
@feanor: просто так ничего не делается. В машкоде для
Код MOV EAX, 74CE30, CALL EAX 74СE30 - абсолютное значение, а в Код CALL 74CE30 представляется смещением относительно адреса следующей инструкции, то есть патчить исполнимый файл чуточку проблемнее. -------------------- |
|
|
18 Feb 2010, 21:42
(Сообщение отредактировал feanor - 18 Feb 2010, 21:43)
Сообщение
#60
|
|
laughed as one fey Сообщений: 12 166 Спасибо сказали: 20585 раз |
Две функции для работы со спецкнопкой юнита (кнопка колдовства у Волшебных Драконов)
Код !?FU3000; [x1 - hook func number] [del checks] !!UN:C6241623/4/2425393296; !!UN:C6241627/2/37008; !!UN:C6241637/4/2425393296; !!UN:C6241641/2/37008; [set hook] !!UN:C5894083/1/104; !!UN:C5894084/4/x1; [erm-func num] !!UN:C5894088/4/1959669944; !!UN:C5894092/4/2211512064; !!UN:C5894096/4/2425357508; !?FU3001; [restore original code] !!UN:C6241623/4/11896079; !!UN:C6241627/2/0; !!UN:C6241637/4/10980879; !!UN:C6241641/2/0; !!UN:C5894083/1/81; !!UN:C5894084/4/3431369867; !!UN:C5894088/4/1392509011; !!UN:C5894092/4/4100136936; !!UN:C5894096/4/138775039; !!FU3000:P3002; - поставить всем юнитам эту кнопку, по нажатию на ней выполнять !?FU3002 !!FU3001:P; - вернуть оригинальный механизм действия. Код [button fix] !#UN:C6241781/1/236; !#UN:C6241786/1/74; правка координат для более аккуратного отображения. (На скрине заметно, что кнопка чуть смещена вниз и вправо - этот код это фиксит. кстати, о координатах и вообще внешнем виде этой кнопки. За них отвечают: за Box46x32.pcx (подложка под кнопку) 5F3D9F - y (4 байта) 5F3DA4 - х (1 байт) за непосредственно кнопку: 5F3DE7 - указатель на имя дефа. 5F3DF5 - y (4 байта) 5F3DFA - x (1 байт) 5F3DE0 - байт, отвечающий за вид кнопки, выглядит она нажатой, или нет. 0 или 1. |
|
|
Текстовая версия | Сейчас: 23 April 2024 - 17:31 |
Copyright by Алексей Крючков
Programming by Degtyarev Dmitry |