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


; ============================================================
;  Админ-тул для Grand Mobile (эмулятор на ПК)
;  Версия 3.1
;  Работает через чтение лога чата и отправку готовых команд
; ============================================================

#NoEnv
#SingleInstance, Force
SetWorkingDir %A_ScriptDir%
SetTitleMatchMode, 2

; ========== НАСТРОЙКИ (ОБЯЗАТЕЛЬНО ПРОВЕРЬТЕ!) ==========
; 1. Путь к файлу лога чата (chatlog.txt)
;    Обычно для SAMP/CRMP он лежит в Документах.
;    Для эмулятора – найдите папку с данными игры внутри эмулятора.
;    Пример для BlueStacks: C:\ProgramData\BlueStacks\Engine\...
;    Поставьте свой реальный путь.
Global LogPath := A_MyDocuments "\GTA San Andreas User Files\chatlog.txt"

; 2. Точное название окна вашего эмулятора (как написано в заголовке)
;    Например: "BlueStacks App Player", "LDPlayer", "MEmu", "NoxPlayer"
EmulatorWinTitle := "BlueStacks App Player"

; ========== СЛУЖЕБНЫЕ ФУНКЦИИ ==========
Global LastID := ""   ; запоминает ID последнего нарушителя

; Активировать окно эмулятора
ActivateEmulator() {
    WinActivate, %EmulatorWinTitle%
    Sleep, 200
}

; Отправить команду в чат (открывает чат, вводит команду, нажимает Enter)
SendCommand(command) {
    ActivateEmulator()
    SendInput, t
    Sleep, 50
    SendInput, %command%
    Sleep, 50
    SendInput, {Enter}
}

; Показать всплывающую подсказку на 2.5 секунды
ShowTip(text) {
    ToolTip, %text%
    SetTimer, RemoveTip, -2500
}
RemoveTip:
    ToolTip
Return

; ========== ОБРАБОТКА РЕПОРТА (F2) ==========
; Читает лог, находит последний репорт формата ||NewReport|| ... (ID нарушителя)
; Запоминает ID и отправляет /sp {ID}
F2::
    ActivateEmulator()
    FileRead, LogContent, %LogPath%
    if ErrorLevel {
        ShowTip("ОШИБКА: Не удалось прочитать лог. Проверьте путь: " LogPath)
        return
    }
    ; Ищем ID нарушителя – берём второй ID в строке репорта (обычно это ID того, на кого жалуются)
    RegExMatch(LogContent, "U)\|\|NewReport\|\|.*?(\d+).*?(\d+)", Match)
    if (Match2 != "") {
        LastID := Match2
        SendCommand("/sp " LastID)
        ShowTip("Слежка за ID: " LastID " (репорт обработан)")
    } else {
        ; Если не нашли второй, берём первый (на всякий случай)
        RegExMatch(LogContent, "U)\|\|NewReport\|\|.*?(\d+)", Match)
        if (Match1 != "") {
            LastID := Match1
            SendCommand("/sp " LastID)
            ShowTip("Слежка за ID: " LastID " (репорт обработан, ID из первого)")
        } else {
            ShowTip("Новых репортов в логе не найдено")
        }
    }
Return

; ========== ГОРЯЧИЕ КЛАВИШИ ДЛЯ КОМАНД ==========

; F3 – Телепорт к игроку (/goto {ID})
F3::
    if (LastID = "") {
        ShowTip("Сначала обработайте репорт (F2)")
        return
    }
    SendCommand("/goto " LastID)
    ShowTip("Телепорт к игроку " LastID)
Return

; F4 – Притянуть игрока к себе (/gethere {ID})
F4::
    if (LastID = "") {
        ShowTip("Сначала обработайте репорт (F2)")
        return
    }
    SendCommand("/gethere " LastID)
    ShowTip("Игрок " LastID " притянут к вам")
Return

; Ctrl+F4 – Телепорт машины к себе (/getcar {ID машины})
^F4::
    ActivateEmulator()
    InputBox, CarID, Введите ID машины, Введите числовой ID машины для /getcar, , 200, 130
    if ErrorLevel
        return
    if CarID is not number
    {
        ShowTip("Ошибка: введите число!")
        return
    }
    SendCommand("/getcar " CarID)
    ShowTip("Машина с ID " CarID " притянута")
Return

; F5 – Быстрый ответ на репорт (1) – /pm {ID} Приветствую, иду
F5::
    if (LastID = "") {
        ShowTip("Сначала обработайте репорт (F2)")
        return
    }
    SendCommand("/pm " LastID " Приветствую, иду")
    ShowTip("Отправлено 'Приветствую, иду' игроку " LastID)
Return

; F6 – Быстрый ответ на репорт (2) – /pm {ID} Приветствую, можете сами помочь себе...
F6::
    if (LastID = "") {
        ShowTip("Сначала обработайте репорт (F2)")
        return
    }
    SendCommand("/pm " LastID " Приветствую, можете сами помочь себе - кнопка эвакуатора на спидометре.")
    ShowTip("Отправлен второй ответ игроку " LastID)
Return

; F7 – Бан (/ban {ID} 31 5.2 op)
F7::
    if (LastID = "") {
        ShowTip("Сначала обработайте репорт (F2)")
        return
    }
    SendCommand("/ban " LastID " 31 5.2 op")
    ShowTip("Игрок " LastID " забанен (31 5.2 op)")
Return

; F8 – Заморозка (/freeze {ID})
F8::
    if (LastID = "") {
        ShowTip("Сначала обработайте репорт (F2)")
        return
    }
    SendCommand("/freeze " LastID)
    ShowTip("Игрок " LastID " заморожен")
Return

; F9 – Разморозка (/unfreeze {ID})
F9::
    if (LastID = "") {
        ShowTip("Сначала обработайте репорт (F2)")
        return
    }
    SendCommand("/unfreeze " LastID)
    ShowTip("Игрок " LastID " разморожен")
Return

; F10 – Кик (/skick {ID})
F10::
    if (LastID = "") {
        ShowTip("Сначала обработайте репорт (F2)")
        return
    }
    SendCommand("/skick " LastID)
    ShowTip("Игрок " LastID " кикнут")
Return

; F11 – Мут (/mute {ID} 30 2.1 op)
F11::
    if (LastID = "") {
        ShowTip("Сначала обработайте репорт (F2)")
        return
    }
    SendCommand("/mute " LastID " 30 2.1 op")
    ShowTip("Игрок " LastID " замучен (30 2.1 op)")
Return

; F12 – Размут (/unmute {ID})
F12::
    if (LastID = "") {
        ShowTip("Сначала обработайте репорт (F2)")
        return
    }
    SendCommand("/unmute " LastID)
    ShowTip("Игрок " LastID " размучен")
Return