Thread: [Tutorial] Sistema de admin
View Single Post
Old 21/08/2013, 06:05 PM   #1
xxRaioxx
Huge Clucker
 
xxRaioxx's Avatar
 
Join Date: Jun 2013
Location: Brazil, Minas Gerais, Varginha
Posts: 284
Reputation: 5
Default Sistema de admin

Olá,estou criando este tutorial para alguns que ainda não tem o sistema de administração, os comandos vão estar em zCMD!

Bom vamos lá!

1. Coloque estas include no começo do GameMode , serão necessárias:
pawn Code:
#include <zcmd>
#include <sscanf>
#include <DOF2>

1,1 . Coloque estas defines no inicio do GameMode:
pawn Code:
#define Moderador 1
#define Guardiao  2
#define Admin   3
#define SubDono     4
#define Dono      5

2. Coloque isto no começo do GameMode:
pawn Code:
enum PlayerAdmin
{
    Level
}
new pAdmin[MAX_PLAYERS][PlayerAdmin];

Explicação
pawn Code:
enum PlayerAdmin // Isto o ( enum ) é chamado Enumeradores, serve pra armazenar valores, como o LEVEL que armazena o level do admin.
{
    Level
}
new pAdmin[MAX_PLAYERS][PlayerAdmin]; // Isso ( new ) é uma Variável , é usada para utilizar o Enumerador PlayerAdmin .

3. Coloque isso em OnGamemodeExit ou se for FS (OnFilterScriptExit) .
pawn Code:
DOF2_Exit();

Explicação

pawn Code:
DOF2_Exit(); // Isso é pra quando o samp-server.exe fechar,a include também,e também  nunca se esqueça de colocar isso! Pode dar alguns warnings ou não funcionar a include direito!

4. Agora vamos criar os comandos, como disse no início, vamos usar zCMD, então no final do GameMode coloque isso:
pawn Code:
CMD:daradmin(playerid, params[])
{
    new id, level, string[256], string2[256], ganhou[MAX_PLAYER_NAME], deu[MAX_PLAYER_NAME];
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xAD0000AA, "{00E5FF}Você não está autorizado.");
    if(sscanf(params, "ud", id, level)) return SendClientMessage(playerid, 0xAD0000AA, "Use /daradmin [ID] [LEVEL]");
    if (level < 0 || level > 5) return SendClientMessage(playerid, 0xFF0000FF, "Level inválido. Use de 1 á 5 .");
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xAD0000AA, "Este jogador não está online.");
    GetPlayerName(id, ganhou, sizeof(ganhou));
    GetPlayerName(playerid, deu, sizeof(deu));
    format(string, sizeof(string), "Você deu admin level %s para o %s", GetLevelAdmin(level), ganhou);
    SendClientMessage(playerid, 0x00F6F6AA, string);
    format(string2, sizeof(string2), "O admin %s deu admin level %s para você.", deu , GetLevelAdmin(level));
    SendClientMessage(id, VERDE, string2);
    pAdmin[id][Level] =  level;
    return 1;
}

Explicação
pawn Code:
CMD:daradmin(playerid, params[])
{
    new id, level, string[256], string2[256], ganhou[MAX_PLAYER_NAME], deu[MAX_PLAYER_NAME]; // Variáveis que vamos usar no comando .
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xAD0000AA, "{00E5FF}Você não está autorizado."); // Verifica se está na logado na rcon, se não, vai manda a mensagem "Você não está autorizado." .
    if(sscanf(params, "ud", id, level)) return SendClientMessage(playerid, 0xAD0000AA, "Use /daradmin [ID] [LEVEL]"); // Estamos usando o sscanf, este comando do sscanf server para usar um parâmetro.
    if (level < 1 || level > 5) return SendClientMessage(playerid, 0xFF0000FF, "Level inválido. Use de 1 á 5 ."); // Isso verifica se você digitou o level na forma correta, se não manda a mensagem "Level inválido. Use de 1 á 5 ."
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xAD0000AA, "Este jogador não está online."); // Verifica se o id está online, se não, envia a mensagem "Este jogador não está online."
    GetPlayerName(id, ganhou, sizeof(ganhou)); // Isso serve para pegar o nome do player.
    GetPlayerName(playerid, deu, sizeof(deu));  // Isso serve para pegar o nome do player.
    format(string, sizeof(string), "Você deu admin level %s para o %s", GetLevelAdmin(level), ganhou); // Formata a mensagem para ser enviada .
    SendClientMessage(playerid, 0x00F6F6AA, string); //Envia a mensagem formatada a cima .
    format(string2, sizeof(string2), "O admin %s deu admin level %s para você.", deu , GetLevelAdmin(level)); // Formata a mensagem para ser enviada .
    SendClientMessage(id, VERDE, string2); //Envia a mensagem a cima.
    pAdmin[id][Level] =  level; //Muda o level do player para o conforme digitado.
    return 1;
}

