[Tutorial] Sistema de admin
#1

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 Код:
#include <zcmd>
#include <sscanf>
#include <DOF2>
1,1 . Coloque estas defines no inicio do GameMode:
pawn Код:
#define Moderador 1
#define Guardiao  2
#define Admin   3
#define SubDono     4
#define Dono      5
2. Coloque isto no comeзo do GameMode:
pawn Код:
enum PlayerAdmin
{
    Level
}
new pAdmin[MAX_PLAYERS][PlayerAdmin];
Explicaзгo
pawn Код:
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 Код:
DOF2_Exit();
Explicaзгo
pawn Код:
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 Код:
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 Код:
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 Код:
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 Код:
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 Код:
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 Код:
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 Код:
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 Код:
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 Код:
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 Код:
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 Код:
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 Код:
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

Reply
#2

Legal, mas acho que jб tem algo do tipo no forum ... Sу acho.
Reply
#3

Ficou mal explicado em relaзгo a complexidade, sem tirar que jб existem sistemas de ADMINS completos por ai, й mais interessante para os novatos que pretendem usar em servidor mesmo baixar e modificar / implementar do que criar um do zero.
Reply
#4

Muito bom, mas aquela stock GetLevelAdmin nгo й preciso, seria a mesma coisa que

pawn Код:
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 %d para o %s", level, ganhou);
    SendClientMessage(playerid, 0x00F6F6AA, string);
    format(string2, sizeof(string2), "O admin %s deu admin level %d para vocк.", deu , level);
    SendClientMessage(id, VERDE, string2);
    pAdmin[id][Level] =  level;
    return 1;
}
Reply
#5

Obrigado pelos comentбrios, Willian ,eu sou novato ainda, eu expliquei um pouco do que eu sei ,rs ,mas obrigado a todos mesmo assim.

@iSmirnoff nossa eu nem pensei nisso kkk.
Reply
#6

@xxRaioxx ficou bom o tutorial mas no proximo tutorial ver se melhorar um pouco na explicaзгo beleza do jeito que o willian й ismirnoff falo.

@Juniiro3 й bom relembrar alguns tutoriais de vez em quando pra quando precisarem nгo ficar na duvida ai nй nгo ? =)
Reply
#7

Fico mal organizado .
Reply
#8

Se esqueceu de colocar o formato do arquivo no final da formataзгo da variбvel "arquiva".
Assim, do jeito que vocк deixou, o formato do arquivo o Windows nгo abre!

Fora isso, уtimo tutorial!


PHP код:
CallbackOnPlayerConnect OnPlayerDisconnect
format
(arquivasizeof(arquiva), "Admins/%s.ini"playernome); //Formata o local da pasta que vai salvar as contas dos admins . 
Reply
#9

Pessoal eu tenho GM baixado da net q tento logar admin e nao da
tipo logo na /rcon login senha da certo porem nao consigo /setaradmin a mim msm
vou em scriptfiles na pasta contas e altero o lvl admin la
quando eu logo no gm some o q foi alterado.
nao sei mais o q fazer. help
Reply
#10

Quote:
Originally Posted by castelhano
Посмотреть сообщение
Pessoal eu tenho GM baixado da net q tento logar admin e nao da
tipo logo na /rcon login senha da certo porem nao consigo /setaradmin a mim msm
vou em scriptfiles na pasta contas e altero o lvl admin la
quando eu logo no gm some o q foi alterado.
nao sei mais o q fazer. help
Envie-nos o cуdigo /setaradmin.
Reply
#11

Parabens Bem Util +rep

Mapas fale comigo

__________________________________________________ ______




Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)