[Tutorial] Como Criar um Sistema de AFK(Explicado Bem)
#1

Tutorial Sistema de AFK


Requesito:
Код:
zCMD - Include - Download
Crйditos:
Код:
Zeex - zCMD
Comeзe o Tutorial

Passo 1:Primeiramente seta essa vбriavel Global(Link Do Tutorial de Vбriaveis Crйditos - rjj!)
Setamos Embaixos atй das includes usa:


pawn Код:
#include <a_samp>
#include <zcmd>

new AFKJogador[MAX_PLAYERS];//Coloca ISSO AQUI OOOH <<

public OnGameModeInit()
{
   return 1;
}
Passo 2:Vamos Inicar o Comando Como Sempre(no zCMD) :

pawn Код:
CMD:
Passo 3:Complementaremos com o Comando, Player ID e os Parametros.(Usado tambйm para sscanf2)

pawn Код:
CMD:afk(playerid, params[])
Passo 4:Agora tem que abrir os parкnteses para comeзar o comando.

pawn Код:
CMD:afk(playerid, params[])
{
Passo 5:Vamos comeзar a setar as Vбriaveis Locais.

pawn Код:
new Nome[MAX_PLAYER_NAME], Linha[100];
Passo 6:Explicando, new= Cria uma nova vбriavel, a vбriavel Nome tem [MAX_PLAYER_NAME] que й o nome dele todos(MAXIMO NOME DO JOGADOR)
e a vбriavel Linha й a nossa "String" Que vamos formatar ela, e o "[100]" й o tamanho da cйlula(nгo tenho contador direitinho)
Agora vamo comeзar com os "if"


pawn Код:
if(AFKJogador[playerid] == 1) return SendClientMessage(playerid, -1, "Vocк jб estб AFK!");
Passo 7:o AFKJogador[playerid] == 1 ele verifica se o jogador jб estб afk e returna mandando a mensagem que jб estб AFK
agora verifica se ele nгo estб AFK para ficar AFK!


pawn Код:
if(AFKJogador[playerid] == 0)
Agora verifica se ele nгo estб AFK,e se nгo tiver continua...

Passo 8:Agora Vamo Getar o Nome do jogador

pawn Код:
GetPlayerName(playerid, Nome, sizeof(Nome));
Geta o Jogador estб funзгo

Passo 9:Agora vamo formatar a Frase com a Vбriavel que setamos como "Linha",e criar a frase que ele estб AFK.

pawn Код:
format(Linha, sizeof(Linha), "%s Estб Afk", Nome);
Passo 10:Format= formata a linha
(Linha, sizeof(Linha), = Formata especialmente a Vбriavel "Linha"
%s = Vai ser trocada pelo nome depois, e depois vem a frase...
logo depois da vнrgula vem o "Nome" E a vбriavel que fizemos "Nome" e Getamos o Nome,Vai ser mandada para o %s
Agora vamo deixar ele parado para nгo se mover


pawn Код:
TogglePlayerControllable(playerid, 0);
Passo 11:A Funзгo "TogglePlayerControllable" Define se um jogador pode controlar o seu personagem ou nгo. O jogador tambйm nгo serб capaz de mover a sua cвmera.
e o playerid e o jogador, e define 0 ou 1(0 Ele fica parado e 1 Ele volta a mover)
Agora nos setamos para ele ficar AFK


pawn Код:
AFKJogador[playerid] = 1;
Passo 12:Vamo Mandar agora mandar a formataзгo da Linha que fizemos acima mandar para todos

pawn Код:
SendClientMessageToAll(-1, Linha);
Passo 13:A Funзгo "SendClientMessageToAll" Manda a mensagens para todos,o -1 й a cor(vocк pode alterar na format ou troca o -1.
e manda a formataзгo que fizemos "Linha" enviar
e depois para terminar sу fazer o "return 1;"

pawn Код:
return 1;
}
Feito

Comando para Voltar

pawn Код:
CMD:voltarafk(playerid, params[])
Passo 1:Sу trocar o nome igual no outro jб expliquei.

pawn Код:
new Nome[24], Linhas[100];
Passo 2:Cria as Vбriaveis Locais que nem o de cima.

pawn Код:
if(AFKJogador[playerid] == 0) return SendClientMessage(playerid, -1, "Vocк Nгo estб AFK!");
Passo 3:Agora verifica se ele nгo estб AFK e volta dizendo a mensagem que nгo estб AFK

pawn Код:
if(AFKJogador[playerid] == 1)
Passo 4:Agora verifica se ele estб AFK e se tiver Continua o comando..

pawn Код:
GetPlayerName(playerid, Nome, sizeof(Nome));
Passo 5:Geta o Jogador estб funзгo

pawn Код:
format(Linha, sizeof(Linha), "%s Voltou ao Servidor", Nome);
Passo 6:Agora formata a linha como jб expliquei lб em cima,sу que a muda й a mensagem(que ele voltou)

pawn Код:
TogglePlayerControllable(playerid, 1);
Passo 7:Agora como expliquei lб em cima esta funзгo define se vocк se mova e nгo mova(o 1 Permite que ele possa mover)

pawn Код:
AFKJogador[playerid] = 0;
Passo 8:Agora seta o Jogador para que nгo esteja mais AFK.

pawn Код:
SendClientMessageToAll(-1, Linha);
Passo 9:Agora Manda a Mensagem que ele voltou ao servidor como jб expliquei ele formata a linha e manda para todos

pawn Код:
return 1;
}
Feito

Agora o Comando Todo Pronto

pawn Код:
#include <a_samp>
#include <zcmd>


new AFKJogador[MAX_PLAYERS];

CMD:afk(playerid, params[])
{
    new Nome[24], String[120];
    if(AFKJogador[playerid] == 1) return SendClientMessage(playerid, -1, "Vocк Jб estб AFK");
    if(AFKJogador[playerid] == 0)
    GetPlayerName(playerid, Nome, sizeof(Nome));
    format(String, sizeof(String), "%s Estб Afk", Nome);
    TogglePlayerControllable(playerid, 0);
    AFKJogador[playerid] = 1;
    SendClientMessageToAll(-1, String);
    return 1;
}
CMD:voltarafk(playerid, params[])
{
    new Nome[24], String[120];
    if(AFKJogador[playerid] == 0) return SendClientMessage(playerid, -1, "Vocк Nгo estб AFK");
    GetPlayerName(playerid, Nome, sizeof(Nome));
    if(AFKJogador[playerid] == 1)
    format(String, sizeof(String), "%s Voltou ao Servidor", Nome);
    TogglePlayerControllable(playerid, 1);
    AFKJogador[playerid] = 0;
    SendClientMessageToAll(-1, String);
    return 1;
}
Espero Que Vocкs compreendem,eu sei pouco,mas oque eu sei quero compartilhar,foi o meu 1° Tutorial,aceito Crнticas(construtivas) e Sugestхes para a prуxima,Obrigado quem viu atй o final.
Reply
#2

Bem, em primeiro lugar parabйns por todo o trabalho
Mas vem aн a parte das crнticas...
1- Nгo precisava usar sscanf nos comandos
2- Nгo precisava usar 2 comandos
3- A forma como vocк explicou pode confundir quem estб iniciando
4- TogglePlayerControllable congela o jogador, mas o mesmo ainda pode sofrer dano quando atingindo por armas brancas.
Reply
#3

Ok,valeu,mas na Wiki estava assim,Define se o jogador possa ou nгo se movimentar,nem a cвmera, 2 Comandos para ficar AFK e Voltar Normal.

Valeu mesmo assim,o resto estб correto,vou corrigir.
Reply
#4

Nгo й que esteja necessariamente incorreto, й que vocк poderia deixar o sistema mais simples, exemplo:
pawn Код:
new bool:AFKJogador[MAX_PLAYERS];//topo

CMD:afk(playerid)
{
    new Nome[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Nome, MAX_PLAYER_NAME);
    new string[64];
    if(!AFKJogador[playerid])
    {
        AFKJogador[playerid]=true;
        TogglePlayerControllable(playerid, 0);
    }
    else
    {
        AFKJogador[playerid]=false;
        TogglePlayerControllable(playerid, 1);
    }
    format(string, sizeof(string), "%s %s, comando: /afk", Nome, AFKJogador[playerid] ? ("estб AFK") : ("voltou ao servidor"));
    SendClientMessageToAll(-1, string);
    return 1;
}
Reply
#5

Estб bem explicado e tudo o mais. Porйm daria pra fazer um comando sу e nгo й preciso uma variavel com 100 cйlulas quando vocк sу usa 10. Mas tirando isso atй que estб bom. Parabйns.
Reply
#6

Obrigado aew ! E muito importante para mim(estas dicas).
Reply
#7

Quote:
Originally Posted by PedexM
Посмотреть сообщение
pawn Код:
CMD:afk(playerid, params[])
{
    new Nome[24], String[120];
    if(AFK[playerid] == 1) return SendClientMessage(playerid, -1, "Vocк Jб estб AFK");
    if(AFK[playerid] == 0)
    GetPlayerName(playerid, Nome, sizeof(Nome));
    format(String, sizeof(String), "%s Estб Afk", Nome);
    TogglePlayerControllable(playerid, 0);
    AFK[playerid] = 1;
    SendClientMessageToAll(-1, String);
    return 1;
}
CMD:voltarafk(playerid, params[])
{
    new Nome[24], String[120];
    if(AFK[playerid] == 0) return SendClientMessage(playerid, -1, "Vocк Nгo estб AFK,para ficar AFK use /afk");
    GetPlayerName(playerid, Nome, sizeof(Nome));
    if(AFK[playerid] == 1)
    format(String, sizeof(String), "%s Voltou ao Servidor", Nome);
    TogglePlayerControllable(playerid, 1);
    AFK[playerid] = 0;
    SendClientMessageToAll(-1, String);
    return 1;
}
Isso ai nem compila..

Quote:
Originally Posted by Artista
Посмотреть сообщение
1- Nгo precisava usar sscanf nos comandos
Nao sei onde tu viu a sscanf nisso '-'

-

de qualquer forma simplica isso ai:

pawn Код:
new AFK[MAX_PLAYERS];

CMD:afk(playerid, params[])
{
    AFK[playerid] = AFK[playerid] == 1 ? 0 : 1;
    TogglePlayerControllable(playerid, AFK[playerid] == 0 ? 1 : 0);
    new Nome[24], String[50];
    format(String, sizeof(String), "%s ", (GetPlayerName(playerid, Nome, sizeof(Nome)), Nome), AFK[playerid] == 1 ? ("Estб Afk") : ("Voltou ao Servidor"));
    SendClientMessageToAll(-1, String);
    return 1;
}
Reply
#8

PT Olha as Mensagens Antes de Falar,reveja o tуpico,foi corrigido,eu tentei explicar os 2 comandos,dъvido que alguйm com pouco conhecimento iria ficar confuso com este cуdigo.Comeзei Pelo Bбsico,Pois to aprendendo tambйm, e eu acabei de compilar e deu certinho,sу vocк rever o tуpico,jб que vocк pegou de comentбrios,eu jб atualizei ele a muito tempo.

Mas ok,valeu.
Reply
#9

Quote:
Originally Posted by PedexM
Посмотреть сообщение
PT Olha as Mensagens Antes de Falar,reveja o tуpico,foi corrigido,eu tentei explicar os 2 comandos,dъvido que alguйm com pouco conhecimento iria ficar confuso com este cуdigo.Comeзei Pelo Bбsico,Pois to aprendendo tambйm, e eu acabei de compilar e deu certinho,sу vocк rever o tуpico,jб que vocк pegou de comentбrios,eu jб atualizei ele a muito tempo.

Mas ok,valeu.
Oh rapazinho, basta ter olhos na cara e olhar para aqui:

pawn Код:
CMD:afk(playerid, params[])
{
    new Nome[24], String[120];
    if(AFKJogador[playerid] == 1) return SendClientMessage(playerid, -1, "Vocк Jб estб AFK");
    if(AFKJogador[playerid] == 0)
    GetPlayerName(playerid, Nome, sizeof(Nome));
    format(String, sizeof(String), "%s Estб Afk", Nome);
    TogglePlayerControllable(playerid, 0);
    AFKJogador[playerid] = 1;
    SendClientMessageToAll(-1, String);
    return 1;
}
para ver que vai faltar chaves --' ainda fala que compila -.-
Reply
#10

Quote:
Originally Posted by Artista
Посмотреть сообщение
1- Nгo precisava usar sscanf nos comandos.
Ta nй kkk.

Cara fico bacana, mas eu nгo curto essa parada de comando para ficar afk e talz, eu preferia que fosse um sistema que detectasse automaticamente se o player estб afk, assim para usar em servidores lotados, que o cara loga e fica 30 na base sem fazer nada, mas de qualquer forma legal, atй dб uma ajuda para quem quer aprender a criar comando e talz.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)