Započeo V01D
•15. Jun 2018.Pravljenje prostih admin komandi
2,277
pregleda
7
postova
Godfather
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosAktivan Član
17 / 250 XP
Početnik(1)
2,272
Postovi:
76
Teme:
Pridružio se:Maj 2014
15. Jun 2018.
Cao svima,danas pravimo admin komandu.Objasnicu vam kako se to radi,kako se koristi zcmd i sscanf.
Linkovi:
http://forum.sa-mp.com/showthread.php?t=602923 - SSCANF 2
http://forum.sa-mp.com/showthread.php?t=91354 - ZCMD
Pre svega idemo include ta dva plugina:
Kada smo includovali ove 2 baze podataka, idemo na pravljenje komandi.Nadjete mesto kod ostalih komandi i napravite mesta za novu.
Prva linija ce biti :
Sada smo kreirali novu komandu fine,playerid se odnosi na igraca.Uglavnom sada idu { } simboli.Oni oznacavaju kraj i pocetak komande.
Sada cemo unutar { } simboli odraditi ono sto ce nasa komanda raditi.Uglavnom se na pocetku komande nalaze provere za admine,lidere,gamemastere itd.Tako da ukoliko je neko tipa Admin manji od 2 ne moze koristiti komandu.
Provera se radi sa IF sto prevedeno sa engleskog znaci AKO.Znaci mi postavljamo pitanje "Ako je igrac admin manji od 1 uradi sledece..."
To bi izgledalo ovako :
Sada ukoliko neko ukuca komandu /fine a nije admin ispisuje mu tekst Ne mozes koristititi ovo zato sto nisi admin!.Takodje mozete da umesto SendClientMessage da stavite sledece:
Ukoliko neko kukuca /fine a nije admin kikovace ga 😄 .
Sada nakon provere idemo da dodamo par stvari:
Sada smo bukvalno dodali varijable igrac(to ce nam biti igrac na kome primenjujemo komandu),tekst(tekst koji pisemo igrac-u i playerid-u.512 oznacava duzinu teksta),novac(novac koji cemo oduzeti igracu).
Napomena - playerid je za onoga ko koristi komandu a na "igrac" se upotrebljava komanda.Igrac je poremljiva,znaci moze se menjati.
Sada cemo iskoristiti sscanf2 plugin
Znaci sada ako korisnik ukuca samo /fine ili ne ispuni podatke iz sscanf-a onda mu izbaci poruku za upotrebu.
E sada znaci verovatno se pitate sta je "ud" ?
U zavisnosti sta smo prvo stavili,posto sam ja prvo stavio target znaci to je igrac onda koristimo "u " ,zatim se menja u novac sto je broj, i posle razlog
sto je string.Znaci idemo "u" pa zatim ide broj sto je "d" i string "s[broj duzine]".Sada kada se to spoji u jedno, ispada "uds"
Tutorial samo za sscanf mozete naci klikom na : LINK
Da nastavimo dalje...
Nakon sto smo odradili deo za sscanf,znaci ukoliko igrac ne ukuca sve potrebne podatke,izbacuje mu upotrebu.
Sada cemo da dodamo ispod svega ovoga
Znaci ako je igrac prosao sve provere,ide na sledece izmedju ovih zagrada ispod else :
Posto pravimo komandu za fine,hocemo da se igracu oduzme novac
Za to koristimo:
U ovoj funkciji ce da igracu(onom kome smo uneli ID) oduzeti vrednost novca koju smo uneli.Jos jedna upotreba ove funkcije je da se da igracu odredjen novac,ako je taj slucaj obrise se "-novac" i ubacite svoj novac.Ako cete da se oduzima ide - ispred.Ukoliko hocete da date sebi umesto "igrac" ide "playerid".
Sada cemo da stavimo da igracu pise nekakva poruka.To radimo preko funkcije :
Pomocu ovoga smo samo formatirali tekst unutar " " .
%s - to je za stringove,tacnije tekst
%d - za brojeve
Posle zareza stavljamo vrednosti koje ce da se ispisu pomocu %s ili %d.Znaci vrednosti idu redom,znaci ako je prvo %s na redu,mora posle zarezi biti string,tacnije tekst.
GetPlayerName(playerid) - Uzima ime od playerid-a tacnije onoga ko je kucao i iskoristio komandu.
novac - varijabla novca koji ce biti oduzet/dat
razlog - razlog koji smo upisali
Sada cemo tu poruku poslati igracu kome je oduzet novac :
SendClientMessage - sluzi da se neka poruka posalje igracu
igrac - Onaj kome ce poruka biti poslata,ukoliko stavimo playerid,poruku ce slati igracu koji je ukucao komandu
-1 - Boja,boje takodje mozete dodavati u tekstu ukoliko su definisane primer : ""CRVENA"Cao
string - to je ona varijabla koju smo formatirali,tacnije tekst
Sada mozete odraditi isto tako samo sto umesto igrac stoji playerid pri SendClientMessage.Pod format ce biti sve isto umesto teksta
Primer :
Ista stvar kao i gore samo sta salje drugaciju poruku igracu koji je iskoristio komandu.
Sve u svemu komanda izgleda ovako :
To bi bilo to,ukoliko imate pitanje,slobodno pitajte ili ukoliko vam nesto nije bilo jasno.Ovo je moj prvi tutorial tako da budite blagi 🙂 😄 😎
Linkovi:
http://forum.sa-mp.com/showthread.php?t=602923 - SSCANF 2
http://forum.sa-mp.com/showthread.php?t=91354 - ZCMD
Pre svega idemo include ta dva plugina:
#include
#include Kada smo includovali ove 2 baze podataka, idemo na pravljenje komandi.Nadjete mesto kod ostalih komandi i napravite mesta za novu.
Prva linija ce biti :
CMD:fine[playerid, params[]) Sada smo kreirali novu komandu fine,playerid se odnosi na igraca.Uglavnom sada idu { } simboli.Oni oznacavaju kraj i pocetak komande.
CMD:fine[playerid, params[])
{
}
Sada cemo unutar { } simboli odraditi ono sto ce nasa komanda raditi.Uglavnom se na pocetku komande nalaze provere za admine,lidere,gamemastere itd.Tako da ukoliko je neko tipa Admin manji od 2 ne moze koristiti komandu.
Provera se radi sa IF sto prevedeno sa engleskog znaci AKO.Znaci mi postavljamo pitanje "Ako je igrac admin manji od 1 uradi sledece..."
To bi izgledalo ovako :
if(PlayerInfo < 1 ) return SendClientMessage(playerid, -1, "Ne mozes koristiti ovo zato sto nisi admin!");Sada ukoliko neko ukuca komandu /fine a nije admin ispisuje mu tekst Ne mozes koristititi ovo zato sto nisi admin!.Takodje mozete da umesto SendClientMessage da stavite sledece:
if(PlayerInfo < 1) return Kick(playerid);Ukoliko neko kukuca /fine a nije admin kikovace ga 😄 .
Sada nakon provere idemo da dodamo par stvari:
new igrac,tekst,novac,razlog;Sada smo bukvalno dodali varijable igrac(to ce nam biti igrac na kome primenjujemo komandu),tekst(tekst koji pisemo igrac-u i playerid-u.512 oznacava duzinu teksta),novac(novac koji cemo oduzeti igracu).
Napomena - playerid je za onoga ko koristi komandu a na "igrac" se upotrebljava komanda.Igrac je poremljiva,znaci moze se menjati.
Sada cemo iskoristiti sscanf2 plugin
if(sscanf(params, "uds",target,novac,razlog)) return SendClientMessage(playerid, -1, "UPOTREBA | /fine ");Znaci sada ako korisnik ukuca samo /fine ili ne ispuni podatke iz sscanf-a onda mu izbaci poruku za upotrebu.
E sada znaci verovatno se pitate sta je "ud" ?
U zavisnosti sta smo prvo stavili,posto sam ja prvo stavio target znaci to je igrac onda koristimo "u " ,zatim se menja u novac sto je broj, i posle razlog
sto je string.Znaci idemo "u" pa zatim ide broj sto je "d" i string "s[broj duzine]".Sada kada se to spoji u jedno, ispada "uds"
Tutorial samo za sscanf mozete naci klikom na : LINK
Da nastavimo dalje...
Nakon sto smo odradili deo za sscanf,znaci ukoliko igrac ne ukuca sve potrebne podatke,izbacuje mu upotrebu.
Sada cemo da dodamo ispod svega ovoga
else
{
}Znaci ako je igrac prosao sve provere,ide na sledece izmedju ovih zagrada ispod else :
Posto pravimo komandu za fine,hocemo da se igracu oduzme novac
Za to koristimo:
GivePlayerMoney(igrac,-novac);U ovoj funkciji ce da igracu(onom kome smo uneli ID) oduzeti vrednost novca koju smo uneli.Jos jedna upotreba ove funkcije je da se da igracu odredjen novac,ako je taj slucaj obrise se "-novac" i ubacite svoj novac.Ako cete da se oduzima ide - ispred.Ukoliko hocete da date sebi umesto "igrac" ide "playerid".
Sada cemo da stavimo da igracu pise nekakva poruka.To radimo preko funkcije :
format(string,sizeof(string), "Oduzet ti je novac od strane admina : %s | Kolicina : %d | Razlog: %s ",GetPlayerName(playerid),novac,razlog);Pomocu ovoga smo samo formatirali tekst unutar " " .
%s - to je za stringove,tacnije tekst
%d - za brojeve
Posle zareza stavljamo vrednosti koje ce da se ispisu pomocu %s ili %d.Znaci vrednosti idu redom,znaci ako je prvo %s na redu,mora posle zarezi biti string,tacnije tekst.
GetPlayerName(playerid) - Uzima ime od playerid-a tacnije onoga ko je kucao i iskoristio komandu.
novac - varijabla novca koji ce biti oduzet/dat
razlog - razlog koji smo upisali
Sada cemo tu poruku poslati igracu kome je oduzet novac :
SendClientMessage(igrac, -1, string);SendClientMessage - sluzi da se neka poruka posalje igracu
igrac - Onaj kome ce poruka biti poslata,ukoliko stavimo playerid,poruku ce slati igracu koji je ukucao komandu
-1 - Boja,boje takodje mozete dodavati u tekstu ukoliko su definisane primer : ""CRVENA"Cao
string - to je ona varijabla koju smo formatirali,tacnije tekst
Sada mozete odraditi isto tako samo sto umesto igrac stoji playerid pri SendClientMessage.Pod format ce biti sve isto umesto teksta
Primer :
format(string,sizeof(string), "Oduzeo si igracu novac : %d | Razlog:%s",novac,razlog);
SendClientMessage(playerid, -1, string);Ista stvar kao i gore samo sta salje drugaciju poruku igracu koji je iskoristio komandu.
Sve u svemu komanda izgleda ovako :
CMD:fine[playerid, params[])
{
if(PlayerInfo < 1 ) return SendClientMessage(playerid, -1, "Ne mozes koristiti ovo zato sto nisi admin!");
new igrac,tekst,novac,razlog;
if(sscanf(params, "uds",target,novac,razlog)) return SendClientMessage(playerid, -1, "UPOTREBA | /fine ");
else
{
GivePlayerMoney(igrac,-novac);
format(string,sizeof(string), "Oduzet ti je novac od strane admina : %s | Kolicina : %d | Razlog: %s ",GetPlayerName(playerid),novac,razlog);
SendClientMessage(igrac, -1, string);
format(string,sizeof(string), "Oduzeo si igracu novac : %d | Razlog:%s",novac,razlog);
SendClientMessage(playerid, -1, string);
}
return 1;
}
To bi bilo to,ukoliko imate pitanje,slobodno pitajte ili ukoliko vam nesto nije bilo jasno.Ovo je moj prvi tutorial tako da budite blagi 🙂 😄 😎
Made Man
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
432
Postovi:
36
Teme:
Pridružio se:Sep. 2017
Kingpin
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosAktivan Član
21 / 250 XP
Početnik(6)
1,128
Postovi:
156
Teme:
Pridružio se:Jul 2017
Underboss
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosAktivan Član
7 / 250 XP
Početnik(0)
535
Postovi:
50
Teme:
Pridružio se:Nov. 2013
16. Jun 2018.
Pohvale na trudu ali ima par greÅ¡aka..A s obzirom da su tutorijali namijenjeni za poÄetnike to bi trebalo biti bez greÅ¡aka jer bi inaÄe moglo zbuniti poÄetnike i nauÄiti ih skroz pogreÅ¡no.
1.
Baze podataka?Ha?
http://www.znanje.org/abc/tutorials/accessMMX/01/Baze_podataka.htm
2.
Sam si rekao,citiram "512 oznacava duzinu teksta)" zašto onda stavljaš 512 ako koristiš manje od 100 karaktera?
Primjer teksta:

