Jump to content

Foreach


Guest RockStar

Recommended Posts

Guest RockStar

Foreach

Tutorial

Introducere :

Foreach a fost create de Y_Less , acesta are functia de a inlocuii loop-urile ( loops ) intrun mod nou , foarte rapid si eficient.

Exemplu :

for ( new i = 0; i != MAX_PLAYERS; ++i )

{

  if ( IsPlayerConnected( i ) )

    {

        printf("Player %d is connected",  i );

    }

}

devine simplu

foreach (Player,  i)

{

    printf("Player %d is connected",  i );

}

Edit: Nu faceti foreach ( Player,  i ) cu spatii pentru ca va da eroare .

Multumesc lui Zh3r0 pentru ca ma atentionat .

Includere :

Acest include foloseste acest sistem deci ce tu trebuie sa

folosesti

#include <foreach>

Dupa aceea poti inlocui loop-urile cu codul de mai sus.

Pentru a folosi acest sistem intrun filescript foloseste

#define FILTERSCRIPT

#include <foreach>

Daca deja ai macroul FILTERSCRIPT ai grija sa fie deasupra include-ului foreach.

Declaratie :

Pentru a declara un singur iterator ( inca un lucru la care poti folosi foreach ) foloseste :

new Iterator:MyIterator<10>;

Acest lucru va declara iteratorul cu 10 sloturi.

Folosire :

Pentru a folosi propriu iterator foloseste :

foreach (MyIterator, var)

{

    printf("var %d is active",  var );

}

Pentru a adauga iteme foloseste :

Iter_Add(MyIterator,  7);

Pentru a sterge iteme foloseste :

Iter_Remove(MyIterator, 7);

Pentru a lua un item rapid dintr-un iterator ( este foarte bun pentru a lua random players ) foloseste :

Iter_Random(MyIterator);

Pentru playeri ar trebui sa fie :

new randomplayer = Iter_Random(Player);

Functii :

  • Iterator:nume<marime>

      Creezi un nou iterator cu numele dat si maximul de valori detinute. Sistemul defineste iteratoarele automat :

      Player - Toti playerii conectati

      Bot (0.3) - Toti botii conectati

      NPC (0.3) - Toti botii conectati ( lafel ca la Bot )

      Character (0.3) - Toti playeri si botii conectati

  • Iter_Add(name, value)

      Adauga o valoare la iterator. Se face automat pentru iteratoarele de mai sus.

  • Iter_Remove(name, value)

      Sterge o valoare la iterator. Se face automat pentru iteratoarele de mai sus.

  • Iter_Clear(name)

      Reseteaza complet un iterator. Sterge toate datele.

  • Iter_Random(name)

      Returneaza o valoare la intamplare. Folositor pentru selectarea unui player la intamplare.

  • Iter_Count(name)

      Returneaza numarul de iteme dintr-un iterator. De exemplu numarul de playeri conectati.

  • IteratorArray:name[num]<size>

      Creeaza un nou iterator multidimensional cu numele si valoarea maxima.

  • Iter_Init(name)

      Daca faci un iteratori multidimensional trebuie neaparat sa sa apelezi la aceasta functie inainte de a pune ceva in el.

  • Iter_Func2(name,  index,  pars)

      Aceste functii au fost scoase din ultima versiune .

Daca adaugi "2" dupa oricare functie de mai sus si daca adaugi un index dupa nume si dupa toti cei lalti parametri vei creea un iterator multidimensional .

Un exemplu :

new IteratorArray:My2d[ 3 ]<5>;

Iter_Init2( My2d );

Iter_Add2( My2d,  1,  4 );

 

Acesta va creea 3 5 elemente si adauga elementul 4 la al doilea.

Optiuni de compilare :

Defineste astea inainte de a include foreach pentru a functiona.

  • FOREACH_NO_BOTS

          Daca vrei ca loop-urile doar pentru playeri foloseste acest include pentru a exclude bot-looping chiar si in 0.3.

  • FOREACH_NO_PLAYERS

          Acesta exclude toti playerii si boti .

