[Ajuda] [Duvida] SetTimer's podem lagar o servidor?
#1

Galera eu tenho uma dъvida, tenho uns timer's de 100 milisegundos e gostaria de saber se eles lagam o server ou nгo?
Reply
#2

depende... usa mais de uma funзгo em cada timer que vocк for usar 1000 milisegundos.
Abraзos.
Reply
#3

Sim, principalme strings inъteis ou exageradas.

Quote:
Originally Posted by Falcon.
Посмотреть сообщение
A questгo nгo й muitos timers, e sim o que vai ser executado no final do mesmo.

suponhamos: SetTimer("MyCallback", a cada 100 milisegundos);

Cуdigo A:
PHP код:
MyCallback()
{
    
FunзгoMarte();
    
FunзгoTerra(people);
    
FunзгoDebug(imprimir);
    
FunзгoMensagem(Hello world);
    
FunзгoAntiCheater(modificaзхes);
    return 
0x01;

Cуdigo B:
PHP код:
MyCallback()
{
    
FunзгoDebug(imprimir);
    
FunзгoAntiCheater(modificaзхes);
    return 
0x01;

Suponhamos existir 12 timers como o do exemplo chamando as funзхes, logo o exemplo A iria levar mais tempo para ser executada, causando uma "espera" maior por parte do servidor para processar o resto das coisas como, chat, renderizaзгo de objetos, etc...

Eu jб utilizei cerca de 16 timers por parte do servidor mais um para cada player em um servidor RPG com cerca de 30 players e nгo causou lag algum. Lembrando que vale contar tambйm os outros requisitos como citei no outro post.
Reply
#4

um timer assim por exemplo causaria lag nos players?
pawn Код:
//onplayerspawn
    timerAtualizarFS = SetTimerEx("AtualizarFomeSede", 100, true, "i", playerid);
    timerDiminuirFS = SetTimerEx("DiminuirFomeSede", 120000, true, "i", playerid);
    timerAtualizarBH = SetTimerEx("AtualizarNecessidades", 100, true, "i", playerid);
    timerDiminuirBH = SetTimerEx("DiminuirBanheiroHigiene", 240000, true, "i", playerid);
//onplayerdeath
    KillTimer(timerAtualizarFS);
    KillTimer(timerDiminuirFS);
    KillTimer(timerAtualizarBH);
    KillTimer(timerDiminuirBH);
//o que eles irгo executar
forward AtualizarFomeSede(playerid);
public AtualizarFomeSede(playerid)
{
    if(fsBarFome[playerid] != INVALID_BAR_ID)
    {
        SetProgressBarValue(fsBarFome[playerid], InfoJogador[playerid][iFome]);
        UpdateProgressBar(fsBarFome[playerid], playerid);
        if(InfoJogador[playerid][iFome] < 70 && InfoJogador[playerid][iFome] > 20)
        {
            SetProgressBarColor(fsBarFome[playerid], 0xFFC801C8);
        }
        if(InfoJogador[playerid][iFome] < 20)
        {
            SetProgressBarColor(fsBarFome[playerid], vermelho);
        }
        else if(InfoJogador[playerid][iFome] > 70)
        {
            SetProgressBarColor(fsBarFome[playerid], groove);
        }
    }
    if(fsBarSede[playerid] != INVALID_BAR_ID)
    {
        SetProgressBarValue(fsBarSede[playerid], InfoJogador[playerid][iSede]);
        UpdateProgressBar(fsBarSede[playerid], playerid);
        if(InfoJogador[playerid][iSede] < 70 && InfoJogador[playerid][iSede] > 20)
        {
            SetProgressBarColor(fsBarSede[playerid], 0xFFC801C8);
        }
        if(InfoJogador[playerid][iSede] < 20)
        {
            SetProgressBarColor(fsBarSede[playerid], vermelho);
        }
        else if(InfoJogador[playerid][iSede] > 70)
        {
            SetProgressBarColor(fsBarSede[playerid], groove);
        }
    }
    new Float:Vida;
    GetPlayerHealth(playerid, Vida);
    if(devecomer[playerid] == 5)
    {
        devecomer[playerid] = 0;
        if(InfoJogador[playerid][iFome] <= 0)
        {
            SetPlayerHealth(playerid, Vida-1);
        }
        if(InfoJogador[playerid][iSede] <= 0)
        {
            SetPlayerHealth(playerid, Vida-1);
        }
    }
    else if(devecomer[playerid] < 5)
    {
        devecomer[playerid]++;
    }
    return 1;
}

forward DiminuirFomeSede(playerid);
public DiminuirFomeSede(playerid)
{
    if(InfoJogador[playerid][iSede] > 0)
    {
        InfoJogador[playerid][iSede]--;
    }
    if(InfoJogador[playerid][iFome] > 0)
    {
        InfoJogador[playerid][iFome]--;
    }
    if(InfoJogador[playerid][iFome] < 20)
    {
        MP(playerid, grad3, "Vб comer algo, vocк estб faminto!");
    }
    else if(InfoJogador[playerid][iFome] < 60 && InfoJogador[playerid][iFome] > 20)
    {
        MP(playerid, grad3, "Vocк estб ficando com fome, melhor procurar algo para comer! Ou vocк comeзarб perder vida!");
    }
    if(InfoJogador[playerid][iSede] < 20)
    {
        MP(playerid, grad3, "Vб beber algo, vocк estб com muita sede!");
    }
    else if(InfoJogador[playerid][iSede] < 60 && InfoJogador[playerid][iSede] > 20)
    {
        MP(playerid, grad3, "Vocк estб ficando com sede, melhor procurar algo para beber! Ou vocк comeзarб perder vida!");
    }
    return 1;
}

forward AtualizarNecessidades(playerid);
public AtualizarNecessidades(playerid)
{
    if(fsBarBanheiro[playerid] != INVALID_BAR_ID)
    {
        SetProgressBarValue(fsBarBanheiro[playerid], InfoJogador[playerid][iBanheiro]);
        UpdateProgressBar(fsBarBanheiro[playerid], playerid);
        if(InfoJogador[playerid][iBanheiro] < 70 && InfoJogador[playerid][iBanheiro] > 20)
        {
            SetProgressBarColor(fsBarBanheiro[playerid], 0xFFC801C8);
        }
        if(InfoJogador[playerid][iBanheiro] < 20)
        {
            SetProgressBarColor(fsBarBanheiro[playerid], vermelho);
        }
        else if(InfoJogador[playerid][iBanheiro] > 70)
        {
            SetProgressBarColor(fsBarBanheiro[playerid], groove);
        }
    }
    if(fsBarHigiene[playerid] != INVALID_BAR_ID)
    {
        SetProgressBarValue(fsBarHigiene[playerid], InfoJogador[playerid][iHigiene]);
        UpdateProgressBar(fsBarHigiene[playerid], playerid);
        if(InfoJogador[playerid][iHigiene] < 70 && InfoJogador[playerid][iHigiene] > 20)
        {
            SetProgressBarColor(fsBarHigiene[playerid], 0xFFC801C8);
        }
        if(InfoJogador[playerid][iHigiene] < 20)
        {
            SetProgressBarColor(fsBarHigiene[playerid], vermelho);
        }
        else if(InfoJogador[playerid][iHigiene] > 70)
        {
            SetProgressBarColor(fsBarHigiene[playerid], groove);
        }
    }
    return 1;
}
Reply
#5

creio que a fome poderia ser chamada de 1000 ms em 1000 ms assim como o outro, n iria causar problema.
Reply
#6

Quote:
Originally Posted by hard_dalzot
Посмотреть сообщение
um timer assim por exemplo causaria lag nos players?
pawn Код:
//onplayerspawn
    timerAtualizarFS = SetTimerEx("AtualizarFomeSede", 100, true, "i", playerid);
    timerDiminuirFS = SetTimerEx("DiminuirFomeSede", 120000, true, "i", playerid);
    timerAtualizarBH = SetTimerEx("AtualizarNecessidades", 100, true, "i", playerid);
    timerDiminuirBH = SetTimerEx("DiminuirBanheiroHigiene", 240000, true, "i", playerid);
//onplayerdeath
    KillTimer(timerAtualizarFS);
    KillTimer(timerDiminuirFS);
    KillTimer(timerAtualizarBH);
    KillTimer(timerDiminuirBH);
//o que eles irгo executar
forward AtualizarFomeSede(playerid);
public AtualizarFomeSede(playerid)
{
    if(fsBarFome[playerid] != INVALID_BAR_ID)
    {
        SetProgressBarValue(fsBarFome[playerid], InfoJogador[playerid][iFome]);
        UpdateProgressBar(fsBarFome[playerid], playerid);
        if(InfoJogador[playerid][iFome] < 70 && InfoJogador[playerid][iFome] > 20)
        {
            SetProgressBarColor(fsBarFome[playerid], 0xFFC801C8);
        }
        if(InfoJogador[playerid][iFome] < 20)
        {
            SetProgressBarColor(fsBarFome[playerid], vermelho);
        }
        else if(InfoJogador[playerid][iFome] > 70)
        {
            SetProgressBarColor(fsBarFome[playerid], groove);
        }
    }
    if(fsBarSede[playerid] != INVALID_BAR_ID)
    {
        SetProgressBarValue(fsBarSede[playerid], InfoJogador[playerid][iSede]);
        UpdateProgressBar(fsBarSede[playerid], playerid);
        if(InfoJogador[playerid][iSede] < 70 && InfoJogador[playerid][iSede] > 20)
        {
            SetProgressBarColor(fsBarSede[playerid], 0xFFC801C8);
        }
        if(InfoJogador[playerid][iSede] < 20)
        {
            SetProgressBarColor(fsBarSede[playerid], vermelho);
        }
        else if(InfoJogador[playerid][iSede] > 70)
        {
            SetProgressBarColor(fsBarSede[playerid], groove);
        }
    }
    new Float:Vida;
    GetPlayerHealth(playerid, Vida);
    if(devecomer[playerid] == 5)
    {
        devecomer[playerid] = 0;
        if(InfoJogador[playerid][iFome] <= 0)
        {
            SetPlayerHealth(playerid, Vida-1);
        }
        if(InfoJogador[playerid][iSede] <= 0)
        {
            SetPlayerHealth(playerid, Vida-1);
        }
    }
    else if(devecomer[playerid] < 5)
    {
        devecomer[playerid]++;
    }
    return 1;
}

forward DiminuirFomeSede(playerid);
public DiminuirFomeSede(playerid)
{
    if(InfoJogador[playerid][iSede] > 0)
    {
        InfoJogador[playerid][iSede]--;
    }
    if(InfoJogador[playerid][iFome] > 0)
    {
        InfoJogador[playerid][iFome]--;
    }
    if(InfoJogador[playerid][iFome] < 20)
    {
        MP(playerid, grad3, "Vб comer algo, vocк estб faminto!");
    }
    else if(InfoJogador[playerid][iFome] < 60 && InfoJogador[playerid][iFome] > 20)
    {
        MP(playerid, grad3, "Vocк estб ficando com fome, melhor procurar algo para comer! Ou vocк comeзarб perder vida!");
    }
    if(InfoJogador[playerid][iSede] < 20)
    {
        MP(playerid, grad3, "Vб beber algo, vocк estб com muita sede!");
    }
    else if(InfoJogador[playerid][iSede] < 60 && InfoJogador[playerid][iSede] > 20)
    {
        MP(playerid, grad3, "Vocк estб ficando com sede, melhor procurar algo para beber! Ou vocк comeзarб perder vida!");
    }
    return 1;
}

forward AtualizarNecessidades(playerid);
public AtualizarNecessidades(playerid)
{
    if(fsBarBanheiro[playerid] != INVALID_BAR_ID)
    {
        SetProgressBarValue(fsBarBanheiro[playerid], InfoJogador[playerid][iBanheiro]);
        UpdateProgressBar(fsBarBanheiro[playerid], playerid);
        if(InfoJogador[playerid][iBanheiro] < 70 && InfoJogador[playerid][iBanheiro] > 20)
        {
            SetProgressBarColor(fsBarBanheiro[playerid], 0xFFC801C8);
        }
        if(InfoJogador[playerid][iBanheiro] < 20)
        {
            SetProgressBarColor(fsBarBanheiro[playerid], vermelho);
        }
        else if(InfoJogador[playerid][iBanheiro] > 70)
        {
            SetProgressBarColor(fsBarBanheiro[playerid], groove);
        }
    }
    if(fsBarHigiene[playerid] != INVALID_BAR_ID)
    {
        SetProgressBarValue(fsBarHigiene[playerid], InfoJogador[playerid][iHigiene]);
        UpdateProgressBar(fsBarHigiene[playerid], playerid);
        if(InfoJogador[playerid][iHigiene] < 70 && InfoJogador[playerid][iHigiene] > 20)
        {
            SetProgressBarColor(fsBarHigiene[playerid], 0xFFC801C8);
        }
        if(InfoJogador[playerid][iHigiene] < 20)
        {
            SetProgressBarColor(fsBarHigiene[playerid], vermelho);
        }
        else if(InfoJogador[playerid][iHigiene] > 70)
        {
            SetProgressBarColor(fsBarHigiene[playerid], groove);
        }
    }
    return 1;
}
Apenas complementando, vocк deve declarar as variбveis dos timers por jogadores (exemplo: timerAtualizarFS[playerid] = SetTimerEx..) assim vocк nгo terб problemas futuros.
Reply
#7

Quote:
Originally Posted by DrTHE
Посмотреть сообщение
Apenas complementando, vocк deve declarar as variбveis dos timers por jogadores (exemplo: timerAtualizarFS[playerid] = SetTimerEx..) assim vocк nгo terб problemas futuros.
boa kkkk eu tinha esquecido desse detalhe *--*

Quote:
Originally Posted by PT
Посмотреть сообщение
creio que a fome poderia ser chamada de 1000 ms em 1000 ms assim como o outro, n iria causar problema.
tava assim eu resolvi atualizar mais rбpido, mas entгo vou deixar em 1000ms

obrigado pelas dicas ai galera
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)