Der Code ist echt unsauber programmiert. WinAPIs haben doch Rückgabvewerte auf die man prüfen sollte. Eine
Exception kann nur noch bei der Division (durch 0) auftreten. Und wenn du statt einem Single Real nimmst kommt ein ganz anderes ergebnis raus. Das macht absolut keinen Sinn was du da dann machst. Ich denke der Code stammt nicht von dir oder? Du liest außerdem aus einem dynamsichen Speicherbereich die Daten aus, was auch nicht wirklich "sauber" ist.
Irgendwie so würds jetzt umgewandelt aussehen (habs heir im Editor programmiert
)
Delphi-Quellcode:
function get_x(pid: Integer; offset_base: DWord; offset: Dword = $7C; Divider: Double = 10.0): Integer;
var
BaseAddress : DWord;
xRegionFloat : Single;
hProcess : THandle;
rBytes : Cardinal;
PositionInt : Byte;
begin
Result := 0;
if Divider <> 0 then
begin
hProcess := OpenProcess(PROCESS_VM_READ,False,pid);
if hProcess <> 0 then
begin
if ReadProcessMemory(hProcess, Pointer(offset_base), @baseAddress, SizeOf(baseAddress), rBytes) and
(rBytes = SizeOf(baseAddress)) and
ReadProcessMemory(hProcess, Pointer(baseAddress + offset), @xRegionFloat, SizeOf(xRegionFloat), rBytes) and
(rBytes = SizeOf(xRegionFloat)) and
ReadProcessMemory(hProcess, Pointer(baseAddress + offset+4), @PositionInt, SizeOf(PositionInt), rBytes) and
(rBytes = SizeOf(PositionInt)) then
result := Round(xRegionFloat / Divider + (PositionInt* 3 - $195) shl 6));
end;
end;
end;
Edit:
Du versuchst jetzt nicht seit 7 Monaten einen Cheat/Bot für Silkroad zu erstellen oder ^^