Naime posto sam dosta puta vidio ove komande kako ljubi objasnjavaju na nacin kakav nebi trebao da bude objasnjeno
Zato i pravim ovaj mali i jednostavni tutorijal, pa da krenemo 🙂
Prvo sto nam treba jeste funckija sa kojom cemo uzimati imena od igraca, naravno necemo koristiti stock i njemu slicno
Potrebna nam je jedna varijabla na vrhu skripte
new ImeIgraca;
Ova varijabla nam omogucuje da u svakom trenutku mozemo iskoristiti ime od igraca bez da svaki put koristimo funckiju GetPlayerName
Sledece sto moramo uraditi jeste dodati novu liniju u callback OnPlayerConnect
GetPlayerName(playerid, ImeIgraca, MAX_PLAYER_NAME);
Sa ovom linijom smo obezbjedili u svakom momentu ime od igraca
to je to sto se tice prvog koraka
takodje potrebno nam je da napravimo novu funkciju koja je provjeriti da li je igrac admin, koristit ce nam za to kada budemo slali poruke adminima
PorukaAdminima(poruka[])// Naziv funkcije sa parametrom
{
foreach(new i : Player)// petlja kroz igrace, mozete koristiti i for(new i = 0; id < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && IsPlayerAdmin(i))// provjerava da li je igrac povezan na server i da li je admin
{
SendClientMessage(i, 0xFFFFFFFF, poruka);// salje poruku,
}
}
}
Koristite funckiju kao i sam naziv PorukaAdminima(poruka);
U sledecem koraku pravimo komandu /report, tako da je moramo osnovati, u ovom slucaju je potreban include y_commands
YCMD:report(playerid, params[], help)
{
return (true);
}
Komanda je osnovana, ali da bi mogli zavrsiti komandu potrebno nam je par varijabli, koje ce sacuvati ID reportovan igraca i razlog zbog koga je reportovan
new ReportovanID, // varijabla koja ce da provjeri i sacuva ID reportovanog igraca
ReportovanRazlog, // varijabla koja ce da provjeri razlog reporta i da sacuva isti
ReportovanPoruka; // varijabla koja nam sluzi da bi slozili poruku koju cemo slati (formatira)
Ove 3 varijable dodajemo na sami vrh komande
Zatim moramo provjeriti da li je igrac prilikom komande unio validan ID i razlog, ili ne, ukoliko nije da mu izbaci poruku sa primjerom tacno poslate komande
if(sscanf(params, "us", ReportovanID, ReportovanRazlog)) return SendClientMessage(playerid, -1, "{808080}Koristenje: {FFFFFF}/report ");
U prevodu uslov oznacava, Ako igrac nije unio podatke u redoslijedu ID Razlog, server ce mu vratiti poruku za koristenje komande
Zatim potrebno je provjeriti da li je reportovan ID validan, odnosno da li je igrac povezan na server
if(!IsPlayerConnected(ReportovanID)) return SendClientMessage(playerid, -1, "{808080}Greska: {FFFFFF}Igrac je offline.");
U prevodu uslov oznacava, Ako igrac nije povezan na server, vraca mu se poruka od servera koja mu saopstava da igrac nije povezan na server
Funckija IsPlayerConnected = Ako je igrac konektovan
Parametar ! = razlicito
!IsPlayerConnected = Ako nije igrac konektovan
To bi bilo to sto se tice uslova za ispunjavanje komande
Sada slijedi glavna stvar, formatiranje i slanje poruka, a to cemo da uradimo sa funckijom format, a formatiranu poruku cemo da cuvamo sa varijablom ReportovanPoruka na sledeci nacin format(ReportovanPoruka, sizeof(ReportovanPoruka), a sta cemo da formatiramo, pa formatirat cemo varijable koje smo iskoristili u predhodnom koraku, tako da bi vam linija formatiranja trebala izgledati ovako
format(ReportovanPoruka, sizeof(ReportovanPoruka), "{FF0000}[ Report ] {FFFFFF}Igrac %s(%d) je reportovao igraca %s(%d)", ImeIgraca, playerid, ImeIgraca, ReportovanID);
sastavili smo odnosno formatirali poruku sa varijablama za ID igraca i sa razlogom u jednu cjelinu, sada tu poruku treba proslijediti adminima, a za to cemo iskoristiti funckiju koju smo sami napravili
PorukaAdminima(ReportovanPoruka);
Poruka koja je predhodno formatirana je poslata adminima, ukoliko saljete vise poruka na istu adresu, morati ici sledecim redosledom
format
poruka
format
poruka
Sto znaci sledece: Formatirate poruku, posaljete adminima, ponovo formatirate poruku i ponovo je posaljete adminima
Zavrsili smo sa ovim dijelom, odnosno poslali smo adminima jedino informaciju ko je koga reportovao, sada to isto moramo uraditi ali sa razlogom reporta
format(ReportovanPoruka, sizeof(ReportovanPoruka), "{FF0000}[ Razlog ] {FFFFFF}%s", ReportovanRazlog);
Sada spo formatirali poruku za razlogom reporta, i nju takodje saljemo adminima kao i predhodnu poruku
PorukaAdminima(ReportovanPoruka);to bi bilo to sto se tice poruka koje se salju administraciji, ostaje nam jedino na kraju da posaljemo igracu povratnu poruku ako je uspjesno poslao report, a to cemo isto da uradimo pomocu formatiranja
format(ReportovanPoruka, sizeof(ReportovanPoruka), "{808080}Info: {FFFFFF}Uspjesno ste reportovali igraca %s(%d)", ImeIgraca, ReportovanID);
Igracu koji je poslao report, ovim formatiranjem saljemo poruku da je uspjesno report poslat, kao i ime igraca kojeg je reportovao, i tu poruku saljemo funkcijom SendClientMessage, jer ide autoru reporta
SendClientMessage(playerid, -1, ReportovanPoruka);
To bi bilo to sto se tice komande /report
Prelazimo na komandu /askq, koja je mnogo jednostavnija, i sluzi za postavljanje pitanja administraciji, mi cemo u ovom primjeru pitanje slati ponovo na istu adresu kao i report
za ovu komandu potrebna nam je samo jedna varijabla, koju cemo iskoristiti da provjeri poslato pitanjje i da ga sacuva, a istu tu varijablu cemo iskoristiti i za cuvanje formatirane poruke
new PitanjeText;// varijabla koja nam treba u 3 slucaja, provjera validnosti pitanja, cuvanje teksta pitanja, cuvanje formatirane poruke
Varijablu dodajemo na sami vrh komande, i kada to uradimo tek onda prelazimo na formatiranje poruke i slanje administraciji, ali prije toga moramo provjeriti da li je komanda ukucana na ispravan nacin
if(sscanf(params, "s", PitanjeText)) return SendClientMessage(playerid, -1, "{808080}Koristenje: {FFFFFF}/askq ");
ukoliko igrac nije kucao /askq server ce vratiti poruku igracu za pravilno koristenje komande
tek sada mozemo formatirati poruku sa pitanjem
format(PitanjeText, sizeof(PitanjeText), "{FF0000}[ ASKQ ] {FFFFFF}%s(%d): %s", ImeIgraca, playerid, PitanjeText);
U ovoj liniji smo formatirali 3 stavke, Ime igraca, ID igraca i pitanje koje igrac postavlja, to sve saljemo adminima
PorukaAdminima(PitanjeText);
U ovoj komandi smo koristili samo jednu varijablu, koja nam sluzi i za provjeru, i da nam sacuva pitanje, i da formatira poruku
Nema potrebe praviti varijable vezane posebno za pitanje i za formatiranje, samo dodajemo liniju koja apsolutno nije potrebna
i na kraju komande trebamo poslati igracu potvrdu poruku da je uspjesno poslao pitanje, a to cemo odraditi ponovo sa funkcijom SendClientMessage
SendClientMessage(playerid, -1, "{808080}Info: {FFFFFF}Vase pitanje je uspjesno poslato Administraciji");
To bi bilo to sto se tice komande /askq
Na samome kraju, vase dvije komande bi trebale da izgledaju ovako:
YCMD:report(playerid, params[], help)
{
new ReportovanID, ReportovanRazlog, ReportovanPoruka;
if(sscanf(params, "us", ReportovanID, ReportovanRazlog)) return SendClientMessage(playerid, -1, "{808080}Koristenje: {FFFFFF}/report ");
if(!IsPlayerConnected(ReportovanID)) return SendClientMessage(playerid, -1, "{808080}Greska: {FFFFFF}Igrac je offline.");
format(ReportovanPoruka, sizeof(ReportovanPoruka), "{FF0000}[ Report ] {FFFFFF}Igrac %s(%d) je reportovao igraca %s(%d)", ImeIgraca, playerid, ImeIgraca, ReportovanID);
PorukaAdminima(ReportovanPoruka);
format(ReportovanPoruka, sizeof(ReportovanPoruka), "{FF0000}[ Razlog ] {FFFFFF}%s", ReportovanRazlog);
PorukaAdminima(ReportovanPoruka);
format(ReportovanPoruka, sizeof(ReportovanPoruka), "{808080}Info: {FFFFFF}Uspjesno ste reportovali igraca %s(%d)", ImeIgraca, ReportovanID);
SendClientMessage(playerid, -1, ReportovanPoruka);
return (true);
}
YCMD:askq(playerid, params[], help)
{
new PitanjeText;
if(sscanf(params, "s", PitanjeText)) return SendClientMessage(playerid, -1, "{808080}Koristenje: {FFFFFF}/askq ");
format(PitanjeText, sizeof(PitanjeText), "{FF0000}[ ASKQ ] {FFFFFF}%s(%d): %s", ImeIgraca, playerid, PitanjeText);
PorukaAdminima(PitanjeText);
SendClientMessage(playerid, -1, "{808080}Info: {FFFFFF}Vase pitanje je uspjesno poslato Administraciji");
return (true);
}
Slike koje prikazuju komande:
/report (klikni)/askq (klikni)Postoji jos kraca izvedba komande /report, ali nema potrebe komplikovati, ovo je najjednostavniji nacin
I zapatite, sve sto nadjete na netu vezano za pawn jezik i skriptanje, nemojte misliti da je sve tacno i najjednostavnije objasnjeno, gdje god mozete skratiti kod, to i uradite, gdje god mozete izbjeci provjeru ili pojedinu funckiju to i uradite, gdje kod mozete koristiti jednu funkciju u vise navrata to uradite. 🙂