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: 16788 
	
		
	 | 
	
		
			
			 
			
				Нет. Нет. 
Плагин на С++
 
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: 16788 
	
		
	 | 
	
		
 | 
	| 15.07.2011 21:31 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 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: 16788 
	
		
	 | 
	
		
			
			 
			
				Как оказалось, Сав несколько переусложнил задачу. К счастью, ЗВС уже внёс более 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: 16788 
	
		
	 | 
	
		
 | 
	| 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: 16788 
	
		
	 | 
	
		
 | 
	| 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: 16788 
	
		
	 | 
	
		
 | 
	| 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 | 
	
		
	 |