SA-MP Forums Archive
[Tutorial] Salvar tempo jogado sem o uso de SetTimer(Ex) - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+----- Forum: Lançamentos/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=56)
+----- Thread: [Tutorial] Salvar tempo jogado sem o uso de SetTimer(Ex) (/showthread.php?tid=479249)



Salvar tempo jogado sem o uso de SetTimer(Ex) - Ph0ton - 03.12.2013

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.



Respuesta: Salvar tempo jogado sem o uso de SetTimer(Ex) - DanDRT - 03.12.2013

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.


Re: Salvar tempo jogado sem o uso de SetTimer(Ex) - Ph0ton - 03.12.2013

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


Re: Respuesta: Salvar tempo jogado sem o uso de SetTimer(Ex) - SkullFire - 03.12.2013

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]


Re: Salvar tempo jogado sem o uso de SetTimer(Ex) - PT - 03.12.2013

alem disso ser simples e um bom tuto parabens.


Re: Salvar tempo jogado sem o uso de SetTimer(Ex) - [FeK]Knife - 04.12.2013

Bom tutorial amigo, parabйns!


Re: Salvar tempo jogado sem o uso de SetTimer(Ex) - DannielCooper - 04.12.2013

Legal.. Parabйns.


Re: Salvar tempo jogado sem o uso de SetTimer(Ex) - Gleisson_. - 06.12.2013

Muito bom! [10/10]


Re: Salvar tempo jogado sem o uso de SetTimer(Ex) - Sev7N - 07.12.2013

Bem Legal. Parabens!


Re: Salvar tempo jogado sem o uso de SetTimer(Ex) - Juniiro3 - 07.12.2013

Interessante, bom trabalho!