quckly,а разве такой способ только не для amxx модулей ? Я думал для меты нужно регестрировать gMetaFunctionTable.pfnGetEngineFunctions = GetEngineFunctions; в Meta_Attach,откуда мы уже будем ловить наши функции ,допустим pengfuncsFromEngine->pfnMessageBegin = MessageBegin; или можно и так и так ?
Пробывал плаер пресинк пост использовать как ты описал,не работало,а вот зарегал в GetEntityAPI2_Post,он стал вызываться.
И того,я имею такой хук и он не работает:
[pawn]
static META_FUNCTIONS gMetaFunctionTable;
C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, meta_globals_t *pMGlobals, gamedll_funcs_t *pGamedllFuncs)
{
gpMetaGlobals = pMGlobals;
gMetaFunctionTable.pfnGetEngineFunctions = GetEngineFunctions;
memcpy(pFunctionTable, &gMetaFunctionTable, sizeof(META_FUNCTIONS));
return(TRUE);
}
[/pawn]
[pawn]
enginefuncs_t g_pengfuncsTable;
C_DLLEXPORT int GetEngineFunctions(enginefuncs_t *pengfuncsFromEngine, int * )
{
pengfuncsFromEngine->pfnMessageBegin = MessageBegin;
memcpy(pengfuncsFromEngine, &g_pengfuncsTable, sizeof(enginefuncs_t));
return 1;
}
[/pawn]
Кодом ниже помогли на оленях:
[pawn]
#define MAX_BYTES 32 /* a good value to set */
bool bHLTV; int iBYTE; int iBYTES[ MAX_BYTES ];
void ResetBytes( void )
{
for( int i = 0; i < MAX_BYTES; i++ ) iBYTES[ i ] = NULL;
}
void MessageBegin( int, int TYPE, const float *, edict_t * )
{
if( TYPE == GET_USER_MSG_ID( NULL, "HLTV", NULL ) )
{
bHLTV = true; iBYTE = NULL; ResetBytes( );
}
RETURN_META( MRES_IGNORED );
}
void MessageEnd( void )
{
bHLTV = false; RETURN_META( MRES_IGNORED );
}
void WriteByte( int BYTE )
{
if( bHLTV )
{
iBYTES[ iBYTE ] = BYTE;
if( ++iBYTE == 2 && !BYTE && !iBYTES[ NULL ] )
{
SERVER_PRINT("::ROUND START!!!\n");
}
}
RETURN_META( MRES_IGNORED );
}
[/pawn]
Всем добра, любви и осознанности.
Nosce animum tuum.
А осознание и есть, что понял и осмыслил..
А коль не думал ты о том, то кто о том замыслил..?