Ir para conteúdo

Featured Replies

Postado

Estou refazendo o sistema de clean, mas ta usando muita CPU (100% de um core).

function onSay(cid, words, param, channel)
    local pos = {}
    local fromPos, toPos, toFloor = 800, 1200, 15
    for x = fromPos, toPos do
        for y = fromPos, toPos do
            for z = 0, toFloor do
                local coord = {x = x, y = y, z = z, stackpos = 0}
                if getTileThingByPos(coord).itemid ~= 0 and not getTileInfo(coord).house then
                    table.insert(pos, coord)
                end
            end
        end
    end

    local delay = 0.0001
    local _delay, i = delay, 1
    while i <= #pos do
        addEvent(doCleanTile, delay, pos[i], false)
        i = i + 1
        delay = delay + _delay
    end

    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Game map cleaned.')
    return true
end

Num mapa pequeno não tem problema, mas num mapa grande tem chances de travar o pc...

Alguém tem alguma sugestão para diminuir o uso de CPU?

Editado por fireelement (veja o histórico de edições)

  • Respostas 5
  • Visualizações 389
  • Created
  • Última resposta

Top Posters In This Topic

Postado

Não da pra dividir em partes? Cria uma ou duas funções, cada uma dando save em xx tabela, e a outra em xxx tabela.

 

Compreende?

Postado
  • Autor

Não da pra dividir em partes? Cria uma ou duas funções, cada uma dando save em xx tabela, e a outra em xxx tabela.

 

Compreende?

O problema não ta no doCleanTile, e sim no table.insert, pois insere muitos valores ao mesmo tempo.

Queria tentar colocar um addEvent no table.insert também, mas não consegui fazer isso :mad:

Postado

não usa o table.insert.

 

function onSay(cid, words, param, channel)
    local fromPos, toPos, toFloor = 800, 1200, 15
    for x = fromPos, toPos do
        for y = fromPos, toPos do
            for z = 0, toFloor do
                local coord = {x = x, y = y, z = z, stackpos = 0}
                if getTileThingByPos(coord).itemid ~= 0 and not getTileInfo(coord).house then
					addEvent(doCleanTile, 1, coord, false)
                end
            end
        end
    end

    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Game map cleaned.')
    return true
end

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo