[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
#2

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

Lembrando que a w!hooks trabalha com states
Reply
#3

Sabia que ia sair um tutorial desse.

Quando eu poder dar +rep, te envio.
Reply
#4

Obrigado Shocc e Will.
Reply
#5

Bom tutorial, vou praticar!
Parabens danilu gentili!
Reply
#6

Уtimo tutorial, parabйns!
Reply
#7

Obrigado
Reply
#8

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

\/ Leia
Reply
#10

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 ?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)