• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

Софт Python bot zombix online/ещё одна херня

  • Автор темы Автор темы Gotions
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
15 Окт 2023
Сообщения
51
Реакции
5
Zombix Online - Может кто-то играл, ходит по заранее заданным кордам. X - Y. Может кому надо, тут уж думайте сами. А так очередная херня, за мусор похер
Обзор -

Библиотеки:
pip install tk

pip install pymem keyboard ttkbootstrap
(Вписывать в cmd)

Код:
Python:
Expand Collapse Copy
from pymem import Pymem

import logging

import time

import keyboard

import random

import tkinter as tk

from ttkbootstrap import Style, ttk

from tkinter import messagebox

import threading



# Настройка логирования

logging.basicConfig(

    filename=r'C:\Users\Ирина\Desktop\pet\coord_recognition.log',

    level=logging.INFO,

    format='%(asctime)s - %(levelname)s - %(message)s'

)

logging.info("Скрипт запущен")



# Заданные целевые координаты

TARGET_COORDS = [

    (305, 307), (303, 309), (306, 314), (309, 317), (311, 320),

    (307, 325), (318, 312), (319, 310), (321, 314), (325, 318),

    (333, 297), (328, 297), (304, 279)

]



# Адреса для X и Y

X_ADDRESS = 0x5EDBC498  # X (float)

Y_ADDRESS = 0x9C2CE568  # Y (int32)



# Настройки

PROCESS_NAME = "NoxVMHandle.exe"

SPEED_PER_COORD = 0.20576131687

TOLERANCE = 0

STUCK_TIMEOUT = 3.0

BYPASS_DISTANCE = 6



# Глобальные переменные

last_direction = None

running = False

main_thread = None



def get_current_coords(max_attempts=3):

    """Считывает координаты из памяти."""

    logging.info("Starting get_current_coords")

    print("Запуск get_current_coords...")

 

    try:

        pm = Pymem(PROCESS_NAME)

        logging.info(f"Попытка получить процесс: {PROCESS_NAME}")

        print(f"Проверка процесса: {PROCESS_NAME}")

      

        for attempt in range(max_attempts):

            logging.info(f"Попытка {attempt+1}...")

            try:

                x = pm.read_float(X_ADDRESS)

                y = pm.read_int(Y_ADDRESS)

                logging.info(f"Считаны значения: x={x}, y={y}")

                x_int = round(x)

                print(f"Считаны координаты: x={x_int}, y={y}")

                logging.info(f"Считаны координаты: x={x_int}, y={y}")

                return x_int, y

          

            except Exception as e:

                logging.error(f"Ошибка чтения памяти: {e}")

                print(f"Ошибка чтения памяти: {e}")

                time.sleep(0.5)

      

        logging.error("Не удалось считать координаты")

        raise ValueError("Не удалось считать координаты")

 

    except Exception as e:

        logging.error(f"Ошибка доступа к процессу: {e}")

        print(f"Ошибка доступа к процессу: {e}")

        raise

    finally:

        try:

            pm.close_process()

        except:

            pass



def bypass_obstacle():

    """Обходит препятствие, исключая противоположное направление."""

    global last_direction

    directions = ['up', 'down', 'left', 'right']

 

    opposite_directions = {

        'left': 'right', 'right': 'left', 'up': 'down', 'down': 'up'

    }

    if last_direction in opposite_directions:

        opposite = opposite_directions[last_direction]

        if opposite in directions:

            directions.remove(opposite)

            print(f"Исключено направление: {opposite}")

            logging.info(f"Исключено направление: {opposite}")

 

    direction = random.choice(directions)

    hold_duration = BYPASS_DISTANCE * SPEED_PER_COORD

    print(f"Обход: '{direction}' на {BYPASS_DISTANCE} координат ({hold_duration:.2f} сек)")

    logging.info(f"Обход: направление={direction}, время={hold_duration:.2f} сек")

    keyboard.press(direction)

    time.sleep(hold_duration)

    keyboard.release(direction)

    print(f"Отпустил '{direction}'")

    time.sleep(0.5)



def move_to_target(target_x, target_y):

    """Перемещает персонажа к координатам."""

    global last_direction

    logging.info(f"Перемещение к x={target_x}, y={target_y}")

    print(f"Перемещение к x={target_x}, y={target_y}")

 

    try:

        start_time = time.time()

        last_x, last_y = get_current_coords()

      

        while True:

            current_x, current_y = get_current_coords()

          

            if current_x == last_x and current_y == last_y:

                elapsed_time = time.time() - start_time

                if elapsed_time >= STUCK_TIMEOUT:

                    bypass_obstacle()

                    start_time = time.time()

                    last_x, last_y = get_current_coords()

                    continue

            else:

                start_time = time.time()

                last_x, last_y = current_x, current_y

          

            dx = target_x - current_x

            if abs(dx) > TOLERANCE:

                x_key = 'right' if dx > 0 else 'left'

                hold_duration = abs(dx) * SPEED_PER_COORD

                print(f"X: '{x_key}' на {hold_duration:.2f} сек")

                logging.info(f"X: ключ={x_key}, время={hold_duration:.2f} сек")

                keyboard.press(x_key)

                time.sleep(hold_duration)

                keyboard.release(x_key)

                print(f"Отпустил '{x_key}'")

                last_direction = x_key

                time.sleep(0.5)

          

            current_x, current_y = get_current_coords()

          

            dy = target_y - current_y

            if abs(dy) > TOLERANCE:

                y_key = 'up' if dy > 0 else 'down'

                hold_duration = abs(dy) * SPEED_PER_COORD

                print(f"Y: '{y_key}' на {hold_duration:.2f} сек")

                logging.info(f"Y: ключ={y_key}, время={hold_duration:.2f} сек")

                keyboard.press(y_key)

                time.sleep(hold_duration)

                keyboard.release(y_key)

                print(f"Отпустил '{y_key}'")

                last_direction = y_key

                time.sleep(0.5)

          

            current_x, current_y = get_current_coords()

            dx = target_x - current_x

            dy = target_y - current_y

            if abs(dx) <= TOLERANCE and abs(dy) <= TOLERANCE:

                print(f"Цель достигнута: x={target_x}, y={target_y}")

                logging.info(f"Цель достигнута: x={target_x}, y={target_y}")

                return

            else:

                print(f"Цель не достигнута: x={current_x}, y={current_y}")

                logging.warning(f"Цель не достигнута: x={current_x}, y={current_y}")

 

    except Exception as e:

        print(f"Ошибка в move_to_target: {e}")

        logging.error(f"Ошибка в move_to_target: {e}")

        time.sleep(0.5)



