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


import tkinter as tk
from tkinter import ttk
import random
import math
import time

# ==================== ГЛАВНОЕ ОКНО ====================
root = tk.Tk()
root.title("Nursultan Client | Inspired")
root.geometry("800x500")
root.configure(bg="#0a0a0f")
root.overrideredirect(True)  # Убираем стандартную рамку

# ==================== GLOBAL VARS ====================
particles = []
snowflakes = []
matrix_columns = []
glitch_active = False
glitch_offset = 0

# ==================== КАНВАС ДЛЯ ВИЗУАЛОВ ====================
canvas = tk.Canvas(root, bg="#0a0a0f", highlightthickness=0)
canvas.pack(fill="both", expand=True)

# ==================== СОЗДАНИЕ КАСТОМНОЙ РАМКИ ====================
# Верхняя панель перетаскивания
title_bar = tk.Frame(canvas, bg="#0d0d18", height=30)
title_bar.pack(fill="x", side="top")

title_label = tk.Label(
    title_bar,
    text="◆ NURSULTAN CLIENT  [MM2 INSPIRED]",
    fg="#00d4ff",
    bg="#0d0d18",
    font=("Courier New", 10, "bold"),
)
title_label.pack(side="left", padx=10)

close_btn = tk.Label(
    title_bar,
    text="✕",
    fg="#ff4444",
    bg="#0d0d18",
    font=("Arial", 12, "bold"),
    cursor="hand2",
)
close_btn.pack(side="right", padx=10)
close_btn.bind("<Button-1>", lambda e: root.destroy())

# Перетаскивание окна
def start_move(event):
    root.x = event.x
    root.y = event.y

def do_move(event):
    deltax = event.x - root.x
    deltay = event.y - root.y
    x = root.winfo_x() + deltax
    y = root.winfo_y() + deltay
    root.geometry(f"+{x}+{y}")

title_bar.bind("<Button-1>", start_move)
title_bar.bind("<B1-Motion>", do_move)
title_label.bind("<Button-1>", start_move)
title_label.bind("<B1-Motion>", do_move)

# ==================== ОСНОВНОЙ КОНТЕНТ ====================
main_frame = tk.Frame(canvas, bg="#0a0a0f")
main_frame.pack(fill="both", expand=True, padx=2, pady=2)

# Левая панель (категории)
left_panel = tk.Frame(main_frame, bg="#0d0d18", width=160)
left_panel.pack(side="left", fill="y")
left_panel.pack_propagate(False)

# Заголовок категорий
cat_header = tk.Label(
    left_panel,
    text="◆ CATEGORIES",
    fg="#00d4ff",
    bg="#0d0d18",
    font=("Courier New", 10, "bold"),
    anchor="w",
)
cat_header.pack(fill="x", padx=10, pady=(15, 10))

# Категории
categories = ["AIMBOT", "ESP", "VISUALS", "MISC", "SETTINGS"]
cat_buttons = []

for cat in categories:
    btn = tk.Label(
        left_panel,
        text=f"  › {cat}",
        fg="#8899aa",
        bg="#0d0d18",
        font=("Courier New", 9),
        anchor="w",
        cursor="hand2",
        padx=10,
        pady=5,
    )
    btn.pack(fill="x", padx=5, pady=1)
    btn.bind("<Enter>", lambda e, b=btn: b.configure(fg="#00d4ff", bg="#12122a"))
    btn.bind("<Leave>", lambda e, b=btn: b.configure(fg="#8899aa", bg="#0d0d18"))
    cat_buttons.append(btn)

# Версия и статус снизу
status_label = tk.Label(
    left_panel,
    text="● STATUS: UNDETECTED",
    fg="#00ff88",
    bg="#0d0d18",
    font=("Courier New", 7),
    anchor="w",
)
status_label.pack(side="bottom", fill="x", padx=10, pady=10)

# Правая панель (функции)
right_panel = tk.Frame(main_frame, bg="#0f0f1c")
right_panel.pack(side="left", fill="both", expand=True)

# Заголовок функций
func_header = tk.Label(
    right_panel,
    text="◆ FUNCTIONS — AIMBOT",
    fg="#00d4ff",
    bg="#0f0f1c",
    font=("Courier New", 10, "bold"),
    anchor="w",
)
func_header.pack(fill="x", padx=15, pady=(15, 10))

# Область с переключателями
toggle_frame = tk.Frame(right_panel, bg="#0f0f1c")
toggle_frame.pack(fill="both", expand=True, padx=15, pady=5)

# Функции-переключатели
functions_aimbot = [
    ("Silent Aim", True),
    ("Aim Lock", False),
    ("Trigger Bot", True),
    ("Smooth Aim", False),
    ("FOV Circle", True),
    ("Auto Shoot", False),
]

