[Ajuda] Isso vai dar Lag?
#1

Estou com uma dъvida, geralmente os cуdigos que faзo, funcionam, sу que sempre faзo eles do pior jeito possнvel(menos otimizado).
Primeiramente, eu criei uma Callback chamada "Update", ela й chamada a cada segundo, e toda vez que ela й chamada, passa um loop em todos os players, e faz coisas como diminuir tempo preso, atualizar velocimetro e etc.
Estб certo este jeito? Ou devo criar um timer para cada jogador quando ele se conecta? Assim evitando um Loop a cada 1 segundo.

Essa foi uma dъvida pequena, agr tem a dъvida que foi o motivo de eu criar o tуpico, eu gostaria que sempre que alguйm fosse em frente alguma porta, Aparecesse uma mensagem(GameText), escrito /entrar.

Eu fiz o seguinte:
PHP Code:
    //...
    
for(new Proc 0Proc MAX_EMRESASProc++)
    {
        if(
IsPlayerInRangeOfPoint(playerid2EntradaEmpresas[Proc][EmpX], EntradaEmpresas[Proc][EmpY], EntradaEmpresas[Proc][EmpZ]))
        {
            
GameTextForPlayer(playerid"/Entrar"10005);
            return 
1;
        }
    }
    
//... 
O problema й que, a cada segundo, a Callback Update й chamada, e dб um loop em todos os player online, e a cada volta desse loop, acontece mais um loop para ver se o player estб perto de uma das entradas.

Obs: MAX_EMPRESAS й igual 200.

Tem algum jeito de fazer isso, sem causar lag?
Reply
#2

Por que ao invйs de utilizar checagens de бreas em loop nгo utiliza a Streamer? (Se jб houver o uso dela em seu game-mode).

Nгo vai prejudicar em nada o desempenho. Й mais simples e bem melhor do que ficar utilizando timers para isto.

Code:
CreateDynamicCylinder(Float:x, Float:y, Float:minz, Float:maxz, Float:size, worldid = -1, interiorid = -1, playerid = -1);
OnPlayerEnterDynamicArea(playerid, areaid);
nPlayerLeaveDynamicArea(playerid, areaid);
Reply
#3

Acredito que nгo hб necessidade de ficar tгo pirado com esse negуcio de "otimizaзгo". Seu servidor nгo deve ter uns 200 jogadores, de modo que o lag nгo й tгo perceptнvel. A outra opзгo para a sua CallBackUpdate й colocar no OnPlayerUpdate, mas esta й atualizada com ainda mais frequкncia. Acho que o cуdigo deve permanecer como estб.
Reply
#4

Quote:
Originally Posted by connork
View Post
Por que ao invйs de utilizar checagens de бreas em loop nгo utiliza a Streamer? (Se jб houver o uso dela em seu game-mode).

Nгo vai prejudicar em nada o desempenho. Й mais simples e bem melhor do que ficar utilizando timers para isto.

Code:
CreateDynamicCylinder(Float:x, Float:y, Float:minz, Float:maxz, Float:size, worldid = -1, interiorid = -1, playerid = -1);
OnPlayerEnterDynamicArea(playerid, areaid);
nPlayerLeaveDynamicArea(playerid, areaid);
Ok, eu nгo conhecia essa funзгo, vou tentar usar ela.



Quote:
Originally Posted by Shadoww5
View Post
Acredito que nгo hб necessidade de ficar tгo pirado com esse negуcio de "otimizaзгo". Seu servidor nгo deve ter uns 200 jogadores
Nem abriu, й apenas um projeto ainda, mas de qualquer forma, eu gostaria de ter ele feito da melhor forma possivel
Reply
#5

Vocк deveria usar gettime para calcular intervalos de tempo, e nгo timers.
Reply
#6

Sempre usei timers de um segundo pra fazer essas coisas e nunca tive problemas

Mas й bom vocк criar sу um.
Reply
#7

Bem, й bem melhor utilizar SetTimerEx do que SetTimer com Loop, sem dъvida alguma. Ainda mais para aqueles que ainda utilizam MAX_PLAYERS ao invйs de GetPlayerPoolSize.
Reply
#8

Quote:
Originally Posted by JonathanFeitosa
View Post
Bem, й bem melhor utilizar SetTimerEx do que SetTimer com Loop, sem dъvida alguma. Ainda mais para aqueles que ainda utilizam MAX_PLAYERS ao invйs de GetPlayerPoolSize.
Era exatamente essa uma das minhas dъvidas, eu atй uso GetPlayerPoolSize, mas ainda tinha duvida se eu deveria usar SetTimer com Loop ou SetTimerEx quando alguem conecta.
Reply
#9

Й claro que nгo, mano; o cara sу envia uma mensagem (gametext).
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)