SA-MP Forums Archive
Duda con el gettime - 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: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: Duda con el gettime (/showthread.php?tid=524955)



Duda con el gettime - Juance - 09.07.2014

Buenas a todos, bueno, voy al grano.
Tengo una gran duda con el gettime que no encuentro la vuelta al tema.

Si yo coloco:

pawn Код:
forward HoraEnPunto();
public HoraEnPunto()
{
    new hora,minuto,segundo;
    gettime(hora,minuto,segundo);
    if(minuto == 0)
    {
        SendClientMessageToAll(-1,"Ha pasado una hora");
    }
}
Me estarнa detectando la hora exacta? . Si es asн, lo utilizo como una funciуn en OnGameModeInit o debo crear un timer que ejecute cada X segundo la funciуn?

Lo que estoy creando es que se guarden las horas en la variable pHorasJugadas, pero claramente tendrнan que guardarse si el jugador pasa 1 hora jugando en el servidor.


Respuesta: Duda con el gettime - aoEXE - 09.07.2014

OnGameModeInit se llama cuando se enciende el servidor amigo, entonces si colocas la funciуn en dicho callback sуlo ejecutarнa la funciуn HoraEnPunto(); cuando lo enciendas.


Respuesta: Duda con el gettime - Juance - 09.07.2014

Quote:
Originally Posted by aoEXE
Посмотреть сообщение
OnGameModeInit se llama cuando se enciende el servidor amigo, entonces si colocas la funciуn en dicho callback sуlo ejecutarнa la funciуn HoraEnPunto(); cuando lo enciendas.
Si, lo sй. Tendrнa que ejecutar un timer de 30 segundos y dentro de ese timer ejecutar la funciуn.
El tema es que ese mensaje se enviarнa si el minuto es 0, que es cuando pasa una hora, pero si un usuario conecta en el minuto 58, dos minutos despuйs pasу una hora, pero para el servidor en general, no para el usuario. No sй si me explico bien.


Respuesta: Duda con el gettime - OTACON - 09.07.2014

pawn Код:
forward HoraEnPunto();
public HoraEnPunto()
{
    new hora,minuto,segundo;
    gettime(hora,minuto,segundo);
    if(minuto >= 60) //compueba si los minutos es mayor o igual a 60 (60 minutos igual a una hora)
    {
        SendClientMessageToAll(-1,"Ha pasado una hora");
        //aqui le colocas la variable que guardara las horas jugadas
        /*
        EJEMPLO:
            variable ++;
        */

    }
}



Respuesta: Duda con el gettime - Juance - 09.07.2014

Quote:
Originally Posted by OTACON
Посмотреть сообщение
pawn Код:
forward HoraEnPunto();
public HoraEnPunto()
{
    new hora,minuto,segundo;
    gettime(hora,minuto,segundo);
    if(minuto >= 60) //compueba si los minutos es mayor o igual a 60 (60 minutos igual a una hora)
    {
        SendClientMessageToAll(-1,"Ha pasado una hora");
        //aqui le oclocas la variable
        /*
        EJEMPLO:
            variable ++;
        */

    }
}
їPero quй pasarнa si un usuario conecta en el minuto 58? Al ejecutar la variable estarнa tomando como que jugу una hora y no es asн.


Respuesta: Duda con el gettime - OTACON - 09.07.2014

pawn Код:
static MinutosGuardados[MAX_PLAYERS];

//en OnPlayerConnect
MinutosGuardados[playerid] = 0;

forward HoraEnPunto();
public HoraEnPunto()//el timer colocas en 1000 milisegundos igual a un segundo
//el timer debe ser con un bucle o  untimerEx con el parametro playerid y destruir y crear cuando se conecta el jugador.
{
    new hora,minuto,segundo;
    gettime(hora,minuto,segundo);

    if(segundo >= 60)
    {
        MinutosGuardados[playerid]++; //cada un minuto guardarda la variable
    }

    if(minuto >= 60) //veifica que haya pasado 60 minutos igual una hora.
    {

        if( MinutosGuardados[playerid] >= minuto) //verifica si la variable que contaba los minutos es igual o mayor a los minutos actuales (que anteriormente es 60)
        {
            SendClientMessageToAll(-1,"Ha pasado una hora");
MinutosGuardados[playerid] = 0;//resetea la variable que cuenta los minutos para volver a contar.
            //lo demas
        }
    }

}



Respuesta: Duda con el gettime - Juance - 09.07.2014

pawn Код:
new Timer[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
KillTimer(Timer[playerid]); // Destruir el timer
Timer[playerid] = SetTimerEx("HoraEnPunto",1000,true,"i",playerid); // y luego colocarlo en funcionamiento.
// їA eso te referнas?
return 1;
}



Respuesta: Duda con el gettime - OTACON - 09.07.2014

exacto, no te olvides de resetear la variable que contara los minutos..


Respuesta: Duda con el gettime - Juance - 09.07.2014

Deberнa guardar entonces tambiйn los minutos jugados, porque la cuenta en SI cumplirнa la hora jugada, y las funciones que yo harнa serнa que si el jugador con su cuenta cumplio una hora, o cuatro horas.
Entonces indicarнa que minutosguardados es 0 al conectar, pero cargar los mismos del file.


Respuesta: Duda con el gettime - OTACON - 09.07.2014

¬¬...

dentro de if( MinutosGuardados[playerid] >= minuto) le colocas otro if con las horasmaxima para obtener tal funcion.

y arriba del if( MinutosGuardados[playerid] >= minuto) le colocas la variable que suma las horas como sumaste los minutos (osea pHorasJugadas).

PD: los minutos los debes de contar cuando el jugador esta jugando cuando se desconecta y conecta de nuevo debes de contar de nuevo los minutos.