Ir para conteúdo

Featured Replies

Postado

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"

 

Você tem o código disponível? Se tiver publique-o aqui: 

 					
					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)

Script utilizado foi do tópico [0.3.6] Quest Anihi 8.54 100% configuravel - Otimizado - Action, MoveEvent, TalkAction & Spell - Tibia King - Tudo sobre Tibia, OTServ e Bots!

 

Postado
  • Autor
  Em 15/06/2022 em 19:01, daviscript disse:

Ela funciona em qual script? Posta o script aqui para verificarmos. E o que você deseja que essa função faça? Remova monstros de uma área específica?

Funciona no padrão que foi postado. Desejo que ela faça exatamente oque está fazendo, mas acho que está com erro pois toda vez que é executada ela congela o server

  • 4 weeks later...
Postado
  Em 15/06/2022 em 20:52, XGaduX disse:

Funciona no padrão que foi postado. Desejo que ela faça exatamente oque está fazendo, mas acho que está com erro pois toda vez que é executada ela congela o serve

mas claro, fica checando a area toda varias vezes kkkkkk, eu tenho uma função no meu server, muito mais clean mano...

bota essas 2 funtions na sua lib

function doCleanArea(pos_superior_esquerda, pos_inferior_direita)
    local monsters = getMonstersInArea(pos_superior_esquerda, pos_inferior_direita)
    for _, cid in pairs(monsters) do
        doRemoveCreature(cid)
    end
end

 

function getMonstersInArea(pos1,pos2)
    local monsters = {}
    if pos1.x and pos1.y and pos2.x and pos2.y and pos1.z == pos2.z then
        for a = pos1.x, pos2.x do
            for b = pos1.y,pos2.y do
                local pos = {x=a,y=b,z=pos1.z}
                if isMonster(getTopCreature(pos).uid) and not isSummon(getTopCreature(pos).uid) then
                    table.insert(monsters,getTopCreature(pos).uid)
                end
            end
        end
        return monsters
    else
        return false
    end
end

 

ai no teu script ó chamar a função doCleanArea

ex:

doCleanArea( {x=1000, y=1000, z=7}, {x=1010, y=1010, z=7} )

ou pode setar antes e colocar no script só a variável.

ps: caso queira que remova até summon tira o " and not isSummon(getTopCreature(pos).uid) "

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