Gta San Andreas MultiPlayer (samp) HUN
Navigation
     
Account
Felhasznlnv:

Jelsz:
SgSg
Regisztrci
Elfelejtettem a jelszt
     
Kp
Szerver
Legyen ennek a weboldalnak sajt samp szervere?

Igen
Nem
Szavazs llsa
Lezrt szavazsok
     
Friss

Utols mdosts
2013 mj. 19.
12:17

 

     
Ms weblapok
 SA:MP Frum
SA:MP Wiki
Google

     

PAWN Eszkzk
     
[INC]Foreach

 

Foreach
 

Forrs: ZeRo, sampforum.hu

Bevezet

foreach lecserli a ciklusokat( leginkbb a jtkosokra vonatkozkat ) gyorsabb, s mg hatkonyabb ciklusokra. Plda:



Pawn: [Kijells]

for( new i = 0; i != MAX_PLAYERS; ++i ) {
    if (IsPlayerConnected( i ) ) {
        printf( "Jtkos %d csatlakozva van", i );
    }
}


Egyszeren ezz vlik:



Pawn: [Kijells]

foreach( Player, i ) {
    printf( "Jtkos[%d] csatlakozva van", i );   
}


Felhvnm a figyelmet, hogy ez nem csak egy egyszer definci, ami az eredeti ciklust illeszti be ms nven, hanem ez tulajdonkppen egy teljesen klnbz begyazs, ami jtkoslistzst hasznl, emiatt gyorsabb az eredeti rendszernl. St, a mkdsi elve miatt nem szmt a MAX_PLAYERS rtke, akr be van lltva a te szerveredhez, akr nincs; Ez a ciklusfajta mindig ugyanannyi id alatt fog lefutni, mivel ez CSAK a csatlakozott jtkosokat kezeli, res azonostkat nem.

Begyazs

Ez a fggvnyknyvtr ezt a rendszert hasznlja, teht mindssze ennyit kell csinlj:



Pawn: [Kijells]

#include <foreach>

Ezek utn mr hasznlhatod az j ciklust.

Ha filterszkriptben szeretnd hasznlni ezt a rendszert, akkor tedd a kvetkezt:



Pawn: [Kijells]

#define FILTERSCRIPT
#include <foreach>


Ha a forrsodban mr szerepel a FILTERSCRIPT definci, akkor gyzdj meg rla, hogy a foreach begyazsa FLTT legyen.

Deklarci

Hogy ltrehozz egy itertort( egy elem, amit a foreach segtsgvel hasznlhatsz ), hasznld a kvetkez kdot:



Pawn: [Kijells]

new Iterator:MyIterator<10>;
Ez ltre fogja hozni a "MyIterator" nev itertort, amihez 10 frhelyet rendel.

Figyelmedbe ajnlom, hogy ez a szintaxis ezen a kdon alapul, s formra hasonlt egy tlagos vltoz deklarlsra( tbbrt elemek hasznlata ), de ez nem egy tmb, gy az emberek nem esnek abba a hibba, hogy direkt mdon prblnak meg informcikhoz hozzfrni, teht a szerkezet fontos.


Hasznlata

A sajt itertorodat a kvetkez kppen hasznlhatod:



Pawn: [Kijells]

foreach( MyIterator, var ) {
    printf( "Vltoz[%d] aktv", var );
}


rtkek hozzadsa:



Pawn: [Kijells]

Iter_Add( MyIterator, 7 );
rtkek trlse:



Pawn: [Kijells]

Iter_Remove( MyIterator, 7 );
Ha egy vletlenszer rtket szeretnl lekrdezni az itertorodbl GYORSAN( ez nagyon j vletlenszer jtkosok kivlasztsra ), csinld ezt:



Pawn: [Kijells]

Iter_Random( MyIterator );
Jtkoshoz:



Pawn: [Kijells]

