Auto HotKey создание скрипта
Я хотел бы обратиться с просьбой о помощи в создании скрипта на языке AutoHotkey (AHK) для игры RADMIR RP. Основная цель скрипта – автоматизация процесса слежения за игроками на основании текстовых репортов, получаемых в чат-логах игры.
Функциональные требования к скрипту:
Слежка за игроками:
Скрипт должен реагировать на сообщения с текстом формата:
[RADMIR] Nick_Player[ID]: (Текст репорта)
где ID – это идентификатор игрока, на которого поступила жалоба.
Оповещения:
Если в чат приходит репорт, скрипт должен выводить уведомление в чате с предложением ответить на репорт, нажав сочетание клавиш (Alt+B).
Если в репорте содержится жалоба на конкретного игрока, скрипт должен предлагать проследить за нарушителем, используя команду /sp [ID], при этом предлагая нажать сочетание клавиш (Alt+X).
Формат сообщений:
Скрипт должен обрабатывать только последнюю строку лога, чтобы избежать ложных срабатываний на старые сообщения.
На
#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
Для создания скрипта на 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, "нарушение")` под ваши нужды.