Bine ai (re)venit pe ngz.ro !

Înregistrează-te acum pentru a avea acces la toate facilitățile forumului. Odată înregistrat și autentificat, vei fi capabil să creezi subiecte, să răspunzi la subiectele existente, să trimiți mesaje private, să-ți modifici profilul și multe altele. Dacă ai deja un cont, loghează-te, altfel inregistreaza-te.

Contact fondatori: TYBY / Allow

Informatii


Autentifică-mă automat la fiecare vizită


Prima pagină[NGZ.RO] ZONA COUNTER-STRIKEAddons-uri , Pluginuri , Tutoriale !Tutoriale şi Probleme

Scrie un subiect nou Răspunde la subiect  Pagina 1 din 1
[ View Topic Options ] [ ‹‹ | ›› ]
Autor 
 Subiectul mesajului: [Tutorial] Touch
MesajScris: 07 Feb 2018, 14:46 
Skill +0
Skill +0
Avatar utilizator
Membru din: 07 Feb 2018, 14:28
Mesaje: 46
Localitate: Afumati
Touch = atingere, interactiune. In multe cazuri avem nevoie sa stim cand 2 entitati se ating, adica intra in contact una cu cealalta.



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.

Cod:
//Engine
register_touch( "touched", "toucher", "public" )
//touched = cel care atinge
//toucher = cel care este atins
//public = publicul care este chemat


Cod:
//Fakemeta
register_forward( FM_Touch, "public" )
//public = publicul care este chemat


Cod:
//Hamsandwich
RegisterHam( Ham_Touch, "toucher", "public" )
//toucher = cel care atinge
//public = publicul care este chemat


Ce observam din exemplele de mai sus ?

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:


public public( touched, toucher )


Engine este cel mai rapid si cel mai flexibil. Poate sa preia modul in care hamsandwich functioneaza:

Cod:
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:

Cod:
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


Acum un mic exemplu: sa spunem ca vrei sa detectati atunci cand un player atinge un alt player.

Cod:
register_touch( "player", "player", "HookTouch" )


Cod:
public HookTouch( touched, toucher )
{
//toucher si touched sunt id-urile entitatilor.
client_print( toucher, print_chat, "Ai atins un player: %i", touched )
}



Pentru hamsandwich ar trebui sa verificati daca touched are clasa "player", in fakemeta trebuie sa verificati daca ambele au clasa player.



Pentru a simula un touch intre 2 entitati:
//engine
fake_touch( touched, toucher )
//fakemeta
dllfunc( DLLFunc_Touch, touched, toucher )


Pentru a bloca touch folositi:

Cod:
return 1( engine ), return FMRES_SUPERCEDE( fakemeta ) sau return HAM_SUPERCEDE( hamsandwich )


Profil
  
 
Afişează mesajele din ultimele:  Sortează după  
Scrie un subiect nou Răspunde la subiect  [ 1 mesaj ] 


Cine este conectat

 

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 2 vizitatori


Nu puteţi scrie subiecte noi în acest forum
Nu puteţi răspunde subiectelor din acest forum
Nu puteţi modifica mesajele dumneavoastră în acest forum
Nu puteţi şterge mesajele dumneavoastră în acest forum
Nu puteţi publica fişiere ataşate în acest forum

Mergi la: