Exemplu: Entitatea A trece peste entitatea B, asta inseamna ca cele 2 entitati s-au atins. A este entitatea care atinge, B este cea care este atinsa.
Pentru a putea manipula putem sa alegem forwardurile puse la dispozitie de modulul engine, fakemeta si hamsandwich.
Code: Select all
//Engine
register_touch( "touched", "toucher", "public" )
//touched = cel care atinge
//toucher = cel care este atins
//public = publicul care este chemat
//Fakemeta
register_forward( FM_Touch, "public" )
//public = publicul care este chemat
//Hamsandwich
RegisterHam( Ham_Touch, "toucher", "public" )
//toucher = cel care atinge
//public = publicul care este chemat
- Engine este cel mai flexibil, putem sa setam exact ce entitati ne intereseaza
- Fakemeta este chemat pentru orice fel de touch, depinde de noi sa verificam ce entitati se ating.
- Hamsandwich inregistreaza orice fel de touch cu entitatea toucher.
Headerul publicului va arata asa:
Code: Select all
public public( touched, toucher )
register_touch( "touched", "*", "public" ) ( adica va inregistra orice touch dintre touched si o entitate ).
In forwardul fakemeta trebuie sa verificati manual daca entitatile care se ating sunt cele care va intereseaza. Hamsandwich va permite sa inregistrati orice touch facut de o entitate, dar trebuie sa verificati manual ce a atins.
Toucher, touched sunt clasele entitatilor. Fiecare entitate are o clasa, de exemplu un player are clasa "player", un ostatic are clasa "func_hostage", mapa are clasa "worldspawn". Pe langa aceste clasa default, va puteti crea propriile entitati cu clase custom.
Pentru a afla clasa unei entitati folosim:
Code: Select all
new szClassName[ 20 ]
pev( entittate, pev_classname, szClassName, charsmax( szClassName )
// in stringul szClassName va fi stocata clasa respectiva. O puteti compara cu equal/equali sau chiar contain/containi
Code: Select all
register_touch( "player", "player", "HookTouch" )
public HookTouch( touched, toucher )
{
//toucher si touched sunt id-urile entitatilor.
client_print( toucher, print_chat, "Ai atins un player: %i", touched )
}
Pentru a simula un touch intre 2 entitati:
Code: Select all
//engine
fake_touch( touched, toucher )
//fakemeta
dllfunc( DLLFunc_Touch, touched, toucher )
[/size]