Balkan SA:MP

San Andreas Multiplayer - www.sa-mp.com => Tutorijali u vezi SA-MPa => Temu započeo: dock poslato Septembar 03, 2012, 23:12:00 POSLE PODNE

Naslov: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: dock poslato Septembar 03, 2012, 23:12:00 POSLE PODNE
Evo ovako, secam se dok sam pocinjao scriptati i bilo koji mod da se uzme editovati tada (tipa ravens, gf, gtarp itd.) nije imao neki valjan BAN/UNBAN sistem, uglavnom se koristila Ban(playerid); funkcija, i koliko se secam unbanati se nije moglo cak ni preko rcona (meni nije poslo od ruke :D) ... Zato sam odlucio napraviti ovaj tut u vezi BAN/UNBAN sistema i nadam se da ce nekom pomoci ...

Sta je potrebno?

- ZCMD include fajl, sscanf2 plugin

Hajde da pocnemo. Za pocetak cemo definisati mesto za ban (ban file)


#define BanFolder "/Banani/%s.ini"


Ovo ce nam trebati da bismo imali gde da cuvamo ban fajlove (.ini fajl se koristi (bez obzira sto ne koristimo dini, y_ini.. (ne mora biti ali to je jednostavno stvar navike .. za sve koristim .ini pa i za to :)))

Naravno ovaj folder (Banani) morate imati u scriptfiles folderu da vam server nebi padao kad god koristite BAN komandu.

Hajde sada da pocnemo da pravimo komandu BAN:

Prvo sto treba da se uradi jeste da se zapocne komanda kao sto svaka u ZCMDu i pocinje:


CMD:ban(playerid,params[])
{


Sada cemo ispisati potrebne parametre za komandu pomocu sscanfa:


new id, razlog[32];
if(sscanf(params,"us[32]",id,razlog)) return SendClientMessage(playerid, -1, " >> Koristi: /ban [id igraca] [razlog]");


Ovde id predstavlja id igraca kojeg cemo banati, razlog predstavlja razlog bana (mozete videti da je boja -1, to je jos jedan nacin napisati belu boju... koristicemo osnovne boje da nebih morao da definisem boje).

Sada cemo napraviti proveru da li je igrac admin (ja cu staviti RCON admina da moze banati, vi naravno zamenite sa vasom varijablom za admina bez obzira da li to bio enum ili pvar :))


if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xff0000aa, " >> Nisi admin!");


IsPlayerAdmin je provera da li je igrac ulogiran kao RCOn admin ( ! ispred znaci da ukoliko igrac nije admin server ispise ovu poruku.)

Sada da nastavimo ka ostatku komande, prvo cemo ispisati sve poruke koje izlaze i igracu i adminu i svim igracima naravno (moraju ljudi videti ko je banan inace nista nismo uradili :D)...


new str[128];
new ime[MAX_PLAYER_NAME]; GetPlayerName(playerid, ime, sizeof(ime));
new igrac[MAX_PLAYER_NAME]; GetPlayerName(id, igrac, sizeof(igrac));
format(str,128," BAN - Banali ste igraca %s. Razlog: %s", igrac, razlog);
SendClientMessage(playerid, 0xffff00aa, str);
format(str,128," BAN - Dobili ste ban od admina %s. Razlog: %s", ime, razlog);
SendClientMessage(id, 0xff0000aa, str);
format(str,128," BAN - Igrac %s je dobio ban od admina %s. Razlog: %s",igrac, ime, razlog);
SendClientMessageToAll(0xff0000aa, str);


str - string koji formatujemo u textove koje cemo poslati
ime - ime admina
igrac - ime igraca koji je banan

Sada kada smo svima fino rekli da je igrac banan hajde i da ga banujemo :D


new banfile[64];
format(banfile,64,BanFolder,igrac);
new File:ban = fopen(banfile, io_write);
fwrite(ban, " - BAN - \n");
new var[64]; format(var,64,"Admin = %s\n", ime);
fwrite(ban,var);
new var[128]; format(var,128,"Razlog = %s\n", razlog);
fwrite(ban,var);
fclose(ban);
Kick(id);


Da objasnimo ovo ovde ima puno za objasniti :D

banfile - je mesto gde se nalazi ban (moramo ga formatirati da bi mogli ubaciti ime igraca..)
ban - to je FAJL. Uz pomoc njega pisemo u fajl sta nam treba.
fopen - otvara se fajl
io_write - znaci da zapisuje u fajl sve sta treba (brise sve sto je bilo pre), ili ako fajl ne postoji pravi ga pa pocinje da pise
fwrite - zapisuje red u fajlu
var - formatirana varijabla, da zapisemo koji je admin banao igraca, i sa kojim razlogom ..
fclose - Na kraju zatvaramo fajl.
Kick(id); - izbacuje igraca sa servera...

