[COD] Save & Load de admins [ONs/OFFs]
#1

Pessoal, percebi que estavam prescisando de um Save e Load de admins, sem ser apenas ON.
Entгo resolvi facilitar a vocкs e postarei o MEU code. (Se usarem, coloquem crйditos por favor)
A unica coisa que nгo fiz, foi o split que encontrei em um FS no forum (nгo lembro qual).

Aqui vai o CODE:

No topo:
pawn Код:
#define MAX_ADMINS 50
#define MAX_ADMIN_STR 512
#define amarelo 0xFFFF00AA
#define vermelhoescuro 0xAA3333AA
#define branco 0xFFFFFFAA
#define vermelho 0xFF0000AA

OnPlayerConnect(Para sistema fixo) || Obs: Caso use RCON, acho melhor usar um SetTimer!:

pawn Код:
if(IsPlayerAdmin(playerid)) {SaveAdminSZ(playerid);}

Comando:
pawn Код:
if(strcmp("/adml", cmdtext, true, 10) == 0)
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,vermelhoescuro,"Comando apenas para Admins RCON!");
    LoadShowAdminsSZ(playerid);
    return 1;
}

Comando para apagar o arquivo:
pawn Код:
if(strcmp("/reloadadm", cmdtext, true, 10) == 0)
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,vermelhoescuro,"Comando apenas para Admins RCON!");
    fremove("admins.ini");
    SendClientMessage(playerid,amarelo,"SERVER: Lista de admins apagada! [By: SuB_ZeRo0_]");
    new File:fhandle = fopen("admins.ini",io_write);
    fclose(fhandle);
    return 1;
}

Stock's: (Entre as public's)


SPLIT:
pawn Код:
stock split(const strsrc[], strdest[][], delimiter)
{
    new i, li;
    new aNum;
    new len;

    while(i <= strlen(strsrc)){
      if(strsrc[i]==delimiter || i==strlen(strsrc)){
        len = strmid(strdest[aNum], strsrc, li, i, 128);
        strdest[aNum][len] = 0;
        li = i+1;
        aNum++;
        }
        i++;
    }
    return 1;
}

Stock's necessбrias:
pawn Код:
stock SaveAdminSZ(playerid) {
    if(!fexist("admins.ini")) {new File:New=fopen("admins.ini",io_write);fclose(New);}
    if(fexist("admins.ini")) {
    new strsave[30],strload[MAX_ADMIN_STR],nameadm[25];
    new File:New=fopen("admins.ini",io_read);
    fread(New,strload);
    fclose(New);
    GetPlayerName(playerid,nameadm,25);
    if(strfind(strload,nameadm)==-1) {
    new File:Neww=fopen("admins.ini",io_append);
    format(strsave,30,"%s|",nameadm);
    fwrite(Neww,strsave);
    fclose(Neww);}}
    else {SendClientMessage(playerid,vermelho,"SERVER: Erro ao salvar seu nome a lista de admins!");}
    return 1;
}
pawn Код:
stock LoadShowAdminsSZ(playerid) {
    if(!fexist("admins.ini")) {new File:New=fopen("admins.ini",io_write);fclose(New);}
    if(fexist("admins.ini")) {
    new load[MAX_ADMINS][32],str[MAX_ADMIN_STR],nick[25],stradm[90];
    SendClientMessage(playerid,vermelhoescuro,"Lista de admins no servidor: [By: SuB_ZeRo0_]");
    new File:file = fopen("admins.ini",io_read);
    if (file)
    {
      while (fread(file, str, sizeof(str)))
      {
        for(new e=0;e<MAX_ADMINS;e++) {
        split(str, load, '|');
            strmid(nick, load[e], 0, strlen(load[e]), 25);

            format(stradm,sizeof(stradm),"Admin %s [RCON]",nick);
            SendClientMessage(playerid,branco,stradm);
            }}}
    fclose(file);}
    else {SendClientMessage(playerid,vermelho,"SERVER: Erro ao carregar a lista de admins!");}
    return 1;
}


Espero que gostem e faзam um bom uso!

Expliacaзгo: Ao entrar o servidor, ele vк se vocк jб estб registrado no arquivo, caso nгo, ele o registrarб!
Quando alguem fizer o /adml, vai ler todos os nomes registrados.
Usando /reloadadm vocк irб zerar o arquivo, caso prescise tirar alguem da lista e nгo possa retirar manualmente.

Bom proveito e nгo esqueзa os crйditos!
Qualquer BUG, avise-me.

OBSERVAЗХES!:

Para mudar o mбxima de admins que poderгo ser salvos mude: MAX_ADMINS
Para mudar o mбximo do tamanho da linha dos admins no arquivo: MAX_ADMIN_STR
Onde se encontra a pasta? Em: scriptfiles/admins.ini
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: