#2

Seсor Dreyfuz este metodo es utilizado para hacer Hooks de funciones o callbacks para hacer que un cуdigo se ejecute en una funciуn nativa sin tener que alterarla.

Ejemplo:

pawn Код:
enum pInfo
{
  dinero
};
static PlayerInfo[MAX_PLAYERS][pInfo];
stock GivePlayerMoneyEx(playerid, dinero)
{
    GivePlayerMoney(playerid, dinero);
    PlayerInfo[playerid][dinero] += dinero;
    return 1;
}

#if defined _ALS_GivePlayerMoney // Esto sirve para verificar si _ALS_GivePlayerMoney esta definida.
  #undef  GivePlayerMoney // Usamos esto para poder redefinir GivePlayerMoney asi el compilador no lanzara error de redefiniciуn.
#else
#define _ALS_GivePlayerMoney // Definimos el ALS de GivePlayerMoney.
#endif

#define GivePlayerMoney GivePlayerMoneyEx // Esto hace que al ejecutar GivePlayerMoney se ejecute la funci[on creada por nosotros que en este caso es GivePlayerMoneyEx.
Es facil de usar pero hay varias formas de hacer Hooks de funciones y callbacks.

PD: En fнn esto sirve para ejecutar cуdigos creados por el programador para ser ejecutados ensima de una funciуn nativa de SA-MP como por ejemplo el ejemplo que mostre anteriormente, lo que hize fue que al usar GivePlayerMoney este llamase a la funciуn creada por mi GivePlayerMoneyEx sin tener que cambiar todos los GivePlayerMoney a GivePlayerMoneyEx.

Un saludo.

EDIT:

Me olvidй de explicar como hacer un Hook de Callback.

Ejemplo:

pawn Код:
public OnPlayerConnect(playerid)
{
  SendClientMessage(playerid, -1, "Prueba");
  CallLocalFunction("F_OnPlayerConnect", "i", playerid); // Sirve para llamar la callback definidas por nosotros que en este caso es F_OnPlayerConnect.
    return 1;
}

#if defined _ALS_OnPlayerConnect // Esto sirve para verificar si _ALS_OnPlayerConnect esta definida.
  #undef  OnPlayerConnect // Usamos esto para poder redefinir OnPlayerConnect asi el compilador no lanzara error de redefiniciуn.
#else
#define _ALS_OnPlayerConnect // Definimos el ALS de OnPlayerConnect.
#endif

#define OnPlayerConnect F_OnPlayerConnect // Esto hace que al ejecutar OnPlayerConnect se ejecute la funciуn creada por nosotros que en este caso es OnPlayerConnect.

forward F_OnPlayerConnect(playerid);
Recuerde siempre poner las callbacks y funciones por encima del ALS.
Reply


Messages In This Thread
ALS - by Dreyfuz - 06.02.2013, 21:22
Respuesta: ALS - by oOFotherOo - 07.02.2013, 01:21
Respuesta: ALS - by OTACON - 07.02.2013, 06:14
Respuesta: ALS - by TheChaoz - 07.02.2013, 07:23
Respuesta: ALS - by OTACON - 07.02.2013, 07:40
Respuesta: ALS - by TheChaoz - 07.02.2013, 08:22
Respuesta: ALS - by oOFotherOo - 07.02.2013, 15:50
Respuesta: ALS - by TheChaoz - 08.02.2013, 12:27
Respuesta: ALS - by Dreyfuz - 08.02.2013, 21:40
Respuesta: ALS - by OTACON - 09.02.2013, 02:07

Forum Jump:


Users browsing this thread: 1 Guest(s)