3.
Ne znam jesi li uopće testirao ovu komandu ali "razlog" ti nebi radio.Odnosno nebi ga pravilno ispisivalo.
Ovdje koristiÅ¡ razlog kao uspisivanje stringa ali nisi isto oznaÄio iznad Å¡to znaÄi da nebi ispisivalo pravilno razlog.(I opet 512...)
Ako ne shvaćaÅ¡ Å¡to toÄno nije dobro sa "razlog" pogledaj ponovo ovdje kako si oznaÄio :
Ispravno bi bilo
4.
....
....
....
Volio bih da mi objasniÅ¡ svoju logiku Äemu else ovdje?
Ako igraÄ ne proÄ‘e jednu od provjera svejedno neće doći do else-a jer će ga vratiti(return) koji si stavio.Tako da je else potpuno nepotrebno i samo će zbuniti poÄetnike.
5.
Tako kako si ga ti koristio u komandi se ne može koristiti.
Pogledja kako se koristi:
http://wiki.sa-mp.com/wiki/GetPlayerName
1.
Quote
Kada smo includovali ove 2 baze podataka
Baze podataka?Ha?
http://www.znanje.org/abc/tutorials/accessMMX/01/Baze_podataka.htm
2.
Quote
new igrac,tekst,novac,razlog;
Sam si rekao,citiram "512 oznacava duzinu teksta)" zašto onda stavljaš 512 ako koristiš manje od 100 karaktera?
Primjer teksta:

