Current time: 23.03.2024, 14:10 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Исследование героев
» туториал(ы)
Author Message
Дьякон Offline

Posts: 392
Post: #556

Вот кстати адреса для СоДа, хотя может уже кто-то и выкладывал:

63AC58 - 5% урон за каждую единицу атаки
63AC28 - 300% - максимальный урон от базового
63B8C0 - 2.5% снижение урона за каждую единицу защиты
63AC50 - 100% база для вычитания урона
63B8B8 - 30% минимальный урон

все данные типа dq


Страус труп (с) Бьерн
04.03.2015 15:41
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #557

У приведения не полный реген, а очков 35, кажется.

Дьякон Wrote:Вот кстати адреса для СоДа, хотя может уже кто-то и выкладывал:

63AC58 - 5% урон за каждую единицу атаки
63AC28 - 300% - максимальный урон от базового
63B8C0 - 2.5% снижение урона за каждую единицу защиты
63AC50 - 100% база для вычитания урона
63B8B8 - 30% минимальный урон


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
04.03.2015 21:27
Find all posts by this user Quote this message in a reply
gamecreator Offline

Posts: 7107
Post: #558

(03.03.2015 12:10)major Wrote:  Подскажите, где найти функцию регенерации эликсира жизни. В воге/эре она подменяет стандартную, и вместо 50 хп регенит какой-то мусор, как мне кажется.
Посмотри, по адресу 0x446BD6 вызывается какая-то. Это подменяет Вог. После подмены там натуральный реген + опыт отрядов.


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
04.03.2015 23:57
Find all posts by this user Quote this message in a reply
major Offline

Posts: 129
Post: #559

(04.03.2015 23:57)gamecreator Wrote:  
(03.03.2015 12:10)major Wrote:  Подскажите, где найти функцию регенерации эликсира жизни. В воге/эре она подменяет стандартную, и вместо 50 хп регенит какой-то мусор, как мне кажется.
Посмотри, по адресу 0x446BD6 вызывается какая-то. Это подменяет Вог. После подмены там натуральный реген + опыт отрядов.
Да, это я и нашел, а вот чем это подменяет вог, не могу найти.
05.03.2015 19:21
Find all posts by this user Quote this message in a reply
gamecreator Offline

Posts: 7107
Post: #560

Так запусти Вог, он и подменит этот вызов на свой. Ничего искать тут не надо.
Если надо, то можно бинарный патч сделать, который бы это отключал.


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
05.03.2015 19:49
Find all posts by this user Quote this message in a reply
major Offline

Posts: 129
Post: #561

Спасибо, более-менее разобрался.
Такой вопрос. Никогда не писал dll. Может кто-нибудь показать на простом примере, как это делается? Допустим, расширить список существ с атакой-возвратом. Т.е. не расширить на всех существ, а просто добавить доп. проверки.
Code:
2F9059 CMP EAX,48
2F905C JE SHORT 2F90BB
2F905E CMP EAX,49
2F9061 JE SHORT 2F90BB
2F9063 CMP EAX,9B
2F9068 JE SHORT 2F908B
Добавить сюда проверку на 44h и 45h.
Или, через ерм_хукер.
(This post was last modified: 09.03.2015 15:12 by major.)
09.03.2015 15:09
Find all posts by this user Quote this message in a reply
gamecreator Offline

Posts: 7107
Post: #562

Проще расширить на всех существ. Думаю, даже поместится вместо оригинального кода. Что-то типа
Code:
cmp [таблица+eax], 0
je short 2f908b
Перезаписываешь это в DLL_PROCESS_ATTACH или OnAfterWog.


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
09.03.2015 15:43
Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 622
Post: #563

У меня сделано как-то так

Code:
#include "targetver.h"

#include <windows.h>
#include <stdlib.h>
#include <stdio.h>

#include "..\..\include\patcher_x86_commented.hpp"
#include "..\..\include\HotA\HoMM3.h"
#include "..\..\include\era.h"

Patcher * globalPatcher;
PatcherInstance *patcher;

int __stdcall StrikeAndReturn (LoHook* h, HookContext* c)
{
    int unit = c->eax;


    if (advanced_properties[unit].strike_n_ret)
    {
        if(o_CreatureInfo[unit].flags &1)
            c->return_address = 0x75E08B;
        else
            c->return_address = 0x75E0BB;
    }
    else
    {
        c->return_address = 0x75E06A;
    }
    return NO_EXEC_DEFAULT;
}


int __stdcall StrikeAndReturnButton (LoHook* h, HookContext* c)
{
    int unit = *(int*)(c->ebp-4);
    if(advanced_properties[unit].strike_n_ret)
    {
        c->return_address = 0x762969;
    }
    else
    {
        c->return_address = 0x762955;
    }
    return NO_EXEC_DEFAULT;
}


void __stdcall PatchIt (PEvent e)
{
        patcher->WriteLoHook(0x75E059,(void*)StrikeAndReturn);
        patcher->WriteLoHook(0x762940,(void*)StrikeAndReturnButton);
}

BOOL APIENTRY DllMain( HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
    if (ul_reason_for_call == DLL_PROCESS_ATTACH)
    {
        globalPatcher = GetPatcher();
        patcher =  globalPatcher->CreateInstance("h2sw_creatures");
        ConnectEra();
        RegisterHandler(PatchIt,"OnAfterCreateWindow");
    }
    return TRUE;
}

правда, я еще не проверял))
(This post was last modified: 09.03.2015 18:28 by feanor.)
09.03.2015 18:27
Find all posts by this user Quote this message in a reply
major Offline

Posts: 129
Post: #564

Для таблицы же тоже место выделить надо в экзешнике? Что значит DLL_PROCESS_ATTACH, т.е. каким образом это сделать?
09.03.2015 19:04
Find all posts by this user Quote this message in a reply
gamecreator Offline

Posts: 7107
Post: #565

Не обязательно в экзешнике, в твоей длл тоже можно. Что такое DLL_PROCESS_ATTACH у feanorа в примере очень понятно написано.


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
09.03.2015 19:10
Find all posts by this user Quote this message in a reply
Дьякон Offline

Posts: 392
Post: #566

Процедура расчета для дипломатии:
0x4A73B0

Коэффициенты для расчета Power_Factor из ФизМига (см. со стр. 303)
63E500 - 7
63AC50 - 1
63B9E0 - 2
63AC70 - 0,5
63E4F8 - 0,333


Страус труп (с) Бьерн
10.03.2015 18:51
Find all posts by this user Quote this message in a reply
major Offline

Posts: 129
Post: #567

В коде феанора все более-менее понятно, но есть пара вопросов.
1. advanced_properties[unit].strike_n_ret - это свойство юнита определено где-то ранее?
2.
Code:
#include "targetver.h"

#include <windows.h>
#include <stdlib.h>
#include <stdio.h>

#include "..\..\include\patcher_x86_commented.hpp"
#include "..\..\include\HotA\HoMM3.h"
#include "..\..\include\era.h"
Чтобы скомпилировать, нужны все эти файлы?
11.03.2015 13:51
Find all posts by this user Quote this message in a reply
gamecreator Offline

Posts: 7107
Post: #568

Судя по всему, advanced_properties - просто новый массив из Хоты. Если тебе не хочется ничего расширять, то напиши свою проверку в условии, без массивов.


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
11.03.2015 14:08
Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 622
Post: #569

Quote:1. advanced_properties[unit].strike_n_ret - это свойство юнита определено где-то ранее?
да

Quote:Чтобы скомпилировать, нужны все эти файлы?
где-то я уже выкладывал свою папку с инклудами
https://dl.dropboxusercontent.com/u/6175...nclude.zip

а, и заодно сам пример (MSVS 2008)
https://dl.dropboxusercontent.com/u/6175...sample.zip

единственно что, я его написал, но еще не проверял в работе))
(This post was last modified: 11.03.2015 15:12 by feanor.)
11.03.2015 15:12
Find all posts by this user Quote this message in a reply
gamecreator Offline

Posts: 7107
Post: #570

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


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
11.03.2015 15:56
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group