BR
pedido

Erros em GetThingFromPos

Por BreisPodeu, 10 de jan. de 2014 em Scripts

resolvido
script
8
1.7k
BreisPodeuB
10 de janeiro de 2014 às 19:18

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 Janeiro 10 por BreisPodeu

dalvorsnD
11 de janeiro de 2014 às 15:49

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.

KilluaK
11 de janeiro de 2014 às 17:02

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


if item.uid ~= nil and item.uid ~= 1387 then
BreisPodeuB
11 de janeiro de 2014 às 20:09

 

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 Janeiro 11 por BreisPodeu

OmegaO
12 de janeiro de 2014 às 04:02

http://www.xtibia.com/forum/topic/221467-auto-loot-money

http://www.xtibia.com/forum/topic/190934-mod-auto-loot-update

http://www.xtibia.com/forum/topic/173614-auto-loot-system/

 

São alguns tópicos que usam funções pra conseguir o corpo do monstro. Boa sorte.

BreisPodeuB
13 de janeiro de 2014 às 10:21

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 Janeiro 13 por BreisPodeu

OmegaO
13 de janeiro de 2014 às 12:59

Tópico movido para a seção de dúvidas e pedidos resolvidos.

dalvorsnD
19 de janeiro de 2014 às 09:37

Lembrei a função

 

getTileInfo(pos).things -- isso e uma tabela com todos os things que tem no tile