IPB

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

29 страниц V  « < 16 17 18 19 20 > »   
Reply to this topicStart new topic
> Мод на ХотА
AlexSpl
сообщение 28 Dec 2016, 21:05 (Сообщение отредактировал AlexSpl - 28 Dec 2016, 21:28)
Сообщение #341

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




Ну, для начала.

Есть гекс с координатами (x, y), на котором расположен отряд. Описания полей combatManager я не встречал, так что пишу только то, что знаю.

Код
int cmAddr = *(int*)0x699420;
int x = *(int*)(cmAddr + 0x132B8);
int y = *(int*)(cmAddr + 0x132BC); // или наоборот ))
int creatureAddr = cmAddr + 1352 * (x + 21 * y) + 21708;



Теперь находим, где в структуре отряда хранится его скорость, ставим hardware брейкпоинт на запись, начинаем бой и попадаем в то место кода, где скорость (пере)записывается.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
DedMorozzz
сообщение 28 Dec 2016, 21:25
Сообщение #342

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




Цитата(AlexSpl @ 28 Dec 2016, 20:05) *
Ну, для начала.

Есть гекс с координатами (x, y), на котором расположен отряд. Описания полей combatManager я не встречал, так что пишу только то, что знаю.

Код
int cmAddr = *(int*)0x699420;
int x = *(int*)(cmAddr + 0x132B8);
int y = *(int*)(cmAddr + 0x132BC); // или наоборот ))
int creatureAddr = cmAddr + 1356 * (x + 21 * y) + 21708;


Теперь находим, где в структуре отряда хранится его скорость, ставим hardware брейкпоинт на запись, начинаем бой и попадаем в то место кода, где скорость (пере)записывается.


Пытаюсь сопоставить инфу, по поводу цифр. Я так понял идея взять гексы и проверить войска. Если там есть, тем мобам увеличить скорость?
Открыл ЕРМ хелпер, там есть айдишники гексов - https://sc-cdn.scaleengine.net/i/893cd4bbe6...194fdf2d584.png их стоит брать?

Так же, что такое 1356/21/21708? Пока что даже не догадываюсь
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 28 Dec 2016, 21:27 (Сообщение отредактировал AlexSpl - 28 Dec 2016, 21:29)
Сообщение #343

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




1352. Исправил. 1356 - для "Полного Собрания" от "Буки".
Go to the top of the pageAdd Nick
 
+Quote Post
DedMorozzz
сообщение 28 Dec 2016, 21:31
Сообщение #344

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




так а что это за цифры: 1352/21/21708?
Go to the top of the pageAdd Nick
 
+Quote Post
igrik
сообщение 28 Dec 2016, 21:44 (Сообщение отредактировал igrik - 28 Dec 2016, 21:45)
Сообщение #345

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




21708 - смещение от комбат мэнеджера к стекам
1352 - размер структуры боевого стека
21 - количество стеков для одной стороны. Всего 41

В ерм-хелпе масса информации, которую можно применять и для хоты. Арты, объекты, герои, номера зданий и т.п. Но конечно же не всё. Гексы поля боя одни для всех версий героев.

Да и вообще. В посте feanora (я давал ссылку "как создать dll") там же инклуды есть. Чё вы ими то не пользуетесь?


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


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 28 Dec 2016, 21:45 (Сообщение отредактировал AlexSpl - 28 Dec 2016, 21:58)
Сообщение #346

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




Короче, начал проверять. Всё, оказывается, не так, как мне казалось )

Код
int cmAddr = *(int*)0x699420;
int side = *(int*)(cmAddr + 0x132B8);
int unitNumber = *(int*)(cmAddr + 0x132BC);
int unitAddr = cmAddr + 1352 * (unitNumber + 21 * side) + 21708;


side - сторона (0 - левая, 1 - правая)
unitNumber - номер отряда в армии (начиная с 0).

Теперь, вроде, правильно )


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
DedMorozzz
сообщение 28 Dec 2016, 22:14 (Сообщение отредактировал DedMorozzz - 28 Dec 2016, 22:23)
Сообщение #347

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




Цитата(igrik @ 28 Dec 2016, 20:44) *
Да и вообще. В посте feanora (я давал ссылку "как создать dll") там же инклуды есть. Чё вы ими то не пользуетесь?


Я тогда не знал что это такое и как это готовить, да и сейчас не знаю ):
Вот полез, открыл... да, те же оффсет для бонуса морали нашел, который спрашивал, но явно не основной функционал
Т.е.что брать из инклудов - пока не понимаю...

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

Цитата(AlexSpl @ 28 Dec 2016, 20:45) *
Короче, начал проверять. Всё, оказывается, не так, как мне казалось )

Код
int cmAddr = *(int*)0x699420;
int side = *(int*)(cmAddr + 0x132B8);
int unitNumber = *(int*)(cmAddr + 0x132BC);
int unitAddr = cmAddr + 1352 * (unitNumber + 21 * side) + 21708;


side - сторона (0 - левая, 1 - правая)
unitNumber - номер отряда в армии (начиная с 0).

Теперь, вроде, правильно )

Я правильно понимаю, что данный код получает всех юнитов за левую сторону. Без смещения?

Т.е. по логике вещей, если смещение модификатора скорости это 1224, то скорость юнита будет:
(unitAddr + 1224) ?