new randomplayer = Iter_Random( Player );
Fggvnyek



  • Iterator:nv<mret>

    Ltrehoz egy j itertort a megadott nvvel s mrettel. A rendszer automatikusan definilja a kvetkez itertorokat:
    • Player - Minden csatlakozott jtkos
    • Bot (0.3) - Minden csatlakozott bot
    • NPC (0.3) - Minden csatlakozott bot( ugyan az, mint a Bot )
    • Character (0.3) - Minden csatlakozott jtkos s bot
  • Iter_Add(name,value)

    rtket rendel hozz a megadott itertorhoz. A fentieket automatikusan kezeli.
     
  • Iter_Remove(name,value)

    rtket trl a megadott itertorbl. A fentieket automatikusan kezeli.
     
  • Iter_Clear(name)

    Teljesen kirt egy itertort. Minden rtket trl.
     
  • Iter_Random(name)

    Visszatr egy vletlenszer rtkkel a megadott itertorbl. Hasznos vletlenszer jtkosok kivlasztshoz( ez sokkal gyorsabb, mint a tbbi ehhez hasonl mdszer, a kd struktrja miatt ).
     
  • Iter_Count(name)

    Visszatr egy megadott itertor elemeinek szmval( pldul hny csatlakozott jtkos van a szerveren ) - NAGYON gyorsan
     
  • IteratorArray:name[num]<size>

    Ltrehoz egy j multidimenzis itertort a megadott nvvel, s a maximlis trolsi mrettel.
     
  • Iter_Init(name)

    Ha ltrehoztl egy multidimenzis itertort, akkor ezt a fggvnyt meg KELL hvnod, mieltt brmit is raknl bele.
     
  • Iter_Func2(name,index,pars)

    Felhvom a figyelmet, hogy ezek a fggvnyek el lettek tvoltva a legjabb verziban - most mr csak szimpln meg kell indexelned a tmbt.

    Ha a "2" szerepel a fenti fggvnyek vgn, s az itertorod vgn( de a paramterek ELTT ) egy index ll, akkor multidimenzis itertort kapsz. Pldul:

    Pawn: [Kijells]
    new IteratorArray:My2d[3]<5>;

    Iter_Init2(My2d);
    Iter_Add2(My2d, 1, 4);


    Ezzel ltrehozol 3 5-elemes itertort, s a msodikhoz hozzadod a 4-et rtkknt.
    Fordtsi belltsok

    A begyazs eltt definilhatsz pr dolgot, hogy testreszabd a foreach funkciit.
    • FOREACH_NO_BOTS
      Ha csak jtkosokra akarod vonatkoztatni a ciklusaidat, akkor hasznld ezt a defincit, hogy megszntesd a kdot, ami a botokat(NPC) nzi.
    • FOREACH_NO_PLAYERS
      Ezzel megsznteted a jtkosok S botok szmllst, gy csak a f funkcik lesznek elrhetk.
  • Tbbrt dimenzik

    Az elz kiads minden fggvnynek volt egy "Iter_Func2" vltozata - ezek most trlve lettek egy mg egyrtelmbb szintaxis ltrehozsnak rdekben:

    Mostantl ltrehozhatsz tbbrt itertorokat is. Pldul egy itertorokbl ll tmbt, ami a jtkosok jrmit tartalmazza( habr volna jobb javaslatom is ennek megoldsra ):

    Pawn: [Kijells]
    foreach( PlayerVehicles[ playerid ], veh ) {
        //Itt csinlhatsz valamit az adott jtkos jrmvvel
    }


    Multidimenzis itertorok ltrehozshoz meg kell hvnod ezt a fggvnyt:

    Pawn: [Kijells]
    Iter_Init( iterator );
    Az itertor hasznlata eltt. Az egyszer itertorokat inicializlhatod a fordtsi id kzben, de a multidimenzisokat nem.

    Pldk

    Els plda

    Multidimenzis itertorok. Ezzel egy itertorokbl ll tmbt hozhatsz ltre:

    Pawn: [Kijells]
    #include <foreach>

    new IteratorArray:Vehicle[4]<20>;

    public OnGameModeInit()
    {
        //Elszr EZT KELL meghvnod multidimenzis itertoroknl.
        Iter_Init(Vehicle);
        //Hozzads az ELS listhoz
        Iter_Add(Vehicle[0], AddStaticVehicle(454, -1364.0269, 1470.2139, 0.3568, 165.0191, -1, -1));
        Iter_Add(Vehicle[0], AddStaticVehicle(484, -1394.0040, 1468.3309, 0.1742, 99.7403, -1, -1));
        Iter_Add(Vehicle[0], AddStaticVehicle(484, -1404.9385, 1507.1971, -0.0963, 60.9265, -1, -1));
        Iter_Add(Vehicle[0], AddStaticVehicle(446, -1603.1550, 1391.8168, -0.8820, 310.2346, -1, -1));
        //Hozzads a MSODIK listhoz
        Iter_Add(Vehicle[1], AddStaticVehicle(446, -1698.8333, 1411.8612, -0.4988, 333.6676, -1, -1));
        Iter_Add(Vehicle[1], AddStaticVehicle(446, -1710.4403, 1430.0688, -0.5722, 322.3057, -1, -1));
        Iter_Add(Vehicle[1], AddStaticVehicle(473, -1623.9312, 1438.3147, -0.2109, 280.8999, -1, -1));
        //Hozzads a HARMADIK listhoz
        Iter_Add(Vehicle[2], AddStaticVehicle(473, -1609.0120, 1405.0123, -0.1395, 300.4936, -1, -1));
        Iter_Add(Vehicle[2], AddStaticVehicle(487, -1651.4410, 1302.6608, 7.2126, 310.4509, -1, -1));
        //Hozzads a NEGYEDIK listhoz
        Iter_Add(Vehicle[3], AddStaticVehicle(487, -1736.8011, 1400.1903, 7.3641, 293.3916, -1, -1));
        //Vgigmegynk a msodik lista sszes jrmvn
        foreach (Vehicle[1], veh)
        {
            ChangeVehicleColor(veh, 0, 10);
        }
        //Vgigmegynk az els lista sszes jrmvn
        foreach (Vehicle[0], veh)
        {
            ChangeVehicleColor(veh, 12, 20);
        }
    }


    Msodik plda

    Multidimenzis itertorok. Ltrehozunk egy itertorokbl ll tmbt, s a jrmveket egy sszetett listhoz hozzadjuk.

    Pawn: [Kijells]
    #include <foreach>

    new IteratorArray:Vehicle[4]<20>;

    public OnGameModeInit()
    {
        //Elszr EZT KELL meghvnod multidimenzis itertoroknl.
        Iter_Init(Vehicle);
        new
            veh;
        veh = AddStaticVehicle(454, -1364.0269, 1470.2139, 0.3568, 165.0191, -1, -1);
        Iter_Add(Vehicle[0], veh);
        Iter_Add(Vehicle[1], veh);
        Iter_Add(Vehicle[2], veh);
        veh = AddStaticVehicle(484, -1394.0040, 1468.3309, 0.1742, 99.7403, -1, -1);
        Iter_Add(Vehicle[1], veh);
        Iter_Add(Vehicle[2], veh);
        Iter_Add(Vehicle[3], veh);
        veh = AddStaticVehicle(484, -1404.9385, 1507.1971, -0.0963, 60.9265, -1, -1);
        Iter_Add(Vehicle[0], veh);
        Iter_Add(Vehicle[2], veh);
        Iter_Add(Vehicle[3], veh);
        veh = AddStaticVehicle(446, -1603.1550, 1391.8168, -0.8820, 310.2346, -1, -1);
        Iter_Add(Vehicle[0], veh);
        Iter_Add(Vehicle[1], veh);
        Iter_Add(Vehicle[3], veh);
        veh = AddStaticVehicle(446, -1698.8333, 1411.8612, -0.4988, 333.6676, -1, -1);
        Iter_Add(Vehicle[0], veh);
        Iter_Add(Vehicle[1], veh);
        Iter_Add(Vehicle[2], veh);
        veh = AddStaticVehicle(446, -1710.4403, 1430.0688, -0.5722, 322.3057, -1, -1);
        Iter_Add(Vehicle[1], veh);
        Iter_Add(Vehicle[2], veh);
        Iter_Add(Vehicle[3], veh);
        veh = AddStaticVehicle(473, -1623.9312, 1438.3147, -0.2109, 280.8999, -1, -1);
        Iter_Add(Vehicle[0], veh);
        Iter_Add(Vehicle[2], veh);
        Iter_Add(Vehicle[3], veh);
        veh = AddStaticVehicle(473, -1609.0120, 1405.0123, -0.1395, 300.4936, -1, -1);
        Iter_Add(Vehicle[0], veh);
        Iter_Add(Vehicle[1], veh);
        Iter_Add(Vehicle[3], veh);
        veh = AddStaticVehicle(487, -1651.4410, 1302.6608, 7.2126, 310.4509, -1, -1);
        Iter_Add(Vehicle[0], veh);
        Iter_Add(Vehicle[1], veh);
        Iter_Add(Vehicle[2], veh);
        veh = AddStaticVehicle(487, -1736.8011, 1400.1903, 7.3641, 293.3916, -1, -1);
        Iter_Add(Vehicle[1], veh);
        Iter_Add(Vehicle[2], veh);
        Iter_Add(Vehicle[3], veh);
        //Vgigmegynk a msodik lista sszes jrmvn
        foreachex (Vehicle[1], veh)
        {
            ChangeVehicleColor(veh, 0, 10);
        }
        //Vgigmegynk az els lista sszes jrmvn
        foreachex (Vehicle[0], veh)
        {
            ChangeVehicleColor(veh, 12, 20);
        }
    }


    Harmadik plda

    Vgigmegynk az sszes boton( csak 0.3 ).

    Pawn: [Kijells]
    foreach (Bot, botid)
    {
        SetPlayerPos(botid, 0.0, 0.0, 10.0); //Minden NPC-t a plya kzepre helyeznk
    }


    Negyedik plda

    Ltrehozunk egy j itertort 20 jrm szmra, s megvltoztatjuk a sznket.

    Pawn: [Kijells]
    #include <foreach>

    new Iterator:Vehicle<20>;

    public OnGameModeInit()
    {
        Iter_Add(Vehicle, AddStaticVehicle(454, -1364.0269, 1470.2139, 0.3568, 165.0191, -1, -1));
        Iter_Add(Vehicle, AddStaticVehicle(484, -1394.0040, 1468.3309, 0.1742, 99.7403, -1, -1));
        Iter_Add(Vehicle, AddStaticVehicle(484, -1404.9385, 1507.1971, -0.0963, 60.9265, -1, -1));
        Iter_Add(Vehicle, AddStaticVehicle(446, -1603.1550, 1391.8168, -0.8820, 310.2346, -1, -1));
        Iter_Add(Vehicle, AddStaticVehicle(446, -1698.8333, 1411.8612, -0.4988, 333.6676, -1, -1));
        Iter_Add(Vehicle, AddStaticVehicle(446, -1710.4403, 1430.0688, -0.5722, 322.3057, -1, -1));
        Iter_Add(Vehicle, AddStaticVehicle(473, -1623.9312, 1438.3147, -0.2109, 280.8999, -1, -1));
        Iter_Add(Vehicle, AddStaticVehicle(473, -1609.0120, 1405.0123, -0.1395, 300.4936, -1, -1));
        Iter_Add(Vehicle, AddStaticVehicle(487, -1651.4410, 1302.6608, 7.2126, 310.4509, -1, -1));
        Iter_Add(Vehicle, AddStaticVehicle(487, -1736.8011, 1400.1903, 7.3641, 293.3916, -1, -1));
        foreach (Vehicle, vid)
        {
            ChangeVehicleColor(vid, 0, 10);
        }
    }


    Ideredmnyek

    Mint mr emltettem, ez a struktra gyorsabb, mint az alap ciklusok, itt a bizonytk.

    Letlts

    http://pastebin.com/2wduLfcq



    Eredeti tma itt.
     
