- 348
- 184
Привет.
Практически каждый AHK-скриптер считывал данные с чата в SA-MP.
И все делали одинаково - через цикл.
Однако, цикл создает один-единственный поток (thread), который есть AHK.
Поэтому, я решил выложить свою альтернативу.
В чем заключается альтернатива?
Да все просто, все работает на основе callback механизма.
Собственно, сам класс для работы:
Практически каждый AHK-скриптер считывал данные с чата в SA-MP.
И все делали одинаково - через цикл.
Однако, цикл создает один-единственный поток (thread), который есть AHK.
Поэтому, я решил выложить свою альтернативу.
В чем заключается альтернатива?
Да все просто, все работает на основе callback механизма.
Собственно, сам класс для работы:
AutoHotKey:
/*
author: muxui
version: 0.3.1 (stable)
cdn source (class): https://cdn.muxui.cc/chatreader-class.ahk
cdn source (samp udf latest for r1 version): https://cdn.muxui.cc/samp-udf-latest.ahk
This project is open-source, you can remake he!
Please not remove copyrights and links. Thanks for using. Thanks you!
© muxui, 2019
*/
class ChatReader {
static function := ""
static line := ""
addCallback(function) {
if (IsFunc(function)) {
this.function := function
ObjBindMethod(this, "pool").Call()
return true
}
return false
}
pool() {
if ((new_line := getChatLineEx(0)) != this.line) {
func(this.function).Call(this.line := new_line)
}
Sleep, 70
return ObjBindMethod(this, "pool").Call()
}
}
Пример использования:
AutoHotKey:
#SingleInstance, Force
#Persistent
#Include, %A_ScriptDir%\project\fa-fa-lib\samp-udf-latest.ahk
#Include, %A_ScriptDir%\project\fa-fa-lib\chatreader-class.ahk
#If WinActive("GTA:SA:MP")
;Создаем объект messages с нашим классом ChatReader()
messages := new ChatReader()
;Вызываем метод класса ChatReader() с параметром нашей произвольной функции
messages.addCallback("messages_event")
;Это наша произвольная функция, в ней также находится произвольный параметр для принятия новой строки из чата
messages_event(text) {
return addChatMessageEx(0xFFFFFF, "Чат: " text)
}
Зависимость: SAMP-UDF (функция getChatLineEx).
Делал вообще для себя, на написание ушло буквально 7-10 минут.
Думаю, многим понравится эта затея, если есть пожелания - пишите, с радостью сделаю дополню код.
Также, оставляю ссылки для скачивания на свой CDN-сервер:
Сам класс - https://cdn.randewoo.me/chatreader-class.ahk
SAMP-UDF (последняя версия, для версии SA-MP R1) -
https://cdn.randewoo.me/samp-udf-latest.ahk
Последнее редактирование: