• 29 Mars 2024, 11:31:51


Auteur Sujet: [C++] Récuperer la vie du joueur  (Lu 3453 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Ashley11

  • C++ user
  • *
  • Bandit
  • Messages: 260
    • Voir le profil
[C++] Récuperer la vie du joueur
« le: 02 Février 2015, 15:50:11 »
Bonjour à tous,

j'essaie de récupérer la vie de mon joueur en c++ mais je ne comprend pas pourquoi ma vie contiens 0, je récupere pourtant bien l'adresse pointé par CPedPtr...


Code: (c++) [Sélectionner]
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    DWORD *CPedPtr = (DWORD*)0xB6F5F0;
    DWORD *CPed = NULL;
    HWND hwnd = FindWindowA(0, "GTA:SA:MP");
    HANDLE handle = 0;
    DWORD processID = 0;
    float health = 0;

    if(hwnd)
    {
        cout << "Process find !" << endl;
    }
    else
    {
        cout << "Process not found !" << endl;
    }

    GetWindowThreadProcessId(hwnd, &processID);
    handle = OpenProcess((DWORD)"PROCESS_ALL_ACCESS", false, processID);

    ReadProcessMemory(handle, CPedPtr, CPed, sizeof(CPed), NULL);
    ReadProcessMemory(handle, (CPed + 0x540), &health, sizeof(float), NULL);

    cout << health << endl;

    CloseHandle (handle);

    return 0;
}

Merci d'avance.
« Modifié: 02 Février 2015, 18:12:02 par Ashley11 »

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : [C++] Récuperer la vie du joueur
« Réponse #1 le: 02 Février 2015, 19:41:37 »
Salut, tu poste dans la mauvaise section.
Dans ton code il y a trop de chose qui ne veulent rien dire.

Je vais pas les énumérer, à la place je te passe ce code et essaye de comprendre ce qui ne va pas dans le tient.

[spoiler]
Code: (cpp) [Sélectionner]
#include <iostream>
#include <windows.h>


using namespace std;



HANDLE GetGTASAHandle()
{
unsigned int l_iProcessID;
HWND l_hwndWindowHandle;
HANDLE l_handle;

l_iProcessID = -1;
l_handle = 0;


l_hwndWindowHandle = FindWindowA(0, "GTA: San Andreas");

if(l_hwndWindowHandle != 0)
{
GetWindowThreadProcessId(l_hwndWindowHandle, &l_iProcessID);
l_handle = OpenProcess(PROCESS_ALL_ACCESS, 0, l_iProcessID);
}
return l_handle;
}

unsigned int ReadInt(HANDLE a_Handle, unsigned int a_iAddress)
{
unsigned int l_iValue, l_iReadSize;

ReadProcessMemory(a_Handle, (void*)a_iAddress, (void*)&l_iValue, sizeof(unsigned int), &l_iReadSize);
return l_iValue;
}

float ReadFloat(HANDLE a_Handle, unsigned int a_iAddress)
{
float l_fValue;
unsigned int l_iReadSize;

ReadProcessMemory(a_Handle, (void*)a_iAddress, (void*)&l_fValue, sizeof(unsigned int), &l_iReadSize);
return l_fValue;
}


float GetLocalPlayerHealth(HANDLE a_GTAHandle)
{
unsigned int l_iLocalPlayerPed;

//  0xB6F5F0 - Local Player Pointer
l_iLocalPlayerPed = ReadInt(a_GTAHandle, 0xB6F5F0);

if(l_iLocalPlayerPed != 0)
{
return ReadFloat(a_GTAHandle, l_iLocalPlayerPed + 0x540);
}
return 0.0f;
}


int main()
{
HANDLE l_GTAHandle;


// on récupère le process id de gta sa
l_GTAHandle = GetGTASAHandle();
// si nous n'avons pas réussi à le récupérer
if(l_GTAHandle == 0)
{
// on quitte le programme
cout << "Impossible de recuperer le \"process handle\" !" << endl;
return 0;
}


while(1)
{
cout << "Player Health " << GetLocalPlayerHealth(l_GTAHandle) << endl << endl;
Sleep(1000);
}

return 0;
}
[/spoiler]



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Ashley11

  • C++ user
  • *
  • Bandit
  • Messages: 260
    • Voir le profil
Re : [C++] Récuperer la vie du joueur
« Réponse #2 le: 03 Février 2015, 11:36:59 »
Merci j'avais pas compris que c'etait l'adresse du pointeur et non l'adresse pointé.

Une derniere question si je veut afficher la vie sur un TextDraw() je dois le faire en Direct3D ?

++
« Modifié: 03 Février 2015, 16:21:03 par NatiVe »

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : [C++] Récuperer la vie du joueur
« Réponse #3 le: 03 Février 2015, 13:51:06 »
Les doubles posts sont interdits !


Et pour afficher quelque chose à l'écran, il va falloir que tu injecte ta propre dll dans le jeu et que tu hook les appels à DirectX.

Ou, tu peux appeler les fonctions d'affichage de texte du jeu.



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Ashley11

  • C++ user
  • *
  • Bandit
  • Messages: 260
    • Voir le profil
Re : [C++] Récuperer la vie du joueur
« Réponse #4 le: 03 Février 2015, 14:03:07 »
Désole du double post,

J'aimerai savoir comment injecter une dll à l’exécution de gta_sa.exe sans le faire manuellement, et peut tu m'expliquer comment m'y prendre pour le hook ?
« Modifié: 04 Février 2015, 16:53:06 par Ashley11 »