| Kocmodecaht   
 Posts: 18
 
 | 
			| 
 
				Берсеркер будут ли новые города в ере? 1.9? и еще я тебя спросить хотел можно ли скачать с интернета вог 3.59 там написано на одном сайте то что он типо вышел скачивайте я подозреваю что там вирус вышел ли поправде вог 3.59?
			 |  | 
	| 15.07.2011 20:28 |  | 
	
		| Kocmodecaht   
 Posts: 18
 
 | 
			| 
 
				Берсеркер дай ссыль на город кремль если он вышел или на город рощу если он тоже вышел
 Заранее спасибо)
 
				
(This post was last modified: 15.07.2011 20:38 by Kocmodecaht.)
 |  | 
	| 15.07.2011 20:37 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 | 
			| 
 
				Нет. Нет. 
Плагин на С++
 
Code:
 #include <windows.h>#include "Era.cpp"
 
 #define ADV_MAP   37
 #define CTRL_LMB  4
 #define LMB_PUSH  12
 #define ERROR_SET 1
 
 _stdcall void OnAdventureMapLeftMouseClick (PEvent Event)
 {
 ExecErmCmd("CM:I?y1 F?y2 S?y3;");
 if ((y[1] == ADV_MAP) && (y[2] == CTRL_LMB) && (y[3] == LMB_PUSH))
 {
 ExecErmCmd("CM:R0 P?y1/?y2/?y3;");
 ExecErmCmd("UN:Ey1/y2/y3;");
 if (f[1])
 {
 ExecErmCmd("UN:Oy1/y2/y3/1;");
 ExecErmCmd("IF:L^{~red}Object was deleted!{~}^;");
 }
 }
 }
 
 extern "C" __declspec(dllexport) BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID lpReserved)
 {
 if (reason == DLL_PROCESS_ATTACH)
 {
 DisableThreadLibraryCalls(hInst);
 ConnectEra();
 RegisterHandler(OnAdventureMapLeftMouseClick, "OnAdventureMapLeftMouseClick");
 }
 return TRUE;
 };
 Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
 Поддержать проект
 
 |  | 
	| 15.07.2011 20:57 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 15.07.2011 21:31 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 15.07.2011 22:04 |  | 
	
		| feanor   
 Posts: 624
 
 | 
			| 
 
				Вот есть функции, которые возвращают double (соответственно, не в eax, а в st0).  Результат их выполнения через SN:E и v1 не получить ведь - можно это поправить?
 Вариант правки - расширить второй параметр в SN:E (4 - pascal, возвращающий дабл, 5 - такой же stdcall ,..)
 |  | 
	| 16.07.2011 01:52 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 | 
			| 
 
				Как оказалось, Сав несколько переусложнил задачу. К счастью, ЗВС уже внёс более 50 правок, корректирую смещения на новую таблицу архивов (размер: 100) и индексов (по типам лодов). Таким образом задача гораздо проще, чем кажется и основной код не связан с Героями. Завёл целый модуль, но набралось только 88 строк ) 
В общем со второго раза запустилась автозагрузка, тестирую.
 Quote:Вот есть функции, которые возвращают double (соответственно, не в eax, а в st0).  Результат их выполнения через SN:E и v1 не получить ведь - можно это поправить?Вариант правки - расширить второй параметр в SN:E (4 - pascal, возвращающий дабл, 5 - такой же stdcall ,..)
 
Что ж это за функции? В Винапи есть примеры? Первый раз слышу о возврате через регистры сопроцессора. Может быть EAX:EDX? 
Вариант приемлимый.
			
 Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
 Поддержать проект
 
 |  | 
	| 16.07.2011 04:02 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 16.07.2011 04:27 |  | 
	
		| feanor   
 Posts: 624
 
 | 
			| 
 
				Quote:Что ж это за функции? 
Да хотя бы героевские функции типа double __thiscall sub_4E3F40(int this, char a2) - определение процентовки некромантии.
 
Правда, как плавающую 64-битную точку через v1 возвращать? Только если писать в v1:v2 и предоставлять переходники типа "вернуть значение, умноженное на n и округленное до целого".
 Quote:Первый раз слышу о возврате через регистры сопроцессора.http://progclub.ru/?p=1596 
				
(This post was last modified: 16.07.2011 08:53 by feanor.)
 |  | 
	| 16.07.2011 07:30 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 16.07.2011 14:52 |  | 
	
		| feanor   
 Posts: 624
 
 | 
			| 
 
				Quote:Я могу возвращать её обрезанной до single 
а как, кстати, отличать, когда возвращается сингл, а когда - дабл?
			 |  | 
	| 16.07.2011 15:02 |  | 
	
		| etoprostoya   
 Posts: 1809
 
 | 
			| 
 
				Мне кажется, что в Героях используется исключительно 32-бит float. Просто не вижу причин для использования двойной точности. 
Да и ERM работает, насколько я знаю, только с числами с плавающей точкой одинарной точности. 
Пока не доказано обратное, можно считать, что сингл.   
				
(This post was last modified: 16.07.2011 17:43 by etoprostoya.)
 |  | 
	| 16.07.2011 17:42 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 16.07.2011 18:02 |  | 
	
		| baratorch   
 Posts: 197
 
 | 
			| 
 
				Quote:в Героях используется исключительно 32-бит float 
ничего опровергающего это утверждение в коде игры не встречал.
			 |  | 
	| 16.07.2011 18:24 |  | 
	
		| etoprostoya   
 Posts: 1809
 
 | 
			| 
 
				Сопроцессор меняет float и double при вызове функции uint32 _control87(uint32 new, uint32 mask). Думаю, Ида её легко найдёт и вызовов этой функции будет мало - один, скорее всего. 
Проверить можно с помощью uint32 _status87(void). Результат по маске _MCW_PC и сравнить с нужным битом (53 бита - double, 24 бита - float)
 
Code:
 #define _MCW_PC         0x00030000              /* Precision Control */#define _PC_64          0x00000000              /*    64 bits */
 #define _PC_53          0x00010000              /*    53 bits */
 #define _PC_24          0x00020000              /*    24 bits */
 |  | 
	| 16.07.2011 18:37 |  |