Загрузка данных
import pymem
import pymem.process
import ctypes
import time
import math
dwLocalPlayer = 0x1A29B8
dwEntityList = 0x1A2A78
m_iTeamNum = 0xF0
m_iHealth = 0x1F8
m_vecOrigin = 0x130
m_vecViewOffset = 0x104
m_angRotation = 0x110
pm = pymem.Pymem("hl.exe")
client = pymem.process.module_from_name(pm.process_handle, "hw.dll")
client_base = client.lpBaseOfDll
engine = pymem.process.module_from_name(pm.process_handle, "hw.dll") # или sw.dll
engine_base = engine.lpBaseOfDll
# Функция TraceLine (движковая)
def trace_line(start, end, ignore_player):
# Вызываем движковую функцию UTIL_TraceLine
# Для CS 1.6 адрес функции обычно: engine_base + 0x23A6A0
# Этот метод сложен, поэтому используем упрощённый вариант:
# Проверяем попадание через расчёт угла и дистанции
pass
# Упрощённый метод: проверка угла между направлением взгляда и направлением на врага
def is_looking_at_target(view_origin, view_angles, target_origin, fov=5):
# Направление взгляда игрока
forward = (
math.cos(math.radians(view_angles[1])) * math.cos(math.radians(view_angles[0])),
math.sin(math.radians(view_angles[1])) * math.cos(math.radians(view_angles[0])),
math.sin(math.radians(view_angles[0]))
)
# Направление на врага
delta = (
target_origin[0] - view_origin[0],
target_origin[1] - view_origin[1],
target_origin[2] - view_origin[2]
)
dist = math.sqrt(delta[0]**2 + delta[1]**2 + delta[2]**2)
if dist < 0.1:
return False
delta = (delta[0]/dist, delta[1]/dist, delta[2]/dist)
# Угол между векторами
dot = forward[0]*delta[0] + forward[1]*delta[1] + forward[2]*delta[2]
angle = math.degrees(math.acos(max(-1, min(1, dot))))
return angle < fov
def mouse_click():
ctypes.windll.user32.mouse_event(0x0002, 0, 0, 0, 0)
time.sleep(0.01)
ctypes.windll.user32.mouse_event(0x0004, 0, 0, 0, 0)
print("[+] Триггер-бот (RayTrace) запущен")
print("[+] Наведите прицел точно на врага -> выстрел")
while True:
try:
local_player = pm.read_int(client_base + dwLocalPlayer)
if local_player == 0:
time.sleep(0.05)
continue
# Координаты глаз игрока
origin = (
pm.read_float(local_player + m_vecOrigin),
pm.read_float(local_player + m_vecOrigin + 4),
pm.read_float(local_player + m_vecOrigin + 8)
)
view_offset = (
pm.read_float(local_player + m_vecViewOffset),
pm.read_float(local_player + m_vecViewOffset + 4),
pm.read_float(local_player + m_vecViewOffset + 8)
)
eye_pos = (origin[0] + view_offset[0], origin[1] + view_offset[1], origin[2] + view_offset[2])
# Углы обзора
angles = (
pm.read_float(local_player + m_angRotation),
pm.read_float(local_player + m_angRotation + 4)
)
local_team = pm.read_int(local_player + m_iTeamNum)
for i in range(1, 33):
entity = pm.read_int(client_base + dwEntityList + i * 4)
if entity == 0:
continue
entity_team = pm.read_int(entity + m_iTeamNum)
if entity_team == local_team:
continue
health = pm.read_int(entity + m_iHealth)
if health <= 0:
continue
entity_origin = (
pm.read_float(entity + m_vecOrigin),
pm.read_float(entity + m_vecOrigin + 4),
pm.read_float(entity + m_vecOrigin + 8)
)
entity_head = (entity_origin[0], entity_origin[1], entity_origin[2] + 60) # примерная высота головы
if is_looking_at_target(eye_pos, angles, entity_head, fov=3):
mouse_click()
print(f"[+] Выстрел по игроку {i}")
time.sleep(0.2) # пауза между выстрелами
except Exception as e:
pass
time.sleep(0.01)