Ir para conteúdo
  • 0

topmaster

Pergunta

Procurei e não encontrei um método de checar se tal item dropou do monstro.

 

Ex: matei um dragon e caiu um dragon shield, quero um método de chegar isso para mostrar um efeito. usando onKillvlw.

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

Posts Recomendados

  • 0

local id = 1111 -- ID do item
local effect = 12 -- ID do effect que vc quer que saia
function onDeath(cid, corpse)
for i = 1, getContainerSize(corpse.uid) do
	local t = getContainerItem(corpse.uid, i).itemid
	if (t) and  (t == id) then
		doSendMagicEffect(getThingPosition(corpse.uid), effect)
		break
	end
end
return true
end

 

 

fiz aqui de cabeça, da uma testada e me fala se está funcionando.

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

  • 0

pior que não aparece nenhum erro no console.

 

ja registrei no login e nada tbm.

-----------------------------------------------

edit usei a que vc mando tbm e n vai

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

  • 0

tem q registrar no .xml do bixo...

e tb.. container n começa no slot 0? ;x

 

eu uso esse aki no meu serv..

 

local function sendEff(pos)

local id = 1111 --coloca o id do item

local eff = 12 --coloca o efeito

for i = 1, 255 do

pos.stackpos = i

local item = getTileThingByPos(pos)

if item.uid ~= 0 then

if isContainer(item.uid) and getContainerSize(item.uid) > 0 then

for slot=0, (getContainerSize(item.uid)-1) do

local item2 = getContainerItem(item.uid, slot)

if item2.itemid == id then

doSendMagicEffect(getThingPos(item.uid), eff)

break

end

end

end

end

end

end

 

function onKill(cid, target)

 

if isMonster(target) and isPlayer(cid) then

local pos = getThingPos(target)

addEvent(sendEff, 150, pos)

end

 

return TRUE

end

 

esse soh precisa registrar no login... eu modifiquei ele entao n sei se ta tudo certo..

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

  • 0
local id, effect = 9167, 15 -- ID do item e do effect
function onDeath(cid, corpse)
       for i = 1, getContainerCap(corpse.uid) do
               local t = getContainerItem(corpse.uid, i)
               if (t) and  (t == id) then
                       doSendMagicEffect(getThingPosition(corpse.uid), effect)
                       break
               end
       end
       return true
end

Link para o comentário
Compartilhar em outros sites

  • 0

não vai funcionar iuniX, pois o loot só é gerado depois do return true, se o corpse ainda existir (pode acontecer de ele ser removido ainda no script).

tem que usar addEvent, algo estilo:

 

function onDeath(cid, corpse)

   local function func(position, corpseid)
    local item = getTileItemById(position, corpseid).uid
    if item.uid < 0 then return end
    -- usa for pra ver o loot blabla
   end

   addEvent(func, 1, getThingPos(cid), corpse.itemid)

return true
end

Link para o comentário
Compartilhar em outros sites

  • 0

function onDeath(cid, corpse)

local function func(position, corpseid, items, effect)
	local corpse = getTileItemById(position, corpseid).uid
	if corpse < 0 then return end
	local item = 0
	for slot = 0, getContainerCap(corpse) do
		item = getContainerItem(corpse, slot)
		if item.uid <= 1 then return end
		if isInArray(items, item.itemid) then
		return doSendMagicEffect(getThingPos(corpse), effect)
		end
	end
end

local items = {2160, 2152}
local effect = 15

addEvent(func, 1, getThingPos(cid), corpse.itemid, items, effect)

return true
end

 

esse evento precisa ser registrado no XML do monstro, além da tag a ser adicionada no creaturescripts.xml.

se for para um monstro ou outro, o ideal é utilizar onDeath mesmo, mas se quiser fazer para todos os monstros, é melhor fazer por onKill

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

  • 0

vou tenta passa pra onKill. vou dar rep pros cara q tento me ajudar ^^ vlw

dei rep pro brun123 amanha do pro iunix, e depois pro Slicer

-----------------------------------------------------------------------------------------

edit.

 

não to conseguindo reproduzir seu script de onDeath pra onKill, se alguém conseguir eu agradeço.

 

 

function onDeath(cid, corpse)

local function func(position, corpseid, items, effect)
	local corpse = getTileItemById(position, corpseid).uid
	if corpse < 0 then return end
	local item = 0
	for slot = 0, getContainerCap(corpse) do
		item = getContainerItem(corpse, slot)
		if item.uid <= 1 then return end
		if isInArray(items, item.itemid) then
		return doSendMagicEffect(getThingPos(corpse), effect)
		end
	end
end

local items = {2160, 2152}
local effect = 15

addEvent(func, 1, getThingPos(cid), corpse.itemid, items, effect)

return true
end

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

  • 0

function onKill(cid, target, lastHit)

   if not isMonster(target) then return true end
   local corpse = getMonsterInfo(getCreatureName(target)).lookCorpse

   local items = {2160, 2152}
   local effect = 15

   local function func(position, corpseid, items, effect)
    local corpse = getTileItemById(position, corpseid).uid
    if corpse <= 1 then return end
    for slot = 0, getContainerCap(corpse) do
	    local item = getContainerItem(corpse, slot)
	    if item.uid <= 1 then return end
	    if isInArray(items, item.itemid) then
	    return doSendMagicEffect(position, effect)
	    end
    end
   end

   addEvent(func, 5, getThingPos(target), corpse, items, effect)
return true
end

 

Precisa colocar a tag no creaturescripts.xml, o tipo é "kill", e precisa registrar esse creature script no login.lua

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...