Загрузка...

Script Tiggerboat Valorant Opensource

Thread in Python created by WhiteStockings Aug 6, 2025 at 3:04 AM. 36 views

  1. WhiteStockings
    WhiteStockings Topic starter Aug 6, 2025 at 3:04 AM 0 Jul 27, 2025

    Python
    import tkinter as tk
    import threading
    import time
    import os
    import sys
    import numpy as np
    import mss
    from pynput import mouse, keyboard
    import ctypes

    try:
    import win32api, win32gui, win32con
    except ImportError:
    print("библиотека pywin32 не установлена")
    sys.exit(1)

    KEY_TOGGLE_MODE = keyboard.Key.insert # кнопка переключения режима 1 режим типо одиночный и бурст
    KEY_HOLD = mouse.Button.x2 # кнопка удержания
    TAP_TIME = 0.040 # время между выстрелами
    BURST_COUNT = 3 # количество выстрелов
    BURST_COOLDOWN = 0.150 # время между очередями
    PIXEL_BOX = 3 # размер области поиска
    PIXEL_SENS = 60 # чувствительность поиска
    PIXEL_COLOR = np.array([254, 254, 64], dtype=np.uint8)

    class AppState:
    def __init__(self):
    self.is_active = False
    self.is_held = False
    self.running = True
    self.last_shot_time = 0
    self.lock = threading.Lock()
    user32 = ctypes.windll.user32
    self.screen_width = user32.GetSystemMetrics(0)
    self.screen_height = user32.GetSystemMetrics(1)
    center_x, center_y = self.screen_width // 2, self.screen_height // 2
    self.search_area = {"top": center_y - PIXEL_BOX, "left": center_x - PIXEL_BOX, "width": (PIXEL_BOX * 2) + 1, "height": (PIXEL_BOX * 2) + 1}

    class OSD(tk.Tk):
    def __init__(self, state: AppState):
    super().__init__()
    self.state = state
    self.status_text = tk.StringVar()
    self.overrideredirect(True)
    self.geometry("+10+10")
    self.attributes("-topmost", True); self.attributes("-alpha", 0.8); self.configure(bg="black")
    self.label = tk.Label(self, textvariable=self.status_text, font=("Segoe UI", 10, "bold"), fg="white", bg="black", padx=10, pady=5)
    self.label.pack()
    self.label.bind("<ButtonPress-1>", self.start_move); self.label.bind("<ButtonRelease-1>", self.stop_move); self.label.bind("<B1-Motion>", self.do_move)
    self.update_osd()

    def start_move(self, event): self.x, self.y = event.x, event.y
    def stop_move(self, event): self.x, self.y = None, None
    def do_move(self, event): self.geometry(f"+{self.winfo_x() + event.x - self.x}+{self.winfo_y() + event.y - self.y}")
    def update_osd(self):
    with self.state.lock:
    if not self.state.running: return
    if self.state.is_active: status_string = "BURST"
    else: status_string = "ON" if self.state.is_held else "OFF"
    self.status_text.set(f"STATUS: {status_string}")
    self.after(100, self.update_osd)

    def fire_loop(state: AppState):
    target_color_bgr = PIXEL_COLOR[::-1]

    def simulate_click(hwnd, delay):
    win32gui.PostMessage(hwnd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, 0)
    time.sleep(delay)
    win32gui.PostMessage(hwnd, win32con.WM_LBUTTONUP, 0, 0)

    with mss.mss() as sct:
    while state.running:
    if not state.is_held:
    time.sleep(0.01)
    continue

    img = sct.grab(state.search_area)
    frame = np.array(img, dtype=np.uint8)[:,:,:3]
    diff = np.abs(frame.astype(np.int16) - target_color_bgr)
    found = np.any(np.all(diff <= PIXEL_SENS, axis=2))

    if not found: continue

    hwnd = win32gui.GetForegroundWindow()
    current_time = time.monotonic()

    if state.is_active:
    if (current_time - state.last_shot_time) > BURST_COOLDOWN:
    with state.lock:
    if not state.is_held: continue
    state.last_shot_time = current_time
    for _ in range(BURST_COUNT):
    if not state.is_held: break
    simulate_click(hwnd, TAP_TIME)
    else:
    simulate_click(hwnd, 0.060)
    time.sleep(0.150)

    def setup_listeners(state: AppState):
    def on_click(x, y, button, pressed):
    if button == KEY_HOLD:
    with state.lock:
    state.is_held = pressed
    if not pressed: state.last_shot_time = 0

    def on_press(key):
    if key == KEY_TOGGLE_MODE:
    with state.lock: state.is_active = not state.is_active; state.last_shot_time = 0
    print(f"Режим изменен: {'BURST' if state.is_active else 'ON/OFF'}")

    print("Скрипт запущен. Закройте окно для выхода.");
    mouse_listener = mouse.Listener(on_click=on_click)
    keyboard_listener = keyboard.Listener(on_press=on_press)
    mouse_listener.start(); keyboard_listener.start()
    mouse_listener.join(); keyboard_listener.join()

    if __name__ == "__main__":
    app_state = AppState()
    osd = OSD(app_state)

    logic_thread = threading.Thread(target=fire_loop, args=(app_state,), daemon=True)
    listener_thread = threading.Thread(target=setup_listeners, args=(app_state,), daemon=True)
    logic_thread.start(); listener_thread.start()

    osd.mainloop()

    print("Окно закрыто. Завершение работы...")
    with app_state.lock:
    app_state.running = False
    os._exit(0)
    pip install pynput mss numpy keyboard pywin32
    How to setup, you need to set color yellow (Deuteranopia)
    [IMG]
    1. [IMG] bind you can switch a bind in main.py
    2. bind insert - swap modes tap mode - burst mode
    3. the software have a menu
    [IMG]
    Thanks for watching
    Goodluck in matches :D
     
Top
Loading...