Realmente é uma função que pode pesar se vc configurar um área muito grande.
Acho que a tentativa mais fácil aqui é vc verificar se esse for
for i = 0, 255 do
é realmente necessário... as vezes os monstros ficam em um só stackpos, porque monstros não andam um sobre os outros, e player tbm não pode atravessar monstro, acho que só empilharia (usaria mais de um stack) se tivesse uma escada descendo nessa área, algo assim. Só não lembro pra te dizer em qual stackpos os monstros ficam por padrão.
Se você souber, e não tiver escadas nessa área, sugiro com primeira tentativa, configurar o stackpos e tirar esse for.
Como segunda tentativa, o ideal seria rever como surgem esses monstros que voce está removendo, se for spawn normal acho que não teria como, mas se esses monstros surgirem com uma alavanca daria pra salvar o ID deles e depois remover por ID, em vez de scanear o mapa atrás dele, mas aqui teria uma pouco mais de trabalho


info
Grupo: Campones
Registrado: 24/12/17
Posts: 37
Reputação: 0
Gênero: Masculino
Alguém me ajuda a otimizar essa function para otx 2.12, ela funciona porém ao roda a function o servidor "congela" e após a function completar sua verificação o servidor "descongela"
addEvent(function (removeMonsterInArea) if not isCreature(cid) then return end local positionsCheck = {} for i = config.from.x, config.to.x do positionsCheck[#positionsCheck+1] = {x=i, y = config.from.y, z = config.from.z, stackpos = 0} for j = config.from.y+1, config.to.y do positionsCheck[#positionsCheck+1] = {x=i, y = j, z = config.from.z, stackpos = 0} end end for j=1, #positionsCheck do for i = 0, 255 do positionsCheck[j].stackpos = i local tile = getTileThingByPos(positionsCheck[j]) if isMonster(tile.uid) then doRemoveCreature(tile.uid) end end end return true end, config.time*60*1000, cid)