Como Criar um Sistema de AFK(Explicado Bem) -
PedexM - 30.10.2014
Tutorial Sistema de AFK
Requesito:
Crйditos:
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) :
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;"
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
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.
Re: Como Criar um Sistema de AFK(Explicado Bem) -
Artista - 30.10.2014
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.
Re: Como Criar um Sistema de AFK(Explicado Bem) -
PedexM - 30.10.2014
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.
Re: Como Criar um Sistema de AFK(Explicado Bem) -
Artista - 30.10.2014
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;
}
Re: Como Criar um Sistema de AFK(Explicado Bem) -
Mandrack_FreeZe - 30.10.2014
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.
Re: Como Criar um Sistema de AFK(Explicado Bem) -
PedexM - 30.10.2014
Obrigado aew ! E muito importante para mim(estas dicas).
Re: Como Criar um Sistema de AFK(Explicado Bem) -
PT - 30.10.2014
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;
}
Re: Como Criar um Sistema de AFK(Explicado Bem) -
PedexM - 30.10.2014
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.
Re: Como Criar um Sistema de AFK(Explicado Bem) -
PT - 30.10.2014
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 -.-
Re: Como Criar um Sistema de AFK(Explicado Bem) -
Stronda xD - 30.10.2014
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.