IPB

Здравствуйте, гость ( Вход | Регистрация )

29 страниц V  « < 2 3 4 5 6 > »   
Reply to this topicStart new topic
> Мод на ХотА
DedMorozzz
сообщение 01 Dec 2016, 21:33
Сообщение #61

God
Сообщений: 267
Спасибо сказали: 25 раз




Ха! https://sc-cdn.scaleengine.net/i/fd84d33a46...b7d7a4c5d61.png
Ибо 2й файл так же не открылся, который в архиве. На стек оверфлоу нашел решение)
После этой галочки - всё завелось

А базу скачал. Ща покурю её..
Go to the top of the pageAdd Nick
 
+Quote Post
DedMorozzz
сообщение 02 Dec 2016, 00:01 (Сообщение отредактировал DedMorozzz - 02 Dec 2016, 01:21)
Сообщение #62

God
Сообщений: 267
Спасибо сказали: 25 раз




Цитата(igrik @ 01 Dec 2016, 19:20) *
Цитата(DedMorozzz @ 01 Dec 2016, 12:29) *
Где все эти данные посмотреть? Для любого замка... Идея как менять зависимости ясна. Но вот где код замка взять - не понятно.

Посмотреть адреса можно в базе для 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

Но нигде не нашел ожидаемых значение. Я так понимаю, что не там или не то ищу... как мне найти адресс памяти?
И заодно цепочки построек. Я так понимаю, ты откуда-то копировал их
Go to the top of the pageAdd Nick
 
+Quote Post
igrik
сообщение 02 Dec 2016, 09:32 (Сообщение отредактировал igrik - 02 Dec 2016, 09:34)
Сообщение #63

Immortal
Сообщений: 589
Спасибо сказали: 891 раз




Цитата(DedMorozzz @ 02 Dec 2016, 00:01) *
Руководствуюсь следующей логикой. Для инферно/замка/оплота я знаю уже адресса. Соотв пойму как для них он указывается, что бы для других замков по такому же принципу сделать...
Ищу инферно и ожидаемое значение 0x4EBA39 или 0EBA39
Но нигде не нашел ожидаемых значение. Я так понимаю, что не там или не то ищу... как мне найти адресс памяти?

Нет. Ты ищешь в 0x5CAFE2. А нужно смотреть по адресу 0x4EBA38+1, в котором содержится указатель на таблицу зависимостей Инферно.
Нажимаешь "G" и вбиваешь этот адрес.


И если уж ты правишь HotA, то учитывай ее нововедения. В данном случае п.III


--------------------


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
DedMorozzz
сообщение 03 Dec 2016, 12:38 (Сообщение отредактировал DedMorozzz - 03 Dec 2016, 13:07)
Сообщение #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;


Цитата(igrik @ 29 Nov 2016, 08:36) *
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;

Go to the top of the pageAdd Nick
 
+Quote Post
DedMorozzz
сообщение 03 Dec 2016, 15:53 (Сообщение отредактировал DedMorozzz - 03 Dec 2016, 15:57)
Сообщение #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. Тогда всё ок
Go to the top of the pageAdd Nick
 
+Quote Post
XEPOMAHT
сообщение 03 Dec 2016, 23:34
Сообщение #66

---------------------- New_Life_of_Heroes ----------------------
Сообщений: 274
Спасибо сказали: 399 раз




Цитата(DedMorozzz @ 03 Dec 2016, 15:53) *
И ещё момент с некромантией...


Проще затереть командами NOPS данный код в hota.dll начиная с адреса 1efd8 и не мучиться с компиляцией (тем более будет работать и без HD):



--------------------
WoG + MoP + HoA + Forge + Bastion = ERA+
Go to the top of the pageAdd Nick
 
+Quote Post
hippocamus
сообщение 04 Dec 2016, 01:12
Сообщение #67

допустим, мяў
Сообщений: 24 101
Спасибо сказали: 13407 раз




Цитата(XEPOMAHT @ 03 Dec 2016, 23:34) *
Проще затереть командами NOPS данный код в hota.dll начиная с адреса 1efd8 и не мучиться с компиляцией (тем более будет работать и без HD):
Что за nops? Может, nop? (90h)


--------------------
Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская)
Go to the top of the pageAdd Nick
 
+Quote Post
tolich
сообщение 04 Dec 2016, 12:35
Сообщение #68

😸🧡✊✌️
Сообщений: 16 436
Спасибо сказали: 3310 раз




Plural of nop, duh.


--------------------
Я слежу за тобой!
* tolic.narod.ru

Цитата
Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел.
Борис "Бонус" Репетур, "От винта!", выпуск 38.
Go to the top of the pageAdd Nick
 
