Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
20 Feb 2010, 22:01
Сообщение
#1
|
|
|
Организатор лиги WCL Сообщений: 984 Спасибо сказали: 642 раза |
создал dll позволяющую расширить список стартовых героев за счет добавления героев из кампаний. Пока добавляются Мюллих и Катерина и банятся Сильвия и Саня. Потом доделаю, чтобы список динамически расширялся, без бана.
Большое спасибо Сергею Роженко, ASM, Дьякон, Берсеркер за большую помощь в создании этой dll. Скачать можно здесь: http://www.heroes-iii.com/files/sag_dll_v1.zip Про создание своих DLL можно почитать в туториале Дьякона http://wforum.heroes35.net/showthread.php?tid=862&page=1 -------------------- Постоянно играю на рейтинг www.heroes-III.com в онлайне через сервер GameRanger - в HoMM3 SOD или WT. Присоединяйтесь! Чужие подписи и аватары не читаю - отключил
|
|
|
|
20 Feb 2010, 22:18
Сообщение
#2
|
|
![]() Рыцарь в лесу. Сообщений: 4 469 Спасибо сказали: 6237 раз |
Цитата создал dll позволяющую расширить список стартовых героев за счет добавления героев из кампаний. Пока добавляются Мюллих и Катерина и банятся Сильвия и Саня. *пытается понять, какой смысл в использовании DLL, когда то же самое можно сделать в редакторе секунд за пять*
-------------------- ![]() |
|
|
|
20 Feb 2010, 22:21
Сообщение
#3
|
|
![]() 😸🧡✊✌️ Сообщений: 16 514 Спасибо сказали: 3458 раз |
Конечно, это можно сделать и для случайной карты тоже, но нужно ее загружать в редактор, ставить опции, сохранять. А тут одна dll-ка все делает автоматически.
-------------------- Я слежу за тобой!
tolic.narod.ru![]() Цитата Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел. Борис "Бонус" Репетур, "От винта!", выпуск 38. |
|
|
|
20 Feb 2010, 22:30
(Сообщение отредактировал Лорд Хаарт - 20 Feb 2010, 22:31)
Сообщение
#4
|
|
![]() Рыцарь в лесу. Сообщений: 4 469 Спасибо сказали: 6237 раз |
Цитата Конечно, это можно сделать и для случайной карты тоже, но нужно ее загружать в редактор, ставить опции, сохранять. А тут одна dll-ка все делает автоматически. Угу. Только сначала нужно узнать откуда-то про длл, выйти из игры, скачать, подключить, снова войти в игру… Тоже дело небыстрое, между прочим (да и не со всякой версией выйдет). "Ты только воду вскипяти, кофе засыпь, сахару добавь, ложкой размешай, в чашку налей, а выпью я, так и быть, сам".
-------------------- ![]() |
|
|
|
20 Feb 2010, 22:36
Сообщение
#5
|
|
![]() Immortal Сообщений: 2 768 Спасибо сказали: 959 раз |
Лорд Хаарт, потому что править каждую карту долго, а длл правит всё. Хаарт ты не понимаешь, но не значит, что не нужная вещь.
|
|
|
|
20 Feb 2010, 22:39
(Сообщение отредактировал feanor - 20 Feb 2010, 22:44)
Сообщение
#6
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20605 раз |
А экзешник в архиве с 10 кб длл зачем?
И сорцы выложить можешь или нет? |
|
|
|
20 Feb 2010, 22:43
Сообщение
#7
|
|
![]() Рыцарь в лесу. Сообщений: 4 469 Спасибо сказали: 6237 раз |
Цитата Лорд Хаарт, потому что править каждую карту долго Двойной щелчок → контрол+энтер → герои → четыре щелчка → ок → дискета → крестик. У меня занимает три секунды с копейками.
-------------------- ![]() |
|
|
|
21 Feb 2010, 08:51
Сообщение
#8
|
|
![]() Immortal Сообщений: 2 768 Спасибо сказали: 959 раз |
Лорд Хаарт, если нравиться правь каждую карту. Мне больше нравиться, когда дллка лежит и я не думаю не о чём. Вот если бы можно было выбирать не выходя из игры, но это в некоторых картах чит.
|
|
|
|
23 Feb 2010, 14:57
Сообщение
#9
|
|
|
Организатор лиги WCL Сообщений: 984 Спасибо сказали: 642 раза |
1) это всего лишь пример того что можно реализовать с помощью DLL.
2) обращаю внимание на фишку: МОЖНО РАБОТАТЬ С DLL ДО СТАРТА КАРТЫ И ДО СТАРТА ERM!!! То есть, можно организовать клиент-серверную связь или, например, подгрузить нужные текстовые файлы настроек с вебсайта. 3) Цитата(Лорд Хаарт @ 20 Feb 2010, 22:43) щелчок → контрол+энтер → герои → четыре щелчка → ок → дискета → крестик. У меня занимает три секунды с копейками. сингл-карты меня не интересуют, а в онлайне вскрытие случайной карты дисбалансно и потому запрещено. 4) исходники DLL выложу чуть позже 5) экзе включил потому как он патченный патчем Дьякона для того, чтобы DLL загружалась при старте приложения. С обычным экзе длл работать не будет. Экзе и патч протестирован на TE версии, по поводу остальных - as is, без гарантий. -------------------- Постоянно играю на рейтинг www.heroes-III.com в онлайне через сервер GameRanger - в HoMM3 SOD или WT. Присоединяйтесь! Чужие подписи и аватары не читаю - отключил
|
|
|
|
26 Feb 2010, 18:06
Сообщение
#10
|
|
![]() Weird Сообщений: 1 976 Спасибо сказали: 644 раза |
SAG, сделай, пожайста, из этой длл-ки туториал. Пошагово опиши, как делал. Пригодится.
-------------------- Работать надо - винтовка рядом.
|
|
|
|
26 Feb 2010, 18:35
Сообщение
#11
|
|
![]() Immortal Сообщений: 1 468 Спасибо сказали: 1153 раза |
Я бы ещё более тчоно определил структуру массива. Что там, массив integer-ов? Сколько их?
-------------------- |
|
|
|
27 Feb 2010, 13:46
Сообщение
#12
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20605 раз |
Sample.rar, 5 kb
Cтавится хук на подсказки в окне юнита. Язык - С, использован Codeblocks+GCC. Тестировано на Эре 1.6. Работоспособность - ээ..не очень глючно |
|
|
|
27 Feb 2010, 15:35
Сообщение
#13
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20605 раз |
Цитата SAG, сделай, пожайста, из этой длл-ки туториал. Пошагово опиши, как делал. Пригодится. я могу попробовать. А что именно описать? |
|
|
|
27 Feb 2010, 15:42
Сообщение
#14
|
|
![]() Etoslozhnostatus Сообщений: 8 715 Спасибо сказали: 16314 раза |
Всё, шаг за шагом.
(хотя похожий туториал уже делался, ссылка была на форуме КорВога) -------------------- - Да ну!?
- Horn of the Argali гну! |
|
|
|
01 Mar 2010, 10:34
Сообщение
#15
|
|
|
Организатор лиги WCL Сообщений: 984 Спасибо сказали: 642 раза |
Код LIBRARY Test; {!INFO MODULENAME = 'Test' VERSION = '0.1' AUTHOR = 'sag' } USES Win, Utils, SysUtils, VPUtils; //PROCEDURE HookCode(P: POINTER; NewAddr: POINTER; UseCall: BOOLEAN); external 'angel' name 'HookCode'; CONST (* HookCode constants *) C_HOOKTYPE_JUMP = FALSE; C_HOOKTYPE_CALL = TRUE; C_OPCODE_JUMP = $E9; C_OPCODE_CALL = $E8; C_UNIHOOK_SIZE = 5; TYPE (* Çàïèñü, íåîáõîäèìàÿ äëÿ ðàáîòû ñ ôóíêöèÿìè ïàò÷èíãà *) THookRec = RECORD Opcode: BYTE; Ofs: INTEGER; END; // .record THookRec VAR Temp: INTEGER; // Óíèâåðñàëüíàÿ âðåìåííàÿ ïåðåìåííàÿ PROCEDURE WriteAtCode(P: POINTER; Buf: POINTER; Count: INTEGER); BEGIN Win.VirtualProtect(P, Count, PAGE_READWRITE, @Temp); Win.CopyMemory(P, Buf, Count); Win.VirtualProtect(P, Count, Temp, NIL); END; // .procedure WriteAtCode PROCEDURE HookCode(P: POINTER; NewAddr: POINTER; UseCall: BOOLEAN); VAR HookRec: THookRec; BEGIN IF UseCall THEN BEGIN HookRec.Opcode:=C_OPCODE_CALL; END // .if ELSE BEGIN HookRec.Opcode:=C_OPCODE_JUMP; END; // .else HookRec.Ofs:=INTEGER(NewAddr)-INTEGER(P)-C_UNIHOOK_SIZE; WriteAtCode(P, @HookRec, 5); END; // .procedure HookCode PROCEDURE Hook_SAG_2; BEGIN PByte(PINTEGER($699538)^+$4DF18)^:= 0; PByte(PINTEGER($699538)^+$4DF19)^:= 0; END; PROCEDURE Hook_SAG_1; ASSEMBLER; {$FRAME-} ASM PUSHAD PUSHFD CALL Hook_SAG_2 POPFD POPAD // old code from exe MOV EDX, $2917560 // PUSH $7792BF END; BEGIN HookCode(POINTER($7792B9), @Hook_SAG_1, C_HOOKTYPE_JUMP); END. 1) первым делом определяем место кода экзе куда мы вклиниваемся. Место можно определить шаманскими ритуалами с использованием программы IDA Pro + X-rays. Это самое сложное....В примере мы вклиниваемся по адресу $7792B9 который кстати не совсем верный (нам нужна процедура листания героев, а этот адрес срабатывает на любой лево-мышиный клик на экране старта карты). HookCode(POINTER($7792B9), @Hook_SAG_1, C_HOOKTYPE_JUMP); 2) далее HookCode(POINTER($7792B9), @Hook_SAG_1, C_HOOKTYPE_JUMP); отправляет нас в процедуру PROCEDURE Hook_SAG_1; В ней мы вызываем процедуру PROCEDURE Hook_SAG_2; путем CALL Hook_SAG_2 и не забываем выполнить исходный код который мы затерли своим хуком. а именно : выполняем MOV EDX, $2917560 и переход на следующую команду PUSH $7792BF 3) процедура PROCEDURE Hook_SAG_2; простая до ужаса: PByte(PINTEGER($699538)^+$4DF18)^:= 0; PByte(PINTEGER($699538)^+$4DF19)^:= 0; в ней просто обнуляем 2 элемента массива доступности героев (Оррин $4DF18, Валеска $4DF19). массив байтовый, начинается с адреса PINTEGER($699538)^+$4DF18. мы выковыриваем адрес смещения из $699538 и суммируем со вторым смещением $4DF18. по умолчанию в массиве все элементы = FF, если обнулить один элемент, то добавляется один герой из кампаний 4) далее распаковываем http://wog.nxt.ru/diakon/patchexe.rar и ищем патчер Дьякона, запускаем его с аргументом в командной строке (бросаем нужный геройский экзе в папку с патчер-экзе и указывает его как аргумент патчер-экзе). На выходе - пропатченный геройский экзе который будет искать в корневой папке героев dll с названием Test.dll 5) компилируем dll в Virtual Pascal (результат - Test.dll ) 6) бросаем Test.dll и патченный-геройский-экзе в корневую папку героев. 7) наслаждаемся результатом! -------------------- Постоянно играю на рейтинг www.heroes-III.com в онлайне через сервер GameRanger - в HoMM3 SOD или WT. Присоединяйтесь! Чужие подписи и аватары не читаю - отключил
|
|
|
|
19 Aug 2010, 18:17
Сообщение
#16
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз |
Arsenal.7z (5 Кб)
Позволяет покупать в Кузнице все БМ + устраняет обновление экрана мира, если игрок находится в экране города. -------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
|
19 Aug 2010, 18:43
Сообщение
#17
|
|
![]() Fattest man Сообщений: 4 669 Спасибо сказали: 2617 раз |
Я так понимаю, для Эры?
-------------------- |
|
|
|
19 Aug 2010, 18:47
(Сообщение отредактировал Master Of Puppets - 19 Aug 2010, 18:47)
Сообщение
#18
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз |
Да. Кидаем в EraPlugins - и всё.
-------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
|
19 Aug 2010, 18:50
Сообщение
#19
|
|
![]() Fattest man Сообщений: 4 669 Спасибо сказали: 2617 раз |
Master Of Puppets, если версия 1.8, то в Era/Plugins
-------------------- |
|
|
|
19 Aug 2010, 18:54
(Сообщение отредактировал Master Of Puppets - 19 Aug 2010, 18:54)
Сообщение
#20
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз |
...скомпилированная с {$DEFINE ERA2}. Я не стал менять расположение ресурсов.
Енто... работает? -------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
|
![]() ![]() |
| Текстовая версия | Сейчас: 13 January 2026 - 04:50 |
|
Copyright by Алексей Крючков
Programming by Degtyarev Dmitry |
|