SA-MP Forums Archive
Duda - 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 (/showthread.php?tid=546200)



Duda - Metzone - 13.11.2014

Tengo una duda, que es hacer que un timer lleve a otro timer, es un ejemplo el siguiente




pawn Код:
CMD:reiniciar(playerid, params[]){
    if(gPlayerLogged{playerid}){
        SendClientMessageToAll(playerid, -1, "el servidor se reiniciara en 1 minuto.");
        SetTimerEx("Reinicio1",50000,0,"i",playerid);
    }
    return 1;
}

forward reinicio1(playerid);
public reinicio1(playerid)
{
SendClientMessageToAll(playerid, -1, "el servidor se reiniciara en 10 segundos.");
        SetTimerEx("Reinicio2",5000,0,"i",playerid);
return 1;
}

forward reinicio2(playerid);
public reinicio2(playerid)
{
SendClientMessageToAll(playerid, -1, "el servidor se reiniciara en 5 segundos.");
        SetTimerEx("Reinicio3",1000,0,"i",playerid);
return 1;
}

forward reinicio3(playerid);
public reinicio3(playerid)
{
SendClientMessageToAll(playerid, -1, "el servidor se reiniciara en 4 segundos.");
        SetTimerEx("Reinicio4",1000,0,"i",playerid);
return 1;
}

etc,....



Bueno, la cosa esque hace el primer timer, pero el resto ya no los hace... їPorque me pasa eso?


Respuesta: Duda - Juand - 13.11.2014

Para que tantos timers? ._. con uno es suficiente, pon uno de 1 segundo (Que se repita) que vaya sumando 1 a una variable (creala) y a la vez comprueba si esa variable es igual o mayor que 10 (10 segundos) si es correcto que mate el timer y sete la variable a 0 , y abajo las demбs funciones que necesites...
PD: por que no haces un timer global? bueno dirнa yo, no creo que necesites timer para playerid cuando simplemente podes hacerlo de forma general osea normalmente...
si no entiendes lo que te dije avнsame.


Re: Duda - Metzone - 13.11.2014

No te entendi muy bien :\


Respuesta: Duda - Pipe98 - 13.11.2014

algo asi creo yo

Код:
new TiempoReinicio, TimerReinicio;

CMD:reiniciar(playerid, params[])
{
	TiempoReinicio = 60;
	TimerReinicio = SetTimer("ReinicioServer", 1000, 1);
	return 1;
}

forward ReinicioServer(); public ReinicioServer()
{
	switch(TiempoReinicio)
	{
	    case 0:
		{
			SendRconCommand("gmx");
			KillTimer(TimerReinicio);
		}
	    case 60, 10, 5, 1:
	    {
			new string[50];
			format(string, sizeof(string), "El servidor se reiniciara en %d segundos.", TiempoReinicio);
			SendClientMessageToAll(-1, string);
	    }
	}
	return TiempoReinicio--;
}



Respuesta: Duda - Tusso4 - 13.11.2014

Pipe, no seria mejor poner -- arriba?, al ponerlo abajo no cogerб siempre la cifra anterior?


Respuesta: Duda - Pipe98 - 13.11.2014

No se XD, pero lo probe y funciono bien


Re: Duda - Metzone - 13.11.2014

No me funciona, lo que quiero es que diga cada 5 segundos que se reiniciarб, por eso dige lo de los timers.


El tuyo si reinicia el sv, pero solo manda un mensaje, que seria a los 60 seg se reiniciarб el sv, y ya, no dice mas mensajes, yo quiero esto ejemplo:


En 60 segundos se reiniciarб el servidor
En 30 segundos se reiniciarб el servidor
En 15 segundos se reiniciarб el servidor
En 10 segundos se reiniciarб el servidor


y asi hasta 0, por eso yo ponia los timers, pero no me funcionaba tampoco.


Respuesta: Duda - jotajeda - 14.11.2014

Saludos, mi intenciуn no es de que copies y pegues sino de que aprendes, ya que ami me hubiera
gustado que alguien me enseсase tambien pero lamentablemente no sabнa de la existencia de йste foro.
solamente me guiй con wikisamp, ayudo para que tambien me ayuden en los futuros problemas que tendrй como todos nosotros.


