Загрузка данных


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()