И я хук вешаю на адрес (0x4AD163) это ф-я Battle. Верный адрес? (забегая наперёд, так вылетает, если код выше поставить на этот адрес)
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 28 Dec 2016, 22:27
Сообщение #348

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




Вроде нашёл. Как в базе IDA называется функция sub_43D450?
Go to the top of the pageAdd Nick
 
+Quote Post
DedMorozzz
сообщение 28 Dec 2016, 22:35
Сообщение #349

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




.text:0043D450 combatMonster_0043D450 proc near
оно?
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 28 Dec 2016, 22:43
Сообщение #350

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




Значит, не обозвали. Она инициализирует отряды (43D490h). А вот здесь, похоже, бонусы к скорости добавляются: 4E666A.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
DedMorozzz
сообщение 28 Dec 2016, 22:53
Сообщение #351

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




Код
int __stdcall setTacticsUnitSpeed(LoHook* h, HookContext* c)
{
    *(int*)(c->esi+80) += 2;
    
    return EXEC_DEFAULT;
}


Код
_PI->WriteLoHook(0x4E666A, setTacticsUnitSpeed);


Напал архом, дало +2 скорости!
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 28 Dec 2016, 22:54
Сообщение #352

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




Попробуйте поставить LoHook на 43D492h:

Код
{
    ++*(int*)(c->edi + 80); // увеличиваем скрость всех отрядов на +1
    return EXEC_DEFAULT;
}


Цитата
Напал архом, дало +2 скорости!

Ага, и там тоже можно добавлять.
Go to the top of the pageAdd Nick
 
+Quote Post
DedMorozzz
сообщение 28 Dec 2016, 23:06 (Сообщение отредактировал DedMorozzz - 28 Dec 2016, 23:06)
Сообщение #353

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




Код
int __stdcall setTacticsUnitSpeed(LoHook* h, HookContext* c)
{
    if(*(int*)(c->ecx + 201 + 19) > 0) {
        *(int*)(c->esi+80) += 2;
    }
    
    return EXEC_DEFAULT;
}


А вот так с учётом тактики. Ща буду искать как на 2м ходе убрать бонус
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 28 Dec 2016, 23:10
Сообщение #354

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




Цитата
А вот так с учётом тактики.

Ага.

Только бонус на все отряды, наверное, действует.
Go to the top of the pageAdd Nick
 
+Quote Post
DedMorozzz
сообщение 28 Dec 2016, 23:13 (Сообщение отредактировал DedMorozzz - 28 Dec 2016, 23:14)
Сообщение #355

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




Цитата(AlexSpl @ 28 Dec 2016, 22:10) *
Цитата
А вот так с учётом тактики.

Ага.

Только бонус на все отряды, наверное, действует.

ну да, на все. Мне ж так и надо...
Финальная цель - всем отрядам, при нападении на банк, при наличии тактики выдавать +1/2/3 скорости на 1й раунд боя
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 28 Dec 2016, 23:18
Сообщение #356

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




А отряды противника получают бонус к скорости?
Go to the top of the pageAdd Nick
 
+Quote Post
DedMorozzz
сообщение 28 Dec 2016, 23:20 (Сообщение отредактировал DedMorozzz - 28 Dec 2016, 23:22)
Сообщение #357

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




Цитата(AlexSpl @ 28 Dec 2016, 22:18) *
А отряды противника получают бонус к скорости?

нет, только если напасть на вражеского героя (проверял, когда ещё ограничение на тактику не добавил)
перепроверил с тактикой. Только герою у которого она есть (у 2го не было тактики. И бонуса тоже)
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 28 Dec 2016, 23:34
Сообщение #358

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




Так вообще логично.

Интересно, как узнать, что бой в банке проходит? Указатель на combatManager у нас есть.
Go to the top of the pageAdd Nick
 
+Quote Post
DedMorozzz
сообщение 28 Dec 2016, 23:36 (Сообщение отредактировал DedMorozzz - 28 Dec 2016, 23:39)
Сообщение #359

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




Цитата(AlexSpl @ 28 Dec 2016, 22:34) *
Так вообще логично.

Интересно, как узнать, что бой в банке проходит? Указатель на combatManager у нас есть.

Есть такая идея: если сторона левая и левый верхний гекс занят врагом - значит бой в банке (во время 1го раунда)

PS: Но я так понимаю, как-то по другому можно. Ибо и балисты нету и тактики и прочих моментов. И в центр кидает... явно можно как-то "правильнО" узнать
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 28 Dec 2016, 23:46 (Сообщение отредактировал AlexSpl - 28 Dec 2016, 23:58)
Сообщение #360

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




Можно ещё так.

Указатель на героя у нас тоже есть, значит, мы знаем

Цитата
// miu = map_item under hero
_dword_ miu_object_type; // +12


Т.е.
Код
if ( *(int*)(c->ecx + 12) == _банк_ ) { ... }


Попробуйте для сокровищницы гномов:

Код
int __stdcall setTacticsUnitSpeed(LoHook* h, HookContext* c)
{
    if ((*(int*)(c->ecx + 201 + 19) > 0) && (*(int*)(c->ecx + 12) == 16)) {
        *(int*)(c->esi + 80) += 2;
    }
    
    return EXEC_DEFAULT;
}
Go to the top of the pageAdd Nick
 
+Quote Post

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

 



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