Rupert már megbocsáss ne vedd bántásnak de ebbõl kezdõk nem sokat értenek. Funkció nincs megmagyarázva csupán ez egy kód amit bemásolhat a személy.
Nem részletesen írom le csak, hogy értsd mire gondolok.
new nevek[][] =
{
\"Asd_Asdika\",
\"Madar_Az_Asz\",
\"Ana_Nasz\",
\"Fa_Szallito\"
};
Ebben a funkcióban létrehozásra kerül egy új tömb (new). A tömbnek a [][] -ben lévõ részei felelnek a cellákért. Ezek üresen vannak hagyva a rendszerre bízzuk a cellák meghatározását.
A \" \" között lévõ részbe bármilyen szöveget írhatsz a rendszer így kezeli a szöveges formátumokat. Természetesen vesszõt az utolsó után nem kell tenni.
Miután megadtuk a cella tartalmát le is kell ellenõriznünk azt, hogy a játékos neve megegyezik -e a listán találhatókkal és akkor mi történjen.
A teljes kód így néz ki:
public OnPlayerConnect(playerid)
{
for(new check;check<sizeof(nevek);check++)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
if(!strcmp(nevek[check],name,true)) return Kick(playerid);
}
return 1;
}
public OnPlayerConnect(playerid)
Ez a funkció akkor hívódik meg amikor a játékos fellép a szerverre. Ha egy új PWN fájt készítesz a pawnoddal akkor ez már benne lesz mivel létfontosságú dolog.
for(new check;check<sizeof(nevek);check++)
Ez egy for ciklus. Részletesebben Chuck leírásában ismerheted meg a mûködését:
http://sampforum.hu/index.php?topic=6399.msg74234#msg74234Itt azt a funkciót látja el, hogy ne csak az elsõ elemet vegye figyelembe a rendszer hanem a többin is végigfusson.
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
Létrehozásra kerül egy \'name\' nevû változó ami egy elõre megadott értékkel bír (24 karakter) ez a [ ] mögött található MAX_PLAYER_NAME.
Alatta lekérdezésre kerül a játékos neve ebbe a változóba és láthatunk egy sablonhibát is.
Mégpedig a sizeof. Egy ilyen apró szöveges lekérdezésnél teljesen fölösleges visszaszámolni a karaktereket manuálisan is megadhatjuk így konvertálásnál ha nagy a módunk és ezekre figyelünk értékes másodperceket vagy akár perceket is nyerhetünk mert a programnak nem kell fölöslegesen számolni.
Tehát érdemes lenne így használni a kódot:
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
A kódban a harmadik argumentum azért felel, hogy megadjuk az elõre létrehozott változónkban hány darab cellába szeretnénk maximálisan karaktereket tárolni. Összevont változóknál ez hasznos.
if(!strcmp(nevek[check],name,true))
Az strcmp függvény azért felel, hogy összehasonlítsunk két szöveget és ellenõrizzük egyezésüket. Az strcmp elõtt lévõ !jel azt jelzi, hogy negatív visszatérés esetén mi történjen. if = ha, tehát ha valami valamivel kapcsolatban áll akkor mi történjen.
Ezután megadásra kerül a két változó amit össze szeretnénk hasonlítani majd a true értékkel megadjuk, hogy a rendszer ignorálja a kis és nagybetû különbséget.
Ha az ellenõrzés során egyezést talál akkor a rendszer visszatér egy kirúgással.
return Kick(playerid);