[TUTORIAL-SCRIPTING] TOUCH

Tutoriale scripting, cod si portiuni de cod.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
User avatar
marquiz
Membru, skill +1
Membru, skill +1
Posts: 285
Joined: 25 Jun 2013, 15:00
Detinator Steam: Da
Detinator server CS: Da
Reputatie: Membru Club eXtreamCS (o luna)
Utilizator neserios ( tepar )
Location: Bucharest
Has thanked: 28 times
Been thanked: 10 times

20 Jan 2015, 17:34

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.

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

Code: Select all

public public( touched, toucher )
Engine este cel mai rapid si cel mai flexibil. Poate sa preia modul in care hamsandwich functioneaza:

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
Acum un mic exemplu: sa spunem ca vrei sa detectati atunci cand un player atinge un alt jucator.

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

Code: Select all

//engine
fake_touch( touched, toucher )  
//fakemeta
dllfunc( DLLFunc_Touch, touched, toucher )  
Pentru a bloca touch folositi: return 1( engine ), return FMRES_SUPERCEDE( fakemeta ) sau return HAM_SUPERCEDE( hamsandwich )
[/size]
RoyalServer
Cosmin
Fost moderator
Fost moderator
Posts: 9362
Joined: 06 Jul 2013, 22:08
Detinator Steam: Da
Detinator server CS: Nu
Reputatie: Fost eXtream Mod
Fost Scripter eXtreamCS
Nume anterior: scosmynnnn
Has thanked: 492 times
Been thanked: 547 times

23 Jan 2015, 16:46

@mutat in sectiunea corespunzatoare

aici este locul mai potrivit :)
User avatar
HamletEagle
Fost moderator
Fost moderator
Posts: 750
Joined: 21 Sep 2013, 15:05
Detinator Steam: Da
CS Status: Inactiv cateva zile.
SteamID: privat
Reputatie: Fost Scripter eXtreamCS.com
Fost Moderator ajutator
Has thanked: 19 times
Been thanked: 85 times

23 Jan 2015, 21:07

Smecher, imi copiezi tutorialul din alta parte siil pui aici fara sa-mi lasi credite. Putin respect pentru munca mea ?

Ca sa nu mai zic ca nu eram in apele mele cand am scris ce e acolo(cel putin asa cred), unele chestii sunt gresit exprimare(touched, toucher sunt indexuri, nu clase de entitati, din index obtii clasa).
Daca vreti ajutorul meu, nu dati bump la topic, fara intrebari de genu "cat mai dureaza/mai astept mult?".
Post Reply

Return to “Scripting”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 9 guests