![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#41
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз ![]() |
Небольшой пример изменения внешнего вида города на карте:
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 |
|
|
![]()
Сообщение
#42
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз ![]() |
Проблема возвращения вида города при посещении на "слабо разрушенный" решается привязкой значения вида к какому-нибудь РО-номеру города и использованием подобного приведённому выше кода в триггере в пост-триггере 98, а также в СМ-клике на кнопке ОК в экране города.
Проверено в том числе на ИИ. -------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
![]()
Сообщение
#43
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз ![]() |
Простенькая функция, с помощью которой можно заставить пункт "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 |
|
|
![]()
Сообщение
#44
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз ![]() |
Вместо 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_* |
![]()
Сообщение
#45
|
![]() |
!?MM1;
!!MM:M |
|
|
![]()
Сообщение
#46
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз ![]() |
А что, так работает? Думал, что нет, поэтому и функцию накатал. Если работает, можно пост потереть как бесполезный.
-------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
Гость_Berserker_* |
![]()
Сообщение
#47
|
![]() |
Кнопка Банка, если не ошибаюсь, меняет подсказку. Сам менял когда-то так.
Стирать не нужно. |
|
|
![]()
Сообщение
#48
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз ![]() |
Установка-то работает, только тут речь не об установке, а о получении. А получение через MM:M? выдаёт в любом месте лишь прирост существ в двеллинге, старшем по уровню.
-------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
Гость_Berserker_* |
![]()
Сообщение
#49
|
![]() |
А зачем тебе получение?
|
|
|
![]()
Сообщение
#50
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз ![]() |
Понадобилось, например, для скрипта быстрого найма - для соответствия иконок существ с двеллингами. Получаю название существа из подсказки, затем узнаю его номер, затем уровень. Исходя из этого, нанимаю из нужного двеллинга. Морока, наверное, но работает.
-------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
![]()
Сообщение
#51
|
|
![]() допустим, мяў Сообщений: 24 113 Спасибо сказали: 13422 раза ![]() |
Цитата(Master Of Puppets @ 17 Aug 2009, 09:29) Какие дефы можно использовать? Объектные и предпочтительно с той же конфигурацией, что и у города. Так эта функция позволит менять внешний вид города в зависимости от отстроенности? Например: Сельская управа - Префектура - Муниципалитет- Капитолий; Форт - Цитадель - Замок? Меняется навсегда или до следующей отстройки, как при разрушении городов? -------------------- Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская) |
|
|
![]()
Сообщение
#52
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз ![]() |
Вид меняется, как при команде CA:I. Я просто подменяю деф на время этой процедуры. При заходе и выходе из города информация обновляется, поэтому нужно её восстанавливать в триггере и пост-триггере. Зато можно менять вид в зависимости от чего угодно.
При загрузке игры виды городов не обновляются, поэтому восстанавливать ничего не надо. А ещё - для заменяющих дефов не нужны файлы *msg и *msk. При постройке в городе оборонительных зданий вид тоже меняется на соответствующий стандартный. В идеале нужно просто расширить таблицу видов городов, и заморочки отпадут. Но указателя на неё я лично не нашёл. -------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
![]()
Сообщение
#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 это из моего исходника к городам новым. Адреса - это указатели на указатели на таблицу дефов замков в разных ситуациях (при разрушении, целых и т.п.) Тут по-моему только нет вида замка при неотстроенном форте, ну по аналогии, если захочешь - найдешь. |
|
|
![]()
Сообщение
#54
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз ![]() |
Спасибо большое! :-)
Ещё: при работе с !!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 |
|
|
![]()
Сообщение
#55
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20603 раза ![]() |
Работа с функциями 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:; |
|
|
![]()
Сообщение
#56
|
|
![]() Организатор лиги WCL Сообщений: 981 Спасибо сказали: 632 раза ![]() |
положительные у-переменные вроде не рекомендуется использовать в Эре/ТЕ?
-------------------- Постоянно играю на рейтинг www.heroes-III.com в онлайне через сервер GameRanger - в HoMM3 SOD или WT. Присоединяйтесь! Чужие подписи и аватары не читаю - отключил
|
|
|
Гость_Berserker_* |
![]()
Сообщение
#57
|
![]() |
Отрицательные.
|
|
|
![]()
Сообщение
#58
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20603 раза ![]() |
И еще раз о Граале. Точнее, о неуспешных попытках его выкопать.
Код 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 - но есть ли в этом смысл? |
|
|
![]()
Сообщение
#59
|
|
![]() 😸🧡✊✌️ Сообщений: 16 462 Спасибо сказали: 3356 раз ![]() |
@feanor: просто так ничего не делается. В машкоде для
Код MOV EAX, 74CE30, CALL EAX 74СE30 - абсолютное значение, а в Код CALL 74CE30 представляется смещением относительно адреса следующей инструкции, то есть патчить исполнимый файл чуточку проблемнее. -------------------- Я слежу за тобой!
![]() ![]() Цитата Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел. Борис "Бонус" Репетур, "От винта!", выпуск 38. |
|
|
![]()
Сообщение
#60
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20603 раза ![]() |
Две функции для работы со спецкнопкой юнита (кнопка колдовства у Волшебных Драконов)
![]() Код !?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. |
|
|
![]() ![]() |
Текстовая версия | Сейчас: 21 October 2025 - 16:21 |
Copyright by Алексей Крючков
![]() Programming by Degtyarev Dmitry |
|