Sada kada smo zavrsili sve ovo zatvaramo komandu:


return 1;
}


E sada kada smo konacno banali igraca treba namestiti da taj isti igrac NE moze da se vrati na server. Pod OnPlayerConnect je potrebno ubaciti da proverava ime igraca, proverava da li je banan, ukoliko je to tacno, izbaci ga sa servera (neda mu da se konektuje)... To radimo ovako:


new ime[MAX_PLAYER_NAME]; GetPlayerName(playerid, ime, sizeof(ime));
new banfile[64];
format(banfile,64,BanFolder,ime);
if(fexist(banfile))
{
SendClientMessage(playerid, -1, " Banan si sa ovog servera.");
SendClientMessage(playerid, -1, " Ukoliko zelis ponovo da igras, trazi unban na forumu.");
SendClientMessage(playerid, -1, " Forum link: www.vas.forum");
Kick(playerid);
return 1;
}


ime - to je ime igraca koje proveravamo da li je banano
banfile - kao malopre formatiran direktorijum gde se trazi da li je korisnik banovan
fexist - znaci da fajl postoji (fexist(banfile) - znaci da ukoliko postoji BANFILE uradi sta pise ispod)

Sta se desi kada igrac udje i njegovo ime stoji u folderu Banani:

Dobije 3 poruke koje su gore ispisane, zatim je kickan sa servera. Pozeljno je da se ovo stavi na pocetak OnPlayerConnect kako bi se izbeglo pojavljivanje drugih poruka, dialoga i slicno...

Sada kada smo zabranili igracu da ulazi potrebana je komanda unban da igraca i unbana. Iz dela gore znate kako pocinje i zavrsava se komanda pa cu napisati celu te je objasniti fino :)


CMD:unban(playerid,params[])
{
    new imeigraca[24];
if(sscanf(params,"s[24]",imeigraca)) return SendClientMessage(playerid, -1, " >> Koristi: /unban [TACNO ime igraca]");
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xff0000aa, " >> Nisi admin!");
new str[128];
new banfile[64];
format(banfile,64,BanFolder,imeigraca);
if(!fexist(banfile)) return SendClientMessage(playerid, 0xff0000aa, " >> Igrac nije banovan!");
    format(str,128," UNBAN - Unbanali ste igraca %s", imeigraca);
SendClientMessage(playerid, 0xffff00aa, str);
fremove(banfile);
return 1;
}


SSCANF koristimo kao i malopre, jedina razlika sto se sada koristi novi new a to je imeigraca (to je ime igraca koje unbanamo).
str - isto sluzi za formatiranje poruke koja ide igracu
banfile - opet nas vodi do direktorijuma gde se nalazi ban igraca
!fexist - isto kao fexist samo sto ovaj ! ispred znaci da se gleda UKOLIKO NE POSTOJI FAJL (najlakse objasnjeno UKOLIKO NE POSTOJI FAJL URADI SLEDECE: a to je ispisati poruku da fajl ne postoji).
na kraju fremove sluzi da se fajl obrise i ponovo dozvoli igracu da udje.

Ja bih reko da je to to uvezi ban/unban sistema. Ne znam da li je sada vise frka oko toga uopste kao sto je pre bila, ali se secam da sam se dosta mucio oko toga jer niko nije znao to da uradi, a ko je znao cuvao je to za sebe, tako da sam odlucio da pomognem nekom ko ne zna.

Nadam se da je bilo od pomoci, mislim da problema nece biti (ali uvek je moguce jer se ovo ne nalazi ni u jednom modu - kucao sam ispocetka...)

Moram jos napomenuti ZAHVALJUJEM KARIKI jer sam preko njegove FS naucio kako se ovo radi i preko toga pravio razne sisteme. Ovo je po ugledu na tu FS (nije ta FS prebacena u tut jednostavno isto je jer nema tu neke velike nauke to je sto je i nemoze se drukcije napraviti :) na ovaj nacin bar.. :) )

To je to od mene pozdrav.
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: Capetroon. poslato Septembar 03, 2012, 23:18:41 POSLE PODNE
Mnogo mnogo svima može pomoći ovaj tut, može se preko skoro sve, predobar! 10/10!
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: dock poslato Septembar 03, 2012, 23:20:11 POSLE PODNE
Zahvaljujem ! :)
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: dock poslato Septembar 03, 2012, 23:49:42 POSLE PODNE
Sve newove koje sam koristio sam objasnio koja cemu sluzi, a i nije cilj dati im komandu odma jer NIKO ama bas NIKO nece procitati tut ako imas mogucnost copy-paste.. to nije cilj tutoriala pa logicno ni moj cilj, moj cilj je da naucim nekog nesto a ne da mu serviram na tacni pa da samo kopira i da uopste ne razmislja sta je zapravo kopirao (kao sto sam ja radio kada sam pocinjao, sto mi je mnogo otezalo dalje ucenje, samo sam c/p i cao zdravo... nije to cilj)..

