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


#NoEnv
#SingleInstance Force
SetWorkingDir %A_ScriptDir%

; Переменная состояния работы
IsRunning := false

; Построение графического интерфейса (GUI)
Gui, Add, Text, x10 y10 w300 h20, Выберите окна Roblox для Anti-AFK:
Gui, Add, Button, x220 y5 w90 h25 gRefreshWindows, Обновить список

; Список окон с чекбоксами (максимум до 10 окон)
Loop, 10 {
    Gui, Add, Checkbox, x15 y%:=30+A_Index*25% w290 h20 vWinCB%A_Index% Hidden, Window
}

Gui, Add, Text, x10 y310 w110 h20, Интервал (секунды):
Gui, Add, Edit, x120 y307 w60 h20 vIntervalNumber Number, 120
Gui, Add, Button, x10 y340 w300 h35 vStartBtn gToggleAntiAFK, ЗАПУСТИТЬ ANTI-AFK

Gui, Show, w320 h390, Roblox Anti-AFK Control
GoSub, RefreshWindows
return

; Функция обновления списка запущенных окон Roblox
RefreshWindows:
    WinGet, robloxIDs, List, ahk_exe RobloxPlayerBeta.exe
    
    ; Скрываем все чекбоксы
    Loop, 10 {
        GuiControl, Hide, WinCB%A_Index%
        GuiControl,, WinCB%A_Index%, 0
    }
    
    if (robloxIDs = 0) {
        GuiControl, Show, WinCB1
        GuiControl,, WinCB1, Roblox не найден!
        GuiControl, Disable, WinCB1
        return
    }
    
    ; Заполняем найденные окна
    Loop, %robloxIDs% {
        if (A_Index > 10)
            break
            
        this_id := robloxIDs%A_Index%
        WinGetTitle, this_title, ahk_id %this_id%
        if (this_title = "")
            this_title := "Roblox Client #" . A_Index
            
        GuiControl, Enable, WinCB%A_Index%
        GuiControl, Text, WinCB%A_Index%, %this_title% (ID: %this_id%)
        GuiControl, Show, WinCB%A_Index%
        GuiControl,, WinCB%A_Index%, 1 ; По умолчанию ставим галочки на все окна
    }
return

; Старт / Стоп работы Anti-AFK
ToggleAntiAFK:
    Gui, Submit, NoHide
    
    if (IsRunning) {
        ; Остановка
        SetTimer, DoAntiAFK, Off
        IsRunning := false
        GuiControl,, StartBtn, ЗАПУСТИТЬ ANTI-AFK
        SoundBeep, 500, 200
    } else {
        ; Запуск
        if (IntervalNumber < 5) {
            MsgBox, 48, Ошибка, Интервал должен быть не менее 5 секунд!
            return
        }
        
        TimerMs := IntervalNumber * 1000
        SetTimer, DoAntiAFK, %TimerMs%
        IsRunning := true
        GuiControl,, StartBtn, ОСТАНОВИТЬ ANTI-AFK
        SoundBeep, 1000, 200
        
        ; Выполняем сразу первый раз при старте
        GoSub, DoAntiAFK
    }
return

; Основной цикл отправки нажатия клавиши
DoAntiAFK:
    Gui, Submit, NoHide
    WinGet, robloxIDs, List, ahk_exe RobloxPlayerBeta.exe
    
    Loop, %robloxIDs% {
        if (A_Index > 10)
            break
            
        ; Проверяем, отмечено ли окно галочкой в интерфейсе
        cbValue := WinCB%A_Index%
        if (cbValue = 1) {
            this_id := robloxIDs%A_Index%
            ; Отправляем пробел (прыжок) в конкретное окно без его активации
            ControlSend,, {Space}, ahk_id %this_id%
        }
    }
return

; Закрытие программы
GuiClose:
ExitApp