topmaster 5 Postado Dezembro 29, 2012 Share Postado Dezembro 29, 2012 (editado) 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 Dezembro 30, 2012 por TopMaster Link para o comentário Compartilhar em outros sites More sharing options...
0 iunix 41 Postado Dezembro 29, 2012 Share Postado Dezembro 29, 2012 (editado) 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 Dezembro 29, 2012 por iuniX Link para o comentário Compartilhar em outros sites More sharing options...
0 topmaster 5 Postado Dezembro 29, 2012 Autor Share Postado Dezembro 29, 2012 (editado) Testando jaja eu edito esse post. ______________________________ Edit. não pegou não aparece o efeito pq sera? Editado Dezembro 29, 2012 por TopMaster Link para o comentário Compartilhar em outros sites More sharing options...
0 iunix 41 Postado Dezembro 29, 2012 Share Postado Dezembro 29, 2012 Eu arrumei um errinho bobo ali, da uma olhada agora. Link para o comentário Compartilhar em outros sites More sharing options...
0 topmaster 5 Postado Dezembro 29, 2012 Autor Share Postado Dezembro 29, 2012 nada ainda. =/ Link para o comentário Compartilhar em outros sites More sharing options...
0 iunix 41 Postado Dezembro 29, 2012 Share Postado Dezembro 29, 2012 Erro? Link para o comentário Compartilhar em outros sites More sharing options...
0 topmaster 5 Postado Dezembro 29, 2012 Autor Share Postado Dezembro 29, 2012 (editado) 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 Dezembro 29, 2012 por TopMaster Link para o comentário Compartilhar em outros sites More sharing options...
0 Slicer 1070 Postado Dezembro 29, 2012 Share Postado Dezembro 29, 2012 (editado) 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 Dezembro 29, 2012 por Slicer Link para o comentário Compartilhar em outros sites More sharing options...
0 iunix 41 Postado Dezembro 29, 2012 Share Postado Dezembro 29, 2012 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 More sharing options...
0 brun123 369 Postado Dezembro 29, 2012 Share Postado Dezembro 29, 2012 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 More sharing options...
0 topmaster 5 Postado Dezembro 29, 2012 Autor Share Postado Dezembro 29, 2012 tentei todas e não vai =/. tenso Link para o comentário Compartilhar em outros sites More sharing options...
0 brun123 369 Postado Dezembro 29, 2012 Share Postado Dezembro 29, 2012 (editado) 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 Dezembro 29, 2012 por brun123 Link para o comentário Compartilhar em outros sites More sharing options...
0 topmaster 5 Postado Dezembro 30, 2012 Autor Share Postado Dezembro 30, 2012 (editado) 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 Dezembro 30, 2012 por TopMaster Link para o comentário Compartilhar em outros sites More sharing options...
0 brun123 369 Postado Dezembro 31, 2012 Share Postado Dezembro 31, 2012 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 More sharing options...
0 topmaster 5 Postado Dezembro 31, 2012 Autor Share Postado Dezembro 31, 2012 não esta dando erro algum, mais tbm não esta saindo o efeito =/ pq sera? Link para o comentário Compartilhar em outros sites More sharing options...
0 Slicer 1070 Postado Dezembro 31, 2012 Share Postado Dezembro 31, 2012 mano o script esta perfeito.. vc q deve ta fazendo algu errado... como q ta colocando a tag? como q ta registrando no login.lua? em q pasta ta colocando? Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
topmaster 5
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 TopMasterLink para o comentário
Compartilhar em outros sites
17 respostass a esta questão
Posts Recomendados