Дьякон 
 
 
		
		
		
			
			
			 
			
Posts: 395 
	
		
	 | 
	
		
			
			 
			
				Вот кстати адреса для СоДа, хотя может уже кто-то и выкладывал: 
 
63AC58 - 5% урон за каждую единицу атаки 
63AC28 - 300% - максимальный урон от базового 
63B8C0 - 2.5% снижение урона за каждую единицу защиты 
63AC50 - 100% база для вычитания урона 
63B8B8 - 30% минимальный урон 
 
все данные типа dq
			 
			
			
  
Страус труп (с) Бьерн
			
		 |  
	 
 | 
	| 04.03.2015 15:41 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 04.03.2015 21:27 | 
	
		
	 | 
	
		
		gamecreator 
 
 
		
		
		
			
			
			
 
 
			
Posts: 7107 
	
		
	 | 
	
		
 | 
	| 04.03.2015 23:57 | 
	
		
	 | 
	
		
		major 
 
 
		
		
		
			
			
			 
			
Posts: 147 
	
		
	 | 
	
		
			
			 
			
				 (04.03.2015 23:57)gamecreator Wrote:   (03.03.2015 12:10)major Wrote:  Подскажите, где найти функцию регенерации эликсира жизни. В воге/эре она подменяет стандартную, и вместо 50 хп регенит какой-то мусор, как мне кажется. 
Посмотри, по адресу 0x446BD6 вызывается какая-то. Это подменяет Вог. После подмены там натуральный реген + опыт отрядов. 
Да, это я и нашел, а вот чем это подменяет вог, не могу найти.
			  
			
			
			
		 |  
	 
 | 
	| 05.03.2015 19:21 | 
	
		
	 | 
	
		
		gamecreator 
 
 
		
		
		
			
			
			
 
 
			
Posts: 7107 
	
		
	 | 
	
		
 | 
	| 05.03.2015 19:49 | 
	
		
	 | 
	
		
		major 
 
 
		
		
		
			
			
			 
			
Posts: 147 
	
		
	 | 
	
		
			
			 
			
				Спасибо, более-менее разобрался. 
Такой вопрос. Никогда не писал 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 | 
	
		
	 | 
	
		
		gamecreator 
 
 
		
		
		
			
			
			
 
 
			
Posts: 7107 
	
		
	 | 
	
		
 | 
	| 09.03.2015 15:43 | 
	
		
	 | 
	
		
		feanor 
 
 
		
		
		
			
			
			 
			
Posts: 624 
	
		
	 | 
	
		
			
			 
			
				У меня сделано как-то так 
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 | 
	
		
	 | 
	
		
		major 
 
 
		
		
		
			
			
			 
			
Posts: 147 
	
		
	 | 
	
		
			
			 
			
				Для таблицы же тоже место выделить надо в экзешнике? Что значит DLL_PROCESS_ATTACH, т.е. каким образом это сделать?
			 
			
			
			
		 |  
	 
 | 
	| 09.03.2015 19:04 | 
	
		
	 | 
	
		
		gamecreator 
 
 
		
		
		
			
			
			
 
 
			
Posts: 7107 
	
		
	 | 
	
		
 | 
	| 09.03.2015 19:10 | 
	
		
	 | 
	
		
		Дьякон 
 
 
		
		
		
			
			
			 
			
Posts: 395 
	
		
	 | 
	
		
			
			 
			
				Процедура расчета для дипломатии: 
0x4A73B0 
 
Коэффициенты для расчета Power_Factor из ФизМига (см. со стр. 303) 
63E500  - 7 
63AC50 - 1 
63B9E0 - 2 
63AC70 - 0,5 
63E4F8 - 0,333
			 
			
			
  
Страус труп (с) Бьерн
			
		 |  
	 
 | 
	| 10.03.2015 18:51 | 
	
		
	 | 
	
		
		major 
 
 
		
		
		
			
			
			 
			
Posts: 147 
	
		
	 | 
	
		
			
			 
			
				В коде феанора все более-менее понятно, но есть пара вопросов. 
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 | 
	
		
	 | 
	
		
		gamecreator 
 
 
		
		
		
			
			
			
 
 
			
Posts: 7107 
	
		
	 | 
	
		
 | 
	| 11.03.2015 14:08 | 
	
		
	 | 
	
		
		feanor 
 
 
		
		
		
			
			
			 
			
Posts: 624 
	
		
	 | 
	
		
			
			 
			
			
			
			
				
(This post was last modified: 11.03.2015 15:12 by feanor.)
 
			 
		 |  
	 
 | 
	| 11.03.2015 15:12 | 
	
		
	 | 
	
		
		gamecreator 
 
 
		
		
		
			
			
			
 
 
			
Posts: 7107 
	
		
	 | 
	
		
 | 
	| 11.03.2015 15:56 | 
	
		
	 |