def main():

    """Основная функция для перемещения."""

    global running

    logging.info("Запуск main")

    print("Запуск программы. Старт через 5 секунд...")

    time.sleep(5)

 

    while running:

        for target_x, target_y in TARGET_COORDS:

            if not running:

                break

            move_to_target(target_x, target_y)

        if running:

            print("Цикл завершён, начинаю заново...")

            logging.info("Цикл завершён")

            time.sleep(1)



def create_menu():

    """Создаёт меню в стиле NeverLose."""

    global running, main_thread, X_ADDRESS, Y_ADDRESS, TARGET_COORDS

 

    style = Style(theme='darkly')

    window = style.master

    window.title("Zombix Bot")

    window.geometry("250x220")

    window.resizable(False, False)

 

    # Стили

    style.configure('TLabel', font=('Arial', 10))

    style.configure('TEntry', font=('Arial', 10))

    style.configure('Success.TButton', font=('Arial', 10, 'bold'))

    style.configure('Danger.TButton', font=('Arial', 10, 'bold'))

 

    # Контейнер

    frame = ttk.Frame(window, padding="10")

    frame.pack(fill='both', expand=True)

 

    # Поля адресов

    ttk.Label(frame, text="X Address:").grid(row=0, column=0, sticky="w", pady=2)

    x_addr_entry = ttk.Entry(frame, width=12)

    x_addr_entry.insert(0, f"{X_ADDRESS:08X}")

    x_addr_entry.grid(row=0, column=1, sticky="e", pady=2)

 

    ttk.Label(frame, text="Y Address:").grid(row=1, column=0, sticky="w", pady=2)

    y_addr_entry = ttk.Entry(frame, width=12)

    y_addr_entry.insert(0, f"{Y_ADDRESS:08X}")

    y_addr_entry.grid(row=1, column=1, sticky="e", pady=2)

 

    # Поле координат

    ttk.Label(frame, text="Coord (X,Y):").grid(row=2, column=0, sticky="w", pady=2)

    coord_entry = ttk.Entry(frame, width=12)

    coord_entry.grid(row=2, column=1, sticky="e", pady=2)

 

    def add_coord():

        """Добавляет координаты."""

        try:

            x, y = map(int, coord_entry.get().split(','))

            TARGET_COORDS.append((x, y))

            messagebox.showinfo("Успех", f"Добавлены: ({x}, {y})")

            coord_entry.delete(0, tk.END)

            logging.info(f"Добавлены: ({x}, {y})")

        except ValueError:

            messagebox.showerror("Ошибка", "Формат: X,Y (напр., 305,307)")

            logging.error("Неверный формат координат")

 

    add_button = ttk.Button(frame, text="Добавить", command=add_coord, style='TButton')

    add_button.grid(row=3, column=0, columnspan=2, pady=5)

 

    # Кнопка Вкл/Выкл

    def toggle_bot():

        """Запускает/останавливает бота."""

        global running, main_thread

        try:

            global X_ADDRESS, Y_ADDRESS

            X_ADDRESS = int(x_addr_entry.get(), 16)

            Y_ADDRESS = int(y_addr_entry.get(), 16)

            logging.info(f"Адреса: X={hex(X_ADDRESS)}, Y={hex(Y_ADDRESS)}")

        except ValueError:

            messagebox.showerror("Ошибка", "Введите корректные адреса")

            return

      

        if not running:

            if not TARGET_COORDS:

                messagebox.showerror("Ошибка", "Добавьте координаты")

                return

            running = True

            toggle_button.configure(text="Выкл", style='Danger.TButton')

            main_thread = threading.Thread(target=main)

            main_thread.daemon = True

            main_thread.start()

            print("Бот запущен")

            logging.info("Бот запущен")

        else:

            running = False

            toggle_button.configure(text="Вкл", style='Success.TButton')

            print("Бот остановлен")

            logging.info("Бот остановлен")

 

    toggle_button = ttk.Button(frame, text="Вкл", command=toggle_bot, style='Success.TButton', width=10)

    toggle_button.grid(row=4, column=0, columnspan=2, pady=10)

 

    window.mainloop()



if __name__ == "__main__":

    print("Запуск меню...")

    logging.info("Программа запущена")

    try:

        create_menu()

    except Exception as e:

        print(f"Ошибка: {e}")

        logging.error(f"Ошибка: {e}")

        input("Нажмите Enter для выхода...")
 
Назад
Сверху Снизу