Top.Mail.Ru
Ответы

Auto HotKey создание скрипта

Я хотел бы обратиться с просьбой о помощи в создании скрипта на языке AutoHotkey (AHK) для игры RADMIR RP. Основная цель скрипта – автоматизация процесса слежения за игроками на основании текстовых репортов, получаемых в чат-логах игры.
Функциональные требования к скрипту:
Слежка за игроками:
Скрипт должен реагировать на сообщения с текстом формата:
[RADMIR] Nick_Player[ID]: (Текст репорта)
где ID – это идентификатор игрока, на которого поступила жалоба.
Оповещения:
Если в чат приходит репорт, скрипт должен выводить уведомление в чате с предложением ответить на репорт, нажав сочетание клавиш (Alt+B).
Если в репорте содержится жалоба на конкретного игрока, скрипт должен предлагать проследить за нарушителем, используя команду /sp [ID], при этом предлагая нажать сочетание клавиш (Alt+X).



Формат сообщений:



Скрипт должен обрабатывать только последнюю строку лога, чтобы избежать ложных срабатываний на старые сообщения.

По дате
По Рейтингу
Аватар пользователя
Мудрец
7мес

На

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
 #Persistent 
 
; Путь к лог-файлу 
logFilePath := "C:\путь\к\лог-файлу.txt" 
 
; Горячие клавиши для действий 
Hotkey, !B, RespondToReport 
Hotkey, !X, TrackPlayer 
 
; Переменные для хранения информации о последнем репорте 
global playerNick, playerID, reportText 
 
; Таймер для проверки лога 
SetTimer, CheckLog, 1000 
Return 
 
CheckLog: 
    if !FileExist(logFilePath) ; Проверка существования файла 
    { 
        MsgBox, 48, Ошибка, Лог-файл не найден. Проверьте путь: %logFilePath% 
        Return 
    } 
 
    FileReadLine, lastLine, %logFilePath%, -1 ; Чтение последней строки лога 
    if (lastLine != prevLine) ; Проверка, отличается ли она от предыдущей 
    { 
        prevLine := lastLine 
        ; Проверка на соответствие формату репорта 
        if RegExMatch(lastLine, "\[RADMIR\] (\w+)_(\w+)\[(\d+)\]: (.+)", match) 
        { 
            playerNick := match1 . "_" . match2 
            playerID := match3 
            reportText := match4 
            ; Отображение уведомления 
            MsgBox, 64, Новый репорт, `nИгрок: %playerNick%[%playerID%]`nТекст: %reportText%`n`nНажмите Alt+B для ответа.`nНажмите Alt+X для слежки. 
        } 
    } 
Return 
 
RespondToReport: 
    ; Код для ответа на репорт 
    if (playerNick != "") 
    { 
        SendInput, {Enter}/ответ на репорт {Enter} 
        MsgBox, 64, Ответ отправлен, Вы ответили на репорт игрока %playerNick%. 
    } 
    else 
    { 
        MsgBox, 48, Ошибка, Нет активного репорта для ответа. 
    } 
Return 
 
TrackPlayer: 
    ; Код для слежения за игроком 
    if (playerID != "") 
    { 
        SendInput, {Enter}/sp %playerID%{Enter} 
        MsgBox, 64, Слежка активирована, Вы следите за игроком %playerNick%. 
    } 
    else 
    { 
        MsgBox, 48, Ошибка, Нет активного игрока для слежки. 
    } 
Return 
Аватар пользователя
Ученик
3мес

Для создания скрипта на AutoHotkey, который будет отслеживать репорты в игре RADMIR RP, вам потребуется следующий код. Этот скрипт будет отслеживать сообщения в чате, определять репорты на игроков и выводить соответствующие уведомления.

```ahk
#Persistent
SetTitleMatchMode, 2
DetectHiddenWindows, On

; Основной цикл для отслеживания сообщений в чате
Loop {
Sleep, 1000 ; Задержка для уменьшения нагрузки на процессор
WinGetActiveTitle, title
IfInString, title, RADMIR RP
{
; Получаем текст из чата
ControlGetText, chatText, Edit1, %title%

; Проверяем наличие репорта
If RegExMatch(chatText, "\[RADMIR\] (\w+)\[(\d+)\]: (.+)", match)
{
nick := match1
id := match2
reportText := match3

; Уведомление о репорте
ToolTip, Новый репорт от %nick% на игрока с ID %id%: %reportText%`nНажмите Alt+B для ответа.`nНажмите Alt+X для слежки.
Sleep, 5000 ; Уведомление отображается 5 секунд
ToolTip ; Убираем уведомление

; Предлагаем слежку
If InStr(reportText, "нарушение") ; Пример условия для слежки
{
MsgBox, Нажмите Alt+X для слежки за игроком с ID %id%.
}
}
}
}
```

Этот скрипт будет постоянно проверять активное окно игры на наличие новых сообщений, соответствующих формату репорта. Если такой репорт обнаружен, он выведет уведомление с предложением ответить на него или проследить за игроком. Вы можете адаптировать условие для слежки, изменяя строку `If InStr(reportText, "нарушение")` под ваши нужды.