GhostManSD 
 
 
		
		
		
			
			
			
 
 
			
Posts: 1054 
	
		
	 | 
	
		
			
			 
			
				Подскажите, пожалуйста, реально ли заставить WoG обращаться к текстовому файлу. Выглядит примерно так... 
Имя файла: GMSDData.txt 
Расположение: EraPlugins #[Раздел_1] 
[Строка_1] 
[Строка_2] 
[Строка_3] 
#[Раздел_2] 
[Строка_1] 
[Строка_2] 
..... 
 
Каждый раздел начинается с символа #. Программа должна сама высчитать, каков номер значка # в тексте, и это число является номером раздела.  
Например, чтобы при !!SN:X0/3/25/78 в переменную z78 подставлялось значение из строки №25 раздела №3 файла GMSDData... 
...а при !!SN:X1/5/78/25 значение переменной z78 подставлялось в строку №25 раздела №5.
			  
			
			
  
Κακῆς ἀπ' ἀρχῆς γίγνεται τέλος κακόν.
			
				
(This post was last modified: 26.02.2011 07:10 by GhostManSD.)
 
			 
		 |  
	 
 | 
	| 26.02.2011 07:09 | 
	
		
	 | 
	
		
		Sav 
 
 
		
		
		
			
			
			 
			
Posts: 2180 
	
		
	 | 
	
		
			
			 
			
				Думаю, можно, только алгоритм обращения к файлу и поиска строки придётся писать самому.
			 
			
			
			
		 |  
	 
 | 
	| 26.02.2011 10:25 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 26.02.2011 18:39 | 
	
		
	 | 
	
		
		Sav 
 
 
		
		
		
			
			
			 
			
Posts: 2180 
	
		
	 | 
	
		
 | 
	| 26.02.2011 18:44 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 26.02.2011 19:13 | 
	
		
	 | 
	
		
		etoprostoya 
 
 
		
		
		
			
			
			 
			
Posts: 1809 
	
		
	 | 
	
		
			
			 
			
				Quote:!!UN:N5/#1/#2/#3/#4 
Записать z-переменную в общую секцию файла wog.ini  
Quote:!!UN:N6/#1/#2//#3/#4 
Прочитать z-переменную из общей секции файла wog.ini  
Quote:Так, для записи переменной z-1, названной "Главная_переменная", в файл "Мой.var" в папку GAMES (секция "MyLocalSettings") с опцией 4, используйте: 
!!VRy1:S4; 
!!VRz-1:S^Главная_переменная^; 
!!VRz-2:S^MyLocalSettings^; 
!!VRz-3:S^GAMES\My.var^; 
!!UN:N5/z-1/y1/-2/-3; 
			 
			
			
			
		 |  
	 
 | 
	| 26.02.2011 21:06 | 
	
		
	 | 
	
		
		MOP 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 1468 
	
		
	 | 
	
		
			
			 
			
				Это что вообще? 
Code: 
 Вог-хук №301: 
00619BB1   E8 FA2E1600                        CALL mop.0077CAB0 
00619BB6   90                                 NOP 
 
0077CAB0   8B7424 0C                          MOV ESI,DWORD PTR SS:[ESP+C] 
0077CAB4   8935 C4389302                      MOV DWORD PTR DS:[29338C4],ESI 
0077CABA   60                                 PUSHAD 
0077CABB   B8 00007000                        MOV EAX,mop.00700000 
0077CAC0   3BC6                               CMP EAX,ESI 
0077CAC2   77 11                              JA SHORT mop.0077CAD5 
0077CAC4   8D05 C0389302                      LEA EAX,DWORD PTR DS:[29338C0] 
0077CACA   3BF0                               CMP ESI,EAX 
0077CACC   77 07                              JA SHORT mop.0077CAD5 
0077CACE   33C0                               XOR EAX,EAX 
0077CAD0   A3 C4389302                        MOV DWORD PTR DS:[29338C4],EAX 
0077CAD5   61                                 POPAD 
0077CAD6   8B35 C4389302                      MOV ESI,DWORD PTR DS:[29338C4] 
0077CADC   85F6                               TEST ESI,ESI 
0077CADE   C3                                 RETN
  
