SSGamers - Fique atualizado
Chegou o novo tema 6.1.3 / SSGames - Servidores online de qualidade - Inscreva-se Ja! é entre para nossa comunidade! - Ouça nossa web radio -Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.

Chat Noob - Comentado e detalhado

VanHelsing
--> Postador Iniciante
--> Postador Iniciante
Mensagens : 2
Moedas : 19
Data de inscrição : 07/09/2021
Idade : 21

Mensagem por VanHelsing Qui 9 Set 2021 - 13:52

Sistema de Chat Noob ('/n')





1 - Indrodução



Neste tópico irei apresentar um sistema de chat noob (/n) destinado à servidores RP/G, que inclui os comandos: /n e /mutarn.

______________________________________________________________________________________________________________

2- Apresentação das Includes que serão utilizadas


Utilizarei as includes SSCANF2 e ZCMD para fazer a gestão de comandos.


______________________________________________________________________________________________________________

3- Apresentação dos 'stocks' que serão utilizados


Utilizarei as seguintes stocks:
Código:
stock Nome(id)
{
    new name[MAX_PLAYERS_NAME];

    GetPlayerName(id,name,sizeof(name));

    return name;
}

stock CargoStaff(playerid)
{
    new Cargo[60];

    if(Staff[playerid] == 0 && !Helper[playerid])
    {
        Cargo = "Vazio";
    }
    else if(Staff[playerid] == 0 && Helper[playerid])
    {
        Cargo = "Helper";
    }
    else if(Staff[playerid] == 1)
    {
        Cargo = "Estagiário";
    }
    else if(Staff[playerid] == 2)
    {
        Cargo = "Moderador";
    }
    else if(Staff[playerid] == 3)
    {
        Cargo = "Administrador";
    }
    else if(Staff[playerid] == 4)
    {
        Cargo = "Coordenador";
    }
    else if(Staff[playerid] == 5)
    {
        Cargo = "Supervisor";
    }
    else if(Staff[playerid] == 6)
    {
        Cargo = "Gerente";
    }
    else if(Staff[playerid] == 7)
    {
        Cargo = "Diretor";
    }
    else if(Staff[playerid] ==
    {
        Cargo = "Fundador";
    }
    else if(Staff[playerid] == 9)
    {
        Cargo = "Desenvolvedor";
    }
    return Cargo;
}

OBS1: A stock 'Nome' é utilizada para pegar o nome do player de destino.


OB2: A stock 'CargoStaff' é utilizada para formatar o Cargo administrativo para texto.
     - No lugar das variáveis 'Staff[playerid]' e 'Helper[playerid]', utilize sua variável de salvamento do cargo administrativo.


______________________________________________________________________________________________________________

3- Tratamento das variáveis


No topo da gamemode:

Código:
new MutadoNoob[MAX_PLAYERS], DelayNoob[MAX_PLAYERS];


Na callback OnPlayerDisconnect:
Código:
public OnPlayerDisconnect(playerid,reason)
{
    MutadoNoob[playerid] = 0;
    DelayNoob[playerid] = 0;

    return 1;
}


______________________________________________________________________________________________________________

4- Definição dos comandos


Utilizarei o ZCMD juntamente com o SSCANF2 devido à dominância que tenho sobre os mesmos, sobretudo, sinta-se disposto à adaptar ao gerenciador de comandos de sua preferência



Código:
CMD:n(playerid, params[])
{
     if(IsPlayerConnected(playerid) || Logado[playerid])
     {
         new Index[64], Fala[120];

         /* ------------------------------------- Área das condicionais ---------------------------------------*/

         if(DelayNoob[playerid] >= gettime()) // Aqui verificamos se já se passou os 10 segundos de delay entre as mensagens.
         {
             SendClientMessage(playerid,0xFF4040AA,"Você só poder enviar outra mensagem no '/n' após 10 segundos.");
             return 1;
         }

         if(MutadoNoob[playerid]) // Verificamos se o player não está mudado
         {
             SendClientMessage(playerid,0xFF4040AA,"Você está impedido de enviar mensagens no 'Chat Noob'.");
             return 1;
         }

         // Sinta-se livre para adicionar condicionais pertinentes.
         /* ------------------------------------------------------------------------------------------------------------*/

         if(sscanf(params,"s[64]",Index)) return SendClientMessage(playerid,0xBFBFBFAA,"Uso correto: /n(oob) [duvida]"); // Atribuição do valor dos argumentos à variavel Index.

         if(strlen(Index) >= 65) // Verificamos se a mensagem não ultrapassa os 64 caracteres, para manter uma boa forma no chat.
         {
             SendClientMessage(playerid,0xFF4040AA,"O texto da mensagem de dúvida não pode conter mais de 64 caracteres!");
             return 1;
         }
         if(strlen(Index) <= 0) // Verificamos se a mensagem não é nula.
         {
             SendClientMessage(playerid,0xBFBFBFAA,"Uso correto: /n(oob) [duvida]");
             return 1;
         }

         if(Helper[playerid]) // Caso o player seja helper:
         {
             format(Fala,sizeof(Fala),"(Chat Noob) [Helper] %s [%d]: %s.",Nome(playerid),playerid,Index);
         }
         else if(Staff[playerid] >= 1) // Caso seja staff:
         {
             format(Fala,sizeof(Fala),"(Chat Noob) [%s] %s [%d]: %s.",CargoStaff(playerid),Nome(playerid),playerid,Index);
             // O primeiro %s retornara a string definida na stock CargoStaff.
             // Exemplo: Cargo staff = 4 -> '(Chat Noob) [Administrador] nome [id]: mensagem.'
             // Exemplo: Cargo staff = 9 -> '(Chat Noob) [Desenvolvedor] nome [id]: mensagem.'
         }
         else // Caso seja apenas um player comum.
         {
             format(Fala,sizeof(Fala),"(Chat Noob) %s [%d]: %s.",Nome(playerid),playerid,Index);
         }

         SendClientMessageToAll(0x008B8BAA,Fala); // Aqui eu utilizo o SendClientMessageToAll, mas caso prefira enviar mensagem apenas para os players logado, utilize:


         /*for(new i; i < MAX_PLAYERS; i++)
           {
               if(IsPlayerConnected(i) && Logado[i]) // Sendo 'Logado[i]' a sua variavel determinante se o player está logado.
               {
                   SendClientMessage(i,0x008B8BAA,Fala);
               }
           }*/

         if(Helper[playerid] || Staff[playerid] >= 1) // Caso o player possua algum nível administrativo, não recebera delay no chat.
         {
             goto NoDelay;
         }

         DelayNoob[playerid] = gettime()+10; // Modifique o '+10' de acordo com sua preferência de segundos de delay.
     }
     else
     {
         SendClientMessage(playerid,0xFF4040AA,"Você precisa estar conectado para executar comandos!");
     }

     NoDelay:

     return 1;
}

CMD:mutarn(playerid,params[])
{
     if(IsPlayerConnected(playerid) || Logado[playerid]) // Troque a variavel 'Logado[playerid]' pela sua que faça o gerenciamento com essa função.
     {
         if(Staff[playerid] >= 1 || Helper[playerid]) // Troque por suas variaveis que contenham os dados administrativos do player.
         {
             new ID,Fala[120];

             if(sscanf(params,"u",ID)) return SendClientMessage(playerid,0xBFBFBFAA,"Uso correto: /mutarn [id]"); // Atribuição dos valores dos argumentos à variavel

             if(!IsPlayerConnected(ID) || !Logado[ID])
             {
                 SendClientMessage(playerid,0xFF4040AA,"Este player não está conectado ao servidor.");
                 return 1;
             }
 
             if(!MutadoNoob[ID]) // Caso o player não esteja mutado...
             {
                 format(Fala,sizeof(Fala),"O(a) %s %s [%d] proibiu %s [%d] de enviar mensagens no 'Chat Noob'.",CargoStaff(playerid),Nome(playerid),playerid,Nome(ID),ID);
                 SendClientMessageToAll(0xCD0000AA,Fala);

                 SendClientMessage(ID,0xFF4040AA,"Você foi proibido de enviar mensagens no 'Chat Noob'.");
                 MutadoNoob[ID] = 1;

             }
             else // Caso esteja...
             {
                 format(Fala,sizeof(Fala),"O(a) %s %s [%d] permitiu %s [%d] enviar mensagens no 'Chat Noob' novamente.",CargoStaff(playerid),Nome(playerid),playerid,Nome(ID),ID);
                 SendClientMessageToAll(0xCD0000AA,Fala);

                 SendClientMessage(ID,0xFF4040AA,"Você foi permitido de enviar mensagens no 'Chat Noob'.");
                 MutadoNoob[ID] = 0;
             }
         }
         else
         {
             SendClientMessage(playerid,0xFF4040AA,"Ou você não é um staff, ou você não pode usar esse comando!");
         }
     }
     else
     {
         SendClientMessage(playerid,0xFF4040AA,"Você precisa estar conectado para executar comandos!");
     }
     return 1;
}


OBS: O sistema em questão não é o mais otimizado possível, caso tenho ideia de alguma otimização, poste aqui em baixo.



______________________________________________________________________________________________________________

Créditos: VanHelsing  - 09/08/21 - 13:51:41.

^
subir
Data/hora atual: Ter 21 Set 2021 - 0:07