PARTNERI:

* Marketing


-UPOZORENJE-

Samo registrovani članovi mogu da vide/koriste forum u celini.
Prijavite se ili registrujte nalog na Balkan SA-MP forumu.


Autor Tema: [Tutorial] Komande /report / askq, formatiranje poruka i objasnjenje  (Pročitano 290 puta)

0 članova i 1 gost pregledaju ovu temu.

Komande /report / askq, formatiranje poruka i objasnjenje
« poslato: Avgust 04, 2019, 22:47:05 posle podne »
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
Pawno Code: [Izaberi]
new ImeIgraca[MAX_PLAYERS][MAX_PLAYER_NAME];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
Pawno Code: [Izaberi]
GetPlayerName(playerid, ImeIgraca[playerid], 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
Pawno Code: [Izaberi]
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
Pawno Code: [Izaberi]
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
Pawno Code: [Izaberi]
new ReportovanID, // varijabla koja ce da provjeri i sacuva ID reportovanog igraca
ReportovanRazlog[80], // varijabla koja ce da provjeri razlog reporta i da sacuva isti
ReportovanPoruka[144]; // 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
Pawno Code: [Izaberi]
if(sscanf(params, "us[144]", ReportovanID, ReportovanRazlog)) return SendClientMessage(playerid, -1, "{808080}Koristenje: {FFFFFF}/report [ID] [Razlog]");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
Pawno Code: [Izaberi]
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
Pawno Code: [Izaberi]
format(ReportovanPoruka, sizeof(ReportovanPoruka), "{FF0000}[ Report ] {FFFFFF}Igrac %s(%d) je reportovao igraca %s(%d)", ImeIgraca[playerid], playerid, ImeIgraca[ReportovanID], 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
Pawno Code: [Izaberi]
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
Pawno Code: [Izaberi]
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
Pawno Code: [Izaberi]
format(ReportovanPoruka, sizeof(ReportovanPoruka), "{808080}Info: {FFFFFF}Uspjesno ste reportovali igraca %s(%d)", ImeIgraca[ReportovanID], 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
Pawno Code: [Izaberi]
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
Pawno Code: [Izaberi]
new PitanjeText[144];// 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
Pawno Code: [Izaberi]
if(sscanf(params, "s[144]", PitanjeText)) return SendClientMessage(playerid, -1, "{808080}Koristenje: {FFFFFF}/askq [Pitanje] ");ukoliko igrac nije kucao /askq [pitanje] server ce vratiti poruku igracu za pravilno koristenje komande
tek sada mozemo formatirati poruku sa pitanjem
Pawno Code: [Izaberi]
format(PitanjeText, sizeof(PitanjeText), "{FF0000}[ ASKQ ] {FFFFFF}%s(%d): %s", ImeIgraca[playerid], playerid, PitanjeText);U ovoj liniji smo formatirali 3 stavke, Ime igraca, ID igraca i pitanje koje igrac postavlja, to sve saljemo adminima
Pawno Code: [Izaberi]
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
Pawno Code: [Izaberi]
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:

Pawno Code: [Izaberi]
YCMD:report(playerid, params[], help)
{
new ReportovanID, ReportovanRazlog[80], ReportovanPoruka[144];
if(sscanf(params, "us[144]", ReportovanID, ReportovanRazlog)) return SendClientMessage(playerid, -1, "{808080}Koristenje: {FFFFFF}/report [ID] [Razlog]");
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], playerid, ImeIgraca[ReportovanID], 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], ReportovanID);
SendClientMessage(playerid, -1, ReportovanPoruka);
return (true);
}

Pawno Code: [Izaberi]
YCMD:askq(playerid, params[], help)
{
new PitanjeText[144];
if(sscanf(params, "s[144]", PitanjeText)) return SendClientMessage(playerid, -1, "{808080}Koristenje: {FFFFFF}/askq [Pitanje] ");
format(PitanjeText, sizeof(PitanjeText), "{FF0000}[ ASKQ ] {FFFFFF}%s(%d): %s", ImeIgraca[playerid], 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. :)
 

Van mreže rip kifla

Odg: Komande /report / askq, formatiranje poruka i objasnjenje
« Odgovor #1 poslato: Avgust 04, 2019, 22:50:13 posle podne »
Ko jos koristi ycmd i foreach jaa mislim da ima provjeru za isplayerconnwxted
kraj jedne ere
 

Van mreže .ɱυɱιƚȥα

  • Ne treba vjerovati ljudima s kojima smo se tek sprijateljili, a koji pokazuju da smo im draži od njihovih starih prijatelja – tako će se ponaÅ¡ati i s nama kada steknu nove prijatelje.
  • Godfather
  • *
  • Poruke: 10157
  • Broj zahvalnica: 803
  • ?
Odg: Komande /report / askq, formatiranje poruka i objasnjenje
« Odgovor #2 poslato: Avgust 04, 2019, 22:57:04 posle podne »
Nema potrebe provjeravat IsPlayerConnected u foreachu za Player, nekako mnogo su vam stari ti načini, sa y_va može mnogo lakše i brže od
format(PitanjeText, sizeof(PitanjeText), "{FF0000}[ ASKQ ] {FFFFFF}%s(%d): %s", ImeIgraca[playerid], playerid, PitanjeText);
PorukaAdminima(PitanjeText); :)

