[Duda]Como crear Timers entre funciones?
#1

Quй mejor dнa que tomar un Cafй Helado Frapucino e.e

Mi duda es la siguiente, cуmo crear timers entre funciones, como por ejemplo.

pawn Код:
if(strcmp,"/ChuckNorris",cmdtext, true)
{
 SendClientMessage(playerid, COLOR, "El vendrб por ti y te violarб en 5 segundos..");
 //El Timer por decнr en el ejemplo de un segundo
 SendClientMessage(playerid, COLOR, "Estarб aquн en 4 Segundos");
 //Otro segundo
 SendClientMessage(playerid, COLOR, "Estarб sobre tu cabeza en 3 Segundos..");
 //Y asн sucesivamente
 Kick(playerid)
 return 1;
} //Sуlo es un ejemplo :P
No trabajo mucho con timers pero me han surgido buenas ideas.

Saludos!
Reply
#2

si queres hacer eso con timers podes hacerlo asi:

pawn Код:
if(strcmp,"/ChuckNorris",cmdtext, true){
    SendClientMessage(playerid, COLOR, "El vendrб por ti y te violarб en 5 segundos..");
    SetTimerEx("Nombre", 1000, false, "i", playerid);
    return 1;
}

forward Nombre(playerid);
forward Nombre2(playerid);

public Nombre(playerid)
{
    SendClientMessage(playerid, COLOR, "Estarб aquн en 4 Segundos");
    SetTimerEx("Nombre2", 1000, false, "i", playerid);
}
public Nombre2(playerid)
{
    SendClientMessage(playerid, COLOR, "Estarб sobre tu cabeza en 3 Segundos..");
    Kick(playerid)
}
= ese codigo no es 100% eficiente, de hecho es muy poco eficiente creo yo

Nota:
Quote:
Originally Posted by Lunnatiicz
Посмотреть сообщение
pawn Код:
SendClientMessage(playerid, COLOR, "Estarб aquн en 4 Segundos
Sarpado fail
Reply
#3

Si es poco eficiente, їQuй es mбs eficiente que eso?
Reply
#4

Eso no va trabajar porque los timers no tienen el "parбmetro" de playerid..
Vas a tener que usar SetTimerEx
Ejemplo:
pawn Код:
if(strcmp,"/ChuckNorris",cmdtext, true)
{
    SendClientMessage(playerid, COLOR, "El vendrб por ti y te violarб en 5 segundos..");
    SetTimerEx("Nombre", 1000, false, "i", playerid);
    return 1;
}

forward Nombre(playerid);
forward Nombre2(playerid);

public Nombre(playerid)
{
    SendClientMessage(playerid, COLOR, "Estarб aquн en 4 Segundos");
    SetTimerEx("Nombre2", 1000, false, "i", playerid);
}
public Nombre2(playerid)
{
    SendClientMessage(playerid, COLOR, "Estarб sobre tu cabeza en 3 Segundos..");
    Kick(playerid);
}
Te puedo ayudar mas..pero para ahorita esto es lo que te puedo dar..si quieres mas ayuda pregunta me
Reply
#5

se alto fail el mio. eso pasa cuando te levantas a las 6am para ir a la facultad salis a las 5pm y de ahi te vas a un curso de barman, y volves a tu casa a las ~11.
Reply
#6

No es eficiente porque los timers son la funcion menos eficiente de la historia.
Habia una funciуn de MrDeath que aun era mas ineficiente, congelando el servidor, cosa que te serviria, pero es mejor esto.
Reply
#7

pawn Код:
static cat[MAX_PLAYERS] = 0, lol;
if(strcmp,"/ChuckNorris",cmdtext, true)
{
    SendClientMessage(playerid, COLOR, "El vendrб por ti y te violarб en 5 segundos..");
    lol = SetTimerEx("Nombre", 1000, true, "i", playerid);
    return 1;
}

forward Nombre(playerid);

public Nombre(playerid)
{

    if(cat[playerid] == 0) return SendClientMessage(playerid, COLOR, "Estarб aquн en 4 Segundos");
    if(cat[playerid] == 2)
    {
        SendClientMessage(playerid, COLOR, "Estarб sobre tu cabeza en 3 Segundos..");
        Kick(playerid);
        KillTimer(lol);
        return false;
    }
    return cat[playerid]++;
}
Reply
#8

Tambiйn podes utilizar GetTickCount(), le pones una referencia en el comando. Y pones en OnPlayerUpdate que mande el mensaje dependiendo cuanto sea la referencia.
Reply
#9

Puedes usar un timer que corra cada segundo sin parar, y por medio de variables haces que se resten segundos y se busque entre los jugadores.

pawn Код:
new
    ChuckNorris[2][MAX_PLAYERS] =
    {
        {0, ...}, // Para saber si hay que restar los segundos.
        {4, ...} // Cantidad de segundos a restar.
    };

public OnGameModeInit()
{
    SetTimer("CadaSegundo", 999, true);
    return 1;
}

forward CadaSegundo();
public CadaSegundo()
{
    for(new playerid = 0; playerid < MAX_PLAYERS; playerid ++)
    {
        if((ChuckNorris[0][playerid] == 1) && (IsPlayerConnected(playerid)))
        {
            switch(ChuckNorris[1][playerid])
            {
                case 4: // Mensaje
                case 3: // Mensaje
                case 2: // Mensaje
                case 1: // Mensaje
                case 0: // Expulsiуn
            }
            ChuckNorris[1][playerid] --;
        }
    }
    return 1;
}

// OnPlayerCommantText
if(strcmp(cmdtext, "vaginanorris", true) == 0)
{
    if(ChuckNorris[0][playerid] == 1)
    {
        ChuckNorris[0][playerid] = 0;
        ChuckNorris[1][playerid] = 4;
        SendClientMessage(playerid, 0xFFFFFFFF, "* ЎChuck Norris decidiу no violarte!");
    }
    else
    {
        ChuckNorris[0] = 1;
        SendClientMessage(playerid, 0xFFFFFFFF, "* ЎChuck Norris mata dos piedras con un pajaro!");
        SendClientMessage(playerid, 0xFFFFFFFF, "* ЎAhora viene a matar un elefante contigo!);
    }
    return 1;
}
Reply
#10

Quote:
Originally Posted by SuperMarioRol
Посмотреть сообщение
No es eficiente porque los timers son la funcion menos eficiente de la historia.
Habia una funciуn de MrDeath que aun era mas ineficiente, congelando el servidor, cosa que te serviria, pero es mejor esto.
Mi funciуn congela el server por el tiempo indicado, es bastante inъtil.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)