[FilterScript] Sistema de afk por tempo
#1

FilterScript

Hoje trago um sistema de afk com tempo, pesquisei muito no search e nгo achei nada relacionado a isso,
ou sistemas desatualizados. Nгo й muito um FilterScript mas pode ser ъtil para vбrios novatos que
estгo comeзando.


INTRODUЗГO:
O que й um sistema de afk? Simplesmente um comando que indica que o jogador estб ausente/inativo em seu servidor. Nгo й algo muito difнcil de se compreender, й bem bбsico pra ser sincero.

COMANDOS:

O meu sistema disponibiliza pra vocк os seguintes comandos:
/afk - Faz com que o jogador entre no modo ausente.
/afksair - Faz com que o jogador saia do modo ausente.
/meutempoafk - Mostra o seu tempo ausente, apenas para vocк.
/ausentes - Mostra todos os jogadores que estгo ausentes e o tempo.


NECESSБRIO:

Para utilizar o sistema, vocк precisa ter as seguintes includes:
#include <a_samp>
#include <Pawn.CMD>

Estarei disponibilizando o download das duas.


DOWNLOAD:



Observaзгo: Em breve estarei disponibilizando mais funзхes que pode ser usadas com esse sistema.
Qualquer sugestгo/crнtica serб bem vinda!


@Atualizado dia 19/11/2017

Corrigido o erro de quando o jogador desconecta no modo ausente, o tempo fica contando.

@Atualizado dia 22/12/2017

Foi atualizado o processamento de comandos, removido o zcmd e adicionado o Pawn.CMD, um processador de comandos muito mais rбpido e ъtil.

Tуpico oficial do Pawn.CMD
https://sampforum.blast.hk/showthread.php?tid=608474
Reply
#2

Legal
Reply
#3

SetTimer global desnecessario , vocк criou uma stock para getar o nome dos jogadores e mesmo assim em alguns pontos com loop vocк criou outra variavel para getar o nome .
PHP код:
pInfo[playerid][tempoafk] = false
Acho que vocк nem compilou , acho que isto vai dar um aviso ao compilar .

Mas e tentando que se aprende , boa .

