[TuT] Komanda /isteraj (ZCMD, sscanf)

Započeo Ice FoX, April 09, 2012, 18:35:09 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 2 gostiju pregledaju ovu temu.

Ja sam ovde nov i pocetnik u skriptanju, ali zelim napraviti tutorial za komandu /isteraj koja bi verovatno bila korisna mnogima. Pa da pocnemo:

Prvo sto trebate jeste ubaciti includove. Posto je komanda radjena u ZCMD-u trebace vam taj include koji mozete naci na:
http://forum.sa-mp.com/showthread.php?t=91354 Ubacite ga u folder napr. C:/ProgramFiles/SampServer/pawno/include.
Takodje ce vam trebati sscanf kojeg mozete naci na: http://forum.sa-mp.com/showthread.php?t=120356 Njega ubacujete isto kao ZCMD.

#include <a_samp>
#include <zcmd>

Onda definirajmo par boja: Sivu, narandzastu i svetlo sivu, bar je to moj odabir, ako hocete druge definirajte ih sami.
#define SIVA    0xABABABAA
#define NARANDZ 0xDBA100AA
#define SSIVA   0xD1D1D1AA

Dalje sto trebate je jednostavno napraviti komandu.
CMD:isteraj(playerid,params[])
{

return 1;
}

CMD oznacava komandu. Isteraj je naziv komande.
Morate napraviti new koji ce skladistiti id igraca kojeg zelite isterati.

CMD:isteraj(playerid,params[])
{
new id;
if(sscanf(params,"u",id)) return SendClientMessage(playerid, SSIVA,"Upotreba: /isteraj <ID>");
return 1;
}

Sta ovo radi jeste da parametar u koristi za dobavljanje igracevog ida. Vise o tome mozete naci u postu od joXy_ koji je sve to lepo objasnio. http://balkan-samp.com/forum/index.php?topic=28770.0 ovaj deo return SendClientMessage radi to da vraca igracu poruku za upotrebu ove komande. Znaci ako on ukuca samo /isteraj ono ce poslati poruku da mora dodati jos i id. Nakon toga hocemo napraviti da ako igrac nije u vozilu naravno nemoze nikoga ni izbaciti iz njega.
else if (IsPlayerInAnyVehicle(playerid)==0) return SendClientMessage(playerid,SIVA,"Greska: Niste u vozilu.");
Ovo IsPlayerInAnyVehicle proverava da li se igrac koji je uneo komandu /isteraj ID nalazi u nekom vozilu, ako ne znaci ako je to ==0(0 znaci netacno, a 1 tacno) da vrati igracu poruku da nije u vozilu. Nakon toga cemo dodati to da ako igrac unese krivi id (napr. w ili id igraca koji nije online) da vrati poruku da je uneo pogresan id.
else if (id == INVALID_PLAYER_ID) return SendClientMessage(playerid, SIVA, "Greska: Uneli ste krivi id.");
To znaci ako je id, koji smo uneli jednak INVALID_PLAYER_ID(to proverava da li je id u dobrom obliku) da vrati poruku da je uneo krivi id. Sledece sto cemo napraviti je dodati da ako igrac nije vozac da ne moze izbaciti nikoga.
else if(GetPlayerVehicleSeat(id)>0) return SendClientMessage(playerid,SIVA,"Greska: Niste vozac.");
Ako je GetPlayerVehicleSeat 0 to znaci da je igrac vozac, ako je -1 znaci da igrac nije u vozilu, a ako je vece od 0 znaci da je suvozac, ili saputnik na zadnjim sedistima. Ako je to vece od 0(Ako je suvozac ili saputnik) da vrati poruku da nije vozac. Dalje:
else if (id == playerid) return SendClientMessage(playerid,SIVA,"Greska: Nemozete izbaciti sami sebe.");
To znaci ako je playerid(id igraca koji kuca komandu) jednak id(unesenom id-u) da vrati poruku da nemoze izbaciti sam sebe.
else if(GetPlayerVehicleSeat(id)== -1) return SendClientMessage(playerid,SIVA,"Greska: Taj igrac nije u vozilu.");
Kao sto sam rekao -1 znaci da igrac nije u vozilu, pa ovo radi to da ako igrac nije u vozilu da vrati poruku da taj igrac nije u vozilu.
I na kraju ako je sve ovo u redu da izbaci igraca iz vozila.

RemovePlayerFromVehicle(id);
SendClientMessage(playerid,SSIVA,"Izbacili ste igraca iz svog vozila.");
SendClientMessage(id,NARANDZ,"Izbaceni ste iz vozila.");

Prvi deo radi to izbacuje igraca ciji ste id uneli, nakon toga da posalje poruku igracu koji je uneo komandu da je izbacio igraca iz vozila. Poslednje salje izbacenom igracu poruku da je izbacen iz vozila.

Na kraju komanda bi trebalo da izgleda ovako:

CMD:isteraj(playerid, params[])
{
new id;
if(sscanf(params,"u",id)) return SendClientMessage(playerid, SSIVA,"Upotreba: /isteraj <ID>");
else if (IsPlayerInAnyVehicle(playerid)==0) return SendClientMessage(playerid,SIVA,"Greska: Niste u vozilu.");
else if (id == INVALID_PLAYER_ID) return SendClientMessage(playerid, SIVA, "Greska: Taj igrac je offline.");
else if(GetPlayerVehicleSeat(id)>0) return SendClientMessage(playerid,SIVA,"Greska: Niste vozac.");
else if (id == playerid) return SendClientMessage(playerid,SIVA,"Greska: Nemozete izbaciti sami sebe.");
else if(GetPlayerVehicleSeat(id)== -1) return SendClientMessage(playerid,SIVA,"Greska: Taj igrac nije u vozilu.");
RemovePlayerFromVehicle(id);
SendClientMessage(playerid,SSIVA,"Izbacili ste igraca iz svog vozila.");
SendClientMessage(id,NARANDZ,"Izbaceni ste iz vozila.");
return 1;
}


Nadam se da sam pomogao. Ovo je tutorijal namenjen pocetnicima, a moze i onima koji uce koristiti ZCMD i sscanf. Ako imate kakva pitanja ili primedbe posaljite mi na pm ili postajte ovde. Nadam se da je sve dobro objasnjeno.
Poslednja Izmena: April 09, 2012, 18:35:31 POSLE PODNE od Ice FoX

Ovo će pomoći mnogima .. 10/10 ..
Mapam besplatno!


Hvala svima.

Citat: [GN]Armin44 !GF! poslato April 14, 2012, 00:51:46 PRE PODNE
Nije Lose..Mada se moze jednostavnije napraviti.
Pa kao sto rekoh i sam sam pa tako reci pocetnik i ovako mi je izgledalo najjednostavnije.



Odličan tutorijal za početnike u skriptanju.


Citat: SpawneR.amx poslato April 16, 2012, 11:31:21 PRE PODNE
Super TUT !!

Gde sa ovim ? Gde da stavim to u skripti?
CMD:isteraj(playerid,params[])
{

return 1;
}


Pa to nije sve, to je samo kako treba izgledati na pocetku, a unutar toga pises. Pogledaj krajnju komandu mozda ti bude jasnije.

Odličan TuT! Skontao sam mnogo toga oko skriptanja raznih komandi iz ovog tut-a! Bravo!




Nisam sve pregledao.. samo vidim da je opširno objašnjeno.
Pohvala za trud  :)

Citat: [CoA]Don Conellâ,,¢ poslato Maj 04, 2012, 09:38:47 PRE PODNE
to nije tut
to ide ovdje KLIK
Zašto nebi bio tut ako je dobro objašnjeno?