totkotoriy 
 
 
		
		
		
			
			
			
 
 
			
Posts: 873 
	
		
	 | 
	
		
			
			 
			
				Может у кого есть рабочий код на с++ какого-либо хука, который затем передает управление ERM триггеру?
			 
			
			
  
Ты роешься в моих паках, но ты делаешь это без уважения...
			
		 |  
	 
 | 
	| 19.02.2012 13:00 | 
	
		
	 | 
	
		
		gamecreator 
 
 
		
		
		
			
			
			
 
 
			
Posts: 7107 
	
		
	 | 
	
		
 | 
	| 19.02.2012 13:22 | 
	
		
	 | 
	
		
		totkotoriy 
 
 
		
		
		
			
			
			
 
 
			
Posts: 873 
	
		
	 | 
	
		
			
			 
			
				 (19.02.2012 13:22)gamecreator Wrote:  так в Эре вроде есть функция, выполняющая ерм. вот с помощью нее и вызвать триггер. 
Как?
			  
			
			
  
Ты роешься в моих паках, но ты делаешь это без уважения...
			
		 |  
	 
 | 
	| 19.02.2012 13:24 | 
	
		
	 | 
	
		
		Sav 
 
 
		
		
		
			
			
			 
			
Posts: 2180 
	
		
	 | 
	
		
			
			 
			
				ExecErmCmd ("FUxxxx:P;");
			 
			
			
			
				
(This post was last modified: 19.02.2012 13:27 by Sav.)
 
			 
		 |  
	 
 | 
	| 19.02.2012 13:27 | 
	
		
	 | 
	
		
		totkotoriy 
 
 
		
		
		
			
			
			
 
 
			
Posts: 873 
	
		
	 | 
	
		
			
			 
			
				 (19.02.2012 13:27)Sav Wrote:  ExecErmCmd ("FUxxxx:P;"); 
Дык можете рабочий пример написать? А то я так долго мучатся буду. Что эта функция делает? Вызывает хук и запускает по нему триггер?
			  
			
			
  
Ты роешься в моих паках, но ты делаешь это без уважения...
			
		 |  
	 
 | 
	| 19.02.2012 14:01 | 
	
		
	 | 
	
		
		gamecreator 
 
 
		
		
		
			
			
			
 
 
			
Posts: 7107 
	
		
	 | 
	
		
 | 
	| 19.02.2012 14:26 | 
	
		
	 | 
	
		
		totkotoriy 
 
 
		
		
		
			
			
			
 
 
			
Posts: 873 
	
		
	 | 
	
		
			
			 
			
				 (19.02.2012 14:26)gamecreator Wrote:  функция выполняет ЕРМ-код. рабочий пример: 
ExecErmCmd ("FU12345:P;"); 
выполнит ЕРМ-код !!FU12345:P; 
А где взять era.cpp тогда? И надо ли восстанавливать данные затертого хука?
			  
			
			
  
Ты роешься в моих паках, но ты делаешь это без уважения...
			
		 |  
	 
 | 
	| 19.02.2012 14:43 | 
	
		
	 | 
	
		
		gamecreator 
 
 
		
		
		
			
			
			
 
 
			
Posts: 7107 
	
		
	 | 
	
		
 | 
	| 19.02.2012 14:58 | 
	
		
	 | 
	
		
		Sav 
 
 
		
		
		
			
			
			 
			
Posts: 2180 
	
		
	 | 
	
		
			
			 
			
				totkotoriy, не пойму, что тебе нужно. Я создавал триггер на паскале, но основная часть там - ассемблер, поэтому я могу без особых затрат времени перевести его на c++ и показать тебе код. Нужно?
			 
			
			
			
				
(This post was last modified: 19.02.2012 14:59 by Sav.)
 
			 
		 |  
	 
 | 
	| 19.02.2012 14:59 | 
	
		
	 | 
	
		
		totkotoriy 
 
 
		
		
		
			
			
			
 
 
			
Posts: 873 
	
		
	 | 
	
		
			
			 
			
				 (19.02.2012 14:59)Sav Wrote:  totkotoriy, не пойму, что тебе нужно. Я создавал триггер на паскале, но основная часть там - ассемблер, поэтому я могу без особых затрат времени перевести его на c++ и показать тебе код. Нужно? 
