Validiranje RP imenaU ovom tutorialu, vodicu vas kroz ozbiljan i kompleksan proces provere RP imena, objasnjavajuci kljucne aspekte koje treba uzeti u obzir prilikom provere imena koje je u skladu sa pravilima zajednice.
Prvenstveno, morate koristiti Regex biblioteku za SA:MP. Ona ce nam neizmerno mnogo uprostiti proces validacije i kodiranja. Ko nece da koristi Regex, ima da se napati i sporije ce mu raditi funkcija.
Ko zeli vise da zna o Regexu, odnosno regularnim izrazima: Link skripte s FTN fakulteta, katedre za elektroniku (https://www.elektronika.ftn.uns.ac.rs/et-sistemi-za-rad-u-realnom-vremenu/wp-content/uploads/sites/142/2018/03/Regularni-izrazi.pdf)
Link SA:MP biblioteke: Link GitHub (https://github.com/katursis/Pawn.Regex)
Sistem je prosao rigorozna testiranja od strane mene, jer je i radjen za neki moj projekat!Zna se sta se prvo radi:
[pawn]
#include <Pawn.Regex>
[/pawn]
Definisemo potrebne arraye. Menjate po vasem izboru sadrzaj, odnosno zabranjene reci u RP imenu.
[pawn]
// Definisanje niza sa imenom politickih imena
new const PolitickaImena[][] =
{
"politika1", // Prva politicko ime
"politika2", // Drugo politicko ime
"politika3" // Trece politicko ime
};
// Definisanje niza sa ruznim recima
new const RuzneReci[][] =
{
"ruzna1", // Prva ruzna rec
"ruzna2", // Druga ruzna rec
"ruzna3" // Treca ruzna rec
};
[/pawn]
Kreiramo funkciju koja ce proveravati RP ime, funkciji moramo proslediti jedan parametar (obavezno const ili pada Pentagon), odnosno ime igraca kako bi ona bila u stanju da izvrsi kompleksne proverice. Prosledimo i ona sama sve resi, mi nista vise ne radimo.
[pawn]
public bool:IsValidRPNick(const name[]) // By Dragan Avdic (Dragi)
{
// Proverava da li ime sadrzi politicka imena
for (new i = 0; i < sizeof(PolitickaImena); i++)
{
// Ako se politicko ime nadje u imenu, vrati false
if (strfind(name, PolitickaImena
) != -1) return false;
}
// Proverava da li ime sadrzi ruzne reci
for (new j = 0; j < sizeof(RuzneReci); j++)
{
// Ako se ruzna rec nadje u imenu, vrati false
if (strfind(name, RuzneReci[j]) != -1) return false;
}
// Proverava ime koristeci regex
// Ako ime nije validno prema regex-u, vrati false
if (!IsValidRpNickRegex(name)) return false;
// Ako su svi uslovi ispunjeni, ime je validno
return true; // ime je validno
}
[/pawn]
Zatim kreiramo sledecu funkciju koja je pozvana unutar "IsValidRPNick" funkcije. (Gore navedene)
[pawn]
stock IsValidRpNickRegex(const nickname[]) // Funkcija koja proverava validnost RP imena
{
static Regex:regex; // Deklaracija staticke varijable regex
if (!regex) regex = Regex_New("[A-Z][a-z]+_[A-Z][a-z]+"); // Ako regex nije inicijalizovan, kreiraj novi regex obrazac
return Regex_Check(nickname, regex); // Proveri da li nadimak odgovara regex obrascu
}
[/pawn]
- `[A-Z]` Ovaj deo izraza oznacava da prvi karakter mora biti veliko slovo (A do Z).
- `[a-z]+` Ovaj deo oznacava da nakon prvog velikog slova mora doci jedno ili vise malih slova (a do z). Znak + znaci "jedan ili vise".
- `_` Ovaj deo oznacava da mora postojati donja crta (_) nakon prvog dela imena.
Nece proci: ime_prezine, ime_, imeprezime...
To je to. Zavrsili smo potrebno kodiranje. Sad ostaje samo da objasnimo kako se funkcija koristi.
Upotreba:
[pawn]
if(!IsValidRPNick("Jovan_jovanovic")
{
// Ime nije proslo proveru (npr. malo pocetno slovo u prezimenu)
// Ispisemo tekst u chatu da ime nije proslo i kickujemo igraca (Delayed kickung!)
}
else
{
// Ime je proslo proveru
// Odlicna vest, obavestavamo korisnika kroz dialog da nema registrovan nalog
// I trazimo od njega da se registruje, unese lozinku, pokazemo tdove, kako vec imate...
}
[/pawn]
ZakljucakNadam se da ste nesto naucili i da vam se dopada tutorial. Ako niste, razmislite dobro, pa ponovo procitajte tutorial. Ako i dalje vam nesto nije jasno, slobodno pisite dole da razjasnimo. U zdravlje!
samp rp name check, samp validate rp name, samp isvalidrpname, samp invalid rp name, samp provera rp imena, samp funkcije
Lepo, vise preferiram koriscenje gde samo radis proveru i blokiras ukoliko nije ispravno bez regexa, takodje moze se uraditi i sa sscanf ili na ovaj nacin. Korisno.