toggle_vars = []
for i, (name, default) in enumerate(functions_aimbot):
    var = tk.BooleanVar(value=default)
    toggle_vars.append(var)

    frame = tk.Frame(toggle_frame, bg="#0f0f1c")
    frame.pack(fill="x", pady=3)

    # Полосатый индикатор
    indicator = tk.Label(
        frame,
        text="▎",
        fg="#00d4ff" if default else "#334455",
        bg="#0f0f1c",
        font=("Courier New", 8),
    )
    indicator.pack(side="left", padx=(0, 5))

    # Название функции
    func_label = tk.Label(
        frame,
        text=name,
        fg="#ccddff" if default else "#667788",
        bg="#0f0f1c",
        font=("Courier New", 9),
        anchor="w",
        width=18,
    )
    func_label.pack(side="left")

    # Кнопка-переключатель
    toggle_btn = tk.Label(
        frame,
        text="● ON" if default else "○ OFF",
        fg="#00ff88" if default else "#ff4444",
        bg="#0f0f1c",
        font=("Courier New", 9, "bold"),
        cursor="hand2",
        width=6,
    )
    toggle_btn.pack(side="right", padx=5)

    def make_toggle(var=var, btn=None, ind=None, fl=None):
        def toggle():
            var.set(not var.get())
            if var.get():
                btn.configure(text="● ON", fg="#00ff88")
                ind.configure(fg="#00d4ff")
                fl.configure(fg="#ccddff")
            else:
                btn.configure(text="○ OFF", fg="#ff4444")
                ind.configure(fg="#334455")
                fl.configure(fg="#667788")
        return toggle

    toggle_btn.configure(
        command=make_toggle(var, toggle_btn, indicator, func_label)
    )
    toggle_btn.bind("<Button-1>", lambda e, b=toggle_btn: b.invoke())

# ==================== ВИЗУАЛЬНЫЕ ЭФФЕКТЫ (КАНВАС) ====================
# Частицы
class Particle:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.vx = random.uniform(-0.5, 0.5)
        self.vy = random.uniform(-1.5, -0.2)
        self.life = random.randint(30, 80)
        self.max_life = self.life
        self.size = random.randint(1, 3)

    def update(self):
        self.x += self.vx
        self.y += self.vy
        self.life -= 1
        return self.life > 0

# Матричный дождь
class MatrixDrop:
    def __init__(self, x):
        self.x = x
        self.y = random.randint(-500, -20)
        self.speed = random.randint(3, 8)
        self.chars = []
        self.length = random.randint(8, 20)
        for _ in range(self.length):
            self.chars.append(chr(random.randint(0x30A0, 0x30FF)))

    def update(self):
        self.y += self.speed
        return self.y < 550

# Снежинки
class Snowflake:
    def __init__(self):
        self.x = random.randint(0, 800)
        self.y = random.randint(-50, -5)
        self.size = random.randint(1, 3)
        self.speed = random.uniform(0.5, 2)
        self.wind = random.uniform(-0.3, 0.3)

    def update(self):
        self.y += self.speed
        self.x += self.wind
        if self.x < 0:
            self.x = 800
        elif self.x > 800:
            self.x = 0
        return self.y < 550

# Инициализация визуалов
for _ in range(15):
    matrix_columns.append(MatrixDrop(random.randint(0, 800)))

def spawn_particles(x, y):
    for _ in range(5):
        particles.append(Particle(x, y))

def update_visuals():
    global glitch_active, glitch_offset

    # Очистка частиц
    canvas.delete("particle")
    canvas.delete("matrix")
    canvas.delete("snow")

    # Обновление и отрисовка частиц
    for p in particles[:]:
        if p.update():
            alpha = p.life / p.max_life
            color = f"#{int(0x00*alpha):02x}{int(0xd4*alpha):02x}{int(0xff*alpha):02x}"
            canvas.create_oval(
                p.x - p.size,
                p.y - p.size,
                p.x + p.size,
                p.y + p.size,
                fill=color,
                outline="",
                tags="particle",
            )
        else:
            particles.remove(p)

    # Обновление матричного дождя
    for col in matrix_columns:
        if not col.update():
            col.y = random.randint(-500, -20)
        for i, char in enumerate(col.chars):
            cy = col.y + i * 14
            if 0 < cy < 550:
                alpha = 1 - (i / col.length)
                if i == 0:
                    color = "#ffffff"
                elif i < 3:
                    color = "#00d4ff"
                else:
                    color = f"#{int(0x00*alpha):02x}{int(0x66*alpha):02x}{int(0x44*alpha):02x}"
                canvas.create_text(
                    col.x,
                    cy,
                    text=char,
                    fill=color,
                    font=("Courier New", 10),
                    tags="matrix",
                )

    # Снежинки
    for _ in range(2):
        snowflakes.append(Snowflake())
    for s in snowflakes[:]:
        if s.update():
            canvas.create_oval(
                s.x - s.size,
                s.y - s.size,
                s.x + s.size,
                s.y + s.size,
                fill="#aaddff",
                outline="",
                tags="snow",
            )
        else:
            snowflakes.remove(s)
    # Ограничение количества снежинок
    while len(snowflakes) > 80:
        snowflakes.pop(0)

    # Эффект глитча (случайный)
    if random.random() < 0.02:
        glitch_active = True
        glitch_offset = random.randint(-5, 5)

    if glitch_active:
        glitch_active = False
        # Кратковременное смещение окна
        x = root.winfo_x() + glitch_offset
        y = root.winfo_y() + random.randint(-2, 2)
        root.geometry(f"+{x}+{y}")
        glitch_offset = 0

    root.after(50, update_visuals)

# ==================== ЗАПУСК ====================
# Спавн частиц при движении мыши
def on_mouse_move(event):
    if event.widget == right_panel or event.widget == toggle_frame:
        spawn_particles(event.x_root - root.winfo_x(), event.y_root - root.winfo_y())

right_panel.bind("<Motion>", on_mouse_move)
toggle_frame.bind("<Motion>", on_mouse_move)

# Запуск обновления визуалов
update_visuals()

# Центрирование окна
root.update_idletasks()
w = root.winfo_width()
h = root.winfo_height()
sw = root.winfo_screenwidth()
sh = root.winfo_screenheight()
x = (sw - w) // 2
y = (sh - h) // 2
root.geometry(f"+{x}+{y}")

root.mainloop()