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.