У меня из-за этого хука жёсткий баг прямо на старте игры, причём только тогда, если включены wav-звуки, а скрипт создаёт аллоки с помощью erautils.dll.  
Если выпилить хук и восстановить ориг. код – всё абсолютно нормально.
			  
			
			
  
Circle of destruction, hammer comes crushing 
Powerhouse of energy 
Whipping up a fury, dominating flurry 
We create the battery
			
		 |  
	 
 | 
	| 28.02.2011 16:33 | 
	
		
	 | 
	
		
		baratorch 
 
 
		
		
		
			
			
			 
			
Posts: 197 
	
		
	 | 
	
		
			
			 
			
				Хочу сделать для оффлайна заказ героя в таверне (герой который будет появляться в таверне после нанятого). 
В связи с этим вопрос: как узнать какие герои доступны/недоступны для появления в таверне у игрока? 
Может подскажет кто?
			 
			
			
			
		 |  
	 
 | 
	| 02.07.2011 23:55 | 
	
		
	 | 
	
		
		gamecreator 
 
 
		
		
		
			
			
			
 
 
			
Posts: 7107 
	
		
	 | 
	
		
 | 
	| 03.07.2011 01:26 | 
	
		
	 | 
	
		
		baratorch 
 
 
		
		
		
			
			
			 
			
Posts: 197 
	
		
	 | 
	
		
 | 
	| 03.07.2011 01:48 | 
	
		
	 | 
	
		
		MOP 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 1468 
	
		
	 | 
	
		
			
			 
			
				 (28.02.2011 16:33)MOP Wrote:  Это что вообще? 
Code: 
 Вог-хук №301: 
00619BB1   E8 FA2E1600                        CALL mop.0077CAB0 
00619BB6   90                                 NOP 
 
0077CAB0   8B7424 0C                          MOV ESI,DWORD PTR SS:[ESP+C] 
0077CAB4   8935 C4389302                      MOV DWORD PTR DS:[29338C4],ESI 
0077CABA   60                                 PUSHAD 
0077CABB   B8 00007000                        MOV EAX,mop.00700000 
0077CAC0   3BC6                               CMP EAX,ESI 
0077CAC2   77 11                              JA SHORT mop.0077CAD5 
0077CAC4   8D05 C0389302                      LEA EAX,DWORD PTR DS:[29338C0] 
0077CACA   3BF0                               CMP ESI,EAX 
0077CACC   77 07                              JA SHORT mop.0077CAD5 
0077CACE   33C0                               XOR EAX,EAX 
0077CAD0   A3 C4389302                        MOV DWORD PTR DS:[29338C4],EAX 
0077CAD5   61                                 POPAD 
0077CAD6   8B35 C4389302                      MOV ESI,DWORD PTR DS:[29338C4] 
0077CADC   85F6                               TEST ESI,ESI 
0077CADE   C3                                 RETN
  
У меня из-за этого хука жёсткий баг прямо на старте игры, причём только тогда, если включены wav-звуки, а скрипт создаёт аллоки с помощью erautils.dll.  
Если выпилить хук и восстановить ориг. код – всё абсолютно нормально. 
Так что, никто не знает? 
Это хотя бы нужная вещь?
			  
			
			
  
Circle of destruction, hammer comes crushing 
Powerhouse of energy 
Whipping up a fury, dominating flurry 
We create the battery
			
		 |  
	 
 | 
	| 06.08.2011 17:12 | 
	
		
	 | 
	
		
		kostya_76 
 
 
		
		
		
			
			
			 
			
Posts: 33 
	
		
	 | 
	
		
			
			 
			
				Может кто-нибудь подсказать, как правильно скомпилировать эту длл MoP'а в Дельфи7? 