Multiple Dimensions :

Versiunea anterioara a avut "Iter_Func2" - acestea au fost scoase in favoarea unor sintaxe.

Acum poti avea iteratori multidimensionali. Pentru exemplu poti avea un array de iterators de la vehiculele playerilor :

foreach (PlayerVehicles[ playerid ],  veh)

{

    // Fa ceva cu vehiculul playerului

}

Pentru array multidimensional trebuie sa folosesti :

Iter_Init(iterator);

---------------------------------------------------------------------------------------------------------------------------------------------------

Sper ca am tradus acest tutorial destul de clar si sa facut inteles.

In caz ca am gresit ceva rog moderatorii / administratorii sa dea EDIT si sa corecteze.

Postul original de catre Y_Less .

Edit: Aceasta a fost postul cu numarul 200 pentru mine.

---------------------------------------------------------------------------------------------------------------------------------------------------

Link to comment
Share on other sites

Guest RockStar

si cika te-ai lasat....

Am incercat de vreo 2...3 ...chiar de mai multe ori dar nu pot sa ma las...pur si simplu nu reusesc , nu stiu cum sa fac sa nu ma mai tenteze sa intru in pawno.

Stati linistit ca de jucat nu mai joc...doar am jocu inst pentru a testa ce creez.

Link to comment
Share on other sites

Guest PlayON

Nu fa ce a zis Bect, fa ce crezi tu, ei tot ce vor este "mana" ta, le-o dai si iti rupe bratu'.

Si te rog sa re-citesti tutorialul. foreach este un define, ceea ce inseamna ca NU suporta spatii gen

foreach ( Player, i )

Dar accepta asa:

foreach(Player, i )

De ce?

Uite cum arata define foreach.

#define foreach(%1,%2) \

for (new %2 = YSI_gS%1; %2 != -1; %2 = YSI_gA%1[%2])

Tu, facand

foreach ( Player, i )

detasezi foreach de (%1, %2), si ar veni:

for (new  Player = YSI_gS i;  Player != -1;  i = YSI_gA Player

Observi cum ai detasat YSI_gS de i ? la fel si la YSI_gA Player.

Eroare e urmatoarea:

error 017: undefined symbol "YSI_gS"

Termenii YSI_gS, daca ti se par ciudat, ele semnifica cu totul NIMIC! Doar o simpla definire a unei variabile, dar de ce? Pentru ca nimeni, absolut nimeni nu ar folosi variabile scrise new YSI_gS; de exemplu.

Este o denumire complexa pentru a evita coliziunile!

PS: La fel si eu cand am zis ca plec, defapt am parasit lumea SA-MP a jocului, scriptingu inca il practic, SA-MP'ul tin doar pentru teste, de jucat nu mai joc!

Vreau sa invat sa codez in C++ ca deja stiu basicu la PAWN si devine plictisitor!

Link to comment
Share on other sites

Guest RockStar

Da , acum am vazut si eu ca da eroare la YSI_gS.

Nu am folosit pana acum niciodata foreach cu spatii , acum am zis sa folosesc spatii gandindu-ma ca arata mult mai frumos.

O sa dau Edit imediat la post sa corectez.

Link to comment
Share on other sites

  • 2 weeks later...
Guest farse

aia nu trebuie trecuta pe foreach.

Foreach il folosesti cand trebuie sa indexezi numere diferite,cum ar fi : 0 5 13 55 77 88; si tu ,in acel loop ai nevoie doar de numere consecutive..

dar totusi..

[pawn]new IteratorArray:turfs <No_Turfs>;

Iter_Init2( turfs );

Iter_Add( turfs ,  0 );

Iter_Add( turfs ,  5 );

Iter_Add( turfs ,  13 );[/pawn]

etc

foreach(turfs, VAR)

{

if(VAR blabla)

}

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.