[Tutorial] Hook (com state e com metodo bruno)
#1

Нndice
  • Introduзгo
  • O que й Hook
  • Hookeando CallBack's
  • Hookeando Funзхes
  • Creditos
Introduзгo
Olб, hoje irei explicar um pouco sobre hooking espero que gostem.

O que й Hook
Hooking й feito com uma funзгo chamar outra funзгo de aparentemente o mesmo nome, portanto, "encadeamento" todas estas funзхes idкnticas juntas para que chamar uma chama todos eles. Ao Hook funзхes isto й fбcil porque a cadeia chama a funзгo anterior do mesmo nome, no entanto, de enganche retornos й complicada pelo facto de a cadeia de chama o prуximo funзгo do mesmo nome - uma funзгo que nгo tenha sido ainda definido e poder nem sequer existe.

Hookeando CallBacks

* Com mйtodo state

Precisaremos de uma variбvel no topo, no meu caso:
PHP код:
stock hooking
Agora definiremos para quando iniciar o hooking ser true(para ler primeiro o hook):
PHP код:
main()
{
    
state hooking:true;

Agora vamos criar nossa Callback hookeada(no meu caso vou hookear a OnPlayerConnect).
PHP код:
public OnPlayerConnect(playerid) <hooking:true>
{
    
state hooking:false;
    
// funзхes da sua CallBack hookeada
    
return OnPlayerConnect(playerid);

Agora vamos criar nossa Callback normal.
PHP код:
public OnPlayerConnect(playerid) <hooking:false>
{
    
state hooking:true;
    
// funзхes da sua CallBack
    
return 1;

state й o estado... definimos o estado verdadeiro para a hook e o estado falso para a original.

Pronto estб Hookeada sua CallBack com o mйtodo state.

* Com mйtodo bruno

Nesse mйtodo nгo precisaremos de variбveis.

Agora vamos criar nossa Callback hookeada(no meu caso vou hookear a OnPlayerConnect).
PHP код:
public OnPlayerConnect(playerid) <hooking:false>
{
    
#if defined MyLib_OnPlayerConnect
        
return MyLib_OnPlayerConnect(playerid);
    
#else
        
return 1;
    
#endif

abaixo da callback ou no fim do seu codigo(no meu caso (OnPlayerConnect) ):
pawn Код:
#if defined _ALS_OnPlayerConnect
    #undef OnPlayerConnect
#else
    #define _ALS_OnPlayerConnect
#endif

#define OnPlayerConnect MyLib_OnPlayerConnect

#if defined MyLib_OnPlayerConnect
    forward MyLib_OnPlayerConnect(playerid);
#endif
Alguns vгo se perguntar como fazer isto /\
PHP код:
public <Nome da CallBack>(<parametros>)
{
    <
verifica se a hook existe>
        <
sim retorna para hookeada>
    <
caso nгo exista>
        <
nгo retorna verdadeiro>
    <
encerra a verifcaзгo>
}
<
caso a hook exista>
    <
sim remove o hook(para a leitura da original)>
<
caso nгo exista>
    <
nгo cria o hook>
<
encerra a verificaзгo>
<
renomeia a callback>
<
caso a hook exista>
    <
criamos a forward para a original>
<
encerra a verificaзгo
Podemos criar nossa Callback abaixo de tudo acima ou caso for uma include nгo criaremos nada, pois ira dar erro.

Pronto estб Hookeada sua CallBack com o mйtodo bruno.

Hookeando Funзхes

* Com mйtodo state

Precisaremos de uma variбvel no topo, no meu caso:
PHP код:
stock hooking
Agora definiremos para quando iniciar o hooking ser true(para ler primeiro o hook):
PHP код:
main()
{
    
state hooking:true;

Agora vamos criar nossa Funзгo hookeada(no meu caso vou hookear uma funзгo criada por mim (sem nada) ).
PHP код:
MyFunction() <hooking:true>
{
    
state hooking:false;
    
// funзхes da sua Funзгo hookeada
    
return MyFunction();

Agora vamos criar nossa Funзгo normal.
PHP код:
MyFunction() <hooking:false>
{
    
state hooking:true;
    
// funзхes da sua Funзгo normal
    
return 1;

state й o estado... definimos o estado verdadeiro para a hook e o estado falso para a original.

Pronto estб Hookeada sua Funзгo com o mйtodo state.

* Com mйtodo bruno

Nesse mйtodo nгo precisaremos de variбveis.

Agora vamos criar nossa Funзгo hookeada(no meu caso vou hookear a GivePlayerMoney).
PHP код:
stock MyLib_GivePlayerMoney(playeridvalue

    
// Codigo da Funзгo aqui
    
return true;

abaixo da callback ou no fim do seu codigo(no meu caso (GivePlayerMoney) ):
pawn Код:
#if defined _ALS_GivePlayerMoney
    #undef GivePlayerMoney  
#else
    #define _ALS_GivePlayerMoney
#endif
#define GivePlayerMoney MyLib_GivePlayerMoney
Alguns vгo se perguntar como fazer isto /\
PHP код:
stock <Nome da Funзгo>(<parametros>)
{
    
// Codigo da Funзгo aqui
    
return true;
}
<
caso a hook exista>
    <
sim remove o hook(para a leitura da original)>
<
caso nгo exista>
    <
nгo cria o hook>
<
encerra a verificaзгo>
<
renomeia a callback
Pronto estб Hookeada sua Funзгo com o mйtodo bruno.

F.A.Q
Existe um site que faz isto para mim ?
R = sim, http://ipsbr.net/portal/hook/

Creditos:
DanDRT
Willian_Luigi
IpsBruno
****** (forma estrutural do metodo bruno)

IpsTeam

Reply


Messages In This Thread
Hook (com metodo state(Willian_Luigi) e com metodo bruno) - by DanDRT - 26.10.2013, 16:49
Re: Hook (com state e com metodo bruno) - by WLSF - 26.10.2013, 16:50
Re: Hook (com state e com metodo bruno) - by Schocc - 26.10.2013, 16:54
Respuesta: Re: Hook (com state e com metodo bruno) - by DanDRT - 26.10.2013, 16:54
Re: Hook (com state e com metodo bruno) - by PIGOR03 - 26.10.2013, 17:13
Re: Hook (com state e com metodo bruno) - by BielCOP - 26.10.2013, 17:25
Respuesta: Hook (com state e com metodo bruno) - by DanDRT - 26.10.2013, 17:26
Re: Hook (com state e com metodo bruno) - by Abravanel - 26.10.2013, 17:33
Respuesta: Hook (com state e com metodo bruno) - by DanDRT - 26.10.2013, 17:34
Re: Hook (com state e com metodo bruno) - by WLSF - 26.10.2013, 17:35

Forum Jump:


Users browsing this thread: 4 Guest(s)