Portal SAMP
[Tutorial] Sistema de Admin com DOF2 e ZCMD! - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Guias e Tutoriais (https://portalsamp.com/forumdisplay.php?fid=7)
+--- Tópico: [Tutorial] Sistema de Admin com DOF2 e ZCMD! (/showthread.php?tid=141)



Sistema de Admin com DOF2 e ZCMD! - Rochazig - 04/10/2020

SISTEMA DE ADMIN
Venho aqui tentar ensinar um sistema Admin básico para vocês usarem como base em sua GameMode!

Primeiramente vamos declarar as nossas includes!
Código PHP:
#include a_samp
#include ZCMD
#include DOF2
#include sscanf2 


1.1 - VARIÁVEIS

Vamos começar pelas variáveis, primeiro iremos criar um enum para colocar os dados do jogador!


Código PHP:
enum Player
{
    Admin


Explicação:

Um Enum é uma enumeração para suas variáveis, isso facilita para você não precisar criar por exemplo 50 variáveis para os dados do seu Jogador!

A Variável "Admin" que nós declaramos ela ira armazenar o Admin Level do seu Jogador!


Depois de ter declarado o Enum vamos criar uma New para que podemos utilizar essa variável que nós colocamos no nosso Enum!


Código PHP:
new pInfo[MAX_PLAYERS][Player]; 
 
O código terá que ficar assim:


Código PHP:
enum Player
{
    Admin
}

new 
pInfo[MAX_PLAYERS][Player]; 

Para que serve o "MAX_PLAYERS"?

O MAX_PLAYERS Pega a quantidade se slots do seu servidor e verifica os Jogadores Online, e com isso nós podemos utilizar o "playerid".

2 - COMANDO PARA SETAR O ADMIN!

Agora iremos fazer o comando para dar Admin ao Jogador! Para nós fazermos isso iremos usar a Include "ZCMD" e a "DOF2" Para armazenamos os Dados!
Obs: O ZCMD Pode ser substituído pelo Pawn.CMD!
Vamos fazer a base do comando!
Citar:
Código PHP:
CMD:daradmin(playeridparams[])
{
    return 1;

Está e a base de um comando usando a Include "ZCMD"! 
CMD:daradmin é o nome do comando ou seja o /daradmin!
o params são os parâmetros que serão usados junto do "sscanf2"!
Com a nossa base do Comando feito iremos declarar algumas variáveis dentro do Comando!
Código PHP:
CMD:daradmin(playeridparams[])
{
    new idlevelstrganhou[256], strdeu[256], nomedeu[MAX_PLAYER_NAME], nomeganhou[MAX_PLAYER_NAME];
    return 1;


Agora com as variáveis declaradas vamos fazer uma verificação com o Admin-Rcon para poder usar este comando!

Código PHP:
CMD:daradmin(playeridparams[])
{
    new idlevelstrganhou[256], strdeu[256], nomedeu[MAX_PLAYER_NAME], nomeganhou[MAX_PLAYER_NAME];
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid0xFF0000FF"Você não tem autorização para usar este comando!");

    return 1;


Agora vamos usar o "sscanf2" para verificar se o Autor do comando está digitando os valores certos!
Código PHP:
if(sscanf(params"dd"idlevel)) return SendClientMessage(playerid0xFF0000FF"Use /daradmin [ID] [LEVEL]"); 

O que é este "dd"?

Este "dd" são os tipos dos valores!

o "d" é um valor numérico!
o "i" é um valor inteiro!
o "f" é valor float, ou seja um número decimal!
o "s" é uma String!

Agora vamos fazer a função que da a tag de admin ao jogador!

Código PHP:
CMD:daradmin(playeridparams[])
{
    new idlevelstrganhou[256], strdeu[256], nomedeu[MAX_PLAYER_NAME], nomeganhou[MAX_PLAYER_NAME];
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid0xFF0000FF"Você não tem autorização para usar este comando!");
    if(sscanf(params"dd"idlevel)) return SendClientMessage(playerid0xFF0000FF"Use /daradmin [ID] [LEVEL]");
    
    
//FUNÇÃO
    
    GetPlayerName
(playeridnomedeuMAX_PLAYER_NAME);
    GetPlayerName(playeridnomeganhouMAX_PLAYER_NAME);
    
    format
(strganhousizeof(strganhou), "O Admin %s te deu Admin Level %d!"nomedeulevel);
    format(strdeusizeof(strdeu), "Voce deu Admin Level %d para %s[%d]"levelnomeganhouid);
    
    SendClientMessage
(playerid0x00FF00FFstrdeu);
    SendClientMessage(id0x00FF00FFstrganhou);
    
    pInfo
[id][Admin] = level;
    return 1;


O GetPlayerName pega o Nick do Jogador e coloca em uma variável, no nosso caso e a nomeganhou e nomedeu!

O %s e %d é a mesma premissa do "s" e "d" mas ali formata a mensagem com os dados: id do jogador e o level!

Agora vamos fazer uma stock para Salvar os dados!
Código PHP:
stock SalvarDados(playerid)
{
     new arquivo[40], pnome[MAX_PLAYER_NAME];
     GetPlayerName(playeridpnomeMAX_PLAYER_NAME);
     format(arquivosizeof(arquivo), "Contas/%s.ini"pnome); //Aqui nos formatamos o arquivo aonde será guardado a conta do nosso jogador!

    if(!DOF2_FileExists(arquivo)) DOF2_CreateFile(arquivo// Aqui nos verificamos se a conta do jogador existe, se não cria uma!
    DOF2_SetInt(arquivo"Admin"pInfo[playerid][Admin]);
    DOF2_SaveFile();
    return 1// returna true


Agora vamos Colocar a Função"DOF2_Exit();" e a SalvarDados no OnGameModeExit()
Código PHP:
public OnGameModeExit()
{
    DOF2_Exit();
    for(new 0MAX_PLAYERSi++) // Um loop para pegar todos os Jogador Onlines!
    {
        SalvarDados(i); // Salva os Dados de todos os Jogadores que estiverem Online!
    }
    return 1


E vamos colocar o SalvarDados no Nosso Comando também!
Código PHP:
CMD:daradmin(playeridparams[])
{
    new idlevelstrganhou[256], strdeu[256], nomedeu[MAX_PLAYER_NAME], nomeganhou[MAX_PLAYER_NAME];
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid0xFF0000FF"Você não tem autorização para usar este comando!");
    if(sscanf(params"dd"idlevel)) return SendClientMessage(playerid0xFF0000FF"Use /daradmin [ID] [LEVEL]");
    
    
//FUNÇÃO
    
    GetPlayerName
(playeridnomedeuMAX_PLAYER_NAME);
    GetPlayerName(playeridnomeganhouMAX_PLAYER_NAME);
    
    format
(strganhousizeof(strganhou), "O Admin %s te deu Admin Level %d!"nomedeulevel);
    format(strdeusizeof(strdeu), "Voce deu Admin Level %d para %s[%d]"levelnomeganhouid);
    
    SendClientMessage
(playerid0x00FF00FFstrdeu);
    SendClientMessage(id0x00FF00FFstrganhou);
    
    pInfo
[id][Admin] = level;
    SalvarDados(id); //Salva os Dados do Jogador!
    return 1;



Esse foi o tutorial, espero que vocês tenham gostado! Ainda estou me acostumando a esse novo fórum então foi bem simples esse tutorial Big Grin

Podem deixar críticas afinal ninguém e perfeito!

Obs: Não consegui upar as includes aqui sorry :/


RE: Sistema de Admin com DOF2 e ZCMD! - Silvazz Wallkys - 07/09/2021

Muito Bom parceiro