Да, я про это и говорю. Код хука на С++ я уже написал, мне нужен теперь рабочий код на ассемблере для вызова триггера в ERM.
			  
			
			
  
Ты роешься в моих паках, но ты делаешь это без уважения...
			
		 |  
	 
 | 
	| 19.02.2012 15:51 | 
	
		
	 | 
	
		
		gamecreator 
 
 
		
		
		
			
			
			
 
 
			
Posts: 7107 
	
		
	 | 
	
		
 | 
	| 19.02.2012 16:21 | 
	
		
	 | 
	
		
		Sav 
 
 
		
		
		
			
			
			 
			
Posts: 2180 
	
		
	 | 
	
		
 | 
	| 19.02.2012 18:45 | 
	
		
	 | 
	
		
		kostya_76 
 
 
		
		
		
			
			
			 
			
Posts: 33 
	
		
	 | 
	
		
			
			 
			
				 (19.02.2012 15:51)totkotoriy Wrote:  Да, я про это и говорю. Код хука на С++ я уже написал, мне нужен теперь рабочий код на ассемблере для вызова триггера в ERM. 
Я ж тебе показывал пример. Весь код создания триггера это 4 строчки:
 
PUSH 29500 //номер ERM-функции. Меняйте на любой доступный. 
MOV EAX, 0x74CE30 
CALL EAX //вызываем C_FUNC_ZVS_CALLFU 
ADD ESP, 4
 
Просто в примере с палаткой добавлены дополнительные операции по  вызову параметров для использования в создаваемом триггере. 
 
Вот пример, работающий с адресом 4074AC, который ты давал:
 
 
#include <windows.h> 
#include "Era.h" 
#pragma hdrstop 
 
#define BUILD_DLL 
 
 
 
using namespace Era; 
 
 
 
void __stdcall CreateTrigger (void) 
{    __asm    {    mov EAX,DWORD PTR DS:[0X6992D0] // выполняем затертую команду    PUSHAD //сохраняем регистры 
PUSH 29501 //номер ERM-функции. Меняйте на любой доступный. 
MOV EAX, 0x74CE30 
CALL EAX //вызываем C_FUNC_ZVS_CALLFU 
ADD ESP, 4 
POPAD //выталкиваем регистры 
 
 
    } 
} 
 
extern "C" __declspec(dllexport) BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID lpReserved) 
{     if (reason == DLL_PROCESS_ATTACH)     {      ConnectEra();      Hook ((void*) CreateTrigger, HOOKTYPE_CALL, 6, (void*) 0x4074AC); 
     }     return TRUE;     } 
 
Добавил в скрипт триггер - срабатывает где-то после генерации карты.  
Только хук в этом примере создан с помощью Эры 1.9. То есть еще файл Era.h нужен.  Немного выше есть ссылка на него от Берсеркера.
			  
			
			
			
				
(This post was last modified: 19.02.2012 19:23 by kostya_76.)
 
			 
		 |  
	 
 | 
	| 19.02.2012 19:21 | 
	
		
	 | 
	
		
		totkotoriy 
 
 
		
		
		
			
			
			
 
 
			
Posts: 873 
	
		
	 | 
	
		
			
			 
			
				 (19.02.2012 19:21)kostya_76 Wrote:  файл Era.h нужен.  Немного выше есть ссылка на него от Берсеркера. 
Спасибо, но я не могу нигде найти эту библиотеку.
 
И еще хотел спросить что за адрес 6992D0 в этой команде mov eax,DWORD PTR DS:[0X6992D0]? Он для другого хука будет такой же? 
Костян, и можешь еще прислать скомпилиный этот код? я скомпилил его чуть по другому (без era.h) и у меня все равно в игре вылетает(
			  
			
			
  
Ты роешься в моих паках, но ты делаешь это без уважения...
			
				
(This post was last modified: 22.02.2012 17:51 by totkotoriy.)
 
			 
		 |  
	 
 | 
	| 22.02.2012 17:38 | 
	
		
	 |