Ir para conteúdo
  • 0

Erros em GetThingFromPos


BreisPodeu

Pergunta

Tipo: creatureevents

Versão: 8.6

Servidor: OTX 2.81 based in TFS 0.3.7

Descrição:

 

Então.. Eu fiz um script que quando o monstro morre, ele tem a chance de receber alguma coisa no corpo.. O problema é na hora de buscar o corpo desse monstro..

Quando o monstro não tem corpo, ou então o corpo do monstro é um item qualquer (ou até um teleport, no caso de alguns monstros do meu servidor), o script que fiz trava o servidor, pois procura algo e tenta usar as informações que não existem..

 

A função que fiz pra pegar o corpo do monstro é essa:

function getCorpse(pos)
    local item
    position = {x= pos.x, y= pos.y, z= pos.z, stackpos = 0}
    for stack = STACKPOS_GROUND, STACKPOS_TOP_MOVABLE_ITEM_OR_CREATURE do
        position.stackpos = stack
        item = getThingFromPos(position)
        if item.uid ~= nil then
            if (isCorpse(item.uid)) then
                return item
            end
        end
    end
    return false
end

Se o monstro for um item que não tem um corpseType (o que é usado nessa função isCorpse), o script acaba travando o server, fazendo todas 255 checagens de stacks lentamente...

Alguem saberia um jeito de me ajudar a melhorar o script?

Editado por BreisPodeu
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Tem uma funcao que pega todos os stacks ocupados do tile, nao me lembro bem o nome e algo como getTileThings, algo assim

dai ele te retorna uma lista delas, vai ser a melhor forma de fazer isso, pois nao vai precisar iterar mais do que o numero existente de things no tile.

Link para o comentário
Compartilhar em outros sites

  • 0

 

E se vc tentar ir bloqueando os itens tipo o tp? Tipo assim

if item.uid ~= nil and item.uid ~= 1387 then

É isso que eu estou fazendo +-, mas com o nome das creatures, pq essa função é ativada com o onKill... Dai eu tou bloqueando pelo nome dos monstros.. O problema é que mesmo assim aparece milagrosamente algum monstro por ai que não tem nenhum corpo.. Daí trava o servidor kkk

 

 

Tem uma funcao que pega todos os stacks ocupados do tile, nao me lembro bem o nome e algo como getTileThings, algo assim

dai ele te retorna uma lista delas, vai ser a melhor forma de fazer isso, pois nao vai precisar iterar mais do que o numero existente de things no tile.

 

Vou dar uma olhada se existe essa função aqui =P

 

Edit.: A unica função parecida com essa que existe aqui é getTileThingByPos, que se for olhar é a mesma coisa que estou fazendo, teria que varrer todos stacks...

 

 

Editado por BreisPodeu
Link para o comentário
Compartilhar em outros sites

  • 0
Link para o comentário
Compartilhar em outros sites

  • 0

Vou dar uma olhada aqui, qualquer coisa volto a postar aqui no tópico.. Vlws

 

Edit.: Cara, funcionou aqui, agora não preciso varrer todos stacks de um tile, a função daquele Loot Money, de pegar um container, pega o primeiro container no chao, ou seja, sempre vai pegar o corpo do monstro que acabou de morrer, daí se der algum erro, é soh um kkk Vlws :D

Editado por BreisPodeu
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...