Open adrianozanetti1978 opened 7 months ago
Hi! Sorry, missed this one. I don't see camber reported in the shared memory. If you can you identify it, please let me know the variable name and I'll add it.
value and memory and camber
Camber: 1.3125410092129641e-08 memory: 845250090
<?xml version="1.0" encoding="utf-8"?>
ah, you are getting the values directly from the game memory. Unfortunately, the current approach is using the shared memory only. If I get time I might look at how it could be done, but do you know if that location is likely to change if the game is updated?
Yes, I'm using a project I made, very easy to use to extract this data, if you have time I can help you test it. If it doesn't take up your time...
import ctypes import psutil import time
for processo in psutil.process_iter(['pid', 'name']): if processo.info['name'] == 'AMS2AVX.exe': AMS2AVX_PID = processo.info['pid'] break else: raise RuntimeError("Processo AMS2AVX.exe não encontrado")
processo = ctypes.windll.kernel32.OpenProcess(0x10, False, AMS2AVX_PID)
if processo:
endereco = 169345024
# Buffer para armazenar os dados lidos
buffer = ctypes.c_int()
# Leitura da memória
ctypes.windll.kernel32.ReadProcessMemory(processo, endereco, ctypes.byref(buffer), ctypes.sizeof(buffer), None)
# Valor lido
valor = buffer.value
print("Valor lido:", valor)
# Fecha o processo
ctypes.windll.kernel32.CloseHandle(processo)
else: print("Não foi possível abrir o processo do jogo.")
def ler_camber(pid, endereco): processo = ctypes.windll.kernel32.OpenProcess(0x10, False, pid) if processo: valor_camber = ctypes.c_float() ctypes.windll.kernel32.ReadProcessMemory(processo, endereco, ctypes.byref(valor_camber), ctypes.sizeof(valor_camber), None) ctypes.windll.kernel32.CloseHandle(processo) return valor_camber.value else: print("Não foi possível abrir o processo do jogo.") return None
def ler_cambagem(pid, endereco): processo = ctypes.windll.kernel32.OpenProcess(0x10, False, pid) if processo: valor_cambagem = ctypes.c_float() endereco_c = ctypes.cast(endereco, ctypes.POINTER(ctypes.c_void_p)) ctypes.windll.kernel32.ReadProcessMemory(processo, endereco_c, ctypes.byref(valor_cambagem), ctypes.sizeof(valor_cambagem), None) ctypes.windll.kernel32.CloseHandle(processo) return valor_cambagem.value else: print("Não foi possível abrir o processo do jogo.") return None
AMS2_PID = AMS2AVX_PID # Substitua 1234 pelo PID real do Automobilista 2
endereco_camber = 169345024 # Substitua pelo endereço real (em hexadecimal)
endereco_cambagem_dianteira_esquerda = int("0x142628F8C", 16) # Substitua pelo endereço real endereco_cambagem_dianteira_direita = int("142628FDC", 16) # Substitua pelo endereço real endereco_cambagem_traseira_esquerda = int("14262902C", 16) # Substitua pelo endereço real endereco_cambagem_traseira_direita = int("14262907C", 16) # Substitua pelo endereço real
while True: cambagem_dianteira_esquerda = ler_cambagem(AMS2_PID, endereco_cambagem_dianteira_esquerda) cambagem_dianteira_direita = ler_cambagem(AMS2_PID, endereco_cambagem_dianteira_direita) cambagem_traseira_esquerda = ler_cambagem(AMS2_PID, endereco_cambagem_traseira_esquerda) cambagem_traseira_direita = ler_cambagem(AMS2_PID, endereco_cambagem_traseira_direita)
if None not in [cambagem_dianteira_esquerda, cambagem_dianteira_direita, cambagem_traseira_esquerda,
cambagem_traseira_direita]:
print("Cambagem Dianteira Esquerda:", cambagem_dianteira_esquerda)
print("Cambagem Dianteira Direita:", cambagem_dianteira_direita)
print("Cambagem Traseira Esquerda:", cambagem_traseira_esquerda)
print("Cambagem Traseira Direita:", cambagem_traseira_direita)
time.sleep(1) # Aguarda 1 segundo antes de ler novamente (pode ajustar conforme necessário)
break
Is there no possibility of an update yet, bringing camber data extraction to AM2?