Üzenetek megjelenítése

Ez a szekció lehetővé teszi a felhasználó által írt összes hozzászólás megtekintését. Vedd figyelembe, hogy csak azokba a fórumokba írt hozzászólásokat látod, amelyekhez hozzáférésed van.


Üzenetek - ZeRo

Oldalak: 1 ... 133 134 [135] 136 137 ... 306
2011
Tanuljunk PAWN nyelvet / [Scripting Eszköz]foreach [Ciklus helyettesítõ]
« Dátum: 2011. május 13. - 23:14:30 »
Foreach
 
Bevezetõ
A foreach lecseréli a ciklusokat( leginkább a játékosokra vonatkozókat ) gyorsabb, és még hatékonyabb ciklusokra. Példa:
 

for( new i = 0; i != MAX_PLAYERS; ++i ) {
    if (IsPlayerConnected( i ) ) {
        printf( \"Játékos %d csatlakozva van\", i );
    }
}

 
Egyszerûen ezzé válik:
 

foreach(Player, i) {
    printf( \"Játékos[%d] csatlakozva van\", i );   
}

 
Felhívnám a figyelmet, hogy ez nem csak egy egyszerû definíció, ami az eredeti ciklust illeszti be más néven, hanem ez tulajdonképpen egy teljesen különbözõ beágyazás, ami játékoslistázást használ, emiatt gyorsabb az eredeti rendszernél. Sõt, a mûködési elve miatt nem számít a MAX_PLAYERS értéke, akár be van állítva a te szerveredhez, akár nincs; Ez a ciklusfajta mindig ugyanannyi idõ alatt fog lefutni, mivel ez CSAK a csatlakozott játékosokat kezeli, üres azonosítókat nem.
Beágyazás
Ez a függvénykönyvtár ezt a rendszert használja, tehát mindössze ennyit kell csinálj:
 

#include <foreach>

 
Ezek után már használhatod az új ciklust.
Ha filterszkriptben szeretnéd használni ezt a rendszert, akkor tedd a következõt:
 

#define FILTERSCRIPT
#include <foreach>

 
Ha a forrásodban már szerepel a FILTERSCRIPT definíció, akkor gyõzõdj meg róla, hogy a foreach beágyazása FÖLÖTT legyen.
Deklaráció
Hogy létrehozz egy iterátort( egy elem, amit a foreach segítségével használhatsz ), használd a következõ kódot:
 
new Iterator:MyIterator<10>;

 
Ez létre fogja hozni a \"MyIterator\" nevû iterátort, amihez 10 férõhelyet rendel.
Figyelmedbe ajánlom, hogy ez a szintaxis ezen a kódon alapul, és formára hasonlít egy átlagos változó deklarálására( többrétû elemek használata ), de ez nem egy tömb, így az emberek nem esnek abba a hibába, hogy direkt módon próbálnak meg információkhoz hozzáférni, tehát a szerkezet fontos.
Használata
A saját iterátorodat a következõ képpen használhatod:
 

foreach(MyIterator, var) {
    printf( \"Változó[%d] aktív\", var );
}

 
Értékek hozzáadása:
 
Iter_Add( MyIterator, 7 );

 
Értékek törlése:
 
Iter_Remove( MyIterator, 7 );

 
Ha egy véletlenszerû értéket szeretnél lekérdezni az iterátorodból GYORSAN( ez nagyon jó véletlenszerû játékosok kiválasztására ), csináld ezt:
 
Iter_Random( MyIterator );

 
Játékoshoz:
 
new randomplayer = Iter_Random( Player );

 
Függvények
 

  • Iterator:név<méret>
    Létrehoz egy új iterátort a megadott névvel és mérettel. A rendszer automatikusan definiálja a következõ iterátorokat:
    • Player - Minden csatlakozott játékos

    • Bot (0.3) - Minden csatlakozott bot

    • NPC (0.3) - Minden csatlakozott bot( ugyan az, mint a Bot )

    • Character (0.3) - Minden csatlakozott játékos és bot


    • Iter_Add(name,value)

    Értéket rendel hozzá a megadott iterátorhoz. A fentieket automatikusan kezeli.
    • Iter_Remove(name,value)

    Értéket töröl a megadott iterátorból. A fentieket automatikusan kezeli.
    • Iter_Clear(name)

    Teljesen kiürít egy iterátort. Minden értéket töröl.
    • Iter_Random(name)

    Visszatér egy véletlenszerû értékkel a megadott iterátorból. Hasznos véletlenszerû játékosok kiválasztásához( ez sokkal gyorsabb, mint a többi ehhez hasonló módszer, a kód struktúrája miatt ).
    • Iter_Count(name)

    Visszatér egy megadott iterátor elemeinek számával( például hány csatlakozott játékos van a szerveren ) - NAGYON gyorsan
    • IteratorArray:name[num]<size>

    Létrehoz egy új multidimenziós iterátort a megadott névvel, és a maximális tárolási mérettel.
    • Iter_Init(name)

    Ha létrehoztál egy multidimenziós iterátort, akkor ezt a függvényt meg KELL hívnod, mielõtt bármit is raknál bele.
    • Iter_Func2(name,index,pars)

    Felhívom a figyelmet, hogy ezek a függvények el lettek távolítva a legújabb verzióban - most már csak szimplán meg kell indexelned a tömböt.
    Ha a \"2\" szerepel a fenti függvények végén, és az iterátorod végén( de a paraméterek ELÕTT ) egy index áll, akkor multidimenziós iterátort kapsz. Például:
     


new IteratorArray:My2d[3]<5>;
Iter_Init2(My2d);
Iter_Add2(My2d, 1, 4);

 
Ezzel létrehozol 3 5-elemes iterátort, és a másodikhoz hozzáadod a 4-et értékként.
Fordítási beállítások
A beágyazás elõtt definiálhatsz pár dolgot, hogy testreszabd a foreach funkcióit.
 
  • FOREACH_NO_BOTS
    Ha csak játékosokra akarod vonatkoztatni a ciklusaidat, akkor használd ezt a definíciót, hogy megszüntesd a kódot, ami a botokat(NPC) nézi.

  • FOREACH_NO_PLAYERS
    Ezzel megszünteted a játékosok ÉS botok számlálását, így csak a fõ funkciók lesznek elérhetõk.


Többrétû dimenziók
Az elõzõ kiadás minden függvényének volt egy \"Iter_Func2\" változata - ezek most törölve lettek egy még egyértelmûbb szintaxis létrehozásának érdekében:
Mostantól létrehozhatsz többrétû iterátorokat is. Például egy iterátorokból álló tömböt, ami a játékosok jármûit tartalmazza( habár volna jobb javaslatom is ennek megoldására ):
 

foreach(PlayerVehicles[ playerid ], veh) {
    //Itt csinálhatsz valamit az adott játékos jármûvével
}

 
Multidimenziós iterátorok létrehozásához meg kell hívnod ezt a függvényt:
 
Iter_Init( iterator );

 
Az iterátor használata elõtt. Az egyszerû iterátorokat inicializálhatod a fordítási idõ közben, de a multidimenziósokat nem.
Példák
Elsõ példa
Multidimenziós iterátorok. Ezzel egy iterátorokból álló tömböt hozhatsz létre:
 

#include <foreach>
new IteratorArray:Vehicle[4]<20>;
public OnGameModeInit()
{
    //Elõször EZT KELL meghívnod multidimenziós iterátoroknál.
    Iter_Init(Vehicle);
    //Hozzáadás az ELSÕ listához
    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));
    //Hozzáadás a MÁSODIK listához
    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));
    //Hozzáadás a HARMADIK listához
    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));
    //Hozzáadás a NEGYEDIK listához
    Iter_Add(Vehicle[3], AddStaticVehicle(487, -1736.8011, 1400.1903, 7.3641, 293.3916, -1, -1));
    //Végigmegyünk a második lista összes jármûvén
    foreach (Vehicle[1], veh)
    {
        ChangeVehicleColor(veh, 0, 10);
    }
    //Végigmegyünk az elsõ lista összes jármûvén
    foreach (Vehicle[0], veh)
    {
        ChangeVehicleColor(veh, 12, 20);
    }
}

 
Második példa
Multidimenziós iterátorok. Létrehozunk egy iterátorokból álló tömböt, és a jármûveket egy összetett listához hozzáadjuk.
 

#include <foreach>
new IteratorArray:Vehicle[4]<20>;
public OnGameModeInit()
{
    //Elõször EZT KELL meghívnod multidimenziós iterátoroknál.
    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);
    //Végigmegyünk a második lista összes jármûvén
    foreachex (Vehicle[1], veh)
    {
        ChangeVehicleColor(veh, 0, 10);
    }
    //Végigmegyünk az elsõ lista összes jármûvén
    foreachex (Vehicle[0], veh)
    {
        ChangeVehicleColor(veh, 12, 20);
    }
}

 
Harmadik példa
Végigmegyünk az összes boton( csak 0.3 ).
 

foreach (Bot, botid)
{
    SetPlayerPos(botid, 0.0, 0.0, 10.0); //Minden NPC-t a pálya közepére helyezünk
}

 
Negyedik példa
Létrehozunk egy új iterátort 20 jármû számára, és megváltoztatjuk a színüket.
 

#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);
    }
}

 

  • Idõeredmények
    Mint már említettem, ez a struktúra gyorsabb, mint az alap ciklusok,
itt a bizonyíték.Letöltéshttp://pastebin.com/2wduLfcq

Eredeti téma itt.

2012
Elsõ csoport / [Round2]Tryp - ZeRo vs. vmx - pmarci
« Dátum: 2011. május 13. - 21:36:11 »
Azért nem, mert ha mégsem szálltak ki, akkor bukjuk. :-X

