Započeo Schwarz
•19. Jul 2014.• Zaključano[TUT]Administrator System [Y_INI,ZCMD,sscanf2] by Schwarz
2,027
pregleda
8
postova
Kingpin
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
1,058
Postovi:
155
Teme:
Pridružio se:Mar. 2012
19. Jul 2014.
Administrator system
Dobrovece svima danas cu vam pokazati kako napraviti jedan jednostavan administratorski system za vas server, pa da pocnemo.Potrebne stvari za da radi ovaj tutorijal su:
-Sistem zacuvljavanju:Y_INI
-Procesor komande:ZCMD
-Sscanf 2
-Sistem zacuvljavanju:Y_INI
-Procesor komande:ZCMD
-Sscanf 2
Korak 1.Kreiranje Enuma
Prvo sto radimo je kreiranje Enuma i varijablu za Admina.
To izgleda ovako:
enum pInfo
{
pAdmin
};
new PlayerInfo;Korak 2.Kreiranje na zacuvljavanje na admina pri Disconnect
Sad kreiramo public od gde cemo da ucitujemo data.
forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
INI_Int("Admin",PlayerInfo);
return 1;
}stock UserPath(playerid)
{
new file,playername;
GetPlayerName(playerid,playername,sizeof(playername));
format(file,sizeof(file),PATH,playername);
return file;
}I onda u delu za logiranje neznam kod vas kako je, kod mene je u dijalog dodajemo ovo za ucitavanje podataka:
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);Kad zavrsimo sa ucitavanje sad sledi zacuvljavanje podatke.
stock SavePlayer(playerid)
{
new INI:File =INI_Open(UserPath(playerid));
INI_WriteInt(File, "Admin",PlayerInfo);
INI_Close(File);
return 1;
}SavePlayer(playerid);Korak 3.Kreiranje komanda za davanje admina.
CMD:postaviadmina(playerid, params[])
{
if(PlayerInfo >= 1338 || IsPlayerAdmin(playerid)) //Ovde proveravamo dali je igrac sta zeli da koristi ovu komandu je admin
{
new player, alevel, string; //ovde definisemo string,level i igrac sta zelimo da mu damo admina
if(sscanf(params, "ud", player, alevel)) return SendClientMessage(playerid, -1, "/postaviadmina [ID/] [Level (1-1338)]"); //ovde proveravamo dali sve parametre su ispunjenje
if(!IsPlayerConnected(player)) return SCM(playerid, -1,"Igrac nije konektovan!"); //Ovde proveravamo dali taj ID je ili Igrac je konektiran na serveru
if(alevel < 0 || alevel > 6) return SendClientMessage(playerid, -1, "Admin Level ne moze biti manji od 0 i veci od 1338!"); //Ovde proveravamo koji pod koji ili nad koji level nemoze da mu se postavi
PlayerInfo = alevel; //Ovde se upisuje level Admina
format(string, sizeof(string), "Admin %s vi je postavio %d Admin Level.", GetName(playerid), level); //Tu formatiramo porku
SendClientMessage(player, -1, string); //A ovde je ispisujemo
format(string, sizeof(string), "Postavili ste %s Admin Level %d.", GetName(player), level); //Isti postupak kao ove iznad
SendClientMessage(playerid, -1, string); //isti postupak kao ovo iznad
}
else
{
SendClientMessage(playerid, -1, "Nemozete koristiti ovu komandu!"); //Ako igrac nije admin ovde mu ispisuje da nemoze koristiti komandu
}
return 1;
}Zavrsili smo so komandu za postavjanje admina sad cemo uraditi komandu za igrace da vidu koj je admin na serveru.
Korak 4.Kreiranje komanda /admins
CMD:admins(playerid, params[])
{
SendClientMessage(playerid, -1, " ");
SendClientMessage(playerid, -1, "-| Online Administratori |-");
for(new i = 0; i < MAX_PLAYERS; i++) //Ovde proveravamo sve igrace da vidimo koji je sve admin
{
if(IsPlayerConnected(i))
{
if(PlayerInfo >= 1 && PlayerInfo < 1339)
{
new admtext, sendername, string;
if(PlayerInfo == 1338) { admtext = "Owner"; }
else if(PlayerInfo == 1337) { admtext = "Head Admin"; }
else if(PlayerInfo == 4) { admtext = "Leader Admin"; }
else if(PlayerInfo == 3) { admtext = "Admin Level 3"; }
else if(PlayerInfo == 2) { admtext = "Admin Level 2"; }
else if(PlayerInfo == 1) { admtext = "Admin Level 1"; }
else { admtext = "Admin Level 1"; }
GetPlayerName(i, sendername, sizeof(sendername));
sendername[strfind(sendername,"_")] = ' ';
if(AdminDuty == 0) //Ovde proveravamo dali je admin na duznosti
{
format(string, 128, "%s: %s (AdminDuty: Ne)", admtext, sendername);
SendClientMessage(playerid, -1, string);
}
else
{
format(string, 128, "%s: %s (AdminDuty: Da)", admtext, sendername);
SendClientMessage(playerid, -1, string);
}
}
}
}
return 1;
}
Naredno sta cu uraditi je Admin Chat i komanda za duznost.
Korak 5.Kreiranje komande /adminchat i /adminduty
Sad cemo kreirati komandu za admine da mogu da komuniciraju a da to ne vide ostali igraci.
CMD:a(playerid, params[])
{
new sendername, string; //tu definiramo admin sta posalje text i string
if(!(PlayerInfo >= 1)) return SendClientMessage(playerid,-1,"Nemozete koristi ovu komandu."); //Ovde proveravamo dali igrac sta koristi komandu je admin
if(isnull(params)) return SCM(playerid,-1,"/a "); //Ovde proveravamo dali si ispunjenje uslove
GetPlayerName(playerid,sendername,sizeof(sendername)); //ovde dobijamo ime na onaj sta pise text
sendername[strfind(sendername,"_")] = ' ';
format(string,160,"*%d Admin %s: %s",PlayerInfo,sendername,params); //ovde formatiramo text
SendAdminMessage(-1, string); //I ovde ga posajemo
return 1;
}Da bi ova komanda radila potrebno je da kreiramo jedan publik.
forward SendAdminMessage(color, string[]);
public SendAdminMessage(color, string[])
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(PlayerInfo >= 1)
{
SendClientMessage(i, color, string);
}
}
}
}
Sada na red je admin duznost, da bi komanda radila normalno potrebno je dodadi ovo pri vrh
new AdminDuty; i ovo pod public OnPlayerConnect AdminDuty = 0;Sad idemo na komandu:
CMD:adminduty(playerid, params[])
{
if(PlayerInfo == 0) return SCM(playerid, -1, "Nemozes koristiti ovu komandu");
new string;
if(AdminDuty == 0)
{
format(string,sizeof(string),"Administrator %s je na duznosti",GetName(playerid));
SendClientMessageToAll(-1,string);
AdminDuty = 1;
SetPlayerArmour(playerid, 99.0);
SetPlayerHealth(playerid, 99.0);
}
else if(AdminDuty == 1)
{
SetPlayerArmour(playerid, 0);
SetPlayerHealth(playerid, 99.0);
format(string,sizeof(string),"Administrator %s vise nije na duznost",GetName(playerid));
SendClientMessageToAll(-1,string);
AdminDuty = 0;
}
return 1;
}Kraj
To bi bilo to u ovaj tutorijal potrudio sam se da objasnim koliko mogu, negde sam kratio objasnjene zbog limita. Ukoliko imate neku ideju ili vidite neku gresku molim vas obavjestite me da ispravim to.
Underboss
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
649
Postovi:
34
Teme:
Pridružio se:Mar. 2014
Forum Don
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
7,407
Postovi:
93
Teme:
Pridružio se:Nov. 2011
20. Jul 2014.
arnel avdic wrote on July 19, 2014, 10:51 pm:
dobar je tut , pocetnicima lako pomoci ce 😄
Godfather
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
190 / 250 XP
Početnik(0)
2,463
Postovi:
6
Teme:
Pridružio se:Jul 2014
20. Jul 2014.
Mogao si te komanda jos dosta krace napisati..
I ovo si samo copy/paste iz nekog moda, jer da si sam radio sigurno ne bi koristio:
Takodje i izvedena funkcija GetName nije nigdje napisana, ma copy/paste. 😄
I ovo si samo copy/paste iz nekog moda, jer da si sam radio sigurno ne bi koristio:
for(new i = 0; i < MAX_PLAYERS; i++)
IsPlayerConnected
Takodje i izvedena funkcija GetName nije nigdje napisana, ma copy/paste. 😄
OG Legend
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosAktivan Član
23 / 250 XP
Početnik(2)
3,748
Postovi:
73
Teme:
Pridružio se:Jan. 2012
20. Jul 2014.
IsPlayerConnected je nepotrebna funkcija jer nema logike da to proveravas.
jednostavno
jednostavno
if(konstruktor == INVALID_PLAYER_ID) jer nemozes dobiti id ako nisi povezan na server.Kingpin
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
1,058
Postovi:
155
Teme:
Pridružio se:Mar. 2012
21. Jul 2014.
Ok Ok tocno je da sam uzeo komandu /postaviadmina iz up moda jer nisam ima vremena da radim novu, a ovu za foreach mislio sam da radim uradim jos neke komande a onda sam skratio i sam zaboravio da popravim to, sad je popravjeno. Mozda bi i malo pokazali pocit jer sam nasao malo vremena da napisem neki tutorijal a vi celi dan tu ste i nista neradite osven sta spamate po glavnom razgovoru ?
Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava