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


import pymem
import pymem.process
import ctypes
import time
import math
import sys

# Windows API для мыши
user32 = ctypes.windll.user32

# Настройки
AIMBOT_ENABLED = True
AIM_FOV = 30          # угол поиска врага (чем меньше, тем точнее)
AIM_SMOOTH = 5        # плавность (1 - мгновенно, больше - плавнее)
AIM_KEY = 0x02        # правая кнопка мыши (0x02 = RMB, 0x04 = средняя)
AIM_HEAD = True       # наводить в голову (True) или в тело (False)

def get_angle(source, destination):
    """Вычисляет углы для наведения из source в destination"""
    delta_x = source[0] - destination[0]
    delta_y = source[1] - destination[1]
    delta_z = source[2] - destination[2]
    
    hyp = math.sqrt(delta_x * delta_x + delta_y * delta_y)
    angle_x = math.atan(delta_z / hyp) * (180.0 / math.pi)
    angle_y = math.atan(delta_y / delta_x) * (180.0 / math.pi)
    
    if delta_x >= 0.0:
        angle_y += 180.0
    
    return [angle_x, angle_y]

def normalize_angle(angle):
    """Нормализует углы"""
    if angle[0] > 89.0:
        angle[0] = 89.0
    if angle[0] < -89.0:
        angle[0] = -89.0
    while angle[1] > 180.0:
        angle[1] -= 360.0
    while angle[1] < -180.0:
        angle[1] += 360.0
    return angle

def smooth_angle(current, target, smooth):
    """Плавное наведение"""
    delta_x = target[0] - current[0]
    delta_y = target[1] - current[1]
    if smooth > 0:
        return [current[0] + delta_x / smooth, current[1] + delta_y / smooth]
    return target

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
        except:
            pass
    return None

def find_entity_list(pm, client_base, dw_local):
    """Автоматический поиск EntityList"""
    # Стандартное смещение
    entity_list = dw_local + 0xC0
    test = pm.read_int(client_base + entity_list)
    if test:
        return entity_list
    # Поиск
    for offset in range(0xC0, 0x100, 4):
        try:
            test = pm.read_int(client_base + offset)
            if test and 0 < test < 0xFFFFFFFF:
                return offset
        except:
            pass
    return None

def find_view_matrix(pm, client_base):
    """Автоматический поиск ViewMatrix"""
    for offset in range(0x120000, 0x130000, 16):
        try:
            # Проверяем, похоже ли на матрицу
            good = True
            for i in range(4):
                val = pm.read_float(client_base + offset + i*4)
                if abs(val) > 5:
                    good = False
                    break
            if good:
                return offset
        except:
            pass
    return None

def main():
    print("=== CS 1.6 Aimbot ===")
    print("Rutube: https://rutube.ru/channel/43805541")
    print("Telegram: hackeriks")
    print()
    
    # Подключаемся к игре
    try:
        pm = pymem.Pymem("hl.exe")
        print("[+] hl.exe найден")
    except:
        print("[-] CS 1.6 не запущена")
        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
    print("[*] Поиск LocalPlayer...")
    dw_local = find_local_player(pm, client_base)
    if not dw_local:
        print("[-] Не найден. Убедитесь, что вы в катке живым.")
        return
    print(f"[+] dwLocalPlayer = {hex(dw_local)}")
    
    # Ищем EntityList
    print("[*] Поиск EntityList...")
    dw_entity = find_entity_list(pm, client_base, dw_local)
    if not dw_entity:
        print("[-] EntityList не найден. Использую стандартный.")
        dw_entity = 0x1A2A78
    print(f"[+] dwEntityList = {hex(dw_entity)}")
    
    # Ищем ViewMatrix
    print("[*] Поиск ViewMatrix...")
    dw_view = find_view_matrix(pm, client_base)
    if not dw_view:
        print("[-] ViewMatrix не найден. Использую стандартный.")
        dw_view = 0x12EAF0
    print(f"[+] dwViewMatrix = {hex(dw_view)}")
    
    # Получаем окно для размеров экрана
    hwnd = user32.FindWindowW(None, "Counter-Strike")
    rect = ctypes.wintypes.RECT()
    user32.GetWindowRect(hwnd, ctypes.byref(rect))
    screen_w = rect.right - rect.left
    screen_h = rect.bottom - rect.top
    
    print(f"\n[*] Aimbot запущен. Зажмите ПРАВУЮ кнопку мыши для наведения.")
    print("[*] F1 - Включить/Выключить")
    
    global AIMBOT_ENABLED
    last_angles = [0, 0]
    
    while True:
        # F1 для вкл/выкл
        if user32.GetAsyncKeyState(0x70) & 1:
            AIMBOT_ENABLED = not AIMBOT_ENABLED
            print(f"Aimbot: {'ON' if AIMBOT_ENABLED else 'OFF'}")
            time.sleep(0.2)
        
        if not AIMBOT_ENABLED:
            time.sleep(0.05)
            continue
        
        # Проверка зажатой клавиши аима (правая кнопка)
        if not (user32.GetAsyncKeyState(AIM_KEY) & 0x8000):
            time.sleep(0.01)
            continue
        
        try:
            # Получаем локального игрока
            local_player = pm.read_int(client_base + dw_local)
            if not local_player:
                continue
            
            # Координаты глаз игрока
            origin_x = pm.read_float(local_player + 0x130)
            origin_y = pm.read_float(local_player + 0x134)
            origin_z = pm.read_float(local_player + 0x138)
            view_offset_z = pm.read_float(local_player + 0x104 + 8)
            eye_pos = [origin_x, origin_y, origin_z + view_offset_z]
            
            # Текущие углы
            current_angle_x = pm.read_float(local_player + 0x110)
            current_angle_y = pm.read_float(local_player + 0x114)
            current_angle = [current_angle_x, current_angle_y]
            
            local_team = pm.read_int(local_player + 0xF0)
            best_fov = AIM_FOV
            best_angles = None
            
            # Матрица вида
            view_matrix = [0] * 16
            for i in range(16):
                view_matrix[i] = pm.read_float(client_base + dw_view + i * 4)
            
            # Поиск врагов
            for i in range(1, 32):
                entity = pm.read_int(client_base + dw_entity + i * 4)
                if not entity:
                    continue
                
                entity_team = pm.read_int(entity + 0xF0)
                if entity_team == local_team:
                    continue
                
                health = pm.read_int(entity + 0xF8)
                if health <= 0:
                    continue
                
                # Координаты цели
                target_x = pm.read_float(entity + 0x130)
                target_y = pm.read_float(entity + 0x134)
                target_z = pm.read_float(entity + 0x138)
                
                if AIM_HEAD:
                    target_z += 60.0  # голова
                else:
                    target_z += 30.0  # тело
                
                target_pos = [target_x, target_y, target_z]
                
                # Вычисляем углы до цели
                angles = get_angle(eye_pos, target_pos)
                angles = normalize_angle(angles)
                
                # Разница с текущими углами
                delta_x = abs(angles[0] - current_angle[0])
                delta_y = abs(angles[1] - current_angle[1])
                fov = math.sqrt(delta_x * delta_x + delta_y * delta_y)
                
                if fov < best_fov:
                    best_fov = fov
                    best_angles = angles
            
            # Наводим на цель
            if best_angles:
                new_angles = smooth_angle(current_angle, best_angles, AIM_SMOOTH)
                new_angles = normalize_angle(new_angles)
                pm.write_float(local_player + 0x110, new_angles[0])
                pm.write_float(local_player + 0x114, new_angles[1])
                
        except Exception as e:
            pass
        
        time.sleep(0.005)

if __name__ == "__main__":
    main()