qbdown Geplaatst: 16 februari 2007 Rapport Geplaatst: 16 februari 2007 Hoe kan je de player coordinaten verkrijgen in VB6 van GTA San Andreas? Dankjewel Reageren
Fuffie Geplaatst: 16 februari 2007 Rapport Geplaatst: 16 februari 2007 (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. Klik hier voor het San Andreas forum Ik meld dit even bij de Moderators. Bewerkt: 16 februari 2007 door fuffie Reageren
Mania-92 Geplaatst: 16 februari 2007 Rapport Geplaatst: 16 februari 2007 (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. JGuntherS zal het wel weten, ik zie dat hij het topic al "bezoekt" dus dat komt wel goed. Bewerkt: 16 februari 2007 door Mania-92 Reageren
Fuffie Geplaatst: 16 februari 2007 Rapport Geplaatst: 16 februari 2007 Niet opgemerkt sorry. Reageren
Thundercover Geplaatst: 17 februari 2007 Rapport Geplaatst: 17 februari 2007 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 Reageren
JGuntherS Geplaatst: 17 februari 2007 Rapport Geplaatst: 17 februari 2007 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. EDIT: De functiedeclaratie van ReadProcessMemory was niet goed, bijgewerkt! Reageren
qbdown Geplaatst: 18 februari 2007 Auteur Rapport Geplaatst: 18 februari 2007 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? Reageren
JGuntherS Geplaatst: 18 februari 2007 Rapport Geplaatst: 18 februari 2007 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. Reageren
qbdown Geplaatst: 20 februari 2007 Auteur Rapport Geplaatst: 20 februari 2007 (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: 22 februari 2007 door Robbin237 Reageren
JGuntherS Geplaatst: 21 februari 2007 Rapport Geplaatst: 21 februari 2007 Kan je hiervan een voorbeeld geven?(Kant en klaare code) Ik kan niet zo goed VB, lang geleden . 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. Reageren
qbdown Geplaatst: 22 februari 2007 Auteur Rapport Geplaatst: 22 februari 2007 (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: 22 februari 2007 door Robbin237 Reageren
Mania-92 Geplaatst: 22 februari 2007 Rapport Geplaatst: 22 februari 2007 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"... Reageren
qbdown Geplaatst: 22 februari 2007 Auteur Rapport Geplaatst: 22 februari 2007 (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: 22 februari 2007 door Robbin237 Reageren
Mania-92 Geplaatst: 22 februari 2007 Rapport Geplaatst: 22 februari 2007 (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: 22 februari 2007 door Mania-92 Reageren
Goudvis Geplaatst: 22 februari 2007 Rapport Geplaatst: 22 februari 2007 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.... Reageren
Recommended Posts
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.