Nzettsg
Induls: 2010-02-26
     
PAWN/Szkriptek
     
Tutorialok
     
ra
     
Chat
Krlek, felesleges dolgokat ne rj a chatbe!
Nv:

zenet:
:)) :) :@ :? :(( :o :D ;) 8o 8p 8) 8| :( :'( ;D :$
     

Elkészítem születési horoszkópod és ajándék 3 éves elõrejelzésed. Utána szóban minden kérdésedet megbeszéljük! Kattints    *****    Könyves oldal - egy jó könyv, elrepít bárhová - Könyves oldal    *****    20 éve jelent meg a Nintendo DS! Emlékezzünk meg ról, hisz olyan sok szép perccel ajándékozott meg minket a játékaival!    *****    Ha érdekelnek az animék,mangák,videojátékok, japán és holland nyelv és kultúra, akkor látogass el a személyes oldalamra.    *****    Dryvit, hõszigetelés! Vállaljuk családi házak, nyaralók és egyéb épületek homlokzati szigetelését! 0630/583-3168 Hívjon!    *****    Könyves oldal - Ágica Könyvtára - ahol megnézheted milyen könyveim vannak, miket olvasok, mik a terveim...    *****    Megtörtént Bûnügyekkel foglalkozó oldal - magyar és külföldi esetek.    *****    Why do all the monsters come out at night? - Rose Harbor, a város, ahol nem a természetfeletti a legfõbb titok - FRPG    *****    A boroszkányok gyorsan megtanulják... Minden mágia megköveteli a maga árát. De vajon mekkora lehet ez az ár? - FRPG    *****    Alkosd meg a saját karaktered, és irányítsd a sorsát! Vajon képes lenne túlélni egy ilyen titkokkal teli helyen? - FRPG    *****    Mindig tudnod kell, melyik kiköt&#245; felé tartasz. - ROSE HARBOR, a mi városunk - FRPG    *****    Akad mindannyijukban valami közös, valami ide vezette õket, a delaware-i aprócska kikötõvárosba... - FRPG    *****    boroszkány, vérfarkas, alakváltó, démon és angyal... szavak, amik mind jelentenek valamit - csatlakozz közénk - FRPG    *****    Why do all the monsters come out at night? - Rose Harbor, a város, ahol nem a természetfeletti a legfõbb titok - FRPG    *****    why do all monsters come out at night - FRPG - Csatlakozz közénk! - Írj, és éld át a kalandokat!    *****    CRIMECASESNIGHT - Igazi Bûntényekkel foglalkozó oldal    *****    Figyelem, figyelem! A második vágányra karácsonyi mese érkezett! Mesés karácsonyt kíván mindenkinek: a Mesetáros    *****    10 éves a Haikyuu!! Ennek alkalmából részletes elemzést olvashatsz az anime elsõ évadáról az Anime Odyssey blogban!    *****    Ismerd meg az F-Zero sorozatot, a Nintendo legdinamikusabb versenyjáték-szériáját! Folyamatosan bõvülõ tartalom.    *****    Advent a Mesetárban! Téli és karácsonyi mesék és színezõk várnak! Nézzetek be hozzánk!