Fala galera, tranquilo ?
Hoje vou mostrar a vocкs uma forma rбpida e fбcil de salvar o tempo que um jogador ficou conectado sem o uso das funзхes SetTimer e SetTimerEx, ou seja, sem um sistema muito complexo e que use muito cachк..
Й um mйtodo bem simples que tambйm й usado para medir a velocidade de funзхes...
Antes de comeзarmos, gostaria de avisar que no Tutorial estarei usando DOF2, visto que й uma Include rбpida sobre a qual jб possuo certo conhecimento.. Espero que gostem
PRIMEIRO PASSO:
Criamos a variбvel que irб armazenar o tempo que o Player estб conectado.
Exemplo:
pawn Код:
new TempoJogado[MAX_PLAYERS];
*Nгo й necessбrio nenhuma explicaзгo, espero.
__________
SEGUNDO PASSO:
Quando o Player Conectar, definiremos o valor da variбvel que armazena o tempo que o Player estб conectado para o tempo que o Servidor estб ligado (em milissegundos) dividido por 1000 (mil), o que retornarб o valor em segundos.
Exemplo:
pawn Код:
public OnPlayerConnect(playerid)
{
TempoJogado[playerid] = GetTickCount() / 1000;
return 1;
}
*
GetTickCount() - Retorna o tempo em atividade do Servidor em Milissegundos (ms).
*1ms = 0,001s, 1s = 1000ms
__________
TERCEIRO PASSO:
Quando o jogador desconectar, definiremos o valor da variбvel para o tempo de atividade do servidor dividido por 1000 (mil) mais o valor antigo da variбvel. Depois, checaremos se jб existe um Arquivo deste player, se nгo existir o criamos, checamos se jб existe um valor salvo do dia de hoje, caso houver, setaremos o valor como o jб salvo mais o que estб sendo salvo, caso contrбrio, simplesmente salvaremos.
Exemplo:
pawn Код:
public OnPlayerDisconnect(playerid, reason)
{
new File[56], Nome[24], Dia, Mes, Ano; // Criamos as variбveis
TempoJogado[playerid] = GetTickCount() / 1000 - TempoJogado[playerid]; // Definimos o "TempoJogado" do Player para o Tempo de Atividade do servidor (em milissegundos) dividido por 1000 (mil) (= Tempo em Segundos) menos o valor antigo da variбvel.
getdate(Ano, Mes, Dia); // Armazena a data atual.
GetPlayerName(playerid, Nome, 24); // Armazena o nome do player na variбvel "Nome"
format(File, 56, "%s.txt", Nome); // Formata a variбvel "File" para "Nome_Do_Player.txt", ou seja, scriptfiles > Nome_Do_Player.txt
if(!DOF2_FileExists(File)) DOF2_CreateFile(File); // Se o Arquivo nгo existir cria-o.
format(Nome, 24, "%02d/%02d/%d", Dia, Mes, Ano); // Para nгo ter de criar uma nova variбvel, armazenamos a Data formatada tambйm em "Nome"..
if(DOF2_IsSet(File, Nome)) TempoJogado[playerid] += DOF2_GetInt(File, Nome); // Caso jб exista um tempo salvo na data de hoje, o TempoJogado й somado ao que jб estava salvo.
DOF2_SetInt(File, Nome, TempoJogado[playerid]); // Seta no Arquivo o novo valor de "TempoJogado"
DOF2_SaveFile(); // Salva o arquivo.
return 1;
}
*
getdade(year, month, day) - Armazena a data atual.
*
GetPlayerName(playerid, const name[], len) - Armazena o nome de um Player.
*Eu sei que no exemplo dado nгo seria necessбrio que a variбvel "File" fosse formatada, mas isso facilita para que alguйm nгo muito instruнdo possa facilmente alterar o local onde a mesma й salva.
F.A.Q.
Como trocar o local onde o arquivo й salvo ?
R: Vб atй seguinte linha:
pawn Код:
format(File, 56, "%s.txt", Nome);
E troque o valor entre aspas..
Ex:
pawn Код:
format(File, 56, "Tempo Jogado/%s.txt", Nome);
Agora, serб salvo no seguinte destino: scriptfiles > Tempo Jogado > Nome_Do_Player.txt
* Certifique-se de que a pasta "Tempo Jogado" existe, caso contrбrio o Servidor irб crashar.
Espero que seja ъtil a alguйm
Como eu jб disse, й bem simples, porйm MUITO mais eficiente do que usando Timers, ao menos eu acredito que sim
Atй mais.
Cumps, Ph0ton.
Esse й o objetivo.
Legal.. Parabйns.
Bem Legal. Parabens!