Ko jos koristi ycmd i foreach jaa mislim da ima provjeru za isplayerconnwxted
ycmd je dobar kad se koristi sa YSI tipa y_groups
offline.
 

Odg: Komande /report / askq, formatiranje poruka i objasnjenje
« Odgovor #3 poslato: Avgust 04, 2019, 23:14:46 posle podne »
IsPlayerConnected je provjera ukoliko se bude koristila for petlja
sto se tice procesora komandi komandi, ako mislis na izcmd ili mcmd, isti su
a ako pak mislis na pawn.cmd, slobodno ga koristi, jer jednostavno je tipa plugin, sto je dovoljno da se zaobidje u sirokom luku
stari ali efikasan nacin :)
ako ima neko vremena da pojasni y_va i pojmove  va_args, va_format i va_start neka pojasni
ja licno nisam za koristenje y_va
 

Van mreže .ɱυɱιƚȥα

  • Ne treba vjerovati ljudima s kojima smo se tek sprijateljili, a koji pokazuju da smo im draži od njihovih starih prijatelja – tako će se ponaÅ¡ati i s nama kada steknu nove prijatelje.
  • Godfather
  • *
  • Poruke: 10157
  • Broj zahvalnica: 803
  • ?
Odg: Komande /report / askq, formatiranje poruka i objasnjenje
« Odgovor #4 poslato: Avgust 04, 2019, 23:42:17 posle podne »
Evo tvoje "PorukaAdminima" u y_va

Pawno Code: [Izaberi]
stock PorukaAdminima(colour, const msg[], va_args<>)
{
new str[144];
va_format(str, sizeof(str), msg, va_start<2>);

foreach(new i : Player)
{
if(IsPlayerAdmin(i)) SendClientMessage(i, colour, str);
}
}

Sad šta je va_start<2> u mom slučaju? Pa broj parametara, jednostavno ih countaš i tu upišeš, colour je 1, msg je 2, znači va_args kreće posle drugog parametra i pišemo ga u va_format>va_start

umjesto
Pawno Code: [Izaberi]
format(PitanjeText, sizeof(PitanjeText), "{FF0000}[ ASKQ ] {FFFFFF}%s(%d): %s", ImeIgraca[playerid], playerid, PitanjeText);
PorukaAdminima(PitanjeText);

ideš
Pawno Code: [Izaberi]
PorukaAdminima(0xFF0000FF, "[ ASKQ ] {FFFFFF}%s(%d): %s", ImeIgraca[playerid], playerid, PitanjeText);
i ne vidim zašto bi izbjegavao y_va, YSI je pun prejakih stvari da se napravi sasvim pristojan gamemode
offline.
 

Van mreže [][] Foxy 2k19 [][]

Odg: Komande /report / askq, formatiranje poruka i objasnjenje
« Odgovor #5 poslato: Avgust 05, 2019, 16:24:01 posle podne »
G-J  :)
Balkan Moon v1.0 by Foxy

Owner // Scripter Balkan Moon

u Potpisu Foxy.

Ne pipaj lava Foxy, radi na BM-u :D :D :D
[4.7.2019] Respect For: Purda | Basovski | Mister Naithan | BICEL KO MI BUNTA | 7.9: Vasic[/b]

* Server [5.1.2019 Created]
* Scripter on Power Gaming
* Scripter on Night Life
* Scripter on Arena Gaming
* Scripter on duty (Balkan Moon)

[23.5.2k19] Messi u skriptanju hehe ;)
[7.8.2k19]OLD Minecraft Developer & Player (2016-2018)

#FOXYSCRIPT[/b]
 

Van mreže salqnovic

Odg: Komande /report / askq, formatiranje poruka i objasnjenje
« Odgovor #6 poslato: Avgust 05, 2019, 16:25:32 posle podne »
nije loše

known as mus4.
 

Van mreže Vasic

Odg: Komande /report / askq, formatiranje poruka i objasnjenje
« Odgovor #7 poslato: Decembar 07, 2019, 18:52:41 posle podne »
Dosta stvari prekopirano iz nekog random moda, mogao si sam ovo da ispises..
@DJER1C pravilo 6: "Nije dozvoljeno osvezavati teme starije od 10 dana osim ako nemate problema sa istom." Post ti je obrisan.
Respect List: imnaithan | .ɱυɱιƚȥα | Purdinho | daddy. | fuksich | androo
Pomoc u vezi SAMPa | Moderator
Tutorijali u vezi SAMPa | Moderator
SAMP Mape | Moderator
Offtopic | Moderator

• PayPal: [email protected] - Donate ❤

ko ne moze nauciti sql u roku od sedmicu dana nek se kloni skriptanja i bilo cega slicnog jer nije za njega