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


import socket, threading, time, random, math, json, os

config = {
    "host": "0.0.0.0", "port": 19132, "target": "mc.FlameLord.su", "target_port": 19132,
    "active": False, "friends": [],
    "modules": { "aura": False, "crits": False, "java": False, "reach": False, "velocity": False,
        "aim": False, "smooth": False, "hitbox": False, "fly": False, "speed": False,
        "phase": False, "noclip": False, "jetpack": False, "noslow": False, "antifall": False,
        "step": False, "scaffold": False, "tower": False, "xray": False, "esp": False,
        "autoclicker": False, "spammer": False, "ghost": False, "antikb": False,
        "autoarmor": False, "autoeat": False, "autopot": False, "trigger": False,
        "totem": False, "mace": False, "longjump": False, "antibot": False },
    "values": { "aura": 4.5, "java": 4.5, "reach": 4.5, "hitbox": 1.1,
        "fly": 1.5, "speed": 1.8, "esp": 200.0, "autoclicker": 16.0,
        "aim_speed": 5.0, "aim_fov": 90.0 },
    "binds": { "aura": "R", "crits": "C", "java": "P", "aim": "Z",
        "hitbox": "X", "fly": "F", "speed": "V", "phase": "G",
        "scaffold": "B", "esp": "N", "trigger": "T", "panic": "P", "menu": "M" }
}

running = True
sock = None
entities = {}
player = {"x": 0, "y": 0, "z": 0, "yaw": 0, "pitch": 0}
target_angles = {"yaw": 0, "pitch": 0}
last_attack = 0
last_trigger = 0
last_click = 0
menu_open = False

def clear_chat():
    for _ in range(50): time.sleep(0.02)

def get_attack_delay(mode):
    if mode == "java":
        return max(15, random.randint(20, 40) + random.randint(-5, 5)) / 1000.0
    return max(15, random.randint(50, 150) + random.randint(-10, 10)) / 1000.0

def get_closest_target():
    if not config["modules"]["aura"] and not config["modules"]["java"]: return None
    r = config["values"]["aura"] if config["modules"]["aura"] else config["values"]["java"]
    best_dist = 999; best_id = None
    for eid, ent in entities.items():
        if ent.get("name") in config["friends"]: continue
        dx = ent.get("x", 0) - player["x"]; dz = ent.get("z", 0) - player["z"]; dy = ent.get("y", 0) - player["y"]
        dist = (dx*dx + dz*dz + dy*dy) ** 0.5
        if dist <= r and dist < best_dist and dist > 0.3:
            if random.random() < 0.88:
                best_dist = dist; best_id = eid
    return best_id

def perform_attack(target_id):
    global last_attack
    if not config["modules"]["aura"] and not config["modules"]["java"]: return
    mode = "java" if config["modules"]["java"] else "legit"
    now = time.time() * 1000
    if now - last_attack < get_attack_delay(mode) * 1000: return
    if config["modules"]["crits"]:
        chance = 1.0 if config["modules"]["java"] else 0.85
        if random.random() < chance: pass
    last_attack = now

def get_crosshair_target():
    if not config["modules"]["trigger"]: return None
    r = 4.5; fov = 5.0; best_score = 999; best_id = None
    for eid, ent in entities.items():
        if ent.get("name") in config["friends"]: continue
        dx = ent.get("x", 0) - player["x"]; dz = ent.get("z", 0) - player["z"]; dy = ent.get("y", 0) - player["y"]
        dist = (dx*dx + dz*dz + dy*dy) ** 0.5
        if dist > r or dist < 0.3: continue
        ty = math.degrees(math.atan2(dz, dx)) - 90
        tp = -math.degrees(math.atan2(dy, math.sqrt(dx*dx + dz*dz)))
        if abs(player["yaw"] - ty) > fov or abs(player["pitch"] - tp) > fov: continue
        score = dist + (abs(player["yaw"] - ty) / 10) + (abs(player["pitch"] - tp) / 10)
        if score < best_score: best_score = score; best_id = eid
    return best_id

def perform_trigger(target_id):
    global last_trigger
    now = time.time() * 1000
    if now - last_trigger < 30: return
    if config["modules"]["crits"]:
        chance = 1.0 if config["modules"]["java"] else 0.85
        if random.random() < chance: pass
    last_trigger = now

def get_aim_target():
    if not config["modules"]["aim"]: return None
    r = 6.0; fov = config["values"]["aim_fov"]; best_score = 999; best_id = None
    for eid, ent in entities.items():
        if ent.get("name") in config["friends"]: continue
        dx = ent.get("x", 0) - player["x"]; dz = ent.get("z", 0) - player["z"]; dy = ent.get("y", 0) - player["y"]
        dist = (dx*dx + dz*dz + dy*dy) ** 0.5
        if dist > r or dist < 0.5: continue
        ty = math.degrees(math.atan2(dz, dx)) - 90
        tp = -math.degrees(math.atan2(dy, math.sqrt(dx*dx + dz*dz)))
        if abs(player["yaw"] - ty) > fov or abs(player["pitch"] - tp) > fov: continue
        score = dist + (abs(player["yaw"] - ty) / 10) + (abs(player["pitch"] - tp) / 10)
        if score < best_score:
            best_score = score; best_id = eid; target_angles["yaw"] = ty; target_angles["pitch"] = tp
    return best_id

def apply_smooth_aim(ty, tp):
    if not config["modules"]["smooth"]:
        player["yaw"] = ty + random.uniform(-2.0, 2.0)
        player["pitch"] = tp + random.uniform(-1.5, 1.5)
        return
    speed = config["values"]["aim_speed"] / 100.0
    yd = ty - player["yaw"]; pd = tp - player["pitch"]
    if yd > 180: yd -= 360
    if yd < -180: yd += 360
    player["yaw"] += yd * speed * 0.85 + random.uniform(-2.0, 2.0) * 0.12
    player["pitch"] += pd * speed * 0.85 + random.uniform(-1.5, 1.5) * 0.08
    player["yaw"] %= 360
    player["pitch"] = max(-90, min(90, player["pitch"]))

def get_hitbox():
    if not config["modules"]["hitbox"]: return 1.0
    base = config["values"]["hitbox"]
    return min(base * (1.0 + random.uniform(-0.04, 0.04)), 1.15)

def draw_menu():
    global menu_open
    menu_open = True
    print("\n" + "=" * 60)
    print("  ⚡ METEOR CLIENT v3.0 — LEGIT CHEATS")
    print("=" * 60)
    categories = [
        ("COMBAT", ["aura", "java", "crits", "reach", "velocity", "aim", "smooth", "trigger"]),
        ("HITBOX", ["hitbox"]),
        ("MOVEMENT", ["fly", "speed", "phase", "noclip", "jetpack", "noslow", "antifall", "step", "scaffold", "tower", "longjump"]),
        ("RENDER", ["xray", "esp"]),
        ("UTILS", ["autoclicker", "spammer", "ghost", "antikb", "autoarmor", "autoeat", "autopot", "totem", "mace", "antibot"])
    ]
    for cat_name, cat_modules in categories:
        print(f"\n  ── {cat_name} ──")
        for mod in cat_modules:
            if mod in config["modules"]:
                st = "ON " if config["modules"][mod] else "OFF"
                val = f"{config['values'].get(mod, 0):.1f}" if mod in config["values"] else "-"
                key = config["binds"].get(mod, "-")
                print(f"    {mod.upper():12} [{st}]  {val:>5}  [KEY: {key}]")
    print("\n" + "=" * 60)
    print(f"  STATUS: {'ACTIVE' if config['active'] else 'INACTIVE'}")
    print(f"  TARGET: {config['target']}")
    print(f"  FRIENDS: {len(config['friends'])}")
    print("=" * 60)
    print("  COMMANDS:")
    print("  /t <mod>       - toggle module")
    print("  /s <mod> <val> - set value")
    print("  /b <mod> <key> - bind key")
    print("  /f add/rem     - manage friends")
    print("  /connect <ip>  - change server")
    print("  /start         - activate cheats")
    print("  /panic         - panic + clear chat")
    print("  /menu          - toggle menu")
    print("=" * 60 + "\n")

def handle_command(cmd):
    global running, menu_open
    cmd = cmd.strip()
    if not cmd: return
    if cmd.lower() == "/start":
        config["active"] = True; print("[+] CLIENT ACTIVATED"); return
    if cmd.lower() == "/panic":
        config["active"] = False
        for m in config["modules"]: config["modules"][m] = False
        clear_chat(); print("[!] PANIC — ALL CHEATS DISABLED, CHAT CLEARED"); return
    if cmd.lower() == "/menu":
        menu_open = not menu_open
        if menu_open: draw_menu()
        return
    if not config["active"]: return
    parts = cmd.split()
    if len(parts) < 2: return
    action = parts[0].lower(); name = parts[1].lower()
    if action == "/t" and name in config["modules"]:
        config["modules"][name] = not config["modules"][name]
        print(f"[+] {name} = {config['modules'][name]}"); return
    if action == "/s" and len(parts) > 2 and name in config["values"]:
        try: config["values"][name] = float(parts[2]); print(f"[+] {name} = {config['values'][name]}")
        except: pass
        return
    if action == "/b" and len(parts) > 2 and name in config["binds"]:
        config["binds"][name] = parts[2].upper(); print(f"[+] {name} → {config['binds'][name]}"); return
    if action == "/f" and len(parts) > 2:
        name = parts[2]
        if parts[1].lower() == "add" and name not in config["friends"]:
            config["friends"].append(name); print(f"[+] + {name}")
        elif parts[1].lower() == "rem" and name in config["friends"]:
            config["friends"].remove(name); print(f"[-] - {name}")
        return
    if action == "/connect" and len(parts) > 1:
        config["target"] = parts[1]; print(f"[+] Target → {config['target']}"); return
    if action == "/save":
        with open("config.json", "w") as f: json.dump(config, f, indent=4)
        print("[+] Config saved"); return
    if action == "/load":
        if os.path.exists("config.json"):
            with open("config.json") as f:
                data = json.load(f)
                for k in data:
                    if k in config: config[k] = data[k]
            print("[+] Config loaded")
        return
    if action == "/quit":
        running = False; print("[+] Stopping..."); return

def proxy_loop():
    global sock, running
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    sock.bind((config["host"], config["port"]))
    target = (config["target"], config["target_port"])
    while running:
        try:
            data, addr = sock.recvfrom(65535)
            if config["active"]:
                if config["modules"]["aura"] or config["modules"]["java"]:
                    t = get_closest_target()
                    if t is not None: perform_attack(t)
                if config["modules"]["trigger"]:
                    t = get_crosshair_target()
                    if t is not None: perform_trigger(t)
                if config["modules"]["aim"]:
                    t = get_aim_target()
                    if t is not None: apply_smooth_aim(target_angles["yaw"], target_angles["pitch"])
                if config["modules"]["autoclicker"]:
                    global last_click
                    cps = config["values"]["autoclicker"]
                    delay = 1000.0 / cps + random.uniform(-5, 5)
                    if time.time() * 1000 - last_click > delay:
                        last_click = time.time() * 1000
            sock.sendto(data, target)
        except: pass
        time.sleep(0.0005)

def console_loop():
    while running:
        try:
            cmd = input("> ")
            if cmd: handle_command(cmd)
        except KeyboardInterrupt:
            global running
            running = False
            break
        except: pass

if __name__ == "__main__":
    print("\n" + "=" * 60)
    print("  ⚡ METEOR CLIENT v3.0 — LEGIT CHEATS")
    print("  Bedrock 1.26.33 | All servers")
    print("=" * 60)
    print("  HOST: 0.0.0.0:19132")
    print("  TARGET: " + config["target"])
    print("=" * 60)
    print("  /start - activate cheats")
    print("  /panic - panic + clear chat")
    print("  /menu  - open Meteor menu")
    print("  /t <mod> - toggle module")
    print("  /connect <ip> - change server")
    print("=" * 60 + "\n")
    t = threading.Thread(target=proxy_loop, daemon=True)
    t.start()
    console_loop()
    print("\n[+] Stopped")