Jordan
							
								Пользователь 
								
								Posts: 416
								
								  
								
								
								
							 
						 | 
						
							
								  | 
								
									 
										Проблемы с патчилкой
									 
									«  on: 28 April 2008, 03:27:30 »  | 
								
								 | 
							  
							 
							Здраствуйте!
  Я делаю патчилку и все получается, но есть одна проблемка которую я решить не могу.
  В патчилке я задаю смещение и на какое смещение поменять, стартовые координаты на карте мира изменяю, но проблема в том что когда я в вожу координаты 823,72 в хексе 337,48 то координаты не те я не знаю почему, я уже все перепробывал, но что то не получается, помогите.
  Вот часть кода
  //Стартовое положение на карте мира (по X) buf[0xAD008]=0x337;
  //Стартовое положение на карте мира (по Y) buf[0xAD00D]=0x48;
  //World Highlight X buf[0xACD90]=0x337;
  //World Highlight Y buf[0xACD95]=0x48;
  //World Viewport X buf[0x10C42C]=0x00;
  //World Viewport Y buf[0x10C430]=0x00;
  А вот весь код патчилки
  #include <windows.h> #include <stdio.h> #include <conio.h>
  int main() {    HANDLE in=CreateFile("fallout2.exe",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,NULL);    if(in==INVALID_HANDLE_VALUE)    {       MessageBox(NULL,"Hello","",MB_OK);       printf("fallout2.exe not found\n");       getch();       return 0;    }    printf("scaning file...\n");    DWORD len=GetFileSize(in,NULL);    BYTE *buf=new BYTE[len];    DWORD br;    ReadFile(in,buf,len,&br,NULL);    CloseHandle(in);
     //patching
 
 
  //buf[0x]=0x;
  //Стартовая локация buf[0x107ac8]=0x76; buf[0x107ac9]=0x31; buf[0x107aca]=0x33; buf[0x107acb]=0x65; buf[0x107acc]=0x6e; buf[0x107acd]=0x74; buf[0x107ace]=0x2e; buf[0x107acf]=0x6d; buf[0x107ad0]=0x61; buf[0x107ad1]=0x70; buf[0x107ad2]=0x00; buf[0x107ad3]=0x00;
  //Выключить неслучайную встречу с Френки buf[0xB0AD8]=0xEB;
  //Начальный вид персонажа (муж.)  buf[0xee8e8]=0x68; buf[0xee8e9]=0x6d; buf[0xee8ea]=0x6a; buf[0xee8eb]=0x6d; buf[0xee8ec]=0x70; buf[0xee8ed]=0x73;
  //Начальный вид персонажа (жен.) buf[0xee8f0]=0x68; buf[0xee8f1]=0x66; buf[0xee8f2]=0x6a; buf[0xee8f3]=0x6d; buf[0xee8f4]=0x70; buf[0xee8f5]=0x73;
  //Нет снов buf[0x93B0F]=0xE9; buf[0x93B10]=0x95; buf[0x93B11]=0x00; buf[0x93B14]=0x90; buf[0x93BB7]=0xEB;
  //Пипбой в начале buf[0x0087411]=0xEB;
  //Стартовое положение на карте мира (по X) buf[0xAD008]=0x337;
  //Стартовое положение на карте мира (по Y) buf[0xAD00D]=0x48;
  //World Highlight X buf[0xACD90]=0x337;
  //World Highlight Y buf[0xACD95]=0x48;
  //World Viewport X buf[0x10C42C]=0x00;
  //World Viewport Y buf[0x10C430]=0x00;
  //Стартовый день buf[0x93756]=0x04;
  //Стартовый год buf[0x9376C]=0x71;   //Стартовый месяц buf[0x93782]=0x0b;
  //Выкл фильмы buf[0x3ea90]=0xc3;
  // Убежище 13
  // Кнопка 1 buf[0x2EFFc]=0x06;// Номер карты buf[0x2F000]=0x00;// Номер уровня buf[0x2F004]=0x18;// тайл последние смещения buf[0x2F005]=0x37;// тайл первые смещения
  // Кнопка 2 buf[0x2F008]=0x06;// Номер карты buf[0x2F00C]=0x01;// Номер уровня buf[0x2F010]=0xE8;// тайл последние смещения buf[0x2F011]=0x57;// тайл первые смещения
  // Кнопка 3 buf[0x2F014]=0x06;// Номер карты buf[0x2F018]=0x02;// Номер уровня buf[0x2F01C]=0xA0;// тайл последние смещения buf[0x2F01D]=0x43;// тайл первые смещения
  // Кнопка 4 - не используется //buf[0x]=0x;// Номер карты //buf[0x]=0x;// Номер уровня //buf[0x]=0x;// тайл последние смещения //buf[0x]=0x;// тайл первые смещения
 
 
     HANDLE out=CreateFile("fallout.exe",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);    if(in==INVALID_HANDLE_VALUE)    {       printf("cann't create result file\n");    }    else     {       WriteFile(out,buf,len,&br,NULL);       CloseHandle(out);       printf("fallout2.exe patch completed!\npatch result file: fallout.exe\n");    }
     delete[] buf;
     getch();    return 0; }
  И еще вопрос как сделать что бы он офсеты читал из файла например из patcher.txt
  Вот так
  buf[0x3ea90]=0xc3;
  buf[0x3ea90]=читать строку из файла(patcher.txt, номер строки 1 любую строку указываешь);
  Или что бы он читал страку но подругому
  patcher.txt
  movis=0xc3
  Ну и последний вопрос как сделать так что бы строку переводил число как в atoi
  Пример
  // Кнопка 3 buf[0x2F014]=0x06;// Номер карты buf[0x2F018]=0x02;// Номер уровня buf[0x2F01C]=0xA0;// тайл последние смещения buf[0x2F01D]=0x43;// тайл первые смещения
  А в patcher.txt будет так
  Elevation_id=8 Button=1 Map=6 Elev=0 Tile=14104
  И так далее для всех 24 лифтов, как так сделать что бы он строку dec переводил в hex
 
 
 
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Last Edit: 28 April 2008, 03:43:46 by Jordan »
								 | 
								
									 
								 | 
							  
							 
							Воспрянет Россия, из праха отцов Расправятся крылья, миллионов сердец Поднимут все головы и грудью вздохнут И громка скажут, что пришли Мы пришли, со столетней войны 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
			
				
					
						
							cvet
							
								Пользователь 
								
								Posts: 6
								
								  
								
								
								
							 
						 | 
						
							
								  | 
								
									 
										Re: Проблемы с патчилкой
									 
									« Reply #1 on: 28 April 2008, 04:15:51 »  | 
								
								 | 
							  
							 
							//Стартовое положение на карте мира (по X) buf[0xAD008]=0x337;
  //World Highlight X buf[0xACD90]=0x337; Для байта это многовато. Или присваивай отдельно каждому байту нужное значение buf[0xAD008]=0x37; buf[0xAD009]=0x3; или кастуй в слово и присваивай ему *(WORD*)&buf[0xAD008]=0x337; И еще вопрос как сделать что бы он офсеты читал из файла например из patcher.txt Пиши свой парсер, а если лень, то можешь делать например так: buf[0x2F014]=GetPrivateProfileInt("MAP","MapNum",0x6,".\\patcher.txt");// Номер карты buf[0x2F018]=GetPrivateProfileInt("MAP","MapLevel",0x2,".\\patcher.txt");// Номер уровня buf[0x2F01C]=GetPrivateProfileInt("MAP","MapTileX",0xA0,".\\patcher.txt");// тайл последние смещения buf[0x2F01D]=GetPrivateProfileInt("MAP","MapTileY",0x43,".\\patcher.txt");// тайл первые смещения patcher.txt [MAP] MapNum=1 MapLevel=2 MapTileX=3 MapTileY=4 Ну и последний вопрос как сделать так что бы строку переводил число как в atoi atoi  
						 | 
					 
					
						| 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
			
				
					
						| 
							Anchorite
							 
								Пользователь 
								
								Posts: 23 
								 
								
								
								
								 
							 
						 | 
						
							
								  | 
								
									 
										Re: Проблемы с патчилкой
									 
									« Reply #2 on: 01 May 2008, 11:10:46 »  | 
								
								 | 
							  
							 
							Ну и последний вопрос как сделать так что бы строку переводил число как в atoi
  atoi не работает для числа представленного в недесятичной системе счисления. Так что придется самому писать    
						 | 
					 
					
						| 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
			
				
					
						| 
							Wasteland Ghost
							 
								Администратор 
								
								Posts: 869 
								 
								Маленькое Злое Привидение 
								 
								
								
								
								 
							 
						 | 
						
							
								  | 
								
									 
										Re: Проблемы с патчилкой
									 
									« Reply #3 on: 01 May 2008, 11:17:42 »  | 
								
								 | 
							  
							 
							А strtol и strtoul?    
						 | 
					 
					
						| 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
			
				
					
						| 
							Anchorite
							 
								Пользователь 
								
								Posts: 23 
								 
								
								
								
								 
							 
						 | 
						
							
								  | 
								
									 
										Re: Проблемы с патчилкой
									 
									« Reply #4 on: 01 May 2008, 11:38:17 »  | 
								
								 | 
							  
							 
							А strtol и strtoul?   Про эти функции не знал    
						 | 
					 
					
						| 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
			
				
					
						| 
							Wasteland Ghost
							 
								Администратор 
								
								Posts: 869 
								 
								Маленькое Злое Привидение 
								 
								
								
								
								 
							 
						 | 
						
							
								  | 
								
									 
										Re: Проблемы с патчилкой
									 
									« Reply #5 on: 01 May 2008, 12:10:36 »  | 
								
								 | 
							  
							 
							Строго говоря, они могут не во всех компиляторах присутствовать. Та же atoi -- это на самом деле макрос, которого нет под интелом и gcc, например. 
						 | 
					 
					
						| 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
			
				
					
						
							cvet
							
								Пользователь 
								
								Posts: 6
								
								  
								
								
								
							 
						 | 
						
							
								  | 
								
									 
										Re: Проблемы с патчилкой
									 
									« Reply #6 on: 01 May 2008, 14:45:26 »  | 
								
								 | 
							  
							 
							atoi входит в стандарт ANSI C. Дело не в компиляторе, а подключаемых библиотеках и, если они не держат стандарт, то это никак не проблема компилятора. 
						 | 
					 
					
						| 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
			
				
					
						| 
							Wasteland Ghost
							 
								Администратор 
								
								Posts: 869 
								 
								Маленькое Злое Привидение 
								 
								
								
								
								 
							 
						 | 
						
							
								  | 
								
									 
										Re: Проблемы с патчилкой
									 
									« Reply #7 on: 01 May 2008, 17:16:53 »  | 
								
								 | 
							  
							 
							Да, библиотеки. Но, как ни странно, в новом стандарте atoi нет. Я когда тоже первый раз наткнулась на проблему её отсутствия в некоторых компилерах, админ пошустрил по стандарту и atoi там не нашёл. 
						 | 
					 
					
						| 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
			
				
					
						| 
							Anchorite
							 
								Пользователь 
								
								Posts: 23 
								 
								
								
								
								 
							 
						 | 
						
							
								  | 
								
									 
										Re: Проблемы с патчилкой
									 
									« Reply #8 on: 01 May 2008, 17:37:54 »  | 
								
								 | 
							  
							 
							Да, библиотеки. Но, как ни странно, в новом стандарте atoi нет. Я когда тоже первый раз наткнулась на проблему её отсутствия в некоторых компилерах, админ пошустрил по стандарту и atoi там не нашёл.
  Очень странно. Помоему atoi должен лежать в <cstdlib>  
						 | 
					 
					
						| 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
			
				
					
						| 
							Wasteland Ghost
							 
								Администратор 
								
								Posts: 869 
								 
								Маленькое Злое Привидение 
								 
								
								
								
								 
							 
						 | 
						
							
								  | 
								
									 
										Re: Проблемы с патчилкой
									 
									« Reply #9 on: 01 May 2008, 17:43:36 »  | 
								
								 | 
							  
							 
							cstdlib всё равно просто тянет за собой stdlib.h. Всё, разобралась. Это я глючу.    С atoi всё в порядке, это itoa в стандарте нет.    
						 | 
					 
					
						| 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
			
				
					
						
							Jordan
							
								Пользователь 
								
								Posts: 416
								
								  
								
								
								
							 
						 | 
						
							
								  | 
								
									 
										Re: Проблемы с патчилкой
									 
									« Reply #10 on: 04 May 2008, 10:20:03 »  | 
								
								 | 
							  
							 
							А strtol и strtoul? Подмигивающий
  А можете показать пример как их использовать.  
						 | 
					 
					
						
							
							 
							Воспрянет Россия, из праха отцов Расправятся крылья, миллионов сердец Поднимут все головы и грудью вздохнут И громка скажут, что пришли Мы пришли, со столетней войны 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
			
				
					
						| 
							Wasteland Ghost
							 
								Администратор 
								
								Posts: 869 
								 
								Маленькое Злое Привидение 
								 
								
								
								
								 
							 
						 | 
						
							
								  | 
								
									 
										Re: Проблемы с патчилкой
									 
									« Reply #11 on: 04 May 2008, 15:07:11 »  | 
								
								 | 
							  
							 
							
						 | 
					 
					
						| 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
			
				
					
						
							Jordan
							
								Пользователь 
								
								Posts: 416
								
								  
								
								
								
							 
						 | 
						
							
								  | 
								
									 
										Re: Проблемы с патчилкой
									 
									« Reply #12 on: 08 May 2008, 15:46:44 »  | 
								
								 | 
							  
							 
							А может кто нибудь показать пример патчилки на delphi 7, буду очень благодарен. Самой простой  что бы ничего не выводил, запустилась поменяла значение закрылась. 
						 | 
					 
					
						
							
							 
							Воспрянет Россия, из праха отцов Расправятся крылья, миллионов сердец Поднимут все головы и грудью вздохнут И громка скажут, что пришли Мы пришли, со столетней войны 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
			
				
					
						| 
							Freeman
							 
								Пользователь 
								
								Posts: 50 
								 
								
								
								
								 
							 
						 | 
						
							
								  | 
								
									 
										Re: Проблемы с патчилкой
									 
									« Reply #13 on: 09 May 2008, 08:46:17 »  | 
								
								 | 
							  
							 
							Если переписать патчилку из первого поста, то получится примерно следующее: uses   Windows;
  type TBuf=array[0..$7FFFFFFE] of byte; PBuf=^TBuf;
  var hin,hout:THandle; buf:PBuf; len,br:Dword;
  begin hin:=CreateFile('fallout2.exe',GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);    if hin=INVALID_HANDLE_VALUE then    begin       MessageBox(0,'fallout2.exe not found','',MB_OK);       exit;    end;    len:=GetFileSize(hin,nil);    buf:=GetMemory(len);    ReadFile(hin,buf^,len,br,nil);    CloseHandle(hin);
     //patching
  //Пипбой в начале buf[$0087411]:=$EB;
     hout:=CreateFile('fallout.exe',GENERIC_WRITE,0,nil,CREATE_ALWAYS,0,0);    if hout=INVALID_HANDLE_VALUE then    begin       MessageBox(0,'cann''t create result file','',MB_OK);       FreeMemory(buf);       exit;    end    else    begin       WriteFile(hout,buf^,len,br,nil);       CloseHandle(hout);       MessageBox(0,'fallout2.exe patch completed!'#13#10'patch result file: fallout.exe','',MB_OK);    end;
     FreeMemory(buf); end.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Last Edit: 09 May 2008, 08:52:26 by Freeman »
								 | 
								
									 
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
			
				
					
						
							Jordan
							
								Пользователь 
								
								Posts: 416
								
								  
								
								
								
							 
						 | 
						
							
								  | 
								
									 
										Re: Проблемы с патчилкой
									 
									« Reply #14 on: 11 May 2008, 19:33:29 »  | 
								
								 | 
							  
							 
							Freeman
  Отлично. Спасибо.
  А не знаешь как бы сделать так что бы пример
  buf[$107ac8]:=GetPrivateProfileInt('Starting_Map','',$00,'patcher.txt');
  patcher.txt
  Starting_Map=V13ENT.MAP
  Я пишу полностью название карты, а в сама программа переводит её в хекс и патчит.
  Обращаюсь ко всем.  Я задал стартовые координаты а координаты все равно не те, чуз появляется в других. Подскажите где ошибка.
  //823 и 72 buf[$AD008]:=$33; buf[$AD008]:=$7; buf[$ACD90]:=$33; buf[$ACD90]:=$7;
  buf[$AD00D]:=$48; buf[$ACD95]:=$48;
  //600 и 0 buf[$10C42C]:=$25; buf[$10C42D]:=$8; buf[$10C430]:=$00;
 
 
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Last Edit: 11 May 2008, 22:31:46 by Jordan »
								 | 
								
									 
								 | 
							  
							 
							Воспрянет Россия, из праха отцов Расправятся крылья, миллионов сердец Поднимут все головы и грудью вздохнут И громка скажут, что пришли Мы пришли, со столетней войны 
						 | 
					 
				 
			 |  
		 
	 | 
	 |