Ir para conteúdo

Featured Replies

Postado
  • Autor
Em 19/07/2020 em 19:45, WooX disse:

A resposta é não, pelo menos não uma função Lua.

 

Tenta buscar pelo atributo "corpseowner" com a função getItemAttribute, pode ser que funcione.

 

Eu não me recordo da existência dos parâmetros lastHitKiller e mostDamageKiller, pelo menos não no TFS 0.4. Mas se o callback realmente retornar estes valores, a solução pro problema ta ai, só utilizar o mostDamageKiller que vai retornar quem deu mais dano.

 

Edit: me lembrei que um conhecido estava passando por este mesmo problema a algum tempo atrás, eu cheguei a postar a solução que ele encontrou em outro tópico, pode dar uma olhada.

 

 

A solução foi MUITO mais simples do que eu pensei, agradeço a ajuda de todos vocês, vocês são fod@!!

Segue enredo:

A função onDeath tem duas matrizes: lastHitKiller e mostDamageKiller.

Quando voce usa deathList[1] aplica-se a matriz lastHitKiller, o jogador que causou o hit kill.
Quando voce usa deathList[2] aplica-se a matriz mostDamageKiller ou seja, o maior causador de dano.

Na onPrepareDeath, mesma regra etc..

Citar

function onPrepareDeath(cid, deathList)
	lastHitKiller = deathList[1]
	mostDamageKiller = deathList[2]

Logo minha função ficou assim:
 

Citar

function onDeath(cid, corpse, deathList)

local killer1 = deathList[1]
local killer2 = deathList[2]
local pos = getCreaturePosition(cid)

if killer2 == nil then
addEvent(corpseRetireItems,1,killer1,pos)
else
addEvent(corpseRetireItems,1,killer2,pos)
end
return true
end

Vale a pena lembrar que voce deve criar verificaçoes basicas como if isPlayer(cid) and isMonster(target).
No meu caso, nao foi necessario porque a verificação é feita num evento "combat" e ele joga os players determinado para o onDeath.

RESOLVIDO.
 

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

  • Respostas 14
  • Visualizações 1.2k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Se você quer trabalhar somente com o player que pegou o loot você pode utilizar a função da seguinte forma: function onDeath(cid, corpse, lastHitKiller, mostDamageKiller) local killer = lastHitKil

  • A resposta é não, pelo menos não uma função Lua.   Tenta buscar pelo atributo "corpseowner" com a função getItemAttribute, pode ser que funcione.   Eu não me recordo da existên

  • A solução foi MUITO mais simples do que eu pensei, agradeço a ajuda de todos vocês, vocês são fod@!! Segue enredo: A função onDeath tem duas matrizes: lastHitKiller e mostDamageKiller. Quando

Postado

Era mais facil fazer uma tabela que não executasse nesse tipo de boss...

 

BlockMonsters = {"Demon","Hydra"} -- nome dos mobs
	if isMonster(cid) and not isInArray(BlockMonsters, getCreatureName(cid)) then
		-- sua função do autoLoot
	end

 

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Postado

Mas se o evento onDeath só ativa em monstros cujo tiveram a tag da script registrada (me corrija se eu estiver errado), não seria 1 tanto quanto desnecessário adicionar uma checagem pra ver se o monstro morto deve ou não ativar a script de autoloot, sendo que bastaria não registrar a tag nos monstros que você não quer que ative a script. Claro que a situação mudaria se a função fosse de onKill.

Postado
  • Autor
22 minutos atrás, Vodkart disse:

Era mais facil fazer uma tabela que não executasse nesse tipo de boss...

 


BlockMonsters = {"Demon","Hydra"} -- nome dos mobs
	if isMonster(cid) and not isInArray(BlockMonsters, getCreatureName(cid)) then
		-- sua função do autoLoot
	end

 

Olá grande mestre!
Perdoe-me minha ignorancia, mas nao entendi bem sua colocação.

Meu problema não está relacionado a criatura x ou y e sim ao fato do lastHitKiller ficar com o loot da tabela mesmo se desse apenas 1 de dano em determinada criatura.
Sendo assim, ele não seria o dono do corpo morto mas ficaria com o loot "rare" de outro consequentemente.
Isso é resolvido buscando a matriz deathList[2] no onDeath - que certifica de dar o loot ao jogador certo ( o que deu mais dano ).

Ficou 100% perfeito agora.

7 minutos atrás, Tottin disse:

Mas se o evento onDeath só ativa em monstros cujo tiveram a tag da script registrada (me corrija se eu estiver errado), não seria 1 tanto quanto desnecessário adicionar uma checagem pra ver se o monstro morto deve ou não ativar a script de autoloot, sendo que bastaria não registrar a tag nos monstros que você não quer que ative a script. Claro que a situação mudaria se a função fosse de onKill.

É o inverso amigo.

O evento ativa em todas as criaturas, exceto as que estao em block list (bosses).

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.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo