SA-MP Forums Archive
[Tutorial] Hook (com state e com metodo bruno) - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+----- Forum: Lançamentos/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=56)
+----- Thread: [Tutorial] Hook (com state e com metodo bruno) (/showthread.php?tid=472039)



Hook (com metodo state(Willian_Luigi) e com metodo bruno) - DanDRT - 26.10.2013

Н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




Re: Hook (com state e com metodo bruno) - WLSF - 26.10.2013

Obrigado pelos crйditos, e parabйns pelo tуpico...

Lembrando que a w!hooks trabalha com states


Re: Hook (com state e com metodo bruno) - Schocc - 26.10.2013

Sabia que ia sair um tutorial desse.

Quando eu poder dar +rep, te envio.


Respuesta: Re: Hook (com state e com metodo bruno) - DanDRT - 26.10.2013

Obrigado Shocc e Will.


Re: Hook (com state e com metodo bruno) - PIGOR03 - 26.10.2013

Bom tutorial, vou praticar!
Parabens danilu gentili!


Re: Hook (com state e com metodo bruno) - BielCOP - 26.10.2013

Уtimo tutorial, parabйns!


Respuesta: Hook (com state e com metodo bruno) - DanDRT - 26.10.2013

Obrigado


Re: Hook (com state e com metodo bruno) - Abravanel - 26.10.2013

Bacana! Mas sу pra completar, estб faltando o ****** nos crйditos hein...


Respuesta: Hook (com state e com metodo bruno) - DanDRT - 26.10.2013

\/ Leia


Re: Hook (com state e com metodo bruno) - WLSF - 26.10.2013

Quote:
Originally Posted by Abravanel
Посмотреть сообщение
Bacana! Mas sу pra completar, estб faltando o ****** nos crйditos hein...
Tб ? ele sу postou um mйtodo utilizado por mim na minha include, e outro que foi criado pelo Bruno.

Onde ****** se encaixa ?