Nгo testei talvez tenha algum erro , estou sem os programas no pc para testar mas pode ser uma base para vocк poder melhorar .
PHP код:
#include          a_samp
#include          zcmd
enum   pafk {
       
Timer,
       
Tempo,
       
bool:AFK
}
new 
SistemaAFK[MAX_PLAYERS][pafk];
public 
OnFilterScriptInit()
{
    return 
1;
}
public 
OnFilterScriptExit()
{
    return 
1;
}
public 
OnPlayerConnect(playerid)
{
    
SistemaAFK[playerid][Tempo] = 0;
    
SistemaAFK[playerid][AFK] = false;
    return 
1;
}
public 
OnPlayerDisconnect(playeridreason)
{
    
SistemaAFK[playerid][Tempo] = 0;
    
SistemaAFK[playerid][AFK] = false;
    return 
1;
}
public 
OnPlayerCommandPerformed(playeridcmdtext[], success)
{
    if(
success){
        if(
SistemaAFK[playerid][AFK] == true)return SendClientMessage(playerid, -1"Senhor esta ausente.");}
    return 
true;
}
command(afkplayeridparams[])
{
    if(
SistemaAFK[playerid][AFK] == false)
    {
        
TogglePlayerControllable(playeridfalse);
        
        
SendClientMessage(playerid, -1"Use: /afk, para sair do modo ausente");
        
        
SistemaAFK[playerid][AFK] = true;
        
        
SistemaAFK[playerid][Timer] =  SetTimerEx("CheckAFK"1000true"i"playerid);
    }
    else
    {
        
TogglePlayerControllable(playeridtrue);
        
SendClientMessage(playerid, -1"Use: /afk, para entrar no modo ausente");
        
SistemaAFK[playerid][AFK] = false;
        
        
KillTimer(SistemaAFK[playerid][Timer]);
    }
    return 
true;
}
command(listaplayeridparams[])
{
   new 
pimbando[128];
   for (new 
ds;ds <MAX_PLAYERSds++)
   {
       if(
SistemaAFK[ds][AFK] == true)
       {
           
format(pimbandosizeof(pimbando), "%s O jogador %s estб ausente por: [%s]\n"pimbandoDonPegaNome(ds), Convert(SistemaAFK[ds][Tempo]));
       }
   }
   if (
strlen(pimbando) > 0)
        
ShowPlayerDialog(playerid99DIALOG_STYLE_MSGBOX"Jogadores ausentes:"pimbando"FECHAR"#);
    
else
        
SendClientMessage(playerid0xFF0000FF"{FF0000}Nгo hб jogadores ausentes.");
   return 
true;
}
forward CheckAFK(playerid);
public 
CheckAFK(playerid)return SistemaAFK[playerid][Tempo]++;
stock DonPegaNome(playerid)
{
    new 
name[MAX_PLAYER_NAME];
    
GetPlayerName(playeridnamesizeof(name));
    return 
name;
}
stock Convert(number)
{
    new 
hours 0mins 0secs 0string[100];
    
hours floatround(number 3600);
    
mins floatround((number 60) - (hours 60));
    
secs floatround(number - ((hours 3600) + (mins 60)));
    new 
days 0;
    if(
hours >= 24)
    {
        
days floatround((hours/24), floatround_floor);
        
hours hours 24;
    }
    if(
days 0)
    {
        
format(string100"%ddias, %dh %dm e %ds"dayshoursminssecs);
    }
    else if(
hours 0)
    {
        
format(string100"%dh %dm e %ds"hoursminssecs);
    }
    else
    {
        
format(string100"%dm e %ds"minssecs);
    }
    return 
string;

Reply
#4

Se eu fosse usar, eu faria dessa forma;


PHP код:
// sгo dois arquivos. caso alguйm nгo tenha entendido.
/*
#  db   db d88888b  .d8b.  d8888b. d88888b d8888b.    d888888b d8b   db  .o88b. 
#  88   88 88'     d8' `8b 88  `8D 88'     88  `8D      `88'   888o  88 d8P  Y8 
#  88ooo88 88ooooo 88ooo88 88   88 88ooooo 88oobY'       88    88V8o 88 8P      
#  88~~~88 88~~~~~ 88~~~88 88   88 88~~~~~ 88`8b         88    88 V8o88 8b      
#  88   88 88.     88   88 88  .8D 88.     88 `88. db   .88.   88  V888 Y8b  d8 
#  YP   YP Y88888P YP   YP Y8888D' Y88888P 88   YD VP Y888888P VP   V8P  `Y88P' 
*/
#if defined _inc_header
    #undef _inc_header
#endif
#include <YSI\y_groups>
#include <YSI\y_commands>
#include <YSI\y_hooks>
new 
    
Group:Group_AFK,
    
Player_Name[MAX_PLAYERS][MAX_PLAYER_NAME],
    
Player_TimeAfk[MAX_PLAYERS];
/* 
#  d88888b d8b   db d8888b.       .d88b.  d88888b      d88888b d888888b db      d88888b 
#  88'     888o  88 88  `8D      .8P  Y8. 88'          88'       `88'   88      88'     
#  88ooooo 88V8o 88 88   88      88    88 88ooo        88ooo      88    88      88ooooo 
#  88~~~~~ 88 V8o88 88   88      88    88 88~~~        88~~~      88    88      88~~~~~ 
#  88.     88  V888 88  .8D      `8b  d8' 88           88        .88.   88booo. 88.     
#  Y88888P VP   V8P Y8888D'       `Y88P'  YP           YP      Y888888P Y88888P Y88888P 
*/
// [...]
// [...]
// [...]
/*
#  d888888b .88b  d88. d8888b. db         d888888b d8b   db  .o88b. 
#    `88'   88'YbdP`88 88  `8D 88           `88'   888o  88 d8P  Y8 
#     88    88  88  88 88oodD' 88            88    88V8o 88 8P      
#     88    88  88  88 88~~~   88            88    88 V8o88 8b      
#    .88.   88  88  88 88      88booo. db   .88.   88  V888 Y8b  d8 
#  Y888888P YP  YP  YP 88      Y88888P VP Y888888P VP   V8P  `Y88P' 
*/
#if defined _inc_impl
    #undef _inc_impl
#endif
hook OnGameModeInit()
{
    
Group_AFK Group_Create("AFK");
    return 
true;
}
hook OnPlayerConnect(playerid)
{
    
GetPlayerName(playeridPlayer_Name[playerid], MAX_PLAYER_NAME);
    return 
true;
}
YCMD:ausentes(playeridparams[], help
{
    new
        
tmp_str[128];
    
SendClientMessage(playerid, -1"Exibindo jogadores ausentes:");
    foreach(new 
GroupMember(Group_AFK))
    {
        
format(tmp_strsizeof tmp_str"  %s - %i"Player_Name[playerid], gettime() - Player_TimeAfk[playerid]);
        
SendClientMessage(playerid, -1tmp_str);
    }
    return 
true;
}
YCMD:afk(playeridparams[], help
{
    if(
Group_GetPlayer(Group_AFKplayerid))
    {
        
Group_SetPlayer(Group_AFKplayeridfalse);
        
SendClientMessage(playerid, -1"Vocк nгo esta mais afk.");
    }
    else
    {
        
Group_SetPlayer(Group_AFKplayeridtrue);
        
SendClientMessage(playerid, -1"Agora vocк esta ausente.");
        
Player_TimeAfk[playerid] = gettime();
    }
    return 
true;
}
/* 
#  d88888b d8b   db d8888b.       .d88b.  d88888b      d88888b d888888b db      d88888b 
#  88'     888o  88 88  `8D      .8P  Y8. 88'          88'       `88'   88      88'     
#  88ooooo 88V8o 88 88   88      88    88 88ooo        88ooo      88    88      88ooooo 
#  88~~~~~ 88 V8o88 88   88      88    88 88~~~        88~~~      88    88      88~~~~~ 
#  88.     88  V888 88  .8D      `8b  d8' 88           88        .88.   88booo. 88.     
#  Y88888P VP   V8P Y8888D'       `Y88P'  YP           YP      Y888888P Y88888P Y88888P 
*/ 
bom trabalho, mano.
Reply
#5

Mais ou menos, talvez use.
Reply
#6

Quote:
Originally Posted by RogerX
Посмотреть сообщение
Legal
Obrigado!

Quote:
Originally Posted by Don_Speed
Посмотреть сообщение
SetTimer global desnecessario , vocк criou uma stock para getar o nome dos jogadores e mesmo assim em alguns pontos com loop vocк criou outra variavel para getar o nome .
PHP код:
pInfo[playerid][tempoafk] = false

Realmente, teve alguns pontos que minha stock foi insuficiente para mostrar os jogadores ausentes, aн gerei uma nova variбvel no loop. Poderia ter criado um SetTimerEx, nгo sei o porque nгo fiz isso.

Quando coloquei
PHP код:
pInfo[playerid][tempoak] = false
dentro do sistema, isso fez com que o tempo comeзasse a contar assim que o jogador entrasse no modo ausente.

Quote:
Originally Posted by Don_Speed
Посмотреть сообщение
Acho que vocк nem compilou, acho que isto vai dar um aviso ao compilar. Mas e tentando que se aprende
Se nгo tivesse compilado, acha que eu postaria? Nгo estou sendo grosseiro.
Й com os erros que se aprende a fazer o certo.




Quote:
Originally Posted by Don_Speed
Посмотреть сообщение
Nгo testei talvez tenha algum erro , estou sem os programas no pc para testar mas pode ser uma base para vocк poder melhorar.
Obrigado, vou me esforзar para melhorar.

Quote:
Originally Posted by Naine
Посмотреть сообщение
Se eu fosse usar, eu faria dessa forma;
Interessante!

Quote:
Originally Posted by Cycle
Посмотреть сообщение
Poderia ter utilizado um SetPlayChatBubble para notificar aos que nгo visualizarem o chatbox e se aproximarem do player. Nada tгo surpreendente, vejo constantemente esse "sistema", porйm parabйns pela forзa de vontade.
Inicialmente eu fiz com um SetPlayChatBubble, mas nгo tinha ninguйm pra testar comigo, nгo iria por algo sem ao menos ter testado, obviamente.

Sim, este sistema й muito presente no fуrum SA-MP, porйm como eu havia dito, "Nгo achei nada relacionado a isso", ou seja, nada que mostrasse o tempo do jogador ausente. A maioria dos sistema afk do fуrum estгo desatualizados, 2014 para baixo.

Quote:
Originally Posted by ScripitrFaunu
Посмотреть сообщение
Mais ou menos, talvez use.
Obrigado!
Reply
#7

Sinceramente o seu sistema nгo й nada diferente dos demais sу muda que esta utilizando ZCMD , na minha opniгo qualquer pessoa poderia pegar um FS antigo e otimizar, se vocк queria trazer algo novo(Nгo conseguiu), deveria ter feito sem os cmd de deixar AFK fazendo assim um timer que verifica se o player esta parado a muitos minutos e deixando ele AFK.
Reply
#8

Quote:
Originally Posted by Benner
Посмотреть сообщение
Sinceramente o seu sistema nгo й nada diferente dos demais sу muda que esta utilizando ZCMD , na minha opniгo qualquer pessoa poderia pegar um FS antigo e otimizar, se vocк queria trazer algo novo(Nгo conseguiu), deveria ter feito sem os cmd de deixar AFK fazendo assim um timer que verifica se o player esta parado a muitos minutos e deixando ele AFK.
Vocк leu o que eu escrevi? se nгo, leia.
Quote:
Originally Posted by Gguiz
Посмотреть сообщение
Nгo й muito um FilterScript mas pode ser ъtil para vбrios novatos que
estгo comeзando.
Minha intenзгo nгo foi criar algo novo e sim optimizar algo que estб desatualizado no search. Principalmente porquк meu pъblico alvo foi para os que estгo comeзando a mexer com pawno.

@Edit

Momento nenhum eu quis criar algo surpreendente e nem novo. Se qualquer um sabe fazer isso, entгo mande um novato fazer um sistema de afk, quando ele fizer vocк me procura. Vocк nгo compreendeu muito o que eu quis passar aqui, desde o comeзo sabia que tinha vбrios relacionados a isso no search, eu pesquisei - mesmo assim prosseguir e passei um pouco do meu conhecimento para a galera. Sua crнtica foi construtiva, porйm mal interpretada em relaзгo ao que eu quis passar. Note que em nenhum momento falei que ia surpreender alguйm com algo novo, muito pelo contrбrio.

Mesmo assim, obrigado por sua crнtica!
Reply
#9

Quote:
Originally Posted by Gguiz
Посмотреть сообщение
Vocк leu o que eu escrevi? se nгo, leia.

Minha intenзгo nгo foi criar algo novo e sim optimizar algo que estб desatualizado no search. Principalmente porquк meu pъblico alvo foi para os que estгo comeзando a mexer com pawno.
Leia a minha resposta novamente.
Reply
#10

Adorei os nomes das variбveis "viada" "pimbando", stock pimba kkkkkkkkkkkk genial !!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)