Исходник Информация Callback-класс для чтения чата

muxui

Потрачен
Автор темы
253
136
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Привет.
Практически каждый 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
 
Последнее редактирование:
  • Нравится
Реакции: SuSmer4Coder и Unnecess4ry

FlyToMoon

Друг
Друг
3,127
2,194
ты же понимаешь что это все хуйня которая выглядит по другому? поток все так же будет изображать из себя мультипоточность и все так же будет сосать в скорости? единственное решение хуков скинул ринат. то что сделал ты это не хук
 
  • Нравится
Реакции: Roger571

muxui

Потрачен
Автор темы
253
136
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ты же понимаешь что это все хуйня которая выглядит по другому? поток все так же будет изображать из себя мультипоточность и все так же будет сосать в скорости? единственное решение хуков скинул ринат. то что сделал ты это не хук
Я и не говорил про хук. На мой взгляд - так удобней и код смотрится красивей. Ну то на любителя.
Можешь считать это мини-вспомогательным фреймворком)
ты же понимаешь что это все хуйня которая выглядит по другому? поток все так же будет изображать из себя мультипоточность и все так же будет сосать в скорости? единственное решение хуков скинул ринат. то что сделал ты это не хук
Тут, кстати, даже скорее рекурсия, и немного callback.
Переименован пожалуйста в "вспомогательный фреймворк для чтения чата для новичков", или что-то в этом духе, если не сложно.
 
Последнее редактирование:

muxui

Потрачен
Автор темы
253
136
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
  • Нравится
Реакции: RTD и FlyToMoon

RTD

Проверенный
Проверенный
256
133
Я, кстати, ни разу не видел проектов, реализованных на сурсах Рината🙂
Для ahk в dll нет своего SAMP-UDF без зависимостей(SF Аpi имеет их, не в счет), так что понятно, что все продолжают писать на класике - ahk в exe
Можешь стать первым кто реализует, переписав все сам на DllCall, NumGet, NumPut
Кстати, у тебя устаревший и ограниченный SAMP-UDF(ну с моей точки зрения) посмотри вот этот: https://github.com/Icii2q/SAMP_API/blob/master/API.ahk
Я удивился когда увидел там функцию __INJECT, которая позволяет писать ассемблером ( asm в ахк :roflanebalo: )
 

muxui

Потрачен
Автор темы
253
136
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
сделал невозможное - обновил ссылки