Jump to content

GTA SA - Player coordinaten


Recommended Posts

Geplaatst: (bewerkt)
Ik snap niet echt wat je bedoelt Robbin bedoel je de coordinaten van Place Maneger?

En nog een ding je zit in het verkeerde sub fora.

Ik meld dit even bij de moderators.

Hij zit hier goed...

Als je niet weet wat VB6 is reageer dan ook niet.

Anyway ik zou echt niet weten hoe je ze krijgt, wou alleen even reageren dat je hier wel goed zat. :puh:

JGuntherS zal het wel weten, ik zie dat hij het topic al "bezoekt" dus dat komt wel goed.

Bewerkt: door Mania-92
Geplaatst:

Ik neem aan dat je Visual Basic 6 bedoelt, maar hier zou ik het niet weten. Voor het geval dat het je volgende vraag wordt (of van iemand anders): coördinaten uit SA haal je met behulp van de SA Placemanager. Zorg wel dat de SA Placemanager aan staat voordat je SA zelf opstart ;)

Geplaatst:

Je moet API-functies uit kernel32.dll "declareren", zodat je ze kunt gebruiken, dat is in Visual Basic vrij lastig en omslachtig, wat dat betreft zou ik je aanraden over te stappen naar C++.

Deze functies heb je nodig:

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long

Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long

Declare Function ReadProcessMemory Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, ByRef lpBuffer As Byte(), ByVal nSize As Long, ByRef lpNumberOfBytesWritten As Long) As Long

Alleen FindWindow weet ik niet zeker, dat is een beetje een probleemgevalletje, aangezien de parameters strings zijn, en API-functies hebben een andere stringindeling dat VB.

Eerst doe je FindWindow met als parameters "Grand Theft Auto San Andreas" en NULL (ik denk dat dat vbNullChar is in VB, weet ik niet zeker), dan doe je GetWindowThreadProcessId met als parameters de teruggeefwaarde van FindWindow, en een long-variabele. In die long-variabele zit nu het PID van SA, die gebruik je om het SA-proces te openen met OpenProcess. De teruggeefwaarde van OpenProcess kun je dan weer gebruiken om als parameter aan ReadProcessMemory te geven, en zo het geheugen van SA te kunnen lezen. Veel succes, bij meer vragen, stel ze! Het is al lang geleden dat ik iets in VB gedaan heb dus ik hoop dat het klopt...

JGuntherS zal het wel weten, ik zie dat hij het topic al "bezoekt" dus dat komt wel goed.

:bonk:

EDIT: De functiedeclaratie van ReadProcessMemory was niet goed, bijgewerkt!

Geplaatst:

VB6 is de afkorting van Visual Basic 6....)

@ Gunther

De functies zijn allemaal wel handig enzo maar de vraag was.. Hoe gebruik ik die om de Coordinaten van de Speler op te halen?

Geplaatst:
De functies zijn allemaal wel handig enzo maar de vraag was.. Hoe gebruik ik die om de Coordinaten van de Speler op te halen?

Dan lees je het geheugen uit op bepaalde plaatsen; eerst lees je het geheugen uit op 0xB6F5F0, dan heb je de pointer naar de gegevens van de speler, deze noemen we voor het gemak even player_ptr. Dan lees je geheugen uit op player_ptr + 0x14, dan heb je de pointer naar de "positiematrix" van de speler; daarin ligt de positie van de speler opgeslagen, deze noemen we voor het gemak even pos_ptr. Als je dan pos_ptr + 0x30 uitleest heb je de X-positie, pos_ptr + 0x34 is de Y-positie en pos_ptr + 0x38 is de Z-positie.

Geplaatst: (bewerkt)
Dan lees je het geheugen uit op bepaalde plaatsen; eerst lees je het geheugen uit op 0xB6F5F0, dan heb je de pointer naar de gegevens van de speler, deze noemen we voor het gemak even player_ptr. Dan lees je geheugen uit op player_ptr + 0x14, dan heb je de pointer naar de "positiematrix" van de speler; daarin ligt de positie van de speler opgeslagen, deze noemen we voor het gemak even pos_ptr. Als je dan pos_ptr + 0x30 uitleest heb je de X-positie, pos_ptr + 0x34 is de Y-positie en pos_ptr + 0x38 is de Z-positie.

Kan je hiervan een voorbeeld geven?

(Kant en klaare code)

Bewerkt: door Robbin237
Geplaatst:
Kan je hiervan een voorbeeld geven?

(Kant en klaare code)

Ik kan niet zo goed VB, lang geleden :D. Maar ik kan wel een voorbeeld geven in pseudocode:

Notitie: LeesGeheugen(proc, plek, naarvar) betekent: Lees geheugen van proces 'proc' op plek 'plek' naar variabele 'naarvar' uit.

... proces openen enzovoorts, de proceshandle is opgeslagen in hSAProces ...
LeesGeheugen(hSAProces, 0xB6F5F0, player_ptr)
LeesGeheugen(hSAProces, player_ptr + 0x14, pos_ptr)
LeesGeheugen(hSAProces, pos_ptr + 0x30, Xpos)
LeesGeheugen(hSAProces, pos_ptr + 0x34, Ypos)
LeesGeheugen(hSAProces, pos_ptr + 0x38, Zpos)