2013
SA-MP: Szerverfejlesztés / Elsõ Scriptem. RP Chat
« Dátum: 2011. május 13. - 21:35:23 »
Elsõnek nem rossz grat. ;) Csak pár tipp:
 
  • Az OnPlayerText függvényben van egy \'str\' nevû vektorod 200 cellával. A SAMP chatboxba maximum 128 karaktert írhatsz ki egy üzenetben, szóval a többi pocséklás.

  • Ugyanitt; A játékos pozícióját a ciklustörzsben kérdezed le, amit azt jelenti, hogy 500-szor fogja lekérdezni a pozícióját minden egyes üzenet beírásánál, ez szerintem érthetõ, hogy elég pazarló megoldás.

  • Egy játékos neve maximum 24 karakter lehet, te majdnem kétszer annyit adtál meg. A 24 helyett nyugodtan használhatod a MAX_PLAYER_NAME szimbólumot, ha az elején nem tudnád megjegyezni.


2014
Második csoport / [Round2]Draven - $MoNsTeR$ vs. BBS - VTX
« Dátum: 2011. május 13. - 21:24:49 »
Round1-et írtál. :D

2015
Hú bocs srácok, csak rohadtul leálltam a szkripteléssel egy jó ideje, most van egy projektem, ennek kapcsán lehet visszatérek, így megpróbálom befejezni ezt a leírást, mert már fele megvan( nem töröltem le :D ). Kis türelmet még. ;)

2016
Elsõ csoport / [Round2]Tryp - ZeRo vs. vmx - pmarci
« Dátum: 2011. május 13. - 20:19:59 »
De azért be kell adnunk valamit, nem?

2017
Második csoport / [Round2][Bart] - Sh4Rk vs. WolverinZ - Stuntzor
« Dátum: 2011. május 13. - 19:23:10 »
Gondolom ami Chilliad lábánál van.

2018
DD Private / [DD] - Rising Sun (1. vid)
« Dátum: 2011. május 13. - 19:22:05 »
nem is fogják

2019
Elsõ csoport / [Round2]Tryp - ZeRo vs. vmx - pmarci
« Dátum: 2011. május 13. - 19:19:02 »
k, gl

2020
DD Private / [DD] - Rising Sun (1. vid)
« Dátum: 2011. május 13. - 18:06:45 »
Hát nekem oké akkor, de csak 2 stuntom van nem 3, akkor küldjem el?
E: Ja és majd VTX, ha nálad összegyûlt mindenki stuffja akkor elküldöd majd pls nekem is? Szeretnék csinálni egy saját változatot is, ha tré akkor nem küldöm el nektek, nyugi. ;)

2021
Második csoport / [Round1][Bart] - Sh4Rk vs. BBS - VTX
« Dátum: 2011. május 13. - 18:05:20 »
\" post=\"137619\" timestamp=\"1305299239\"]

Barté igen csak jó ötlet volt, a végén az a kis kocsi elrontotta.
 
[/quote]
Ha nincs ott a Tug akkor jobb lenne?  ???
 
[/quote]
Mert így 3 jármû van benne, mondom.

2022
Elsõ csoport / [Round1]Tryp - ZeRo vs. Helios - Lolko
« Dátum: 2011. május 13. - 18:00:46 »
Hát szerintem már 6 óra van. :o

2023
Beszélgetés / Ki mibõl bukik? xD
« Dátum: 2011. május 12. - 22:11:53 »
Idézetet írta: vmx date=1305226596\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"8081\" data-ipsquote-contentclass=\"forums_Topic
5 kémia egyest kijavítani 3 hét alatt?
\"challenge-accepted.jpg\"
amúgy bukott itt már valaki kilencedikben?
necces a pótvizsga? :CCccccccc
 
Volt osztálytársam, tavaly megbukott( angolból és németbõl nyelvi tagozaton, komoly volt a gyerek ), de el sem ment a pótvizsgára. :D
Amúgy nem fogok semmibõl, 4-5 vagyok ilyen semmi tanulással. :)

2024
DD Private / [DD] - Rising Sun (1. vid)
« Dátum: 2011. május 12. - 22:05:36 »
Hát szerintem ennek az egésznek már lõttek amúgy. :-X

2025
Elsõ csoport / [Round1]Tryp - ZeRo vs. Helios - Lolko
« Dátum: 2011. május 12. - 22:02:40 »
Hát ha tudtuk volna hogy lehet holnapig akkor nem ezeket adtuk volna be, na de mindegy.

Oldalak: 1 ... 133 134 [135] 136 137 ... 306
SimplePortal 2.3.7 © 2008-2024, SimplePortal