5. Agora vamos criar o sistema de salvamento, em DOF2 .
Em OnPlayerDisconnect coloque isso:
pawn Code:
new arquiva[34], playernome[MAX_PLAYER_NAME];
    GetPlayerName(playerid, playernome, sizeof(playernome));
    format(arquiva, sizeof(arquiva), "Admins/%s", playernome);
    if(DOF2_FileExists(arquiva))
    {
        DOF2_SetInt(arquiva, "Level", pAdmin[playerid][Level]);
        DOF2_SaveFile();
    }
    else
    {
        DOF2_CreateFile(arquiva);
        DOF2_SetInt(arquiva, "Level", pAdmin[playerid][Level]);
        DOF2_SaveFile();
    }

Agora em OnPlayerConnect:
pawn Code:
new arquivi[34], nomeplayer[MAX_PLAYER_NAME];
    GetPlayerName(playerid, nomeplayer, sizeof(nomeplayer));
    format(arquivi, sizeof(arquivi), "Admins/%s", nomeplayer);
    pAdmin[playerid][Level] = DOF2_GetInt(arquivi, "Level");

Explicação
pawn Code:
new arquiva[34], playernome[MAX_PLAYER_NAME]; //Variáveis que vamos usar .
    GetPlayerName(playerid, playernome, sizeof(playernome)); //Geta o nome do player .
    format(arquiva, sizeof(arquiva), "Admins/%s", playernome); Formata o local da pasta que vai salvar as contas dos admins .
    if(DOF2_FileExists(arquiva)) //Se existir
    {
        DOF2_SetInt(arquiva, "Level", pAdmin[playerid][Level]); //Criamos o valor de Level na Enum PlayerAdmin,e se a conta existir,atualiza o valor no aquivo da pasta Admin .
        DOF2_SaveFile(); //Salva o arquivo .
    }
    else //Se a conta não existir
    {
        DOF2_CreateFile(arquiva); //Cria o arquivo
        DOF2_SetInt(arquiva, "Level", pAdmin[playerid][Level]); //Criamos o valor de Level na Enum PlayerAdmin,e se a conta existir,atualiza o valor no aquivo da pasta Admin .
        DOF2_SaveFile(); //Salva o arquivo .
    }

pawn Code:
new arquivi[34], nomeplayer[MAX_PLAYER_NAME]; //Variáveis que iremos usar .
    GetPlayerName(playerid, nomeplayer, sizeof(nomeplayer)); Geta o nome do player
    format(arquivi, sizeof(arquivi), "Admins/%s", nomeplayer); //Formata o local da pasta que vai salvar as contas dos admins .
    pAdmin[playerid][Level] = DOF2_GetInt(arquivi, "Level"); //Isso vai carregar o valor Level na pasta Admins,no arquivo da conta do admin .

6. Teremos que criar uma stock para verificar o level que você digitou no comando /daradmin . No final do GameMode coloque isso:
pawn Code:
stock GetLevelAdmin(levelid)
{
    new str[50];
    if(levelid == 1)
    {
        str = "1";
    }
    else if (levelid == 2)
    {
        str = "2";
    }
    else if (levelid == 3)
    {
        str = "3";
    }
    else if (levelid == 4)
    {
        str = "4";
    }
    else if (levelid == 5)
    {
        str = "5";
    }
    return str;
}

Explicação
pawn Code:
stock GetLevelAdmin(levelid)
{
    new str[50]; Variável para enviar os levels abaixo.
    if(levelid == 1) //Verifica se o level é 1 .
    {
        str = "1"; //Vai mostrar a frase "O admin Nome deu admin level 1 para você."
    }
    else if (levelid == 2) //Verifica se o level é 2 .
    {
        str = "2"; //Vai mostrar a frase "O admin Nome deu admin level 2 para você."
    }
    else if (levelid == 3) //Verifica se o level é 3 .
    {
        str = "3"; //Vai mostrar a frase "O admin Nome deu admin level 3 para você."
    }
    else if (levelid == 4) //Verifica se o level é 4 .
    {
        str = "4"; //Vai mostrar a frase "O admin Nome deu admin level 4 para você."
    }
    else if (levelid == 5) //Verifica se o level é 5 .
    {
        str = "5"; //Vai mostrar a frase "O admin Nome deu admin level 5 para você."
    }
    return str;
}

7. Ops,esqueci de colocar o comando /tiraradmin , então vamos colocar em baixo do /daradmin
pawn Code:
CMD:tiraradmin(playerid, params[])
{
    new id, player[MAX_PLAYER_NAME], tirou[MAX_PLAYER_NAME], string[256], string2[256];
    if (pAdmin[playerid][Level] != 5) return SendClientMessage(playerid, 0xAD0000AA, "Você não está autorizado.");
    if (sscanf(params, "u", id)) return SendClientMessage(playerid, 0xAD0000AA, "Use /tiraradmin [ID] ");
    if (pAdmin[id][Level] < 1) return SendClientMessage(playerid, VERMELHO, "Este player não é admin ! ");
    GetPlayerName(id, player, sizeof(player));
    GetPlayerName(playerid, tirou, sizeof(tirou));
    format(string, sizeof(string), "Você tirou o admin do %s", player);
    SendClientMessage(playerid, 0x00F6F6AA, string);
    format(string2, sizeof(string2), "O admin %s tirou seu admin.", tirou);
    SendClientMessage(id, VERDE, string2);
    pAdmin[playerid][Level] = 0;
    return 1;
 }

