13.10.2013, 11:40
@Atualizado.
OBS: Para quem estiver utilizando a include, peзo que atualize logo para esta nova versгo, pois eu corrigi um bug que estava ocorrendo durante as chamadas.
Info update[13/10/2013]:
Fiz algumas modificaзхes na sintaxe como havia prometido, nгo foi algo que chegasse perto do nosso padrгo visual de atualmente, mas fiz algo que acredite que vб simplificar bastante, o uso ficou mais simples que a versгo antiga, vejamos:
Agora podemos fazer o hook de uma forma mais agradбvel e fбcil de se aprender:
A include permanece na mesma forma de criaзгo de hook, o interessante vem na parte GM:
Interessante, nгo ? usei a palavra reservada 'register' para indicar que vocк estб hookeando uma funзгo nova, seja ela stock ou forward/public, isto й indicado no < stock > ou < public >
Exemplo de hook nativo:
Com essa atualizaзгo nгo haverб mais bugs na chamada, e vocкs poderгo trabalhar de uma forma bastante simplificada.
Include source:
Abraзos.
OBS: Para quem estiver utilizando a include, peзo que atualize logo para esta nova versгo, pois eu corrigi um bug que estava ocorrendo durante as chamadas.
Info update[13/10/2013]:
Fiz algumas modificaзхes na sintaxe como havia prometido, nгo foi algo que chegasse perto do nosso padrгo visual de atualmente, mas fiz algo que acredite que vб simplificar bastante, o uso ficou mais simples que a versгo antiga, vejamos:
Agora podemos fazer o hook de uma forma mais agradбvel e fбcil de se aprender:
pawn Code:
//include
hook_s::funct()
{
print("hookeada");
call->funct();
}
pawn Code:
register <stock>funct()
{
print("original");
}
Exemplo de hook nativo:
pawn Code:
//include
hook_f::OnGameModeInit()
{
print("hookeada");
call->OnGameModeInit();
return nop;
}
//GM
register <public>OnGameModeInit()
{
// Don't use these lines if it's a filterscript
SetGameModeText("Blank Script");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
print("[DEBUG / GM] Callback: OnGameModeInit called");
AddStaticVehicleEx(520,2494.8999000,-1669.3000500,14.3000000,0.0000000,141,141,300); //Hydra
AddStaticVehicleEx(432,277.8999900,1955.6999500,17.7000000,270.0000000,141,141,300); //Rhino
AddStaticVehicleEx(432,277.1000100,1989.5999800,17.7000000,270.0000000,141,141,300); //Rhino
AddStaticVehicleEx(432,277.2000100,2023.5999800,17.7000000,270.0000000,141,141,300); //Rhino
AddStaticVehicleEx(520,300.2999900,2051.1001000,18.6000000,180.0000000,141,141,300); //Hydra
AddStaticVehicleEx(520,314.0000000,2051.3000500,18.6000000,180.0000000,141,141,300); //Hydra
AddStaticVehicleEx(548,281.5000000,1929.9000200,19.5000000,270.0000000,141,141,300); //Cargobob
AddStaticVehicleEx(425,316.2999900,1805.5000000,18.5000000,0.0000000,141,141,300); //Hunter
AddStaticVehicleEx(425,303.5000000,1805.4000200,18.5000000,0.0000000,141,141,300); //Hunter
AddStaticVehicleEx(470,220.3000000,1920.5999800,17.8000000,180.0000000,141,141,300); //Patriot
AddStaticVehicleEx(470,211.8000000,1920.5999800,17.8000000,180.0000000,141,141,300); //Patriot
AddStaticVehicleEx(470,202.3999900,1920.6999500,17.8000000,178.2710000,141,141,300); //Patriot
AddStaticVehicleEx(470,193.3999900,1920.6999500,17.8000000,180.3630000,141,141,300); //Patriot
AddStaticVehicleEx(468,201.8000000,1814.5999800,17.4000000,0.0000000,141,141,300); //Sanchez
AddStaticVehicleEx(468,200.3000000,1814.6999500,17.4000000,0.0000000,141,141,300); //Sanchez
AddStaticVehicleEx(433,278.7999900,1788.3000500,18.2000000,0.0000000,141,141,300); //Barracks
AddStaticVehicleEx(433,283.8999900,1788.5000000,18.2000000,0.0000000,141,141,300); //Barracks
AddStaticVehicleEx(433,-1240.3000500,438.7999900,7.8000000,0.0000000,141,141,300); //Barracks
AddStaticVehicleEx(433,-1232.3000500,438.6000100,7.8000000,0.0000000,141,141,300); //Barracks
AddStaticVehicleEx(470,-1384.0999800,455.2000100,7.3000000,0.0000000,141,141,300); //Patriot
AddStaticVehicleEx(470,-1389.9000200,455.3999900,7.3000000,0.0000000,141,141,300); //Patriot
AddStaticVehicleEx(470,-1396.0000000,455.6000100,7.3000000,0.0000000,141,141,300); //Patriot
AddStaticVehicleEx(470,-1402.3000500,455.6000100,7.3000000,0.0000000,141,141,300); //Patriot
AddStaticVehicleEx(520,-1267.0999800,498.2999900,19.2000000,271.1220000,141,141,300); //Hydra
AddStaticVehicleEx(520,-1301.6999500,507.6000100,19.2000000,271.1220000,141,141,300); //Hydra
AddStaticVehicleEx(425,-1415.3000500,493.1000100,19.1000000,271.1220000,141,141,300); //Hunter
AddStaticVehicleEx(425,-1425.8000500,507.8999900,19.1000000,271.1220000,141,141,300); //Hunter
AddStaticVehicleEx(548,-1360.5999800,507.8999900,20.1000000,271.1220000,141,141,300); //Cargobob
AddStaticVehicleEx(432,-1466.0999800,457.7000100,7.3000000,0.0000000,141,141,300); //Rhino
AddStaticVehicleEx(432,-1454.5000000,457.2000100,7.3000000,0.0000000,141,141,300); //Rhino
AddStaticVehicleEx(468,-1526.5999800,483.5000000,6.9000000,0.0000000,141,141,300); //Sanchez
AddStaticVehicleEx(468,-1533.6999500,483.3999900,6.9000000,0.0000000,141,141,300); //Sanchez
return 1;
}
Include source:
pawn Code:
/*
*
* HOOK v1 beta - Willian_Luigi
* Data de inicio: 08/10/2013
* Ultima atualizaзгo: 13/10/2013
* CODE.ME, 2013.1 -
*
*/
#if defined _whooks_included
#endinput
#endif
#define _whooks_included
#pragma library whooks
#define hook_f::%0(%1) public %0(%1) <>
#define hook_s::%0(%1) stock %0(%1) <>
#define function::%0(%1) public %0(%1) <hook:_%0>
#define sstock::%0(%1) %0(%1) <hook:_%0>
#define register<%0>%1(%2) %0 %1(%2) <hook:_%1>
#define call->%0(%1) state hook:_%0; %0(%1)
#define nop (0x90)
#define NOP nop