m1ndgames_AI How do I cheat? Reputation: 0
Joined: 07 Mar 2021 Posts: 3
|
Posted: Sun Mar 07, 2021 9:33 am Post subject: Python cTypes - int too long to convert |
|
|
Hi,
im trying to access the health values for streetfighter2 in snes emu via python ctypes, and i get an error:
Code: | (skullgirls) C:\skullgirls>serpent play sf2 SerpentryuGameAgent
{'width': 512, 'height': 448, 'x_offset': 8, 'y_offset': 51}
Using TensorFlow backend.
2021-03-07 16:25:08.376221: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_100.dll
5368709120
<class 'int'>
Traceback (most recent call last):
File "c:\anaconda3\envs\skullgirls\lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "c:\anaconda3\envs\skullgirls\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\Anaconda3\envs\skullgirls\Scripts\serpent.exe\__main__.py", line 7, in <module>
File "c:\anaconda3\envs\skullgirls\lib\site-packages\serpent\serpent.py", line 52, in execute
command_function_mapping[command](*sys.argv[2:])
File "c:\anaconda3\envs\skullgirls\lib\site-packages\serpent\serpent.py", line 369, in play
game.play(game_agent_class_name=game_agent_name, frame_handler=frame_handler)
File "c:\anaconda3\envs\skullgirls\lib\site-packages\serpent\game.py", line 201, in play
raise e
File "c:\anaconda3\envs\skullgirls\lib\site-packages\serpent\game.py", line 192, in play
game_agent.on_game_frame(game_frame, frame_handler=frame_handler, **kwargs)
File "c:\anaconda3\envs\skullgirls\lib\site-packages\serpent\game_agent.py", line 115, in on_game_frame
frame_handler(game_frame, **kwargs)
File "C:\skullgirls\plugins\SerpentryuGameAgentPlugin\files\serpent_ryu_game_agent.py", line 157, in handle_play
(self.p1hp, self.p2hp) = readhp()
File "C:\skullgirls\plugins\SerpentryuGameAgentPlugin\files\helpers\memory.py", line 22, in readhp
r1 = ReadProcessMemory(processHandle, BaseAddress + 0x008D8E38, byref(player_one), 2, byref(numRead))
ctypes.ArgumentError: argument 2: <class 'OverflowError'>: int too long to convert
(skullgirls) C:\skullgirls> |
my code:
Code: | import ctypes
import win32process
import win32ui
from ctypes import *
def readhp():
ReadProcessMemory = windll.kernel32.ReadProcessMemory
PROCESS_ALL_ACCESS = 0x1F0FFF
HWND = win32ui.FindWindow(None, u"StreetFighterIITurbo - Snes9x 1.60").GetSafeHwnd()
PID = win32process.GetWindowThreadProcessId(HWND)[1]
processHandle = ctypes.windll.kernel32.OpenProcess(PROCESS_ALL_ACCESS, False, PID)
BaseAddress = win32process.EnumProcessModules(processHandle)[0]
numRead = c_int()
print(str(BaseAddress))
print(str(type(BaseAddress)))
# read fighters hp:
player_one = c_int()
r1 = ReadProcessMemory(processHandle, BaseAddress + 0x008D8E38, byref(player_one), 2, byref(numRead))
print(str(r1))
print(str(type(r1)))
p1hp = int(player_one.value)
player_two = c_int()
ReadProcessMemory(processHandle, BaseAddress + 0x008D8CB8, byref(player_two), 2, byref(numRead))
p2hp = int(player_two.value)
# Make sure HP cant be lower than 0
if p1hp < 0 or p1hp == 255:
p1hp = 0
if p2hp < 0 or p2hp == 255:
p2hp = 0
# Return HP
print(str(p1hp))
print(str(p2hp))
return p1hp, p2hp |
CheatEngine Screenshot that shows the address:
s20.directupload .net/images/210307/gwrf5eah.png
The same code worked for the game Skullgirls, im not sure what the issue is... snesx is 64bit, python is 64bit...
Any guesses?
|
|