Half-Life и Adrenaline Gamer форум http://econ.aghl.ru/forum/ |
|
Вызов функции metamod плагина http://econ.aghl.ru/forum/viewtopic.php?f=38&t=2314 |
Страница 1 из 1 |
Автор: | ImperNik [ 08 ноя 2015, 02:05 ] |
Заголовок сообщения: | Вызов функции metamod плагина |
Добрый вечер. Как мне вызвать функцию metamod плагина из amxmodx модуля? Есть функция в metamod плагине: Код: bool spawn_monster(int monster_type, Vector origin, float angle, int respawn_index) Мне бы её вызвать из amxmodx модуля. Естественно следующий вариант не сработает: Код: bool spawn_monster(int monster_type, Vector origin, float angle, int respawn_index); |
Автор: | Lev [ 08 ноя 2015, 17:21 ] |
Заголовок сообщения: | Re: Вызов функции metamod плагина |
Надо сделать её экспортируемой (EXPORT), как GiveFnptrsToDll, а потом получить адрес из амхх модуля через GetProcAddress. Либо можно в модуле команду зарегистрировать, типа spawn_monster и через неё спавнить, параметры правда передавать будет не особо удобно. |
Автор: | ImperNik [ 09 ноя 2015, 04:37 ] |
Заголовок сообщения: | Re: Вызов функции metamod плагина |
GetProcAddress под винду, насколько знаю. Под Linux, если правильно понял нужно использовать dlsym. А где handle взять? dlopen? Как-то неправильно Добавлено спустя 19 минут 31 секунду: В osdep.h для этого нашел хороший велосипед: DLLEXPORT, DLOPEN, DLSYM. Получается как-то так: Metamod плагин: Код: DLLEXPORT bool spawn_monster(int monster_type, Vector origin, float angle, int respawn_index, int attack_player_index) Amx модуль: Код: DLHANDLE moduleHandle = DLOPEN("monster_plugin.so"); Но, как я понял monter_plugin.so будет загружен повторно, этого не нужно. Нужно как-то узнать handle уже загруженного плагина Metamod. И как передать параметры? |
Автор: | Lev [ 09 ноя 2015, 07:03 ] |
Заголовок сообщения: | Re: Вызов функции metamod плагина |
Не грузят они дважды одно и тоже, возвращают хэндл на уже загруженное. Добавлено спустя 8 минут 5 секунд: ImperNik писал(а): И как передать параметры? Скастовать указатель на функцию к типу функции.Код: typedef bool spawn_monster_sig(int monster_type, Vector origin, float angle, int respawn_index, int attack_player_index); |
Автор: | ImperNik [ 09 ноя 2015, 19:58 ] |
Заголовок сообщения: | Re: Вызов функции metamod плагина |
Получилось, спасибо. Ещё один вопрос. Как вызвать amxmodx native функцию или функцию другого модуля из модуля amxmodx? Если правильно понимаю, то для этого есть MF_AmxExec(), но в параметрах он требует структуру AMX, а способа получить её иначе как через MF_GetScriptAmx() я не вижу. |
Автор: | Lev [ 09 ноя 2015, 20:57 ] |
Заголовок сообщения: | Re: Вызов функции metamod плагина |
Не. MF_AmxExec - это для вызова функций в AMXX плагине, тех что public и native. А что ты хочешь в самом АМХХ вызвать? В принципе, тут так же. Никакого кросс-апи между модулями нет, как и с ядром амхх. Весь АМХХ и метамод строятся вокруг перехвата вызовов между движком и игровой дллкой. |
Автор: | ImperNik [ 09 ноя 2015, 21:04 ] |
Заголовок сообщения: | Re: Вызов функции metamod плагина |
В самом AMXX хотел бы вызвать функции которые в amxmodx.cpp, например register_srvcmd (вместо REG_SVR_COMMAND). |
Автор: | Lev [ 09 ноя 2015, 21:11 ] |
Заголовок сообщения: | Re: Вызов функции metamod плагина |
ImperNik писал(а): например register_srvcmd С каким умыслом?
|
Автор: | ImperNik [ 09 ноя 2015, 21:12 ] |
Заголовок сообщения: | Re: Вызов функции metamod плагина |
Для саморазвития |
Автор: | Lev [ 09 ноя 2015, 21:13 ] |
Заголовок сообщения: | Re: Вызов функции metamod плагина |
Не, это плохая затея. хД Команду может зарегать любой модуль сам по себе. Основано на перехвате посылки неизвестных движку команд в игровую дллку. Перехват этого может делать любой модуль. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |