Загрузка данных
import cv2
import mss
import numpy as np
import pydirectinput
import time
print("ИИ для Нокаута запущен! Жду входа в бой...")
# Размеры захвата под твой эмулятор BlueStacks слева
monitor = {"top": 0, "left": 0, "width": 650, "height": 370}
# ИДЕАЛЬНАЯ ЦВЕТОВАЯ ПАЛИТРА ИЗ ТВОИХ СКРИНШОТОВ (HSV)
# 1. Твоя зеленая полоска
lower_green = np.array([35, 50, 50])
upper_green = np.array([85, 255, 255])
# 2. Голубая полоска союзника
lower_blue = np.array([90, 50, 50])
upper_blue = np.array([130, 255, 255])
# 3. Красная полоска врага
lower_red1 = np.array([0, 70, 50])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([170, 70, 50])
upper_red2 = np.array([180, 255, 255])
with mss.mss() as sct:
while True:
screenshot = sct.grab(monitor)
frame = np.array(screenshot)
frame = cv2.cvtColor(frame, cv2.COLOR_BGRA2BGR)
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
in_battle = False
mask_g = cv2.inRange(hsv, lower_green, upper_green)
mask_r1 = cv2.inRange(hsv, lower_red1, upper_red1)
mask_r2 = cv2.inRange(hsv, lower_red2, upper_red2)
mask_r = cv2.bitwise_or(mask_r1, mask_r2)
contours_g, _ = cv2.findContours(mask_g, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours_r, _ = cv2.findContours(mask_r, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
if len(contours_g) > 0 or len(contours_r) > 0:
in_battle = True
if not in_battle:
pydirectinput.keyUp('w')
pydirectinput.keyUp('s')
cv2.imshow("AI Vision - Waiting for Battle", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
continue
me_x, me_y = None, None
enemy_detected = False
enemy_x, enemy_y = None, None
screen_center_x = 650 // 2
screen_center_y = 370 // 2
closest_dist = 99999
# Засекаем СЕБЯ
for contour in contours_g:
if cv2.contourArea(contour) > 120:
x, y, w, h = cv2.boundingRect(contour)
if w > h * 2.5 and w < h * 5.5:
dist = abs(x + w//2 - screen_center_x) + abs(y + h//2 - screen_center_y)
if dist < closest_dist:
closest_dist = dist
me_x, me_y = x + w//2, y + h//2
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(frame, "ME", (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
# Засекаем СОЮЗНИКОВ
mask_b = cv2.inRange(hsv, lower_blue, upper_blue)
contours_b, _ = cv2.findContours(mask_b, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours_b:
if cv2.contourArea(contour) > 120:
x, y, w, h = cv2.boundingRect(contour)
if w > h * 2.5 and w < h * 5.5:
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 255, 0), 2)
cv2.putText(frame, "TEAMMATE", (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 0), 2)
# Засекаем ВРАГОВ
for contour in contours_r:
if cv2.contourArea(contour) > 120:
x, y, w, h = cv2.boundingRect(contour)
if w > h * 2.5 and w < h * 5.5:
enemy_detected = True
enemy_x, enemy_y = x + w//2, y + h//2
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.putText(frame, "ENEMY", (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
# АЛГОРИТМ УПРАВЛЕНИЯ И МАНСОВ
if enemy_detected and me_x is not None:
y_distance = enemy_y - me_y
# Если враг близко — мансуем назад на кнопку S
if abs(y_distance) < 120:
print("⚠️ ВРАГ БЛИЗКО! Активирую мансы назад!")
pydirectinput.keyUp('w')
pydirectinput.keyDown('s')
time.sleep(0.05)
pydirectinput.keyUp('s')
else:
# Если далеко — сближаемся на кнопку W
pydirectinput.keyUp('s')
pydirectinput.keyDown('w')
time.sleep(0.05)
pydirectinput.keyUp('w')
# Авто-атака кликом в зону прицела BlueStacks
pydirectinput.click(570, 240)
# Прокаст комбо Гиперзаряд (F) + Ульта (E)
pydirectinput.press('f')
pydirectinput.press('e')
else:
pydirectinput.keyUp('w')
pydirectinput.keyUp('s')
cv2.imshow("AI Vision - Pro Battle Mode", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
pydirectinput.keyUp('w')
pydirectinput.keyUp('s')
break
cv2.destroyAllWindows()
print("Бот полностью остановлен.")