+Quote Post
DedMorozzz
сообщение 04 Dec 2016, 12:37
Сообщение #69

God
Сообщений: 267
Спасибо сказали: 25 раз




Цитата(XEPOMAHT @ 03 Dec 2016, 22:34) *
Проще затереть командами NOPS данный код в hota.dll начиная с адреса 1efd8 и не мучиться с компиляцией (тем более будет работать и без HD):


Да ладно уже. Всё наоборот в ДЛЛ вынес. В exe'шнике осталась мелочь, которую сегодня довыношу
В ДЛЛке намного проще, в случае чего править. Да и "ченжлог" будет перед глазами сразу)

Но я пока что так и не понял, зачем Игрик менял в стольких местах бонус прироста интеллекта (я его кстати не менял у себя smile.gif Он был у меня проверочным навыком, что бы понять что я лишнего не зацепил, когда менял логистов)
И может кто знает, как округление замедления сделать в большую сторону? Самый имбалансный навык сейчас
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 04 Dec 2016, 12:51
Сообщение #70

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20603 раза




Цитата
И может кто знает, как округление замедления сделать в большую сторону? Самый имбалансный навык сейчас
А какое там округление же? Оно ведь урезает на фиксированную величину, которая забита в текстовике?
Go to the top of the pageAdd Nick
 
+Quote Post
DedMorozzz
сообщение 04 Dec 2016, 13:08 (Сообщение отредактировал DedMorozzz - 04 Dec 2016, 13:15)
Сообщение #71

God
Сообщений: 267
Спасибо сказали: 25 раз




Цитата(feanor @ 04 Dec 2016, 11:51) *
Цитата
И может кто знает, как округление замедления сделать в большую сторону? Самый имбалансный навык сейчас
А какое там округление же? Оно ведь урезает на фиксированную величину, которая забита в текстовике?

нет. Там проценты замедления. И на эксперте 50%
Вот и получается что скорость в 5 едениц уменьшается на 50% и получается 2.5. И далее округляется до 2х.
Пробовал менять до 49%, что бы получилось 2.5+, в надежде что округлит до 3х, но нет, всё равно 2 вышло

PS: или ты о каком-то другом текстовике говоришь?
Go to the top of the pageAdd Nick
 
+Quote Post
igrik
сообщение 04 Dec 2016, 18:13
Сообщение #72

Immortal
Сообщений: 589
Спасибо сказали: 891 раз




Цитата(DedMorozzz @ 03 Dec 2016, 12:38) *
2. зачем столько значений. При смерти героя, повседневный расчёт и т.д. Где они используются? Ибо я менял только в 1м месте и всё верно пересчитывалось

Я совершенно не вдупляю смысловую нагрузку зыз feanor'a, но уверен, что тут это сообщение будет уместно.

Цитата(DedMorozzz @ 03 Dec 2016, 15:53) *
И ещё момент с некромантией...
a) Сам навык изменить получилось. Вот как выглядит, может кому понадобится:
б) ...А вот вернуть процент для амулета гробовщика - не вышло

Говорю с гарантией, что п."а" работает некорректно (что легко проверить в ольке), отчего в следствии вытекает и п."б". (ибо флоат в инт так просто не запихнуть)

Цитата(DedMorozzz @ 04 Dec 2016, 13:08) *
Цитата(feanor @ 04 Dec 2016, 11:51) *
Цитата
И может кто знает, как округление замедления сделать в большую сторону? Самый имбалансный навык сейчас
А какое там округление же? Оно ведь урезает на фиксированную величину, которая забита в текстовике?

нет. Там проценты замедления. И на эксперте 50%
Пробовал менять до 49%
А чой то 49%? Попробуй 51%.
Там в функции идет result = x/100.0 (авось прокатит)

Цитата(DedMorozzz @ 04 Dec 2016, 12:37) *
В ДЛЛке намного проще, в случае чего править. Да и "ченжлог" будет перед глазами сразу)

«То-то и оно» ©


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
DedMorozzz
сообщение 04 Dec 2016, 20:48 (Сообщение отредактировал DedMorozzz - 04 Dec 2016, 21:16)
Сообщение #73

God
Сообщений: 267
Спасибо сказали: 25 раз




Цитата(igrik @ 04 Dec 2016, 17:13) *
А чой то 49%? Попробуй 51%.
Там в функции идет result = x/100.0 (авось прокатит)


Тогда базовый был бы не 25%. Т.е. на сколько замедляет. Соотв если сделать 51, то замедлять станет ещё сильнее и уж наверняка 2 получится, при базовой 5ке