Quote:
LIBRARY Tent; 
{!INFO 
MODULENAME = 'Tent' 
VERSION = '1.0' 
AUTHOR = 'Master Of Puppets' 
} 
 
USES Win, Utils, SysUtils, VPUtils; 
 
//PROCEDURE HookCode(P: POINTER; NewAddr: POINTER; UseCall: BOOLEAN); external 'angel' name 'HookCode'; 
 
CONST 
(* HookCode constants *) 
C_HOOKTYPE_JUMP = FALSE; 
C_HOOKTYPE_CALL = TRUE; 
C_OPCODE_JUMP = $E9; 
C_OPCODE_CALL = $E8; 
C_UNIHOOK_SIZE = 5; 
 
TYPE 
THookRec = RECORD      Opcode: BYTE;      Ofs: INTEGER; 
END; // .record THookRec 
 
VAR 
Temp: INTEGER; 
 
PROCEDURE WriteAtCode(P: POINTER; Buf: POINTER; Count: INTEGER); 
BEGIN 
Win.VirtualProtect(P, Count, PAGE_READWRITE, @Temp); 
Win.CopyMemory(P, Buf, Count); 
Win.VirtualProtect(P, Count, Temp, NIL); 
END; // .procedure WriteAtCode 
 
PROCEDURE HookCode(P: POINTER; NewAddr: POINTER; UseCall: BOOLEAN); 
VAR 
HookRec: THookRec; 
BEGIN 
IF UseCall THEN BEGIN      HookRec.Opcode:=C_OPCODE_CALL; 
END // .if 
ELSE BEGIN      HookRec.Opcode:=C_OPCODE_JUMP; 
END; // .else 
HookRec.Ofs:=INTEGER(NewAddr)-INTEGER(P)-C_UNIHOOK_SIZE; 
WriteAtCode(P, @HookRec, 5); 
END; // .procedure HookCode 
 
PROCEDURE HOOK_tent; ASSEMBLER; {$FRAME-} 
ASM 
MOV EAX, $50C7C0 
CALL EAX //вызываем функцию вычисления HP-очков, которую мы затёрли своим хуком. 
MOV DWORD PTR DS:[$91DA38],-1 //заносим в адрес переменной x1 значение -1 - на случай, если мы не хотим вообще ничего менять в принципе лечения 
MOV [$91DA3C], EAX //заносим в адрес переменной x2 исходное значение кол-ва хит-пойнтов, для подробностей и возможных вычислений 
PUSHAD //сохраняем регистры 
PUSH 29500 //номер ERM-функции. Меняйте на любой доступный. 
MOV EAX, $74CE30 
CALL EAX //вызываем C_FUNC_ZVS_CALLFU 
ADD ESP, 4 
POPAD //выталкиваем регистры 
CMP DWORD PTR DS:[$91DA38],-1 //проверяем, изменил ли скриптописец кол-во очков HP для лечения 
JE @@Default //если не изменил - продолжить код без изменения 
MOV EAX,DWORD PTR DS:[$91DA38] // заменить значение очков на значение из x1 
@@Default: 
PUSH $478538 //адрес возврата в процедуру 
END; 
 
BEGIN 
HookCode(POINTER($478533), @HOOK_tent, C_HOOKTYPE_JUMP); 
END.  
Изменяю название библиотеки Win на Windows, остальные вроде не нужны, но можно и оставить, кроме VPUtils. 
Еще не понятно, что такое {$FRAME-}   в строке: PROCEDURE HOOK_tent; ASSEMBLER; {$FRAME-}, чтобы компилятор не ругался, приходится убирать. 
Пробовал в разных папках компилить, в том числе и в папке с Эрой.
 
Компилится нормально, но адрес в созданном хуке получается левый - соответственно вылет при обращении. Если в Olly адрес перехода на функцию HOOK_tent поменять на нормальный - все работает.
			  
			
			
			
				
(This post was last modified: 10.12.2011 13:45 by kostya_76.)
 
			 
		 |  
	 
 | 
	| 10.12.2011 13:18 | 
	
		
	 |