Explicação

pawn Code:
CMD:tiraradmin(playerid, params[])
{
    new id, player[MAX_PLAYER_NAME], tirou[MAX_PLAYER_NAME], string[256], string2[256]; //Variáveis que iremos usar no comando .
    if (pAdmin[playerid][Level] != 5) return SendClientMessage(playerid, 0xAD0000AA, "Você não está autorizado."); // Verifica se é admin level 5, se não, vai manda a mensagem "Você não está autorizado." .
    if (sscanf(params, "u", id)) return SendClientMessage(playerid, 0xAD0000AA, "Use /tiraradmin [ID] "); // Estamos usando o sscanf, este comando do sscanf server para usar um parâmetro.
    if (pAdmin[id][Level] < 1) return SendClientMessage(playerid, VERMELHO, "Este player não é admin ! "); //Verifica se o player digitado no /tiraradmin é admin ou não .
    GetPlayerName(id, player, sizeof(player)); //Geta o nome do player .
    GetPlayerName(playerid, tirou, sizeof(tirou));//Geta o nome do player .
    format(string, sizeof(string), "Você tirou o admin do %s", player); //Formata a mensagem que será enviada .
    SendClientMessage(playerid, 0x00F6F6AA, string); //Envia a mensagem a cima .
    format(string2, sizeof(string2), "O admin %s tirou seu admin.", tirou); //Formata a mensagem que será enviada .
    SendClientMessage(id, VERDE, string2); //Envia a mensagem acima .
    pAdmin[playerid][Level] = 0; Muda o valor Level do player para 0 .
    return 1;
 }

8. Agora un comando que só o player admin possa usar:
pawn Code:
CMD:trazer(playerid, params[])
{
    if(pAdmin[playerid][Level] < 1) return SendClientMessage(playerid, VERMELHO,"Você não está autorizado.");
    new id, Float: x, Float: y, Float: z, string[256], string2[256], namep[MAX_PLAYER_NAME], namead[MAX_PLAYER_NAME];
    if(sscanf(params, "u", id)) return SendClientMessage(playerid, VERMELHO,"Use /trazer [ID]");
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid, VERMELHO,"Este jogador não está online.");
    GetPlayerName(playerid, namead, sizeof(namead));
    GetPlayerName(id, namep, sizeof(namep));
    format(string, sizeof(string), "Trouxe o player %s até você.", namep);
    format(string2, sizeof(string2), "O Administrador %s  trouxe você até ele.", namead);
    SendClientMessage(playerid, Azul_C, string);
    SendClientMessage(id, VERDE, string2);
    GetPlayerPos(playerid, x, y, z);
    SetPlayerPos(id, x+1, y+1, z);
    return 1;
}

Explicação

pawn Code:
CMD:trazer(playerid, params[])
{
    if(pAdmin[playerid][Level] < 1) return SendClientMessage(playerid, VERMELHO,"Você não está autorizado."); //Verifica se o player é admin se não for, manda a mensagem "Você não está autorizado." .
    new id, Float: x, Float: y, Float: z, string[256], string2[256], namep[MAX_PLAYER_NAME], namead[MAX_PLAYER_NAME]; //Variáveis que iremos usar no comando
    if(sscanf(params, "u", id)) return SendClientMessage(playerid, VERMELHO,"Use /trazer [ID]"); //Estamos usando o sscanf, este comando do sscanf server para usar um parâmetro.
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid, VERMELHO,"Este jogador não está online."); //Verifica se o player está online , se não envia a mensagem "Este jogador não está online." .
    GetPlayerName(playerid, namead, sizeof(namead)); //Pega o nome do player.
    GetPlayerName(id, namep, sizeof(namep)); //Pega o nome do player .
    format(string, sizeof(string), "Trouxe o player %s até você.", namep); //Formata a mensagem que será enviada .
    format(string2, sizeof(string2), "O Administrador %s  trouxe você até ele.", namead); //Formata a mensagem que será enviada .
    SendClientMessage(playerid, Azul_C, string); //Envia a mensagem a cima.
    SendClientMessage(id, VERDE, string2); //Envia a mensagem acima.
    GetPlayerPos(playerid, x, y, z); //Pega a posição do id digitado no comando .
    SetPlayerPos(id, x+1, y+1, z); //Muda a posição do player para o id digitado no comando .
    return 1;
}

Bem galera é isso,e o meu 3º tutorial, sem plágio,explicado, e espero que gostem !

Créditos:

xxRaioxx ( Eu , criador do tutorial )
Criador do zCMD
Criador do DOF2
Criador do sscanf

__________________

---

Tutoriais


FilterScripts

xxRaioxx is offline   Reply With Quote