![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#61
|
|
![]() God Сообщений: 267 Спасибо сказали: 25 раз ![]() |
Ха! https://sc-cdn.scaleengine.net/i/fd84d33a46...b7d7a4c5d61.png
Ибо 2й файл так же не открылся, который в архиве. На стек оверфлоу нашел решение) После этой галочки - всё завелось А базу скачал. Ща покурю её.. |
|
|
![]()
Сообщение
#62
|
|
![]() God Сообщений: 267 Спасибо сказали: 25 раз ![]() |
Где все эти данные посмотреть? Для любого замка... Идея как менять зависимости ясна. Но вот где код замка взять - не понятно. Посмотреть адреса можно в базе для IDA HoMM3 (© sergroj) Скачал базу. Открыл (кстати, 5я версия ругается, мол качай более новую версию, что бы открыть этот файл) Руководствуюсь следующей логикой. Для инферно/замка/оплота я знаю уже адресса. Соотв пойму как для них он указывается, что бы для других замков по такому же принципу сделать... Ищу инферно и ожидаемое значение 0x4EBA39 или 0EBA39 Вот что есть для инферно толкового: https://sc-cdn.scaleengine.net/i/f3e8d729f4...c652988c3b3.png https://sc-cdn.scaleengine.net/i/ff0b691a62...5d1b837dbd2.png https://sc-cdn.scaleengine.net/i/7b758d014f...34e478acfea.png Но нигде не нашел ожидаемых значение. Я так понимаю, что не там или не то ищу... как мне найти адресс памяти? И заодно цепочки построек. Я так понимаю, ты откуда-то копировал их |
|
|
![]()
Сообщение
#63
|
|
![]() Immortal Сообщений: 589 Спасибо сказали: 891 раз ![]() |
Руководствуюсь следующей логикой. Для инферно/замка/оплота я знаю уже адресса. Соотв пойму как для них он указывается, что бы для других замков по такому же принципу сделать... Ищу инферно и ожидаемое значение 0x4EBA39 или 0EBA39 Но нигде не нашел ожидаемых значение. Я так понимаю, что не там или не то ищу... как мне найти адресс памяти? Нет. Ты ищешь в 0x5CAFE2. А нужно смотреть по адресу 0x4EBA38+1, в котором содержится указатель на таблицу зависимостей Инферно. Нажимаешь "G" и вбиваешь этот адрес. ![]() ![]() И если уж ты правишь HotA, то учитывай ее нововедения. В данном случае п.III -------------------- |
|
|
![]()
Сообщение
#64
|
|
![]() God Сообщений: 267 Спасибо сказали: 25 раз ![]() |
Спасибо! Получилось!
К примеру вот для темницы Код int BuildDepends_Dungeon[] = { 7, -1, 8, 7, -1, 9, 8, -1, 22, -1, 23, -1, 5, -1, 16, -1, 14, -1, 15, 14, -1, 17, 14, -1, 0, -1, 21, 0, -1, 1, 0, -1, 2, 1, -1, 3, 2, -1, 4, 3, -1, 11, 5, -1, 12, 11, 16, 14, 0, -1, 13, 12, 9, -1, 30, 7, -1, 18, 30, -1, 37, 30, -1, 19, 37, -1, 32, 30, -1, 39, 32, -1, 31, 30, -1, 38, 31, -1, 33, 32, 31, -1, 40, 33, -1, 34, 33, -1, 41, 34, -1, 35, 33, -1, 42, 35, -1, 36, 34, 35, 1, -1, 43, 36, 2, -1, 26, -1, -100 }; Код *(int*)0x4EBA5C = (int)BuildDepends_Dungeon; upd:Также, ты не только можешь, а даже желательно все твои правки из exe перенести в dll На примере 5% для специализаций (На счет правки навыков, оказалось не все так просто) + я что-то не смог получить адрес флоат переменной через С++, поэтому пришлось шить напрямую в пустое место в exe Код // правка интеллекта (2%) *(int*)0x4E4B88 = 0x3ca3d70a; // float 0.02f (записал в пустое место в exe) *(int*)0x4DA596 = 0x4E4B88; // при смерти героя *(int*)0x4D917E = 0x4E4B88; // при старте при настройке героя *(int*)0x4DDACC = 0x4E4B88; // процесс экшн в окне героя *(int*)0x4E4B69 = 0x4E4B88; // при открытии окна героя *(int*)0x4E20EC = 0x4E4B88; // в подневный расчет максимума маны вышеуказанное можно вставить после строки *(int*)0x4EBA39 = (int)BuildDepends_Inferno; Вот тут немного не ясно: 1. Есть же 0.02 значение. Вот оно. Адресс в exe - 0023AC60. Там хранится значение 0AD7A33C => 3CA3D70A == 0,02 2. зачем столько значений. При смерти героя, повседневный расчёт и т.д. Где они используются? Ибо я менял только в 1м месте и всё верно пересчитывалось И массивы навыков получилось перенести. Просто массив закинул и завелось: Код int SecondarySkills_Mysticism[] = { 1, 5, 10, 15 }; Код *(int*)0x4E41C8 = (int)SecondarySkills_Mysticism; |
|
|
![]()
Сообщение
#65
|
|
![]() God Сообщений: 267 Спасибо сказали: 25 раз ![]() |
И ещё момент с некромантией...
Сам навык изменить получилось. Вот как выглядит, может кому понадобится: А вот вернуть процент для амулета гробовщика - не вышло Как делал: 1) *(int*)0x4E3FAE = 0x3d4ccccd; 2) *(int*)0x4E3FAE = 0x63EAE4; //тут значение 0.05 3) *(int*)0x63EAE4 = 0x3d4ccccd; //в явном виде указываю значение *(int*)0x4E3FAE = 0x63EAE4; Никакой из вариантов не подошел. Вылетает игра с ошибкой после конца боя UPD: "Поговори с уточкой" в действии. Только отправил сообщение, сразу пришла идея перепроверить адресс памяти Цитата 004E3FAE: байт с номером Амулета Гробовщика 004E3FE7: указатель (на 63EAE4) на значение его бонуса (0.05) Итого надо юзать не 0x4E3FAE, а 0x4E3FE7. Тогда всё ок |
|
|
![]()
Сообщение
#66
|
|
![]() ---------------------- New_Life_of_Heroes ---------------------- Сообщений: 274 Спасибо сказали: 399 раз ![]() |
И ещё момент с некромантией... Проще затереть командами NOPS данный код в hota.dll начиная с адреса 1efd8 и не мучиться с компиляцией (тем более будет работать и без HD): -------------------- WoG + MoP + HoA + Forge + Bastion = ERA+
|
|
|
![]()
Сообщение
#67
|
|
![]() допустим, мяў Сообщений: 24 101 Спасибо сказали: 13407 раз ![]() |
Проще затереть командами NOPS данный код в hota.dll начиная с адреса 1efd8 и не мучиться с компиляцией (тем более будет работать и без HD): Что за nops? Может, nop? (90h)-------------------- Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская) |
|
|
![]()
Сообщение
#68
|
|
![]() 😸🧡✊✌️ Сообщений: 16 436 Спасибо сказали: 3310 раз ![]() |
Plural of nop, duh.
-------------------- Я слежу за тобой!
![]() ![]() Цитата Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел. Борис "Бонус" Репетур, "От винта!", выпуск 38. |
|
|
![]()
Сообщение
#69
|
|
![]() God Сообщений: 267 Спасибо сказали: 25 раз ![]() |
Проще затереть командами NOPS данный код в hota.dll начиная с адреса 1efd8 и не мучиться с компиляцией (тем более будет работать и без HD): Да ладно уже. Всё наоборот в ДЛЛ вынес. В exe'шнике осталась мелочь, которую сегодня довыношу В ДЛЛке намного проще, в случае чего править. Да и "ченжлог" будет перед глазами сразу) Но я пока что так и не понял, зачем Игрик менял в стольких местах бонус прироста интеллекта (я его кстати не менял у себя ![]() И может кто знает, как округление замедления сделать в большую сторону? Самый имбалансный навык сейчас |
|
|
![]()
Сообщение
#70
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20603 раза ![]() |
Цитата И может кто знает, как округление замедления сделать в большую сторону? Самый имбалансный навык сейчас А какое там округление же? Оно ведь урезает на фиксированную величину, которая забита в текстовике?
|
|
|
![]()
Сообщение
#71
|
|
![]() God Сообщений: 267 Спасибо сказали: 25 раз ![]() |
Цитата И может кто знает, как округление замедления сделать в большую сторону? Самый имбалансный навык сейчас А какое там округление же? Оно ведь урезает на фиксированную величину, которая забита в текстовике?нет. Там проценты замедления. И на эксперте 50% Вот и получается что скорость в 5 едениц уменьшается на 50% и получается 2.5. И далее округляется до 2х. Пробовал менять до 49%, что бы получилось 2.5+, в надежде что округлит до 3х, но нет, всё равно 2 вышло PS: или ты о каком-то другом текстовике говоришь? |
|
|
![]()
Сообщение
#72
|
|
![]() Immortal Сообщений: 589 Спасибо сказали: 891 раз ![]() |
2. зачем столько значений. При смерти героя, повседневный расчёт и т.д. Где они используются? Ибо я менял только в 1м месте и всё верно пересчитывалось Я совершенно не вдупляю смысловую нагрузку зыз feanor'a, но уверен, что тут это сообщение будет уместно. И ещё момент с некромантией... a) Сам навык изменить получилось. Вот как выглядит, может кому понадобится: б) ...А вот вернуть процент для амулета гробовщика - не вышло Говорю с гарантией, что п."а" работает некорректно (что легко проверить в ольке), отчего в следствии вытекает и п."б". (ибо флоат в инт так просто не запихнуть) Цитата И может кто знает, как округление замедления сделать в большую сторону? Самый имбалансный навык сейчас А какое там округление же? Оно ведь урезает на фиксированную величину, которая забита в текстовике?нет. Там проценты замедления. И на эксперте 50% Пробовал менять до 49% Там в функции идет result = x/100.0 (авось прокатит) В ДЛЛке намного проще, в случае чего править. Да и "ченжлог" будет перед глазами сразу) «То-то и оно» © -------------------- |
|
|
![]()
Сообщение
#73
|
|
![]() God Сообщений: 267 Спасибо сказали: 25 раз ![]() |
А чой то 49%? Попробуй 51%. Там в функции идет result = x/100.0 (авось прокатит) Тогда базовый был бы не 25%. Т.е. на сколько замедляет. Соотв если сделать 51, то замедлять станет ещё сильнее и уж наверняка 2 получится, при базовой 5ке И ещё в тему магии. Как раз закончил перенос всего и вся в ДЛЛку. Хочу чуть глубже копнуть: Как молитве сделать не +4, а +6 ко всем статам (имеется ввиду атака+защита)? А магия "неудача" что бы и минус мораль вешала... |
|
|
![]()
Сообщение
#74
|
|
![]() God Сообщений: 267 Спасибо сказали: 25 раз ![]() |
I.
По поводу замедления, представляю себе что выглядит оно именно так. Безо всяких расчётов длительности и прочее. Это лишнее... (напишу на PHP, но к языку не имеет никакого отношения. Просто на нём мне проще донести) Как вижу себе решение я.. их 3. Нормальное одно Я не уверен что там используется ООП. Но идея в целом такая. Сделать функцию которая всем делает +1 скорости юнитам, которые будут замедленные 2. То же самое, только проверять кратность скорость. Если остатка после деления нету - тогда игонрить. Ну это так. Более сложный вариант того же самого 3. именно залезть в ф-ю. И приведение типа заменить к нужному округлению Но моя проблема в том, что я понятия не имею куда лезть, что бы это сделать... II. Если с магией всё плохо и не получится внести изменения, то что насчёт навыков? Идея такая: Для дипломатии убрать возможность присоединения юнитов, при этом оставив более дешевый откуп и т.д. Но при посещении либы, для улучшеной дипломатии даётся +3 к статам. Эксперт +4. и некоторые бонусы от нового арта в ХотА (Мантия Дипломата). Что бы можно было откупаться от нейтральных войск (не супер важно). И что бы увеличивалась мощь армии в глазах монстров на 0-5-10-15% Это если полностью. Но начать бы хотел по чуть чуть - каким образом настроить навык, что бы при наличии его библиотека давала больше характеристик? PS: Дофига написал, надеюсь кто-то да осилит) |
|
|
![]()
Сообщение
#75
|
|
Immortal Сообщений: 798 Спасибо сказали: 555 раз ![]() |
Цитата Но моя проблема в том, что я понятия не имею куда лезть, что бы это сделать... Поставь брейкпоинт (hardware/write) на значение скорости юнита и посмотри, какие функции её меняют. |
|
|
![]()
Сообщение
#76
|
|
![]() God Сообщений: 267 Спасибо сказали: 25 раз ![]() |
|
|
|
![]()
Сообщение
#77
|
|
Immortal Сообщений: 798 Спасибо сказали: 555 раз ![]() |
Смотри в сторону combatManager.
Код H3CMAddr: array[SV_Complete_RU..SV_HotA, 0..2] of DWORD = (($69CB70, $13360, $13364), ($6993D0, $132B8, $132BC), ($699420, $132B8, $132BC), ($6387BC, $132B8, $132BC), ($699420, $132B8, $132BC)); Адрес текущего отряда можно получить так: combatManager + 1352 * (dword ptr [combatManager + 132BCh] + 21 * dword ptr [combatManager + 132B8h]) + 21708. Если развернуть, адрес отряда = dword ptr [699420h] + 1352 * (dword ptr [dword ptr [699420h] + 132BCh] + 21 * dword ptr [dword ptr [699420h] + 132B8h]) + 21708. Значения в скобках - координаты отряда на поле боя. Дальше смотрим структуру и ищем скорость. Здесь чисто интуитивно. Должны быть поля хитов, атаки и защиты и т.п. значения, которые помогут разобраться. |
|
|
![]()
Сообщение
#78
|
|
![]() Immortal Сообщений: 589 Спасибо сказали: 891 раз ![]() |
0x444A21 (замедление)
0x4A2EF0 (функция посещения библиотеки) Цитата Как молитве сделать не +4, а +6 ко всем статам (имеется ввиду атака+защита)? Бонусы молитвы прописаны в "SPTRAITS.TXT". Цитата А магия "неудача" что бы и минус мораль вешала... Нужен хук в 0x4449A7 *(int*)(c->esi + 1152) = c->edi; -------------------- |
|
|
![]()
Сообщение
#79
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20603 раза ![]() |
Чо там искать-то, все есть
в структуре стека в битве есть поле множителя (SlowMul в вогобазе), которое устанавливается при касте скорости и потом используется как коэффициент для актуальной скорости в combatMonster_00448560 (что-то с определением достижимости цели, что ли) и combatMonster_GetSpeed (004489F0, собственно расчет скорости) |
|
|
![]()
Сообщение
#80
|
|
Immortal Сообщений: 798 Спасибо сказали: 555 раз ![]() |
2feanor: ) Рубишь энтузиазм на корню.
CreatureAddr = dword ptr [699420h] + 1352 * (dword ptr [dword ptr [699420h] + 132BCh] + 21 * dword ptr [dword ptr [699420h] + 132B8h]) + 21708. Например, CreatureAddr + 34h - тип монстра CreatureAddr + 4Сh - кол-во монстров Даю способ, как на лету поменять ) Ищем скорость, ставим брейкпоинт и выходим, надеюсь, на Цитата 0x444A21 (замедление) То, что известно всем, это хорошо, но человек хотел метод узнать, если я правильно понял. |
|
|
![]() ![]() |
Текстовая версия | Сейчас: 28 September 2025 - 09:21 |
Copyright by Алексей Крючков
![]() Programming by Degtyarev Dmitry |
|