[TUT]Administrator System [Y_INI,ZCMD,sscanf2] by Schwarz

Započeo Schwarz, Jul 19, 2014, 23:50:46 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 2 gostiju pregledaju ovu temu.

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

Korak 1.Kreiranje Enuma
Prvo sto radimo je kreiranje Enuma i varijablu za Admina.
To izgleda ovako:
enum pInfo
{
pAdmin
};
new PlayerInfo[MAX_PLAYERS][pInfo];
Kreirali smo enum i dodali smo varijablu pAdmin, sad mozemo na drugi korak.

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[playerid][pAdmin]);
return 1;
}
Onda dodajemo ovaj stock:
stock UserPath(playerid)
{
    new file[200],playername[MAX_PLAYER_NAME];
    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[playerid][pAdmin]);
     INI_Close(File);
     return 1;
}
Kad dodate ovaj stock, pod OnPlayerDisconnect dodajte ovo:
SavePlayer(playerid);
Sa ovim smo zavrsili ucitavanje i zacuvljavanje admina, sad idemo na sledeci korak.

Korak 3.Kreiranje komanda za davanje admina.
CMD:postaviadmina(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] >= 1338 || IsPlayerAdmin(playerid)) //Ovde proveravamo dali je igrac sta zeli da koristi ovu komandu je admin
{
new player, alevel, string[256]; //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[player][pAdmin] = 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[i][pAdmin] >= 1 && PlayerInfo[i][pAdmin] < 1339)
    {
        new admtext[64], sendername[MAX_PLAYER_NAME], string[128];
          if(PlayerInfo[i][pAdmin] == 1338) { admtext = "Owner"; }
              else if(PlayerInfo[i][pAdmin] == 1337) { admtext = "Head Admin"; }
        else if(PlayerInfo[i][pAdmin] == 4) { admtext = "Leader Admin"; }
else if(PlayerInfo[i][pAdmin] == 3) { admtext = "Admin Level 3"; }
else if(PlayerInfo[i][pAdmin] == 2) { admtext = "Admin Level 2"; }
else if(PlayerInfo[i][pAdmin] == 1) { admtext = "Admin Level 1"; }
else { admtext = "Admin Level 1"; }
GetPlayerName(i, sendername, sizeof(sendername));
sendername[strfind(sendername,"_")] = ' ';
if(AdminDuty[i] == 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[MAX_PLAYER_NAME], string[160]; //tu definiramo admin sta posalje text i string
    if(!(PlayerInfo[playerid][pAdmin] >= 1)) return SendClientMessage(playerid,-1,"[INFO]Nemozete koristi ovu komandu."); //Ovde proveravamo dali igrac sta koristi komandu je admin
    if(isnull(params)) return SCM(playerid,-1,"/a [text]"); //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[playerid][pAdmin],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[i][pAdmin] >= 1)
    {
SendClientMessage(i, color, string);
}
}
}
}

Sada na red je admin duznost, da bi komanda radila normalno potrebno je dodadi ovo pri vrh new AdminDuty[MAX_PLAYERS]; i ovo pod public OnPlayerConnect AdminDuty[playerid] = 0;
Sad idemo na komandu:
CMD:adminduty(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] == 0) return SCM(playerid, -1, "Nemozes koristiti ovu komandu");
new string[256];
if(AdminDuty[playerid] == 0)
{
format(string,sizeof(string),"Administrator %s je na duznosti",GetName(playerid));
SendClientMessageToAll(-1,string);
AdminDuty[playerid] = 1;
SetPlayerArmour(playerid, 99.0);
SetPlayerHealth(playerid, 99.0);
}
else if(AdminDuty[playerid] == 1)
{
SetPlayerArmour(playerid, 0);
SetPlayerHealth(playerid, 99.0);
format(string,sizeof(string),"Administrator %s vise nije na duznost",GetName(playerid));
SendClientMessageToAll(-1,string);
AdminDuty[playerid] = 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.
Poslednja Izmena: Jul 21, 2014, 07:45:22 PRE PODNE od Schwarz

dobar je tut , pocetnicima lako pomoci ce :D
~ Server Pernambucho Roleplay ~
Forum : ~ http://pernambucho.com/ ~
Facebook :~ https://www.facebook.com/events/331686430351597 ~

Owner : JA :D

Citat: arnel avdic poslato Jul 20, 2014, 00:51:02 PRE PODNE
dobar je tut , pocetnicima lako pomoci ce :D
je l si siguran da ce ovo trebati pocetnicima ? ah samo spamate nista ne razmisljate o cemu pisete..

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:

for(new i = 0; i < MAX_PLAYERS; i++)
IsPlayerConnected


Takodje i izvedena funkcija GetName nije nigdje napisana, ma copy/paste. :D


kopirano iz up moda...


[FS]Rent
[FS] Vremenska prognoza
[TuT] PayDay
[TuT]PayDay sistem[UPDATED]
Moja Biografija

Respect:Mr.Gagi,FlasH,Streetboy,David (Sabljak) A.k.A SABO(T)
ÄŒovjek nije stvoren za poraze, moze biti unisten, ali ne i pobjeÄ'en!

IsPlayerConnected je nepotrebna funkcija jer nema logike da to proveravas.

jednostavno if(konstruktor == INVALID_PLAYER_ID) jer nemozes dobiti id ako nisi povezan na server.
69


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 ?