Vocк tem 1 callback que faz X coisas, mas vocк nгo estб satisfeito com ela, entгo vocк quer fazer com que ela faзa Y coisas, sу que vocк nгo pode acessa-la diretamente por algum motivo...
Entгo vocк cria uma callback para fazer as Y coisas e depois vocк chama a callback original, que faz X coisas.
Esse й o conceito bбsico que eu tenho sobre hook, mas na prбtica se aplica a muitas coisas...
Include:
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
//Executa as funзхes que vocк deseja
//Em algum arquivo externo, como uma include por exemplo...
// E depois chama a callback (original) que estб em outro script
// qualquer, que a gente nгo pode acessar
#if defined hook_OnPlayerCommandText
hook_OnPlayerCommandText(playerid);
#endif
return 1;
}
#if defined _ALS_OnPlayerCommandText
#undef OnPlayerCommandText
#else
#define _ALS_OnPlayerCommandText
#endif
#define OnPlayerCommandText hook_OnPlayerCommandText
#if defined hook_OnPlayerCommandText
forward hook_OnPlayerCommandText(playerid);
#endif
GM:
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
//comandos do GM...
return 1;
}
Й muito utilizado no Pawn em includes, pra fazer com que o scripter possa ter uma callback na sua include que talvez outro scripter tenha definido ela em um GM, se nгo houvesse hook, daria um erro de already defined, algo assim. Pois existiriam duas callbacks com mesmo nome...
Nesse caso vocк vai fazer uma include para uso pъblico(todos poderгo usar) e vocк precisa fazer alguma coisa na callback tal... Entгo vocк adiciona as funcionalidades dela, mas como vocк nгo sabe se o scripter que vai usar a include, adicionarб a mesma callback tal no seu script, entгo vocк faz um hook, para poder evitar erros...