| Дьякон   
 Posts: 395
 
 | 
			| 
 
				Вот кстати адреса для СоДа, хотя может уже кто-то и выкладывал:
 63AC58 - 5% урон за каждую единицу атаки
 63AC28 - 300% - максимальный урон от базового
 63B8C0 - 2.5% снижение урона за каждую единицу защиты
 63AC50 - 100% база для вычитания урона
 63B8B8 - 30% минимальный урон
 
 все данные типа dq
 
 Страус труп (с) Бьерн
 |  | 
	| 04.03.2015 15:41 |  | 
	
		| Berserker   
   
   Posts: 16786
 
 |  | 
	| 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,482F905C 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 |  |