[Tutorial] Sistema de "/AFK"
#1

Requisitos:

Код:
Include zcmd - Download
Comeзando:

Passo 1: Primeiramente vamos por a include "zcmd"
pawn Код:
#include <zcmd>
Passo 2: Vamos criar uma variбvel global para checar se o player estб ou nгo AFK! (lembrando: coloque no topo do gm)

pawn Код:
new bool:PlayerAFK[MAX_PLAYERS];
Passo 3: Iremos iniciar o comando (CMD:"comando"(playerid, params[]) )

pawn Код:
CMD:afk(playerid, params[])
Passo 4: Setaremos algumas variбveis que iremos precisar ( Nome[MAX_PLAYER_NAME] = variбvel para armazenar o nome do player, string[64] = vamos usar para armazenar a mensagem que iremos enviar ao player. - [MAX_PLAYER_NAME] e [64] й o tamanho da cйlula de cada array)
O nosso cуdigo ficarб da seguinte forma:

pawn Код:
CMD:afk(playerid, params[])
{ // Nгo esquece de abrir a chave
    new Nome[MAX_PLAYER_NAME], string[64];
Passo 5: vamos pegar o nome do player e armazenar em "nome"
nosso cуdigo entгo ficara assim:

pawn Код:
CMD:afk(playerid, params[])
{
    new Nome[MAX_PLAYER_NAME], string[64];
    GetPlayerName(playerid, Nome, MAX_PLAYER_NAME);
Passo 6: Vamos checar se ele estб ou nгo AFK (para isso vamos criar uma condiзгo "if" , que ficara da seguinte forma: if(PlayerAFK[playerid] == false) )
Nosso cуdigo passara a ficar dessa forma:

pawn Код:
CMD:afk(playerid, params[])
{
    new Nome[MAX_PLAYER_NAME], string[64];
    GetPlayerName(playerid, Nome, MAX_PLAYER_NAME);
    if(PlayerAFK[playerid] == false) // caso o player NВO esteja Afk
    {

    }
    else // Caso o player ESTEJA Afk
    {
       
    }
Passo 7: Vamos por oque ira acontecer caso ele esteja AFK e oque ira acontecer caso ele nгo esteja:
Caso ele NГO esteja Afk: iremos fazer ele ficar afk.. ( setaremos a variavel "PlayerAFK" para true, congelaremos ele, e mandaremos uma mensagem para o servidor avisando que ele esta afk)

Caso ele esteja: iremos fazer ele sair do afk.. (setaremos a variavel "PlayerAFK" para false, descongelaremos ele, e mandaremos uma mensagem para o servidor avisando que ele nгo esta mais afk)

Vou por o cуdigo e explicar direto nele...

pawn Код:
CMD:afk(playerid, params[])
{
    new Nome[MAX_PLAYER_NAME], string[64];
    GetPlayerName(playerid, Nome, MAX_PLAYER_NAME);
    if(PlayerAFK[playerid] == false) // caso o player NВO esteja Afk
    {
        PlayerAFK[playerid] = true; // seta PlayerAFK para verdadeiro
        TogglePlayerControllable(playerid, 0); // congela o player
        format(string, sizeof(string), "%s Estб Afk", Nome); // formata a string
        SendClientMessageToAll(-1, string); // envia a string para todos os player do servidor - (-1 й a cor branca)
    }
    else // Caso o player ESTEJA Afk
    {
        PlayerAFK[playerid] = false; // seta PlayerAFK para falso
        TogglePlayerControllable(playerid, 1); // descongela o player
        format(string, sizeof(string), "%s Nгo estб mais afk", Nome); //explicado acima
        SendClientMessageToAll(-1, string);// explicado acima
    }
Passo 8: Iremos por o return e fechar a primeira chave lб em cima...
No fim o comando ficara da seguinte forma:

pawn Код:
CMD:afk(playerid, params[])
{
    new Nome[MAX_PLAYER_NAME], string[64];
    GetPlayerName(playerid, Nome, MAX_PLAYER_NAME);
    if(PlayerAFK[playerid] == false)
    {
        PlayerAFK[playerid] = true;
        TogglePlayerControllable(playerid, 0);
        format(string, sizeof(string), "%s Estб Afk", Nome);
        SendClientMessageToAll(-1, string);
    }
    else
    {
        PlayerAFK[playerid] = false;
        TogglePlayerControllable(playerid, 1);
        format(string, sizeof(string), "%s Nгo estб mais afk", Nome);
        SendClientMessageToAll(-1, string);
    }
    return 1;
}
Passo 9: Na Callback "OnPlayerConnect" nуs iremos setar o valor da variбvel "PlayerAFK" para "false"
No caso ficara assim:

pawn Код:
public OnPlayerConnect(playerid)
{
    PlayerAFK[playerid] = false;
    return 1;
}
O CУDIGO FINAL FICARA DA SEGUINTE FORMA:

pawn Код:
#include <zcmd>

new bool:PlayerAFK[MAX_PLAYERS]; // Topo do gm

public OnPlayerConnect(playerid)
{
    PlayerAFK[playerid] = false;
    return 1;
}

CMD:afk(playerid, params[])
{
    new Nome[MAX_PLAYER_NAME], string[64];
    GetPlayerName(playerid, Nome, MAX_PLAYER_NAME);
    if(PlayerAFK[playerid] == false)
    {
        PlayerAFK[playerid] = true;
        TogglePlayerControllable(playerid, 0);
        format(string, sizeof(string), "%s Estб Afk", Nome);
        SendClientMessageToAll(-1, string);
    }
    else
    {
        PlayerAFK[playerid] = false;
        TogglePlayerControllable(playerid, 1);
        format(string, sizeof(string), "%s Nгo estб mais afk", Nome);
        SendClientMessageToAll(-1, string);
    }
    return 1;
}

Crйditos:

Код:
Zeex - por ter criado a include ZCMD
Reply
#2

Nгo esta Muito Bem Explicado e jб existe Muitos deste Sistema,Tanto que postaram um a Pouco Tempo.
Mas Oque Importa й a Intenзгo,Continue Estudando Para que possa trazer Tutoriais Melhores e Mais Explicados essa й Minha Dica .
@edit
E mais uma dica o comando Nгo necessitaria de params pois vocк nгo esta utilizando mas o resto estб bom.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)