Jump to content

Usar e abusar de settimer laga?


Recommended Posts

  • Other Languages Moderators

Olá!

Off-topic: Pedi para moverem o seu tópico da seção Inglesa para a nossa, Portuguesa. Acredito que você tenha errado aí o botão. :laughing6:

On-topic: Isso vai depender do que o setTimer está processando. Por exemplo, digamos que seja isto:

setTimer(function()
    outputChatBox("* Enviando mensagem para todos os jogadores a cada segundo!", root, 255, 255, 255, true)
end, 1000, 0)

Com certeza não vai causar impacto algum no servidor. É apenas uma linha de código, e a função é bem simples. Agora, se você deseja usar um laço de repetição em todos os jogadores e processar banco de dados junto, ou sei lá mais o que - daí sim nós teremos um problema. Um grande problema, aliás.

Não sei qual é o seu nível de experiência com a linguagem Lua, nem com a base do MTA:SA. Mesmo que seja bastante, ainda assim não seria suficiente para realizar as devidas otimizações. Uma boa solução possível é usar a lib Async (link1, link2). Ela cria uma thread para processar os dados, de maneira lenta e sem causar problemas de desempenho no servidor.

Digamos que você tenha uma tabela e queira usar o async. Você usaria desta maneira:

setTimer(function()
    local players = getElementsByType("player")
    Async:foreach(players, false, function(player)
        local playerName = getPlayerName(player)
        outputChatBox("* Este é o seu nickname: " .. playerName, player, 255, 255, 255, true)
    end)
end, 1000, 0)

Os parâmetros do método foreach são:

  • Uma tabela - Usei a tabela de jogadores mesmo, como exemplo
  • Um valor true ou false - Sinalizando se a tabela é pairs ou ipairs
  • Uma função - Que recebe no parâmetro o valor de cada iteração (também há o segundo parâmetro, que seria o índice. Optei por não utilizar)

Caso tenha ficado alguma dúvida, só perguntar. :)

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...