SA-MP Forums Archive
їPara quй sirve hacerle un gancho a una funciуn? - 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: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: їPara quй sirve hacerle un gancho a una funciуn? (/showthread.php?tid=466041)



їPara quй sirve hacerle un gancho a una funciуn? - Malganys - 25.09.2013

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


Re: їPara quй sirve hacerle un gancho a una funciуn? - TheChaoz - 26.09.2013

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



Respuesta: їPara quй sirve hacerle un gancho a una funciуn? - Malganys - 26.09.2013

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.


Respuesta: їPara quй sirve hacerle un gancho a una funciуn? - DesingMyCry - 26.09.2013

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.


Re: їPara quй sirve hacerle un gancho a una funciуn? - TheChaoz - 27.09.2013

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;
}