dudas con y_timer
#1

Estoy haciendo un gamemode tipo ad, y estoy usando y_timer, bueno quiero que cada mapa, o partida dure 5 minutos, ya y quiero que por ejemplo si el equipo 1 llegue a los 100 kills, la partida se termine, y se cambie, pero como mato ese y_timer?? para que se reinicie, osea para que vuelva a contar desde 0 hasta llegar a los 5 minutos, porque si ningъn equipo llega al 100 kills a los 5 minutos, se anuncia al ganador y el timer comienza de nuevo, pero podria pasar que el equipo haga los 100 kills en por ejemplo 4 minutos, se cambiarб el mapa pero el timer quedarб en 4 minutos, me entienden??... gracias y ya leн un poco sobre lo que dice en el tutorial pero no me entiendo mucho el ingles y me cuesta un poco! Gracias nuevamente!
Reply
#2

Podrнas usar tareas (tasks) de un segundo y alguna variable para eso.

Algo asн:

*haciйndolo de esta manera puedes saber cuбntos segundos han pasado y no sй, mostrarlo en algъn textdraw, o cambiar la duraciуn de la ronda con algъn comando.

pawn Код:
#define TIEMPO_LIMITE (60 * 5)

new bool:EnRonda;
new segundos;

// Al iniciar la ronda
EnRonda = true;
segundos = 0;


task CheckRound[1000]()
{
    if(EnRonda)
    {
        segundos++;
        if(segundos == TIEMPO_LIMITE)
        {          
            // Pasaron 5 minutes
            EnRonda = false;
            ....
           
        }

        if(Asesinatos_del_equipo_1 == 100)
        {
             // equipo 1 obtuvo 100 asesinatos
             ...
        }

        if(Asesinatos_del_equipo_2 == 100)
        {
             // equipo 2 obtuvo 100 asesinatos
             ...
        }  
    }
}

O normalmente, haciйndolo asн:

* haciйndolo asн no puedes saber cuantos segundos quedan (al menos que hagas otro timer)

pawn Код:
new Timer:tRonda;
new bool:EnRonda;

// Al iniciar la ronda, despuйs de algъn conteу (ї?)...
tRonda = defer Ronda();
EnRonda = true;

// Destruir el timer de la ronda en alguna funciуn o comando
stop aRonda;

timer Ronda[300000]()
{
      // la ronda terminу
     ...
     EnRonda = false;
}
Utilizando un timer de un segundo que se repita:

* asн sн puedes saber cuбntos segundos han pasado

pawn Код:
// Tiempo lнmite de la ronda (en segundos)
#define TIEMPO_LIMITE (60 * 5)

new Timer:tRonda;
new bool:EnRonda;
new segundos;

IniciarRonda()
{
    tRonda = defer CheckRound();

    EnRonda = true;
    segundos = 0;
    return true;
}

CancelarRonda()
{
    stop tRonda();
    EnRonda = false;
    return true;
}

timer CheckRound[1000]()
{
    if(EnRonda)
    {
        segundos++;
        if(segundos == TIEMPO_LIMITE)
        {
            CancelarRonda();
        }

        if(asesinatos_equipo_1 == 100)
        {
            // el equipo 1 obtuvo 100 asesinatos
        }
       
        if(asesinatos_equipo_2 == 100)
        {
            // el equipo 2 obtuvo 100 asesinatos
        }

        // Volver a llamar el timer
        defer CheckRound();
    }
}
___________
Explicaciуn de las funciones que utilicй:

defer - Llama al timer en el tiempo que tiene establecido.
pawn Код:
// Llamarб al timer en el tiempo que tiene establecido.
defer CheckRound();

// Llamarб al timer en ese mismo momento, como si fuera una funciуn normal.
CheckRound();
Y si gustas, tambiйn puedes establecerle otro tiempo:

pawn Код:
//Llamarб al timer en el tiempo que tiene establecido (1 segundo)
defer CheckRound();

//Llamarб al timer en dos segundos.
defer CheckRound[2000]();

stop - Funciona como KillTimer, necesitas el "ID" del timer.
pawn Код:
new Timer:x;

// En alguna funciуn...
x = defer CheckRound[30000]();

// En algъn comando...
CMD:cancelarronda(playerid, params[])
{
    // ...
    stop x();
    // ...
    return true;
}
Reply
#3

Gracias por responder, pero al intentar crearlo me da error.

Код:
new Timer:t_AD;

main( )
{
	t_AD = repeat TimerAD();
}

timer TimerAD[300000]()
{
  ...
...
    if(Equipo1Kills == 100)
          stop t_AD;
..
...
}
me da error en el stop t_AD;
Reply
#4

Quй raro, a mн no me dio ninguno. їquй error te dio?
Reply
#5

Код:
C:\Users\Samsung\Desktop\Server Freeroam\gamemodes\frad.pwn(11410) : error 012: invalid function call, not a valid address
C:\Users\Samsung\Desktop\Server Freeroam\gamemodes\frad.pwn(11410) : error 029: invalid expression, assumed zero
C:\Users\Samsung\Desktop\Server Freeroam\gamemodes\frad.pwn(11410) : warning 215: expression has no effect
C:\Users\Samsung\Desktop\Server Freeroam\gamemodes\frad.pwn(26) : warning 204: symbol is assigned a value that is never used: "t_AD"
Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


2 Errors.
gracias nuevamente
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)