Что-то по этому способу вообще ничего не получается.
Странно, но
stub_plugin после компиляции не работает вообще никак..
Я первый раз использовал одну "болванку плагина Metamod", скачал
Вы должны зарегистрироваться, чтобы видеть ссылки..
Функции работали, за исключением engine_api.
Собрал простенький плагин на
stub_plugin, он отказался работать
Ничего не инициализируется.. Заметил интересный момент, у библиотек по разному экспортируется одна и та же функция:
[pawn]
C_DLLEXPORT void WINAPI GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine,
globalvars_t *pGlobals ) [/pawn]
В первом случае функции библиотеки экспортируются так:
- Код: Выделить всё
GetEngineFunctions
GetEntityAPI2
GiveFnptrsToDll
Meta_Attach
Meta_Detach
Meta_Query
Во втором так:
- Код: Выделить всё
GetEngineFunctions
GetEntityAPI2
Meta_Attach
Meta_Detach
Meta_Query
_GiveFnptrsToDll@8
При этом, самое интересное то, что функция
GiveFnptrsToDll в обоих случаях объявлена одинаково.
Если во втором случае убрать WINAPI - то объявление получается так же, как и первом случае, но при этом, при старте сервер падает.. В случае если оставить WINAPI - dll не работает, а просто висит для красоты..
DJ_WEST писал(а): Находишь pfnMessageBegin и ставишь вместо NULL -> pfnMessageBegin (или любое другое название твоей функции по перехвату).
Если я правильно вычитал исходник - то получается, это структура, заранее заполненная NULL (указателями вникуда), в которой, по нужному порядку, я один из указателей заменяю на существующую функцию. После - структура передается на отправку в метамод.
В первом случае получается почти тоже самое, только в разнице с тем, что сначала обнуляется структура, потом в нее добавляется нужные указатели на нужные функции (структура заполняется динамически, а не сразу), и инфа передается в метамод.
Теореически, эфект в первом случае должен быть тот же, что и в
stub_plugin.
DJ_WEST, прошу прощения за оффтоп.., это уже другая тема..
На самом деле, ситуация очень забавненькая, я в ней покопаюсь поглубже.
Что касается темы - вопрос думаю решен, т.к. куда копать я понял, копать надо в сторону перехвата событий, причем через
pfnMessageBegin.
Спасибо за помощь.P. S. Если есть коментарии по выше написанному - прошу прокоментировать
P. S. S. было бы не плохо, еслиб кто-нибудь из умных людей сообразил простенькую статейку по написанию плагинов с нуля, с работоспособной болванкой в качестве примера к статье, для таких нубов как я
Не нравятся смайлы? - не интерпретируй их.