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