Jump to content

návod Hookovanie funkcií, callbackov [****]


Tanga

Recommended Posts

  • Hlavní moderátor

Hezký návod, který kromě hookování zlehka objasňuje i preprocesor. Přidán mezi ověřené a brzy mu dám i nálepku.

 

Mám jednu otázku. Je nutné používat CallRemoteFunction? Nešlo by zavolat funkci přímo? Takhle totiž nelze předávat pole jako argument (nemyslím řetězec).

Link to comment
Share on other sites

Aha tak ono se to jmenuje hook to co pouzivam icon_e_biggrin.gif Mylne jsem to radil do skupiny (retezovani, i kdyz pretezovani v c++ funguje jinak vim icon_e_smile.gif

 

Dobre napsane a strozumitelne takze odeme +.

 

Jinak jen takove upozorneni. Hookovani je hezke elegantni a zjednodusi praci. Ovsem pozor, kdyz si takto nahookujete nejakou fci kterou casto volate a pak ji takto zmenite, tak s tim musi clovek nakladat opatrne, aby si pak neuvaril CPU kdyz spusti mod icon_e_biggrin.gif

 

Napr si hodit logovani na kazde GivePlayerMoney tak to taky umi nejaky CPU sezrat .D

Edited by ATomas
Link to comment
Share on other sites

Mám jednu otázku. Je nutné používat CallRemoteFunction? Nešlo by zavolat funkci přímo? Takhle totiž nelze předávat pole jako argument (nemyslím řetězec).

 

Dobrá otázka, dík. :p

Po pár experimentoch som zistil, že áno. Resp. CallLocalFunction() j, to upravím.

 

Povedzme, že includ z bodu 5 (callback hook) bude v include "testcode".

Lepšie sa to predstavuje keď to volanie dám už mimo pôvodného súboru (nemusíš rozmýšlať či už to bolo definované alebo ktorý krok preprocesora prebieha... ale stalo by sa to isté).

#include <a_samp>
#include <testcode>

main() {
  OnPlayerGiveDamage(1, 2, 3, 5, 6); // example of a normal call
}

a tiež teda ku koncu testcode.inc (riadok 19) je 

#define OnPlayerGiveDamage MyOnPlayerGiveDamage // premenovanie nasledujuceho callbacku

z čoho vznikne

main() {
  MyOnPlayerGiveDamage(1, 2, 3, 4, 5);
}

čo následne

a) ak neexistuje ďalší hook, crashne pri forwarde z testinclude.inc "error 004: function "MyOnPlayerGiveDamage" is not implemented"

B) ak existuje ďalší hook, zavolá rovno ten ďalší a preskočí ten môj (skompiluje, ale kód bude chybný)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...