- 531
- 225
Всем привет!
Частенько новички и не новички задаются вопросом 'Как же читать чат?' в теме "Вопросы по AHK-скриптингу".
Не буду томить, перейдем сразу к сути.
Вот сама функция чтения чата (CHATLOG):
Частенько новички и не новички задаются вопросом 'Как же читать чат?' в теме "Вопросы по AHK-скриптингу".
Не буду томить, перейдем сразу к сути.
Вот сама функция чтения чата (CHATLOG):
Код:
global file_chat := A_MyDocuments "/GTA San Andreas User Files/SAMP/chatlog.txt"
SetTimer, Chat, 50
Chat() {
FileRead, chatlog, % file_chat
if (RegExMatch(chatlog, ".* Отправил .{3,24}\[\d+\] \(тел\. (\d+)\)", chattext))
{
save(chatlog)
addChatMessage(chattext1)
}
}
Теперь перейдем к разъяснениям!
Это глобальная переменная содержащая в себе путь к нашему chatlog, через который и идет само чтение чата.
Таймер, который мы активируем на функцию Chat() каждые 50 мл.сек.
Управление таймером:
Код:
global file_chat := A_MyDocuments "/GTA San Andreas User Files/SAMP/chatlog.txt"
Код:
SetTimer, Chat, 50
Управление таймером:
Код:
SetTimer, Chat, on ; включить
SetTimer, Chat, off ; выключить
check := !check
SetTimer, Chat, % (check ? "350":off) ; активация от перменной, где 350 - мл.сек
Теперь разберем внутренность самой функции Chat()
Чтение Chatlog...
Проверка за счет регулярки. В случае если он находит нужный нам текст происходит действие, в нашем случае это save - сохранение chatlog и addChatMessage - вывод локального сообщения в чат.
Кто то может сказать, чтобы использовать данный пример, нужно знать базово регулярку. Вообще это не правда. Если искать обычный текст, то можно и без неё обойтись. В случае если мы хотим найти текст и так же нужные куски вывести в переменные, то да.
К примеру:
В грузовике: 5000 мл.
Код:
FileRead, chatlog, % file_chat
Код:
if (RegExMatch(chatlog, ".* Отправил .{3,24}\[\d+\] \(тел\. (\d+)\)", chattext))
Кто то может сказать, чтобы использовать данный пример, нужно знать базово регулярку. Вообще это не правда. Если искать обычный текст, то можно и без неё обойтись. В случае если мы хотим найти текст и так же нужные куски вывести в переменные, то да.
К примеру:
В грузовике: 5000 мл.
Код:
if (RegExMatch(chatlog, "В грузовике:\s+(\d{1,3})\s+мл", chattext))
{
save(chatlog)
addChatMessage(chattext1)
}
Чтение чата с памяти
Есть второй вариант чтения чата, это с помощью функции GetChatLine в UDF, давайте рассмотрим этот вариант.
Сам код:
Код:
#include SAMPUDF.ahk
SetTimer, Chat, 50
Chat() {
GetChatLine(0, chatlog)
if (RegExMatch(chatlog, "Вы надели бронежилет", chattext))
SendChat("/do Бронежилет одет")
}
Думаю тут все просто, код почти не отличается от прошлого, только чтение идет сразу с памяти.
Код:
GetChatLine(0, chatlog) ;GetChatLine(Line, Output)
chatlog - переменная в которую идет вывод строки.
Если у вас остались какие либо вопросы, здавайте в комментарий. Сильно долбиться на меня не надо. Если допустил ошибку, прежде чем орать, лучше адекватно сообщить)
Последнее редактирование: