[Duda] Detener un timer
#1

Bueno, querнa saber cуmo se hace para detener un timer si el jugador ejecutу X comando y volverlo a crear si ejecuta otro.

Ej: Pongo /timer y se detiene el timer, pongo /timer2 y se vuelve a ejecutar.

їSerнa cambiando el 'false' por 'true'?


Saludos.
Reply
#2

Antes de nada lйete SetTimer, SetTimerEx, KillTimer

Tienes que declarar el timer:

pawn Код:
new Timer1;

//CMD
if(strcmp(cmd, "/timer", true) == 0)
{
Timer1 = SetTimer("Test", 5000, true); //Retorna la id del timer .true es para que se repita cada 5 segundos, normalmente si es false no necesitas 'KillerTimer' al no ser que quieras pararlo antes de que se cumpla la funciуn.
return 1;
}

//public
forward Test();
public Test()
{
print("timer 1");
return 1;
}

//CMD Kill
if(strcmp(cmd, "/killtimer", true) == 0)
{
KillTimer(Timer1); // Ahora ya no mandarнa mбs prints.
return 1;
}
Un error que muchos cometen, esque cuando usamos el timer para un solo player (SetTimerEx), no declaran el tamaсo de la array, y esto causarнa bugs importantes

Un ejemplo correcto:
pawn Код:
new Timer2[MAX_PLAYERS]; // MAX_PLAYERS = 500, puedes cambiar MAX_PLAYERS por el nъmero de maxplayers de tu sv para optimizar. o tambiйn debajo de los includes y antes de los news:
#undef MAX_PLAYERS
#define MAX_PLAYERS 100 //100 es un ejemplo si tu server usara 100 slots.
// esto no tiene nada que ver con lo del timer es tan solo para optimizar.

if(strcmp(cmd, "/timer", true) == 0)
{
Timer2[playerid] = SetTimerEx("Test", 5000, true. "i", playerid); //Timer para un solo jugador, lйete SetTimerEx en la samp wiki.
return 1;
}

forward Test(playerid);
public Test(playerid)
{
SendClientMessage(playerid, -1, "timer 2");
return 1;
}

//CMD Kill
if(strcmp(cmd, "/killtimer2", true) == 0)
{
KillTimer(Timer2[playerid]); // Ahora ya no mandarнa mбs mensajes al jugador.
return 1;
}
Saludos, y espero haberte aclarado tus dudas con los timers.

PD: http://forum.sa-mp.com/showpost.php?...&postcount=334
Reply
#3

Ocurre que tengo un timer, si uso 'KillTimer', cuando vuelva a setear el timer empezarб de nuevo? Lo digo por si pueden ir descoordinados los timers de los que usaron el comando y el de los que no.
Reply
#4

Si, si matas al timer y despuйs lo seteas de nuevo, empieza de nuevo. Eso si, si por ejemplo en el timer vas sumandos una variable, eso no empieza de nuevo.

Supongamos que matas al timer cuando la var es 42. Cuando comienzes el timer para seguir sumando (var++; o var+=1; ) seguirб en 42, 43, 44, 45...

Para que la var empieze de nuevo tendrнas que ponerla en 0 cuando matas el timer (var = 0; )

No se si me entiendes, todo lo que se vaya guardando en variables no comienza de nuevo al noser que las 'setees', ahora si te refieres a las funciones, si, empiezan de nuevo.

Aquн un ejemplo claro:
pawn Код:
new var=0,
      timer;

timer = SetTimer("Sumar", 3000, true);

public Sumar()
{
var++;
print("Aъn no llegemos a 42, espere.");
if(var == 42)
{
KillTimer(timer);
var=0;
print("Llegemos a 42. Reseteamos la variable para comenzar de nuevo la cuenta, y matamos a el timer");
}
return 1;
}

//Si por ejemplo matas el timer cuando 'var' va por 32
KillTimer(timer);

//Y luego de nuevo pones settimer sin resetear 'var'
SetTimer....

//Pues var seguirнa sumando pero desde 32, luego 33, 34, 35.... hasta 42
//en cambio si la reseteas empezarнa desde 0.
Saludos, y ojalб hayas podido entenderlo.
Reply
#5

Mucho mбs claro, muchas gracias.
Reply
#6

Otra cosa mбs, y para no crear otro post.

їCуmo puedo hacer un anti-team kill sin que se quiten vida al disparar?

Habнa probado detectando el daсo y luego devolviйndole la vida que le quitaron al jugador, pero no me sirve.
Reply
#7

Usa SetPlayerTeam. Si los jugadores son del mismo TEAM no les pasarб nada al dispararse.
Reply
#8

Habнa probado asн:

Код:
    new Float:Health, Float:Armour;
	if(gTeam[playerid] == gTeam[issuerid]) {
	GetPlayerHealth(issuerid, Health);
	GetPlayerArmour(issuerid, Armour);
	SetPlayerHealth(issuerid, Health+Armour);
	}
Pero no sirve parece.
Reply
#9

Usa el SetPlayerTeam.. es lo mejor, ya que te ahorrarб un montуn de trabajo.
Reply
#10

їPuedes darme un ejemplo, por favor?
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)