Sve u svemu hvala na komentaru :D
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: αησηумσυѕ poslato Septembar 04, 2012, 13:05:57 POSLE PODNE
Hvala , posluzilo mi je :D
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: LOckeRâ„¢ poslato Septembar 04, 2012, 14:19:18 POSLE PODNE
Odlicno ;D
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: Hitman poslato Septembar 04, 2012, 20:04:04 POSLE PODNE
Lijepo si objasnio, pohvala  ;D
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: AroN poslato Septembar 04, 2012, 20:05:51 POSLE PODNE
Pohvala...Mislim da je ovo od pomoći  ;)
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: pllopen poslato Septembar 04, 2012, 21:31:50 POSLE PODNE
Da svaki pocetnik ovo detaljno procita neke bi stvari skuzio. Svaka cast pohvala za tut! Nadam se da ce jos biti tutorijala od tebe :)
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: dock poslato Septembar 04, 2012, 23:01:44 POSLE PODNE
Ako imam ideja i vremena bice :D
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: _HarDy_ poslato Septembar 05, 2012, 00:00:27 PRE PODNE
Svaka cast!!!
10 / 10 al ja svoje nemogu napraviti  :(
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: dock poslato Septembar 05, 2012, 00:09:00 PRE PODNE
Pa kako ne mozes gledaj kolki text majku mu ??? xd
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: TiXoR_ poslato Septembar 07, 2012, 01:58:46 PRE PODNE
Super tut, samo komande i funkcije malo ljepše piši. ;)
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: D Boy poslato Septembar 07, 2012, 13:03:03 POSLE PODNE
Prvo pohvala na trudu trebalo je ovo sve i napistai.
Drugo jako opsirno i lijepo objasnjeno
Trece Jako ce pomoci pocetnicima jer bez /ban & /unban komande dabe srv haha
Cetvrto samo nastavi ovako s TuT-orijalima dobar si
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: Kopra poslato Septembar 07, 2012, 19:04:47 POSLE PODNE
Koristio si parametar I u sscanfu,to je INTEGER VALUE a ne STRING.

new id, razlog[128]; // 128 zato sto toliko moze da stane u chat
if(sscanf(params,"uz[128]",id,razlog)) return SendClientMessage(playerid, -1, " >> Koristi: /ban [id igraca] [razlog]");


Da ne ispadnem budala:
8)

http://wiki.sa-mp.com/wiki/Fast_Commands

z Optional string A reason e.g. Ban Reason, only optional at the end of a format string
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: dock poslato Septembar 08, 2012, 02:13:19 PRE PODNE
Hvala sto si me ispravio .. iskreno ovo sam pisao ispocetka bez testanja icega znao sam da se negde podkrala greska pa eto nisam vido... hvala sto si prepravio :) evo edit cu post :)
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: Kopra poslato Septembar 08, 2012, 21:04:04 POSLE PODNE
Citat: dock poslato Septembar 08, 2012, 02:13:19 PRE PODNE
Hvala sto si me ispravio .. iskreno ovo sam pisao ispocetka bez testanja icega znao sam da se negde podkrala greska pa eto nisam vido... hvala sto si prepravio :) evo edit cu post :)

Nema na cemu,svi gresimo xD
PS Sory za spam :P
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: Lemi Zero poslato Septembar 19, 2012, 17:44:24 POSLE PODNE
Imam problem, nece da mi pise ime igraca i razlog, a kada unbanujem nekoga nece da brise fajl...  :o
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: Artieâ„¢ poslato Septembar 19, 2012, 17:45:23 POSLE PODNE
Super tut  ;) najbolja moguca kombinacija (ZCMD + sscanf)
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: ★dknez15★ poslato Septembar 20, 2012, 20:26:41 POSLE PODNE
Odlicno, svaka cast za tut!
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: !вυ!ѕєуzιιι¢н™.amx poslato Septembar 29, 2012, 18:28:28 POSLE PODNE
Odlican tut!
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: Alexasssâ„¢ poslato Oktobar 05, 2012, 22:07:06 POSLE PODNE
Odlican TuT,bravo   :)
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: [BU]Davidoff poslato Oktobar 07, 2012, 18:55:27 POSLE PODNE
Predobro si ovo uradio svaka ti cast :)
Naslov: Odg: [TUT] Ban/Unban [zcmd+sscanf2]
Poruka od: K4[Я]!K3 poslato Oktobar 07, 2012, 19:02:29 POSLE PODNE
Citat: [HL]Davidoff poslato Oktobar 07, 2012, 18:55:27 POSLE PODNE
Predobro si ovo uradio svaka ti cast :)
Ohladi malo sa osvježavanjem tema.