U 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
Link SA:MP biblioteke: Link GitHub
Sistem je prosao rigorozna testiranja od strane mene, jer je i radjen za neki moj projekat!
Zna se sta se prvo radi:
#include
Definisemo potrebne arraye. Menjate po vasem izboru sadrzaj, odnosno zabranjene reci u RP imenu.
// 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
};
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.
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) != -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
}
Zatim kreiramo sledecu funkciju koja je pozvana unutar "IsValidRPNick" funkcije. (Gore navedene)
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
}
`[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:
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...
}
Zakljucak
Nadam 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

