Написание скриптов на C++.

otherwise

Участник
Автор темы
46
7
Заинтересовался недавно этой темой, http://gtamodding.ru/wiki/Адреса_Памяти_(SA) - побаловался с первыми адресами типо гравитации и бесконечного бега. Не понимаю, как можно взаимодействовать с игроком? Например, как можно получить координаты игрока, а потом изменить их? Как можно взаимодействовать с игроками на сервере? Где этому всему можно научится, ничего интересного не смог найти((

p.s буду очень рад если кто-то из крутых ребят ответит на мои вопросы, за хорошие, понятные и развернутые ответы готов подкидывать на дошик))
 

ImmortalDev

Участник
90
50
Ты для начала с одиночной игрой разберись, а потом уже лезь в САМП.
Координаты игрока узнать просто.
Находишь указатель на игрока ( 0xB6F5F0 ), смещение и все это прибавляешь к указателю.
(0xB6F5F0+0x14) +0x30 = [DWORD] XPOS
После этого берешь и просто читаешь.
Запихни все это в цикл, чтобы координаты обновлялись каждый раз.
 

otherwise

Участник
Автор темы
46
7
Ты для начала с одиночной игрой разберись, а потом уже лезь в САМП.
Координаты игрока узнать просто.
Находишь указатель на игрока ( 0xB6F5F0 ), смещение и все это прибавляешь к указателю.
(0xB6F5F0+0x14) +0x30 = [DWORD] XPOS
После этого берешь и просто читаешь.
Запихни все это в цикл, чтобы координаты обновлялись каждый раз.
ну вот я написал так:

DWORD CPed = 0xB6F5F0;
DWORD CPed_x = CPed + 0x30;
DWORD CPed_y = CPed + 0x34;
DWORD CPed_z = CPed + 0x38;

но при записи позиция игрока не меняется, что я сделал не так?
 

ImmortalDev

Участник
90
50
ну вот я написал так:

DWORD CPed = 0xB6F5F0;
DWORD CPed_x = CPed + 0x30;
DWORD CPed_y = CPed + 0x34;
DWORD CPed_z = CPed + 0x38;

но при записи позиция игрока не меняется, что я сделал не так?
DWORD CPed = 0xB6F5F0;
DWORD Center = CPed + 0x14;
DWORD CPed_x = Center + 0x30;
DWORD CPed_y = Center + 0x34;
DWORD CPed_z = Center + 0x38;

А вообще, скинь код, каким способом ты пытаешься изменить позицию игрока?
У тебя DLL или что?
Ты используешь WriteProcessMemory?
 

otherwise

Участник
Автор темы
46
7
DWORD CPed = 0xB6F5F0;
DWORD Center = CPed + 0x14;
DWORD CPed_x = Center + 0x30;
DWORD CPed_y = Center + 0x34;
DWORD CPed_z = Center + 0x38;

А вообще, скинь код, каким способом ты пытаешься изменить позицию игрока?
У тебя DLL или что?
Ты используешь WriteProcessMemory?
Да, WriteProcessMemory юзаю.
Вот мой быдлокод:

WriteProcessMemory(handle, (LPVOID)CPed_x, &NewX, sizeof(NewX), 0);
WriteProcessMemory(handle, (LPVOID)CPed_y, &NewY, sizeof(NewY), 0);
WriteProcessMemory(handle, (LPVOID)CPed_z, &NewZ, sizeof(NewZ), 0);
 

ImmortalDev

Участник
90
50
Да, WriteProcessMemory юзаю.
Вот мой быдлокод:

WriteProcessMemory(handle, (LPVOID)CPed_x, &NewX, sizeof(NewX), 0);
WriteProcessMemory(handle, (LPVOID)CPed_y, &NewY, sizeof(NewY), 0);
WriteProcessMemory(handle, (LPVOID)CPed_z, &NewZ, sizeof(NewZ), 0);
У тебя DLL, или обычное виндовс приложение?
Если второе, то создавай DLL.
Тебе не нужно будет мучаться с WPM, поскольку при инжекте DLL в игру - она становиться частью процесса и тебе доступна вся ее память.
Вот тебе код реализации телепорта:
C++:
float *position = (*(DWORD *)0xB6F5F0) ? (float *)(*(DWORD *)(*(DWORD *)0xB6F5F0 + 0x14) + 0x30) : NULL;
position[0] = x;
position[1] = y;
position[2] = z;
Создавай DLL, в коде создавай поток и пихай туда этот код.
P.S у меня в профиле, поищи в разделе "публикации" статью где я выкладывал код своего AirBreak. Это DLL, возьми код и поиграйся.