- 1,214
- 1,043
AHK-SAMPFUNCS-API
API для взаимодействия с SAMPFUNCS на AHK, скомпилированных в dll.
API состоит из AHK-SAMPFUNCS-Module.sf и файла AHK-SAMPFUNCS-API.ahk.
Для подключения библиотеки нужно вписать в начало скрипта следующий код:
Установка: SF файл переместить в GTA\SAMPFUNCS, AHK скомпилировать в ASI и переместить в корень.
Введение:
Основные понятие (Нажми на название что бы посмотреть подбронее):API для взаимодействия с SAMPFUNCS на AHK, скомпилированных в dll.
API состоит из AHK-SAMPFUNCS-Module.sf и файла AHK-SAMPFUNCS-API.ahk.
Для подключения библиотеки нужно вписать в начало скрипта следующий код:
AutoHotKey:
#include AHK-SAMPFUNCS-API.ahk
global SF := new SAMPFUNCS()
Введение:
- Конструктор - специальный блок инструкций, вызываемый при создании объекта.
- Деструктор - специальный блок инструкций, вызываемый при уничтожении объекта.
- Объект - некоторая сущность в компьютерном пространстве, обладающая определённым состоянием и поведением, имеющая заданные значения свойств (атрибутов) и операций над ними (методов).
- Метод - это функция или процедура, принадлежащая какому-то классу или объекту.
То есть при вызове конструктора, он возвращает новый объект через который можно вызывать его методы и получать значение переменных.
Вызов конструктора и помещение возвращаемого объекта в переменную:
Уничтожение объекта:
Вызов метода класса:
Получение значения переменной класса:
При вызове конструктора нашего класса, в случае если SF модуль не найден, то он скачает последнюю версию модуля с моего репозитория и загрузит ее в игру, если это не произойдет в течении 3-ех попыток, конструктор вернет false.
Перед вызовом функций нужно удостоверится что модуль инициализирован, проверить это можно методом ModuleIsInit(), пример:
Так что советую устанавливать хоткеи динамический, то есть через функцию HotKey после инициализации, либо в статических хоткеях придется проверять статус модуля.
Примеры:
Долгое время считалось что словить сообщение можно только через чтение чатлога, ну или хотя бы через чтение памяти, но ниже приведен пример чтения чата работающий на RPC хуке.
Запрещает вывод сообщений в чат, и выводить их в консоль SF.
Следующий пример, по работе с диалогами, позволяет узнать какую кнопку нажал, что ввел, какой пункт выбрал и т.д, нету таких проблем как с костылями в SAMP UDF.
Вызов cleo опкода:
API находиться в стадии разработки.
Вызов конструктора и помещение возвращаемого объекта в переменную:
AutoHotKey:
Переменная := new Класс()
AutoHotKey:
Объект := ""
AutoHotKey:
Объект.Метод(Аргументы)
AutoHotKey:
Объект.Переменная
При вызове конструктора нашего класса, в случае если SF модуль не найден, то он скачает последнюю версию модуля с моего репозитория и загрузит ее в игру, если это не произойдет в течении 3-ех попыток, конструктор вернет false.
Перед вызовом функций нужно удостоверится что модуль инициализирован, проверить это можно методом ModuleIsInit(), пример:
AutoHotKey:
while (!SF.ModuleIsInit())
continue
Примеры:
Долгое время считалось что словить сообщение можно только через чтение чатлога, ну или хотя бы через чтение памяти, но ниже приведен пример чтения чата работающий на RPC хуке.
Запрещает вывод сообщений в чат, и выводить их в консоль SF.
AutoHotKey:
SF.registerRakNetCallback(SF.RAKHOOK_TYPE_INCOMING_RPC, "IncomingRPC")
IncomingRPC(params)
{
critical ; Предотвращает прерывание текущего потока другими потоками.
BS := SF.BitStream(params)
if (BS.packetId == SF.RPC_ScrClientMessage)
{
BS.ResetReadPointer()
BS.Read(color, "DWORD")
BS.Read(length, "DWORD")
BS.Read(text, length)
BS.ResetReadPointer()
SF.LogConsole("color = " DecToHex(color) " | text = " text)
return false ; Игнорируем RPC.
}
return true ; Успешно завершаем обработку RPC.
}
AutoHotKey:
SF.registerDialogCallback("DialogCallback")
!1::
SF.ShowDialog(2, SF.DIALOG_STYLE_LIST, "Меню", "Пункт 1`n`nПункт 2`nПункт 3", "Назад", "Закрыть")
return
!2::
SF.ShowDialog(3, SF.DIALOG_STYLE_INPUT, "Меню", "Введите номер:", "Закрыть")
return
DialogCallback(dialogId, buttonId, listItem, input)
{
GetParamsAsStr(input)
SF.LogConsole("--------------------")
SF.LogConsole("dialogId = " dialogId)
SF.LogConsole("buttonId = " buttonId)
SF.LogConsole("listItem = " listItem)
SF.LogConsole("input = " input)
SF.LogConsole("--------------------")
}
AutoHotKey:
SF.callOpcode("01B6: set_weather 9")
API находиться в стадии разработки.
Вложения
Последнее редактирование: