[Tutorial] Salvar tempo jogado sem o uso de SetTimer(Ex)
#1

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.
Reply
#2

Parabйns, ajudarб muitos que ficam fazendo 1 settimer para isto, muito bom

@OFF:
O Diabo й Careta!
[ame="http://www.youtube.com/watch?v=nLRkfretjuM"]O Diabo й Careta![/ame]

@EDIT:
Queria que soubessem que o Diabo й careta.
Reply
#3

Quote:
Originally Posted by DanDRT
Посмотреть сообщение
Parabйns, ajudarб muitos que ficam fazendo 1 settimer para isto, muito bom

@OFF:
O Diabo й Careta!
O Diabo й Careta!
Opa, vlw

Esse й o objetivo.

@OFF

Nгo entendi a moral da mъsica :X
Reply
#4

Quote:
Originally Posted by DanDRT
Посмотреть сообщение
Parabйns, ajudarб muitos que ficam fazendo 1 settimer para isto, muito bom

@OFF:
O Diabo й Careta!
O Diabo й Careta!

@EDIT:
Queria que soubessem que o Diabo й careta.
Haha, ventania й foda :P
viaja nessa: [ame]www.youtube.com/watch?v=YASA76z_kGA[/ame]
Reply
#5

alem disso ser simples e um bom tuto parabens.
Reply
#6

Bom tutorial amigo, parabйns!
Reply
#7

Legal.. Parabйns.
Reply
#8

Muito bom! [10/10]
Reply
#9

Bem Legal. Parabens!
Reply
#10

Interessante, bom trabalho!
Reply


Forum Jump:


Users browsing this thread: 7 Guest(s)