їPara quй sirve hacerle un gancho a una funciуn?
#1

Hola a todos, como bien sabran algunos quiero saber para que sirve hacerle un gancho (hook) a una funciуn.
Reply
#2

Se utiliza cuando se crea una funcion con base en otra existente (para extenderla o realizar algo mas) y al hookearla (a la vieja funcion), se evita tener 2 funciones que realicen practicamente lo mismo y posibles bugs en algunos casos.

ej clasico:

pawn Код:
E_PLAYER_DATA
{
    //...
    Float:health,
    //...
}
new pData[MAX_PLAYERS][E_PLAYER_DATA]

stock custom_SetPlayerHealth(playerid, Float:health)
{
    pData[playerid][health] = health;
    SetPlayerHealth(playerid, health);
}
#if defined SetPlayerHealth
    #undef SetPlayerHealth
#endif
#define SetPlayerHealth custom_SetPlayerHealth
Reply
#3

Bien, gracias por el ejemplo. Pero me interesarнa mucho mбs si me pudieras dar un ejemplo de como funciona y_hooks (sй que puedes hookear una funciуn en una lнnea), ya que no entiendo correctamente el funcionamiento.
Reply
#4

Chaoz, ese cуdigo no funcionaria, mostrarнa una serie de errores en el IDE.
pawn Код:
#if defined SetPlayerHealth
    #undef SetPlayerHealth
#endif
Eso es uno de los errores mas graves.
Reply
#5

Perdon en el apuro de contestar por falta de tiempo hize el codigo demasiado bosquejado.

Aqui un codigo funcional:

pawn Код:
#include <a_samp>

enum E_PLAYER_DATA
{
    //...
    Float:pHealth,
    //...
}
new pData[MAX_PLAYERS][E_PLAYER_DATA];

stock custom_SetPlayerHealth(playerid, Float:health)
{
    pData[playerid][pHealth] = health;
    SetPlayerHealth(playerid, health);
}
#if defined ALS_SetPlayerHealth
    #undef ALS_SetPlayerHealth
#endif
#define SetPlayerHealth custom_SetPlayerHealth
#define ALS_SetPlayerHealth

public OnPlayerSpawn(playerid)
{
    SetPlayerHealth(playerid, 100);
    return 0;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)