HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 23.08.2025, 17:11
routefleeder
Познающий
Регистрация: 23.11.2016
Сообщений: 42
С нами: 4983862

Репутация: 68
По умолчанию

Всем ку. Вторые сутки не могу решить одну проблему с кастомным коллбеком в серверном плагине. Наверняка на бластхаке найдутся шарящие за структуру работы плагинов. Так вот, ближе к сути. Ниже покажу код функции которая должна вызывать коллбек в amx'е и то как я получаю указатель на него. Вероятно проблема как раз-таки с невалидностью указателя AMX*, у меня просто крашит сервер в момент выполнения OnPlayerPressKey. Буду премного благодарен, если кто-то сможет помочь.

Custom Amx Callback:





Код:
#include "sampgdk.h"
#include "Callbacks.h"
// тут есть инклуд CGameMode.h со структурой
cell PluginCallbacks
::
OnPlayerPressKey
(
CGameMode
*
gamemode
,
int
key
,
int
playerid
)
{
if
(
!
gamemode
->
m_bInitialised
)
return
0
;
int
amx_id
=
0
;
cell retval
=
0
;
// Amx-Callback return value
if
(
!
amx_FindPublic
(
&
gamemode
->
m_amx
,
"OnPlayerPressKey"
,
&
amx_id
)
)
{
amx_Push
(
&
gamemode
->
m_amx
,
key
)
;
amx_Push
(
&
gamemode
->
m_amx
,
playerid
)
;
amx_Exec
(
&
gamemode
->
m_amx
,
&
retval
,
amx_id
)
;
}
return
retval
;
}


получаем указатель и вызываем функцию:

Call callback-function:





Код:
CNetGame
*
netgame_ptr
=
PluginPointers
::
GetCNetGamePointer
(
)
;
// я на сто процентов уверен, что получаю валидный глобальный указатель на CNetGame, потому что он прекрасно работает в других местах кода
CGameMode
*
gm_ptrr
=
netgame_ptr
->
m_pGameMode
;
PluginCallbacks
::
OnPlayerPressKey
(
gm_ptrr
,
key
,
playerid
)
;
// параметры key и playerid так же точно валидны, ведь я вижу вывод их в консоль сервера
 
Ответить с цитированием
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.

×

Внести депозит

Введите сумму USDT:

Принимается только USDT TRC20. Fake/Flash USDT не засчитывается.

×

Вывести депозит

Сумма USDT:

Ваш USDT TRC20 кошелек:

Заявка будет отправлена администратору.