[Tutorial] Como Cronometrar.
#1

Cronometrar
Creo que este es el tutorial mбs corto que voy a hacer en mi vida. Por ejemplo, si queremos cronometrar cuanto tiempo durу un auto en ir de un lugar a otro, o cuanto tiempo tardo una persona de hacer una prueba de reacciуn, necesitamos una funciуn muy ъtil, llamada GetTickCount().

GetTickCount() retorna el tiempo que lleva el servidor corriendo en milisegundos.

Ejemplo, si el servidor lleva una hora de iniciado y utilizamos esa funciуn, nos retornarб:
pawn Код:
/*
  1 segundo == 1000 milisegundos
  1 hora == 3600 segundos
  3600 * 1000 == 3600000 milisegundos
*/
Bueno, ya sabemos como funciona, pero, їcomo podemos usarlo?

La mejor forma y la ъnica que se me viene a la mente por ahora es como una referencia y a la misma vez punto para calcular la diferencia. En otras palabras, tomaremos cuantos milisegundos habнan cuando comenzamos nuestro cronуmetro y se los restamos al la cantidad de milisegundos cuando terminamos nuestro cronуmetro.

Ejemplo: Queremos saber cuanto tardarб "x" jugador en entrar en la selecciуn de skins.
pawn Код:
new Referencia[MAX_PLAYERS];

public OnPlayerConnect(playerid)
{
  Referencia[playerid] = GetTickCount(); // esta va a ser nuestro punto de partida
  return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
  printf("El jugador nъmero %d tardу %d milisegundos en...", playerid, GetTickCount() - Referencia);
  return 1;
}
їPor quй "GetTickCount() - Referencia"?

Porque al iniciar nuestro cronуmetro tomamos cuantos milisengundos habнan al conectarse el jugador, y luego al momento de que empieza a seleccionar skin le restamos los milisegundos actuales a los que tomamos al conectarse al jugador.

Si cuando se conectу habнan 1540 milisegundos y cuando empezу a seleccionar skin habнan 2090, entonces la operaciуn serнa asн:
pawn Код:
2090 - 1540 = 550
GetTickCount() - Referencia = 550
Si queremos pasar esos milisegundos a segundos, utilizamos la funciуn floatdiv(Float:a, Float:b).

pawn Код:
new Ref;

public OnPlayerDeath(playerid, killerid, reason)
{
  Ref = GetTickCount();
  return 1;
}

public OnPlayerSpawn(playerid)
{
  new string[70];

  format(string, sizeof(string), "El jugador Nє %d tardу %f segundos en aparecer desde que muriу!", playerid, floatdiv(GetTickCount - Ref, 1000)); // se divide entre mil
  SendClientMessage(playerid, COLOR, string);
  return 1;
}
їAlguna pregunta?
Hazla aquн y sin salirte del tema, por supuesto.

Reply
#2

Great men xd, exelente!! Sawc eres un experto en pawn.
Reply
#3

muy bueno, es util para los que no tienen muy claro como usar los timers.
Reply
#4

Quote:
Originally Posted by the_chaoz
muy bueno, es util para los que no tienen muy claro como usar los timers.
Ojo, esto no tiene nada que ver con timers .
Reply
#5

Exelente SAWC
Reply
#6

їAlguno sabe como pasar GetTickCount a "... dias ... horas .... minutos .... segundos"?, se como hacerlo por separado, pero no todo junto. Si no llega a 1 dнa que lo marque en horas, si no llega a horas que lo marque en minutos, y asн...


PD: Revivo para asн queda todo junto.
PD2: Es Referencia[playerid].
Reply
#7

Algo asн:
pawn Код:
stock Float:EllaDiceBeautiful(Float:tick_count)
{  
    new output[2] = {-1, -1};
   
    output[1] = tick_count / 86400000.0;
    if(output[1] < 1.0)
    {
        output[1] = tick_count / 3600000.0;
        if(output[1] < 1.0)
        {
            output[1] = tick_count / 60000.0;
            if(output[1] < 1.0)
            {
                output[1] = tick_count / 1000.0;
                if(output[1] < 1.0)
                {
                    output[1] = tick_count;
                    output[0] = 0;
                }
                else output[0] = 1;
            }
            else output[0] = 2;
        }
        else output[0] = 3;
    }
    else output[0] = 4;
    return output;
}
output[0] dice que tipo de dato es (dнas, horas, minutos, segundos, milisegundos) y output[1] la cantidad.
Reply
#8

Muchas gracias, un capo.
Reply
#9

borrar este mensaje, me confundн.
Reply
#10

Quote:
Originally Posted by Miguel
Посмотреть сообщение
Ojo, esto no tiene nada que ver con timers .
Emm, si tiene que ver con timers, podes hacer tus propios timers usando gettickcount, es bastante simple en realidad
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)