И ещё в тему магии. Как раз закончил перенос всего и вся в ДЛЛку. Хочу чуть глубже копнуть:
Как молитве сделать не +4, а +6 ко всем статам (имеется ввиду атака+защита)?
А магия "неудача" что бы и минус мораль вешала...
Go to the top of the pageAdd Nick
 
+Quote Post
DedMorozzz
сообщение 05 Dec 2016, 12:20
Сообщение #74

God
Сообщений: 267
Спасибо сказали: 25 раз




I.
По поводу замедления, представляю себе что выглядит оно именно так. Безо всяких расчётов длительности и прочее. Это лишнее...
(напишу на PHP, но к языку не имеет никакого отношения. Просто на нём мне проще донести)



Как вижу себе решение я.. их 3. Нормальное одно
Я не уверен что там используется ООП. Но идея в целом такая. Сделать функцию которая всем делает +1 скорости юнитам, которые будут замедленные


2. То же самое, только проверять кратность скорость. Если остатка после деления нету - тогда игонрить. Ну это так. Более сложный вариант того же самого

3. именно залезть в ф-ю. И приведение типа заменить к нужному округлению

Но моя проблема в том, что я понятия не имею куда лезть, что бы это сделать...


II.
Если с магией всё плохо и не получится внести изменения, то что насчёт навыков? Идея такая:
Для дипломатии убрать возможность присоединения юнитов, при этом оставив более дешевый откуп и т.д.
Но при посещении либы, для улучшеной дипломатии даётся +3 к статам. Эксперт +4. и некоторые бонусы от нового арта в ХотА (Мантия Дипломата). Что бы можно было откупаться от нейтральных войск (не супер важно). И что бы увеличивалась мощь армии в глазах монстров на 0-5-10-15%
Это если полностью. Но начать бы хотел по чуть чуть - каким образом настроить навык, что бы при наличии его библиотека давала больше характеристик?

PS: Дофига написал, надеюсь кто-то да осилит)
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 05 Dec 2016, 12:58
Сообщение #75

Immortal
Сообщений: 798
Спасибо сказали: 555 раз




Цитата
Но моя проблема в том, что я понятия не имею куда лезть, что бы это сделать...

Поставь брейкпоинт (hardware/write) на значение скорости юнита и посмотри, какие функции её меняют.
Go to the top of the pageAdd Nick
 
+Quote Post
DedMorozzz
сообщение 05 Dec 2016, 13:02
Сообщение #76

God
Сообщений: 267
Спасибо сказали: 25 раз




Цитата(AlexSpl @ 05 Dec 2016, 11:58) *
Цитата
Но моя проблема в том, что я понятия не имею куда лезть, что бы это сделать...

Поставь брейкпоинт (hardware/write) на значение скорости юнита и посмотри, какие функции её меняют.


Вот... где и как это сделать?)
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 05 Dec 2016, 13:35 (Сообщение отредактировал AlexSpl - 05 Dec 2016, 13:39)
Сообщение #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. Значения в скобках - координаты отряда на поле боя. Дальше смотрим структуру и ищем скорость. Здесь чисто интуитивно. Должны быть поля хитов, атаки и защиты и т.п. значения, которые помогут разобраться.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
igrik
сообщение 05 Dec 2016, 14:06 (Сообщение отредактировал igrik - 05 Dec 2016, 15:24)
Сообщение #78

Immortal
Сообщений: 589
Спасибо сказали: 891 раз




0x444A21 (замедление)
0x4A2EF0 (функция посещения библиотеки)

Цитата
Как молитве сделать не +4, а +6 ко всем статам (имеется ввиду атака+защита)?

Бонусы молитвы прописаны в "SPTRAITS.TXT".
Цитата
А магия "неудача" что бы и минус мораль вешала...

Нужен хук в 0x4449A7
*(int*)(c->esi + 1152) = c->edi;


--------------------


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 05 Dec 2016, 14:16 (Сообщение отредактировал feanor - 05 Dec 2016, 14:18)
Сообщение #79

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20603 раза




Чо там искать-то, все есть

в структуре стека в битве есть поле множителя (SlowMul в вогобазе), которое устанавливается при касте скорости и потом используется как коэффициент для актуальной скорости в combatMonster_00448560 (что-то с определением достижимости цели, что ли) и combatMonster_GetSpeed (004489F0, собственно расчет скорости)


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 05 Dec 2016, 14:28 (Сообщение отредактировал AlexSpl - 05 Dec 2016, 14:43)
Сообщение #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 (замедление)


То, что известно всем, это хорошо, но человек хотел метод узнать, если я правильно понял.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post

29 страниц V  « < 2 3 4 5 6 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 28 September 2025 - 09:21
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика