Загрузка данных
import pymem
import pymem.process
import time
# Смещения (если не знаете — оставьте, скрипт сам найдёт)
dwLocalPlayer = 0x1A29B8 # замените на своё, если знаете
m_iHealth = 0xF8 # замените на своё, если знаете
def find_local_player(pm, client_base):
"""Автоматический поиск LocalPlayer"""
for offset in range(0, 0x200000, 4):
try:
addr = client_base + offset
health = pm.read_int(addr)
if health == 100:
team = pm.read_int(addr - 0x8)
if team in (1, 2):
return offset - 0xF8, addr - 0xF8
except:
pass
return None, None
def main():
print("=" * 50)
print("Мониторинг здоровья CS 1.6")
print="=" * 50)
# Подключаемся к игре
try:
pm = pymem.Pymem("hl.exe")
print("[+] hl.exe найден")
except:
print("[-] hl.exe не найден! Запустите CS 1.6")
input()
return
# Получаем базу клиента
client = pymem.process.module_from_name(pm.process_handle, "hw.dll")
client_base = client.lpBaseOfDll
print(f"[+] hw.dll base: {hex(client_base)}")
# Ищем LocalPlayer
global dwLocalPlayer, m_iHealth
dwLocalPlayer, local_player_addr = find_local_player(pm, client_base)
if not dwLocalPlayer:
print("[-] Не удалось найти LocalPlayer автоматически")
print("[*] Использую стандартные смещения...")
dwLocalPlayer = 0x1A29B8
local_player_addr = pm.read_int(client_base + dwLocalPlayer)
if local_player_addr == 0:
print("[-] Стандартные смещения не работают. Убедитесь, что вы в катке.")
input()
return
print(f"[+] dwLocalPlayer = {hex(dwLocalPlayer)}")
print(f"[+] LocalPlayer адрес: {hex(local_player_addr)}")
# Ищем смещение здоровья, если не знаем
if m_iHealth == 0xF8:
# Проверяем стандартное смещение
test_health = pm.read_int(local_player_addr + 0xF8)
if test_health == 100 or test_health > 0:
print(f"[+] m_iHealth = 0xF8 (значение: {test_health})")
else:
# Ищем вручную
print("[*] Поиск m_iHealth...")
found = False
for offset in range(0, 0x200, 4):
try:
val = pm.read_int(local_player_addr + offset)
if val == 100 or (0 < val < 100):
print(f"[+] m_iHealth = {hex(offset)} (значение: {val})")
m_iHealth = offset
found = True
break
except:
pass
if not found:
print("[-] Не удалось найти m_iHealth")
input()
return
print("\n[*] Мониторинг запущен. Наносите урон себе или получайте его.")
print("[*] Каждое изменение HP будет показано. Нажмите Ctrl+C для выхода.\n")
last_health = None
try:
while True:
local_player = pm.read_int(client_base + dwLocalPlayer)
if local_player:
current_health = pm.read_int(local_player + m_iHealth)
if current_health != last_health:
if last_health is not None:
diff = current_health - last_health
if diff < 0:
print(f"[!] Здоровье изменилось: {last_health} -> {current_health} (урон: {abs(diff)})")
else:
print(f"[+] Здоровье изменилось: {last_health} -> {current_health} (восстановление: {diff})")
else:
print(f"[*] Текущее здоровье: {current_health}")
last_health = current_health
time.sleep(0.05) # проверка каждые 50 мс
except KeyboardInterrupt:
print("\n[*] Мониторинг остановлен.")
if __name__ == "__main__":
main()