![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#1401
|
|
Member Сообщений: 97 Спасибо сказали: 80 раз ![]() |
Да - извини. Напутал с адресом. 0x4F0156 = 0x4F0516
Добавлено ([mergetime]1284897923[/mergetime]): Поправил в первом посте, чтоб людей с толку не сбивать больше. |
|
|
![]()
Сообщение
#1402
|
|
Immortal Сообщений: 2 413 Спасибо сказали: 4619 раз ![]() |
перед прыжком на 0x4F051B кроме ebp, esp как минимум нужно установить правильные значения esi и edi, т.к они используются далее после 0x4F051B.
попробовал прыгнуть (с 0x66 = загрузить игру) из адвенча менеджера - вроде работает нормально и память никуда не утекает. попробовал прыгнуть из менеджера обмена - в любой следующей начатой/загруженной игре, после срабатывания стартового события карты имеем активным диалог обмена между теми двумя героями (причем оно не отрисовывается пока мы с ним не повзаимодействуем) при закрытии этого окна обмена оказываемся в главном меню. попробовал прыгнуть из опций битвы - сразу после появления главного меню Игра вылетает при попытке обратиться к какому-то виртуальному методу какого-то несуществующего диалога. так что чтобы загрузиться из экрана битвы, надо хотя бы завершить битву и вернуться к главному окну менеджера обмена. Но всё равно спасибо большое за твое решение, Дьяк! В любом случае это шаг вперед! -------------------- |
|
|
![]()
Сообщение
#1403
|
|
Member Сообщений: 97 Спасибо сказали: 80 раз ![]() |
esi и edi вроде не используются. Я их специально обнулял и проверял. Адрес можно?
|
|
|
![]()
Сообщение
#1404
|
|
Immortal Сообщений: 2 413 Спасибо сказали: 4619 раз ![]() |
какой адрес?
вроде как на еди действительно пофиг, а вот еси должен быть равен 0 (далее по коду [697308] должен сравниваться именно с 0). Если еси будет равен 1 при джампе, мы перед тем как увидеть главное меню посмотрим видео проигрыша сценария. -------------------- |
|
|
![]()
Сообщение
#1405
|
|
Member Сообщений: 97 Спасибо сказали: 80 раз ![]() |
Ну вроде разобрался. Ща выложу свои соображения.
|
|
|
![]()
Сообщение
#1406
|
|
Member Сообщений: 97 Спасибо сказали: 80 раз ![]() |
И так. Есть в игре различные менеджеры которые обеспечивают различные функции игры. Так вот:
0x6992D0 dd -> heroWindowManager 0x699414 dd -> soundManager 0x699420 dd -> combatManager 0x699530 dd -> inputManager 0x6992B8 dd -> advManager 0x69954C dd -> townManager ну вроде все. advManager обнуляется автоматом. Т.к. выход происходит с карты приключений. Остальные должны обнулятся вручную. (Есно, если мы выходим из боя то нужно вдобавок обнулить combatManager). Итак. Данные адреса - это указатели на класс. Т.е. опишу как классы выглядят (это очень условно, чтоб понятно было как добраться до деструктора): struct Metod{ int Constructor; int Destructor; ................ }; struct CombatManager{ Metod met; ......... }*PMan; Т.е. чтоб добраться до адреса процедуры деструктора нужно: int AdressDestructora = PMan->met.Destructor; Ну вот - теперь вроде должно работать. Добавлено ([mergetime]1284922899[/mergetime]): Аргумент передаваемый в функцию деструктора - адресс по которому располагается класс менеджера. Т.е. в ecx должен лежать адрес класса перед вызовом. |
|
|
![]()
Сообщение
#1407
|
|
Member Сообщений: 97 Спасибо сказали: 80 раз ![]() |
И так итог:
по адресу: 0x4F0516 (это начало карты) ставим свой хук и запоминаем esp, edi, esi и ebp в переменные. Это нам нужно будет для выхода с карты. Это самое сложное. Теперь чтобы выйти с карты достаточно сделать jmp из любого места кода на адрес 0x4F051B перезаписав предварительно sp, edi, esi и ebp и положив по адресу 697728 код выхода. 0x66 - код выхода "загрузить игру" 0x6C - код выхода "главное меню". Обнулить нужные манагеры: 0x6992D0 dd -> heroWindowManager 0x699414 dd -> soundManager 0x699420 dd -> combatManager 0x699530 dd -> inputManager 0x69954C dd -> townManager На этом пожалуй все. Если чего вдруг и осталось то это мелочи должны быть. |
|
|
![]()
Сообщение
#1408
|
|
Member Сообщений: 97 Спасибо сказали: 80 раз ![]() |
Еще нашел 0x6992B0 dd -> mouseManager. Но вроде его обнулять не нужно.
|
|
|
![]()
Сообщение
#1409
|
|
Immortal Сообщений: 2 413 Спасибо сказали: 4619 раз ![]() |
для безглючного "загрузить игру" из окна опций битвы (BattleOptionsDlg) мне понадобилось следующее:
1. Вызов WindowManager->RemoveDialog(BattleOptionsDlg) понятно WindowManager = [0x6992D0] WindowManager::RemoveDialog = 0x602A60 BattleOptionsDlg = [0x694FE0] 2. вызов только лишь деструктора СombatManager 3. джамп по указанному Дьяком способу. именно из-за неисполнения пункта 1 происходило это: Цитата попробовал прыгнуть из опций битвы - сразу после появления главного меню Игра вылетает при попытке обратиться к какому-то виртуальному методу какого-то несуществующего диалога. То есть, после джампа диалог опций битвы, видимо, уничтожается, но не исключается из списка WindowManager'a Как я понял, мы должны ручками исключать из менеджера окон все простые диалоги, вызванные поверх окна како-го либо менеджера (приглючений, битвы, города, обмена, ...). а затем уже вызывать деструктор менеджера. Не знаю стоит ли перестраховываться и деструктить все подобные менеджеры или удалять только активные (окна которых висят поверх окна адвенча менеджера). Ну что ж, спустя 11 лет у нас наконец появятся долгожданные кнопки! Ура!! -------------------- |
|
|
![]()
Сообщение
#1410
|
|
Immortal Сообщений: 2 413 Спасибо сказали: 4619 раз ![]() |
Ан нет, глюки после данного способа все-таки есть, будем копать дальше...
-------------------- |
|
|
![]()
Сообщение
#1411
|
|
Member Сообщений: 97 Спасибо сказали: 80 раз ![]() |
Цитата(baratorch @ 20 Sep 2010, 00:13) для безглючного "загрузить игру" из окна опций битвы (BattleOptionsDlg) мне понадобилось следующее: 1. Вызов WindowManager->RemoveDialog(BattleOptionsDlg) понятно WindowManager = [0x6992D0] WindowManager::RemoveDialog = 0x602A60 BattleOptionsDlg = [0x694FE0] А если вызвать деструктор а потом конструктор. Не прокатит? Что за глюки? |
|
|
![]()
Сообщение
#1412
|
|
Immortal Сообщений: 2 413 Спасибо сказали: 4619 раз ![]() |
Уф! родил, наконец:
Цитата для безглючного "загрузить игру" из окна опций битвы (BattleOptionsDlg) мне понадобилось следующее: 1. Вызов WindowManager->RemoveDialog(BattleOptionsDlg) понятно WindowManager = [0x6992D0] WindowManager::RemoveDialog = 0x602A60 BattleOptionsDlg = [0x694FE0] 2. a) вызов функции 0x4B0950 с первым (ecx) аргументом [0x699550] и вторым аргументом СombatManager = [0x699420] эта функция вызывает 2-ю функцию из виртуальной таблицы менеджера битвы( - не совсем деструктор, скорее деактиватор) и меняет значения некоторых полей первого и второго аргументов. Если мы вместо этой 0x4B0950 функции просто вызовем деактиватор менеджера битвы, то после первой битвы следом начтого сценария невозможно будет продолжать игру. b) изменение значений полей AdventureManager = [0x6992B8]: *(int*)(AdventureManager + 536) = -1; *(int*)(AdventureManager + 540) = -1; в этих полях хранятся x и y координаты атакованной клетки, если их не установить в -1, то при рестарте сценария атакованное до этого существо на карте не будет анимировать - будет в позе обороны. в поле *(int*)(AdventureManager + 544) хранится z-координата атакованной клетки но ее изменение не требуется Цитата 3. джамп по указанному Дьяком способу. ничего лишнего в коде, работает чётко, утечек памяти нет, при сетевой игре кинутые игроки получают относительно адекватную реакцию игры. -------------------- |
|
|
![]()
Сообщение
#1413
|
|
Immortal Сообщений: 2 413 Спасибо сказали: 4619 раз ![]() |
!?
![]() -------------------- |
|
|
![]()
Сообщение
#1414
|
||||
![]() Hota Crew Сообщений: 11 597 Спасибо сказали: 9892 раза ![]() |
Вот! То, что было в 4ке но так не хватало в 3ке!
-------------------- |
|||
|
||||
![]()
Сообщение
#1415
|
|
![]() Freedom Fighter Сообщений: 1 852 Спасибо сказали: 4031 раз ![]() |
Оффтоп. Имхо, то что было в 4-ке и так не хватало в 3-ке это кОрОваны от жилищ...
-------------------- In this wild and woolly universe of ours, there are only three things you can count on: your brains, your bros, and your bike! |
|
|
![]()
Сообщение
#1416
|
|
Immortal Сообщений: 2 413 Спасибо сказали: 4619 раз ![]() |
Версия 2.50f
Прошу прощения у авторов проектов, ориентирующихся на ХД мод, за то что изменил структуру файлов и папок хайреза. Цитата [!] Изменена структура папок и файлов в \HiRezData (не совместима с более ранними версиями); файлы .def, .bmp, .txt, .fnt хранятся в \HiRezData\Common и \HiRezData\Packs\*; общие для всех версий игры настройки и опции хранятся в файле \HiRezData\HiRez.ini; специфические настройки разных версий и локализаций хранятся в \HiRezData\Packs\*\Pack.ini; [+] для разных версий игры теперь не требудется скачивать и устанавливать дополнительные файлы; [+] утилита Heroes3HDSetup.exe версии 2.50 стала удобнее и полезнее; [+] дополнительные кнопки "Загрузить игру", "Начать заново", "Главное Меню", "Выйти из игры" в окне опций битвы; [+] быстрое разделение/объединение отрядов в окне гарнизона; [+] для того чтобы играть случайные карты игре не требуются файлы h3blade.exe и Data\h3ab_*; [+] для игры за сопряжение и кампании клинка (AB) в Полном Собрании (Complete) не требуется наличие файла h3blade.exe; [+] файлы .fnt читаются игрой из \HiRezData\Common; [+] Текст в файле HiRez.txt для Польского Золтого Издания переведен на польский язык. [-] в окне обмена героев с в ключенным расширенным управлением армии не работало стандартное разделение отрядов по [shift]+клик; [-] баг поддержки 32-битного режима мог приводить к краху игры; [-] в Полном Собрании (Complete) не работала кнопка Об Авторах (Credits); [-] баг оригинальной игры: при наведении мыши и пкм на артефакт в рюкзаке в окне торговцев артефактами приводил к краху игры, если один первый или больше слотов были пусты. (теперь перед загрузкой окна торговцев в рюкзаке ликвидируются пробелы); скачать: https://sites.google.com/site/heroes3hd/rus/download на сайте появилась страничка "История изменений" (чейнджлог стартует с этой версии). -------------------- |
|
|
![]()
Сообщение
#1417
|
|
![]() FFuck_oFF Сообщений: 3 992 Спасибо сказали: 1395 раз ![]() |
baratorch, игра у меня виснет, когда играем через хамачи с другом, при передаче хода от него ко мне, если у меня в этот момент активное окно не игра, а другие приложения (например редактор карт - я карту строю или интернет эксплорер)
-------------------- http://heroes3towns.com/ Сайт Новых Городов
|
|
|
![]()
Сообщение
#1418
|
|
Newbie Сообщений: 10 Спасибо сказали: 8 раз ![]() |
На Воге и Эре при загрузке ругается на script00
|
|
|
![]()
Сообщение
#1419
|
|
![]() Арабская сволочь Сообщений: 162 Спасибо сказали: 27 раз ![]() |
у меня тоже на скрипт ругаеться только на другой
-------------------- Легендарный троль Алладин
|
|
|
![]()
Сообщение
#1420
|
|
![]() Immortal Сообщений: 1 468 Спасибо сказали: 1153 раза ![]() |
Неужели бараторч и в GetSpreadshit вставил хук...имхо вообще хайрезу нельзя хуки на подгрузку ресурсов делать.
-------------------- |
|
|
![]() ![]() |
Текстовая версия | Сейчас: 18 August 2025 - 18:00 |
Copyright by Алексей Крючков
![]() Programming by Degtyarev Dmitry |
|