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 »
|
|
Воспрянет Россия, из праха отцов Расправятся крылья, миллионов сердец Поднимут все головы и грудью вздохнут И громка скажут, что пришли Мы пришли, со столетней войны
|
|
|
|