3.
Ne znam jesi li uopće testirao ovu komandu ali "razlog" ti nebi radio.Odnosno nebi ga pravilno ispisivalo.
Quote
sscanf(params, "uds",target,novac,razlog))
Ovdje koristiÅ¡ razlog kao uspisivanje stringa ali nisi isto oznaÄio iznad Å¡to znaÄi da nebi ispisivalo pravilno razlog.(I opet 512...)
Ako ne shvaćaÅ¡ Å¡to toÄno nije dobro sa "razlog" pogledaj ponovo ovdje kako si oznaÄio :
Quote
new igrac,tekst,novac,razlog;
Ispravno bi bilo
Quote
new igrac,tekst,novac,razlog;
sscanf(params, "uds",target,novac,razlog))
sscanf(params, "uds",target,novac,razlog))
4.
Quote
Sada cemo da dodamo ispod svega ovoga
else
{
}....
....
....
Volio bih da mi objasniÅ¡ svoju logiku Äemu else ovdje?
Ako igraÄ ne proÄ‘e jednu od provjera svejedno neće doći do else-a jer će ga vratiti(return) koji si stavio.Tako da je else potpuno nepotrebno i samo će zbuniti poÄetnike.
5.
Quote
GetPlayerName(playerid)
Tako kako si ga ti koristio u komandi se ne može koristiti.
Pogledja kako se koristi:
http://wiki.sa-mp.com/wiki/GetPlayerName
Godfather
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosAktivan Član
17 / 250 XP
Početnik(1)
2,272
Postovi:
76
Teme:
Pridružio se:Maj 2014
16. Jun 2018.
Paul Castellano wrote on June 16, 2018, 9:04 am:
Pohvale na trudu ali ima par greÅ¡aka..A s obzirom da su tutorijali namijenjeni za poÄetnike to bi trebalo biti bez greÅ¡aka jer bi inaÄe moglo zbuniti poÄetnike i nauÄiti ih skroz pogreÅ¡no.
1.
Baze podataka?Ha?
http://www.znanje.org/abc/tutorials/accessMMX/01/Baze_podataka.htm
1.
Baze podataka?Ha?
http://www.znanje.org/abc/tutorials/accessMMX/01/Baze_podataka.htm
Hvala pre svega na odgovoru.
1.Tako su me ucili pre 2 godine u skoli.Kako su to baze podataka.Hvala sto si mi ispravio gresku.
Paul Castellano wrote on June 16, 2018, 9:04 am:
2.
Sam si rekao,citiram "512 oznacava duzinu teksta)" zašto onda stavljaš 512 ako koristiš manje od 100 karaktera?
Primjer teksta:

Sam si rekao,citiram "512 oznacava duzinu teksta)" zašto onda stavljaš 512 ako koristiš manje od 100 karaktera?
Primjer teksta:

2.To si u pravu.Mada sam stavljao 512 radi primera.U zavisnosti od komande razlicita je duzina teksta.To je radjeno da ne bi kopirali komandu,nego da nesto nauce.Sve je objasnjeno,takodje da se duzina teksta stavlja u zavisnosti od potreba.
Paul Castellano wrote on June 16, 2018, 9:04 am:
3.
Ne znam jesi li uopće testirao ovu komandu ali "razlog" ti nebi radio.Odnosno nebi ga pravilno ispisivalo.
Ovdje koristiÅ¡ razlog kao uspisivanje stringa ali nisi isto oznaÄio iznad Å¡to znaÄi da nebi ispisivalo pravilno razlog.(I opet 512...)
Ako ne shvaćaÅ¡ Å¡to toÄno nije dobro sa "razlog" pogledaj ponovo ovdje kako si oznaÄio :
Ispravno bi bilo
Ne znam jesi li uopće testirao ovu komandu ali "razlog" ti nebi radio.Odnosno nebi ga pravilno ispisivalo.
Ovdje koristiÅ¡ razlog kao uspisivanje stringa ali nisi isto oznaÄio iznad Å¡to znaÄi da nebi ispisivalo pravilno razlog.(I opet 512...)
Ako ne shvaćaÅ¡ Å¡to toÄno nije dobro sa "razlog" pogledaj ponovo ovdje kako si oznaÄio :
Ispravno bi bilo
Potpuno sam to zaboravio.Moja greska i izvinjavam se na tome....
Paul Castellano wrote on June 16, 2018, 9:04 am:
4.
....
....
....
Volio bih da mi objasniÅ¡ svoju logiku Äemu else ovdje?
Ako igraÄ ne proÄ‘e jednu od provjera svejedno neće doći do else-a jer će ga vratiti(return) koji si stavio.Tako da je else potpuno nepotrebno i samo će zbuniti poÄetnike.
....
....
....
Volio bih da mi objasniÅ¡ svoju logiku Äemu else ovdje?
Ako igraÄ ne proÄ‘e jednu od provjera svejedno neće doći do else-a jer će ga vratiti(return) koji si stavio.Tako da je else potpuno nepotrebno i samo će zbuniti poÄetnike.
Kao sto sam napomenuo gore,tako sam ucio da radim.Po meni je to laksi nacin,nisam siguran kako je ostalima...
Paul Castellano wrote on June 16, 2018, 9:04 am:
5.
Tako kako si ga ti koristio u komandi se ne može koristiti.
Pogledja kako se koristi:
http://wiki.sa-mp.com/wiki/GetPlayerName
Tako kako si ga ti koristio u komandi se ne može koristiti.
Pogledja kako se koristi:
http://wiki.sa-mp.com/wiki/GetPlayerName
Opet moja greska,ispravio bih malo temu kada bih mogao.Hvala sto si mi ukazao na greske,cenim to 🙂 😄 <3
Underboss
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosAktivan Član
7 / 250 XP
Početnik(0)
535
Postovi:
50
Teme:
Pridružio se:Nov. 2013
16. Jun 2018.
Quote
Kao sto sam napomenuo gore,tako sam ucio da radim.Po meni je to laksi nacin,nisam siguran kako je ostalima...
Nema ti Å¡ta bit lakÅ¡e ne bit kada je to pogreÅ¡no 🙂 To se ne koristi u tom sluÄaju u kojem si ga ti koristio.Else znaÄi inaÄe,ako nijedna od provjera nije istinita.Ali u tvom sluÄaju on ne može doći do else-a.
Quote
if(PlayerInfo < 1 ) return SendClientMessage(playerid, -1, "Ne mozes koristiti ovo zato sto nisi admin!");
U prijevodu znaÄi:
Ako je pAdmin manji od 1 --> vraća ga sa porukom(SCM) .ZnaÄi skripta dalje ne provjerava niÅ¡ta.Ako je igraÄ manji od pAdmin1 tu sve staje za njega,ne može proći dalje 🙂)
Tako da ako igraÄ nije A1 ili nije ispravno unio parametre on nikad neće doći do else-a.Defintivno to nebi trebao koristiti u ovakvim sluÄajevima.
Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava

