То есть, чтобы использовать функцию в плагине, необходимо её перехватить? И так-же с вызовом каллбеков (OnPlayerConnect)?
Ибо подключил sampgdk но почему-то ничего не вызывается (по крайне мере каллбеки).
Вид для печати
Нет, это просто я не так понял вопрос (сначала подумал, что речь идёт о вызове перехваченной функции, когда, видимо, на самом деле имелся в виду просто вызов нативных функций).
Соль в том, что интерпретатор может раскрыть адрес нативной функции только если она используется в скрипте (AMX) - если нет, то его никак не узнаешь. Это ограничение можно обойти, создав фейковый экземпляр AMX, в котором используются нужные нативки, инициализировать его, вытащить оставленные интерпретатором адреса нативок из таблицы используемых нативных функций, затем деинициализировать и удалить экземпляр AMX. Так сделано в sampgdk и примерно так же я мог бы сделать и в этом шаблоне, вот только вопрос: стоит ли оно того?
Я не делал никаких надстроек для вызова public-функций.
А подключать sampgdk возможно? Дело в том, что почему-то оно не хочет работать.
PLUGIN_EXPORT bool PLUGIN_CALL OnPlayerConnect(int playerid) { SendClientMessage(playerid, -1, " "); return 1; }
При использовании SendClientMessage, выдаёт:
1. LNK2019 ссылка на неразрешенный внешний символ __imp__sampgdk_SendClientMessage в функции _OnPlayerConnect@4 anticheat C:\Users\execution\Desktop\Anticheat\samp-plugin-template-master\build\main.obj 1
2. LNK1120 неразрешенных внешних элементов: 1 anticheat C:\Users\execution\Desktop\Anticheat\samp-plugin-template-master\build\Debug\anticheat.dll 1
А если не использовать функцию, скомпилируется, но PLUGIN_EXPORT bool PLUGIN_CALL OnPlayerConnect(int playerid) - не вызывается.
Смотрел как использовали другие и, например, в плагине streamer incongito всё нормально работает
Каким образом подключаешь sampgdk? Если только включением заголовочного файла, то этого недостаточно: нужно также добавить подключить его в CMakeLists.txt с помощью add_subdirectory(), чтобы скомпилировать и включить в проект реализации функций sampgdk.
Почему-то у меня теперь проект не компилируется. (cmd.exe завершился к кодом 1)
Пробовал такие варианты (закинул sampgdk.h, sampgdk.h на всякий случай и в бинарник и в соурсник)
add_subdirectory(sampgdk) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sampgdk.h) add_subdirectory(${CMAKE_CURRENT_BINARY_DIR}/sampgdk)
В set(PLUGIN_SRC так-же указал.
p.s. качать всю папку sampgdk нет необходимости. Достаточно sampgdk.c, sampgdk.h, верно?
Зачем здесь ".h"? В посте выше я не просто так оставил ссылку - там буквально в самом начале написано, что нужно указать директорию, в которой есть CMakeLists.txt того проекта, который нужно подключить к своему ("The source_dir specifies the directory in which the source CMakeLists.txt and code files are located").
Если не разбираешься, лучше взять всю папку (насколько я понял, можно только удалить подпапки "doc" и "plugins", остальное может понадобиться).
UPD: Попробовал подключить sampgdk самостоятельно, в CMakeLists.txt после секции "Settings" добавил следующее:
Но даже после этого нужно установить:Код:set(SAMPSDK_DIR "${CMAKE_CURRENT_SOURCE_DIR}/SDK" CACHE PATH "" FORCE)
set(SAMPSDK_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/SDK" CACHE PATH "" FORCE)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sampgdk)
set(PLUGIN_LINK_DEPENDENCIES ${PLUGIN_LINK_DEPENDENCIES} "sampgdk")
- Python - в README от sampgdk сказано, что подойдёт версию 2.7, однако модуль PLY (см. далее) требует минимум Python 3.6;
- пакетный менеджер pip - если верить этой странице, нужно скачать установочный скрипт и выполнить его командой "python get-pip.py"; после установки отобразится путь, в который установился pip, этот путь нужно добавить в системную переменную PATH;
- модуль "ply" ("pip install ply"; но сначала нужно перезапустить командную строку, чтобы загрузить обновлённую переменную PATH с добавленным путём установки pip).
Странно. Скачав папку sampgdk и добавил доп. настройки в CMake (который ты скинул), выдаёт ошибку:
LNK1104 не удается открыть файл "sampgdk\Debug\sampgdk4d.lib"
Это возможно отключить/обойти, или я что-то не так сделал?
Python 3.8 есть. Так-же хотел уточнить, т.к. в интернете не нашёл эту информацию: Что необходимо указывать в PLUGIN_LINK_DEPENDENCIES и PLUGIN_COMPILE_DEFINITIONS?
Скорее всего, что-то не так сделал, у меня компилировалось без проблем.
PLUGIN_LINK_DEPENDENCIES - список зависимостей (библиотек), с которыми должен линковаться плагин. В отрывке кода из поста выше на последней строке как раз есть добавление "sampgdk" в список.
PLUGIN_COMPILE_DEFINITIONS - для указания через командную строку макросов (пример: "-D<имя макроса>=[значение]"), которые могут пригодиться при использовании сторонних библиотек.
Здравствуйте. А что делать если я получаю ошибку при загрузке плагина (failed).
Ранее я пробовал делать плагин без этого шаблона, и получал ошибку о несоответствии архитектуры с требуемой (plugin does not conform to architecture. failed.).
В настройках (CMakeLists.txt) изменил лишь название проекта. Компилировал через VS 2019, ошибок при компиляции не было.