Szerző Téma: [Tutorial] Mi a lényege a tiltottnév ellenõrzõnek?  (Megtekintve 2144 alkalommal)

Nem elérhető Rupert

  • 2301
    • Profil megtekintése
[Tutorial] Mi a lényege a tiltottnév ellenõrzõnek?
« Dátum: 2012. augusztus 31. - 13:26:55 »
0 Show voters
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

Nem elérhető Zharko

  • 1955
  • Future House <3
    • Profil megtekintése
[Tutorial] Mi a lényege a tiltottnév ellenõrzõnek?
« Válasz #1 Dátum: 2012. augusztus 31. - 15:00:34 »
0 Show voters
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!

Nem elérhető Rupert

  • 2301
    • Profil megtekintése
[Tutorial] Mi a lényege a tiltottnév ellenõrzõnek?
« Válasz #2 Dátum: 2012. augusztus 31. - 15:10:10 »
0 Show voters

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

Nem elérhető Zharko

  • 1955
  • Future House <3
    • Profil megtekintése
[Tutorial] Mi a lényege a tiltottnév ellenõrzõnek?
« Válasz #3 Dátum: 2012. augusztus 31. - 23:28:14 »
0 Show voters
Idézetet írta: Rupert date=1346418610\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"27176\" data-ipsquote-contentclass=\"forums_Topic


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

[Tutorial] Mi a lényege a tiltottnév ellenõrzõnek?
« Válasz #4 Dátum: 2012. augusztus 31. - 23:44:20 »
0 Show voters
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);

Nem elérhető SnooP

  • 1798
  • SnooP
    • Profil megtekintése
[Tutorial] Mi a lényege a tiltottnév ellenõrzõnek?
« Válasz #5 Dátum: 2012. szeptember 01. - 15:47:16 »
0 Show voters
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  :) )

Nem elérhető tonyo

  • 1335
  • Moderális Generátor
    • Profil megtekintése
[Tutorial] Mi a lényege a tiltottnév ellenõrzõnek?
« Válasz #6 Dátum: 2012. szeptember 01. - 21:50:48 »
0 Show voters
Idézetet írta: Rupert date=1346412415\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"27176\" data-ipsquote-contentclass=\"forums_Topic


new nevek[][] =
{
\"Asd_Asdika\",
\"Madar_Az_Asz\",
\"Ana_Nasz\",
\"Fa_Szallito\"
};

 

Azért ide nem ártana egy const.

Nem elérhető Pedró

  • 3341
  • 2014 © Az év Szkriptere
    • Profil megtekintése
[Tutorial] Mi a lényege a tiltottnév ellenõrzõnek?
« Válasz #7 Dátum: 2012. október 21. - 08:32:28 »
0 Show voters
Idézetet írta: Anthony date=1346529048\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"27176\" data-ipsquote-contentclass=\"forums_Topic


 

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?

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal