GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => A témát indította: divkn - 2013. november 22. - 17:09:09

Cím: Ploop - Elérhetõ játékosokra vonatkozó ciklus
Írta: divkn - 2013. november 22. - 17:09:09
Még VRP (Veronaville Roleplay) idején készítettem ezt a kódot, arra a célra hogy lehetõ leggyorsabban hajtsa végre a ciklusban lévõ feladatokat csakis elérhetõ játékosok számára. Mivel elég sokan használják a MAX_PLAYERS vagy GetMaxPlayers() féle ciklusfeltételt, ezért gondoltam megosztom ezt a kis egyszerû kódot, ami leegyszerûsíti ezt a folyamatot.
 
#include a_samp
// Nincs szükségünk 500 cellás változókra és a szerverünk sem 500 férõhelyes, hanem
// pl.: 30 vagy amilyen slot számú szervert rendeltél.
#undef MAX_PLAYERS
#define MAX_PLAYERS 30
// Hozzünk létre két globális változót
stock
    aktiv_jatekosok[MAX_PLAYERS], // Ez a változó fogja tárolni az elérhetõ playerid számokat.
    szamlalo; // Egy számláló arra hogy mégis mennyien vannak a szerveren.
public OnGameModeInit()
{
    // Biztonság kedvéért ellenõrizzük hogy a MAX_PLAYERS értéke egyezik-e.
    if(GetMaxPlayers() != MAX_PLAYERS)
    {
        printf(\"Kérlek módosítsd a \'maxplayers\' értéket %d-ra/re a server.cfg-ben,\",MAX_PLAYERS);
        printf(\"vagy módosítsd a MAX_PLAYERS definíció értékét %d-ra/re.\",GetMaxPlayers());
        SendRconCommand(\"exit\");
        return 1;
    }
    return 1;
}
public OnPlayerConnect(playerid)
{
    CiklusFrissites(); // Új játékos miatt a ciklus változók frissítése
   
    // Egy kis példa ahogy a használhatjuk a ciklust
    // Hány cellát olvasson ki a változóból, avagy mennyien vannak most a szerveren
    for(new a = 0; a < szamlalo; a++)
    {
        SendClientMessage(aktiv_jatekosok[a], 0xFFFFFFFF, \"Új játékos a szerveren!\");
    }
    return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
    CiklusFrissites(); // Kilépett játékos miatt a ciklus változók frissítése ismét.
    return 1;
}
stock CiklusFrissites()
{
    // Lenullázzuk a számlálót, mert egy játékos belépett vagy kilépett a szerverrõl
    // ezért újra kell építeni az aktiv_jatekosok változóban tárolt playerid értékeket.
    szamlalo = 0;
    for(new a = 0; a < MAX_PLAYERS; a++)
    {
        if(IsPlayerConnect(a))
        {
            // Csak az aktív játékosok playerid értéket tároljuk el egy változóba.
            aktiv_jatekosok[szamlalo] = a;
            szamlalo++;
            // Tegyük fel ha a szerveren vannak 5-en a következõ playerid számokkal: 0,2,3,5,11
            // akkor az aktiv_jatekosok-ban tárolt értékek is így fognak felsorakozni a cellékban
            //   cellák: 0 1 2 3  4 5 6 7 8 ... egészen a MAX_PLAYERS-ben megadott cella számig
            // playerid: 0 2 3 5 11 - - - -
        }
    }
    return 1;
}
// It needs to be about 20% cooler...
// Igem, ez egy easter egg és most tünés. :3
Cím: Ploop - Elérhetõ játékosokra vonatkozó ciklus
Írta: ZoleBB - 2013. november 22. - 22:13:57
Nagyon jo lett, es mindent reszletesen leirtal mindent. Ebbol par jo dolgot is lehetne tanulni.
Cím: Ploop - Elérhetõ játékosokra vonatkozó ciklus
Írta: Cappsy - 2013. november 27. - 21:34:07
Nekem is tetszik! Adok reá egy +-t :D
Cím: Ploop - Elérhetõ játékosokra vonatkozó ciklus
Írta: BoOy - 2013. november 27. - 21:45:24
Szép lett ;)