Sziasztok!
Ez lényegében egy tutorial lesz arról, hogy is tudtok egy megadott tömbben leellenõrizni, hogy létezik-e az adott adat. Kezdjünk is hozzá.
A scriptünk/modunk elején hozzunk létre egy új tömböt, amit feltölthetünk nevekkel/adatokkal, de jelen esetben nevekkel.
new nevek[][] =
{
\"Asd_Asdika\",
\"Madar_Az_Asz\",
\"Ana_Nasz\",
\"Fa_Szallito\"
};
Szerintem ezen nem sok magyarázni való van. Van egy tömb, aminek vannak elemei, ezek karakterláncok (sztringek).
Ha ez megvan, akkor jöhet az ellenõrzés amikor a játékos csatlakozik.
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;
}
Na és akkor itt mit csinálunk?
A for ciklussal létrehozunk egy új változót, ami a tömb adott elemét fogja nekünk eltárolni. Végiglépegetünk a tömbben lévõ neveken, majd az \"strcmp\" függvénnyel összehasonlítjuk az adott elemet a játékos nevével. Ha egyezik, akkor visszatérünk egy kirúgással.
Elég egyszerû dolog ez, de úgy gondolom sokan tanulhatnak belõle. Rupert
Lényegében jó kis tutorial! Kezdõk ebbõl sokat tanulhatnak. Pl azt odaírhattad volna, hogy az strcmp összehasonlítást végez, stb :D De amúgy jó, grat!
az \"strcmp\" függvénnyel összehasonlítjuk az adott elemet a játékos nevével.
[/quote]
Szerintem ebbõl lehet következtetni, utaltam rá. :D
az \"strcmp\" függvénnyel összehasonlítjuk az adott elemet a játékos nevével.
Szerintem ebbõl lehet következtetni, utaltam rá. :D
[/quote]
Szorri májsztró, azt valahogy nem olvastam :D
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#msg74234
Itt 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);
Eddig is jó volt, de Gentleman aztán kivesézte rendesen :D Szerintem megtehetnéd az Rupert esetleg, bár lehet hülyeség, hogy amit Gentleman írt a sajátod alá szerkeszted azzal a címmel, hogy \'Kezdõknek\' és a tiédet \'Haladóknak\' ( bár mind kettõ érthetõ szerintem minden kezdõnek, de ha Gentle volt olyan kedves és leírta jó bõven szerintem ennyit megérdemelne :) )
new nevek[][] =
{
\"Asd_Asdika\",
\"Madar_Az_Asz\",
\"Ana_Nasz\",
\"Fa_Szallito\"
};
Azért ide nem ártana egy const.
new nevek[][] =
{
\"Asd_Asdika\",
\"Madar_Az_Asz\",
\"Ana_Nasz\",
\"Fa_Szallito\"
};
Azért ide nem ártana egy const.
[/quote]
Jó sokára kérdezem, de engem érdekelne..
A const mi célt szolgál?
Meg milyen formában kellene itt behelyezni?