Je moet het verder denk ik zelf maar even uitzoeken.

Geplaatst: (bewerkt)

Bedankt voor dat stuk code, nog een andere vraag... Ik krijg die andere stuk niet aan het werk (openen enz.) Kan je daar een kant en klare code van geven? :)

Hoe kom je trouwens aan de functie; leesgeheugen?

Bewerkt: door Robbin237
Geplaatst:
Bedankt voor dat stuk code, nog een andere vraag... Ik krijg die andere stuk niet aan het werk (openen enz.) Kan je daar een kant en klare code van geven? :)

Hoe kom je trouwens aan de functie; leesgeheugen?

Volgens mij bedoeld hij daarmee de functie "ReadProcessMemory"...

Geplaatst: (bewerkt)

Dan zou het als nog niet werken...

Mijn code is nu alsvolgt:

 Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long

Private Sub Form_Load()
Dim StoreGTA As Long

' Vind het GTA-SanAndreas Window
strFirst = FindWindow(vbNullString, "GTA: San Andreas")

' Haal de PID van het window op en sla deze op in de
' StoreGTA long variable
strSecond = GetWindowThreadProcessId(strFirst, StoreGTA)

' Open het GTA process met alle rechten
strAndere_1 = OpenProcess(PROCESS_ALL_ACCESS, 0, StoreGTA)

' Lees het GTA geheugen
strAndere_2 = ReadProcessMemory(StoreGTA, "0xB6F5F0", player_ptr, 100, 100)
strAndere_3 = ReadProcessMemory(StoreGTA, "player_ptr + 0x14", pos_ptr, 100, 100)
strAndere_4 = ReadProcessMemory(StoreGTA, "pos_ptr + 0x30", XPos, 100, 100)
strAndere_5 = ReadProcessMemory(StoreGTA, "pos_ptr + 0x34", YPos, 100, 100)
strAndere_6 = ReadProcessMemory(StoreGTA, "pos_ptr + 0x38", ZPos, 100, 100)

' Laat de details zien
MsgBox "GTA San Andreas:" & Chr(13) & Chr(13) & "PID: " & StoreGTA & Chr(13) & "X-Coords: " & XPos & Chr(13) & "Y-Coords: " & YPos & Chr(13) & "Z-Coords: " & ZPos, vbOKOnly, "GTA San Andreas"

End
End Sub

'								GTA San Andreas
'				  Lees geheugen en haal de Player coordinaten op

Hij leest aleen de coordinaten niet..

Wat is het probleem?

Bewerkt: door Robbin237
Geplaatst: (bewerkt)
Dan zou het als nog niet werken...

Mijn code is nu alsvolgt:

 Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long

Private Sub Form_Load()
Dim StoreGTA As Long

' Vind het GTA-SanAndreas Window
strFirst = FindWindow(vbNullString, "GTA: San Andreas")

' Haal de PID van het window op en sla deze op in de
' StoreGTA long variable
strSecond = GetWindowThreadProcessId(strFirst, StoreGTA)

' Open het GTA process met alle rechten
strAndere_1 = OpenProcess(PROCESS_ALL_ACCESS, 0, StoreGTA)

' Lees het GTA geheugen
strAndere_2 = ReadProcessMemory(StoreGTA, "0xB6F5F0", player_ptr, 100, 100)
strAndere_3 = ReadProcessMemory(StoreGTA, "player_ptr + 0x14", pos_ptr, 100, 100)
strAndere_4 = ReadProcessMemory(StoreGTA, "pos_ptr + 0x30", XPos, 100, 100)
strAndere_5 = ReadProcessMemory(StoreGTA, "pos_ptr + 0x34", YPos, 100, 100)
strAndere_6 = ReadProcessMemory(StoreGTA, "pos_ptr + 0x38", ZPos, 100, 100)

' Laat de details zien
MsgBox "GTA San Andreas:" & Chr(13) & Chr(13) & "PID: " & StoreGTA & Chr(13) & "X-Coords: " & XPos & Chr(13) & "Y-Coords: " & YPos & Chr(13) & "Z-Coords: " & ZPos, vbOKOnly, "GTA San Andreas"

End
End Sub

'								GTA San Andreas
'				  Lees geheugen en haal de Player coordinaten op

Hij leest aleen de coordinaten niet..

Wat is het probleem?

Ik heb geen verstand van visual basic, maar moet je niet gewoon gegevenstype toewijzen aan die variablen? :?

Bewerkt: door Mania-92
Geplaatst:

Oh wat een prachtige taal is die VB6 toch (ironie!)

Om te beginnen zet bovenaan eens

Option Explicit

Ten tweede slaat die "As Any" nergens op in de declaratie van ReadProcessMemory, dat zou een offset moeten zijn, dus maak daar maar eens "As Long" van.

Probeer nu je proggie te starten met "CTRL+F5" en geniet van de honderden fouten....

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...