BE
creatureevent

Amuletos Que Evitam Drop De Loot

Por bepokemon, 13 de jun. de 2012 em Globalevents e Spells

script
3
1.4k
bepokemonB
13 de junho de 2012 às 00:31

Entonces, percebi que existe uma busca constante de como "colocar tal item para previnir queda de items". Arranjei uma solucao para voces que nao precisa de nenhum tipo de edit, apenas a instalacao do script para que todos funcionem como o Amulet of Loss (obedecendo o items.xml):

 

Primeiramente deve-se notar para que um certo item previna a queda de items ao morrer ele deve conter este attributo nos items.xml:

<attribute key="preventDrop" value="1"/>
<attribute key="removeOnDeath" value="1"/>

 

Agora crie um arquivo chamado drop.lua dentro da pasta data/creaturescripts/script/ de seu OT e coloque isto dentro:

function getItemXMLAttributes(itemid) -- By: Byerne
local tmp, id_now, check_ids = {}, 0, {}
for line in io.lines('./data/items/items.xml') do
 if string.find(line, '<item fromid="') then
  for x=tonumber(line:match('<item fromid="(.-)"')), tonumber(line:match('toid="(.-)"')) do
table.insert(check_ids, x)
tmp[x] = {['name'] = tostring(line:match('name="(.-)"'))}
  end
 elseif string.find(line, '<item id="') then
  id_now = tonumber(line:match('<item id="(.-)"'))
  tmp[id_now] = {['name'] = tostring(line:match('name="(.-)"'))}
 elseif string.find(line, '<attribute key="') then
  tmp[id_now][line:match('<attribute key="(.-)"')] = line:match('value="(.-)"')
 elseif string.find(line, '</item>') then
  if id_now == itemid then
return tmp[id_now]
  end
 end
end
return false
end

function onDeath(cid, corpse, deathList)
for slot=CONST_SLOT_FIRST, CONST_SLOT_LAST do
 local item = getPlayerSlotItem(cid, slot)
 if getItemXMLAttributes(item.itemid).preventDrop == 1 then
  doCreatureSetDropLoot(cid, false)
  if getItemXMLAttributes(item.itemd).removeOnDeath == 1 then
  doRemoveItem(item.uid)
  end
  return true
 end
end
return true
end

 

Coloque também dentro de creaturescripts.xml isto:

<event type="death" name="DropLoot" event="script" value="drop.lua"/>

 

Não se esqueca de registrar no login.lua isto:

registerCreatureEvent(cid, "DropLoot")

 

Ao final de tudo caso alguém morra com algum item (em qualquer slot) que previna drops este será removido se contido no items.xml a característica removeOnDeath. Espero que gostem, qualquer bug reporte neste mesmo tópico.

Editado Junho 13 por Byerne

VildenV
13 de junho de 2012 às 01:20

Opa cara, muito bom parabéns. Vai ajudar bastante gente, não só com esse script e sim com as funções utilizadas.

Rep+

ErimythE
13 de junho de 2012 às 02:33

ótimo cara, com certeza uma função util para muitos e com certeza algo que muitos ja procurarão e não encontrarão.

parabens REP+