Vamos por paso, primero haste las variables locales,
pawn Код:
Contador_GMX, Timer_GMX,Confirmar_Reinicio[MAX_PLAYERS];
Comando para reiniciar.
pawn Код:
CMD:Reiniciar(playerid, params[])
{
    if(Es_Admin[playerid])
    {
        if(Confirmar_Reinicio[playerid])//cuando tenga 1 pasa.
        {
        Contador_GMX = 301; //esto quiere decir que Saldrб desde el case 300
        Timer_GMX = SetTimer("Funcion_GMX", 1000, true); //que se repita (true) cada 1 segundo
        SendClientMessageToAll ( -1 , "El querido servidor serб reiniciado en 5 minutos." ) ;
        return 1;
        }
        SendClientMessage(playerid, -1 , "Para confirmar reiniciar el servidor porfavor vuelve a introducir el comando" ) ;
        Confirmar_Reinicio[playerid] = 1;// asignamos 1,
    }
    return 1;
}
Comando para cancelar
pawn Код:
CMD:Cancelar(playerid, params[])//comando para matar el timer de gmx
{
    if(Es_Admin[playerid])
    {
        Contador_GMX = 0;
        KillTimer(Timer_GMX);
        SendClientMessage(playerid, -1 , "Mataste el tiempo Timer_GMX" ) ;
    }
    return 1;
}
Funcion para Funcion_GMX, aqui puedes jugar como tu desees.
pawn Код:
forward Funcion_GMX();
public Funcion_GMX()
{
    Contador_GMX--;//como pusimos al timer Timer_GMX que se repita cada segundo, cada segundo irб restando -1 a Contador_GMX.
    switch(Contador_GMX)//cada segundo el switch detectarб que numero tiene la variable Contador_GMX y dependiendo al numero darб al case.
    {
        case 0:
        {
            SendClientMessageToAll ( -1 , "Porfavor espera a que el servidor se cargue." ) ;
            KillTimer(Timer_GMX);
            SendRconCommand("gmx");
            //mas funciones bla bla bla.
        }
        case 1:
        {
        SendClientMessage(playerid, -1 , "El servidor serб reiniciado en 1 segundo.");
        }
        case 10:
        {
         Mifuncion;
         Mifuncion;
         Mifuncion;
        }
        case 20: Mifuncion;
        case 30: Mifuncion;
        case 40: Mifuncion;
        case 50: Mifuncion;
        case 60: Mifuncion;
        case 120: Mifuncion;
        case 180: SendClientMessageToAll ( -1 , "Falta 3 minutos." ) ;
        case 240: SendClientMessageToAll ( -1 , "Falta 4 minutos." ) ;
        case 300: SendClientMessageToAll ( -1 , "Falta 5 minutos." ) ;
    }
    return 1;
}



Respuesta: Duda - Juand - 14.11.2014

Quote:
Originally Posted by jotajeda
Посмотреть сообщение
Saludos, mi intenciуn no es de que copies y pegues sino de que aprendes, ya que ami me hubiera
gustado que alguien me enseсase tambien pero lamentablemente no sabнa de la existencia de йste foro.
solamente me guiй con wikisamp, ayudo para que tambien me ayuden en los futuros problemas que tendrй como todos nosotros.


Vamos por paso, primero haste las variables locales,
pawn Код:
Contador_GMX, Timer_GMX,Confirmar_Reinicio[MAX_PLAYERS];
Comando para reiniciar.
pawn Код:
CMD:Reiniciar(playerid, params[])
{
    if(Es_Admin[playerid])
    {
        if(Confirmar_Reinicio[playerid])//cuando tenga 1 pasa.
        {
        Contador_GMX = 301; //esto quiere decir que Saldrб desde el case 300
        Timer_GMX = SetTimer("Funcion_GMX", 1000, true); //que se repita (true) cada 1 segundo
        SendClientMessageToAll ( -1 , "El querido servidor serб reiniciado en 5 minutos." ) ;
        return 1;
        }
        SendClientMessage(playerid, -1 , "Para confirmar reiniciar el servidor porfavor vuelve a introducir el comando" ) ;
        Confirmar_Reinicio[playerid] = 1;// asignamos 1,
    }
    return 1;
}
Comando para cancelar
pawn Код:
CMD:Cancelar(playerid, params[])//comando para matar el timer de gmx
{
    if(Es_Admin[playerid])
    {
        Contador_GMX = 0;
        KillTimer(Timer_GMX);
        SendClientMessage(playerid, -1 , "Mataste el tiempo Timer_GMX" ) ;
    }
    return 1;
}
Funcion para Funcion_GMX, aqui puedes jugar como tu desees.
pawn Код:
forward Funcion_GMX();
public Funcion_GMX()
{
    Contador_GMX--;//como pusimos al timer Timer_GMX que se repita cada segundo, cada segundo irб restando -1 a Contador_GMX.
    switch(Contador_GMX)//cada segundo el switch detectarб que numero tiene la variable Contador_GMX y dependiendo al numero darб al case.
    {
        case 0:
        {
            SendClientMessageToAll ( -1 , "Porfavor espera a que el servidor se cargue." ) ;
            KillTimer(Timer_GMX);
            SendRconCommand("gmx");
            //mas funciones bla bla bla.
        }
        case 1:
        {
        SendClientMessage(playerid, -1 , "El servidor serб reiniciado en 1 segundo.");
        }
        case 10:
        {
         Mifuncion;
         Mifuncion;
         Mifuncion;
        }
        case 20: Mifuncion;
        case 30: Mifuncion;
        case 40: Mifuncion;
        case 50: Mifuncion;
        case 60: Mifuncion;
        case 120: Mifuncion;
        case 180: SendClientMessageToAll ( -1 , "Falta 3 minutos." ) ;
        case 240: SendClientMessageToAll ( -1 , "Falta 4 minutos." ) ;
        case 300: SendClientMessageToAll ( -1 , "Falta 5 minutos." ) ;
    }
    return 1;
}
Se complican la vida con tantas cosas ._.


Respuesta: Duda - jotajeda - 14.11.2014

Quote:
Originally Posted by Juand
Посмотреть сообщение
Se complican la vida con tantas cosas ._.
Saludos, їSabes algo mas sensillo? vamos compartenos.