Ir para conteúdo

Featured Replies

Postado
  • Autor
  Em 26/06/2021 em 16:34, MatteusDeli disse:

@stauro Boa tarde, tente assim

 

Não precisa adicionar a tag script nos monsters, aparentemente o que está dando esse erro é que o alguns monstros nao dropam a bag.

 


local t = {
  item = 2127,
  slot = CONST_SLOT_RING,
  newRate = 5
  }
  
  local rate = getConfigInfo('rateLoot')
  
  function getContentDescription(uid, comma)
  local ret, i, containers = '', 0, {}
  while i < getContainerSize(uid) do
  local v, s = getContainerItem(uid, i), ''
  local k = getItemInfo(v.itemid)
  if k.name ~= '' then
  if v.type > 1 and k.stackable and k.showCount then
  s = v.type .. ' ' .. getItemInfo(v.itemid).plural
  else
  local article = k.article
  s = (article == '' and '' or article .. ' ') .. k.name
  end
  ret = ret .. (i == 0 and not comma and '' or ', ') .. s
  if isContainer(v.uid) and getContainerSize(v.uid) > 0 then
  table.insert(containers, v.uid)
  end
  else
  ret = ret .. (i == 0 and not comma and '' or ', ') .. 'an item of type ' .. v.itemid .. ', please report it to gamemaster'
  end
  i = i + 1
  end
  for i = 1, #containers do
  ret = ret .. getContentDescription(containers[i], true)
  end
  return ret
  end
  
  local function send(cid, pos, corpseid, monster, party)
  local corpse = getTileItemById(pos, corpseid).uid
  local ret = isContainer(corpse) and getContentDescription(corpse)
  doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'Loot of ' .. monster .. ': ' .. (ret ~= '' and ret or 'nothing'))
  if party then
  for _, pid in ipairs(getPartyMembers(party)) do
  doPlayerSendChannelMessage(pid, '', 'Loot of ' .. monster .. ': ' .. (ret ~= '' and ret or 'nothing'), TALKTYPE_CHANNEL_W, CHANNEL_PARTY)
  end
  end
  end
  
  local function createLoot(i, ext)
  local item = type(i.id) == 'table' and i.id[math.random(#i.id)] or i.id
  local random = math.ceil(math.random(100000) / (ext and t.newRate or rate))
  local tmpItem
  
  if random < i.chance then
  tmpItem = doCreateItemEx(item, getItemInfo(item).stackable and random % i.count + 1 or 1)
  end
  
  if not tmpItem then
  return
  end
  
  if i.subType ~= -1 then
  doItemSetAttribute(tmpItem, 'subType', i.subType)
  end
  
  if i.actionId ~= -1 then
  doItemSetAttribute(tmpItem, 'aid', i.actionId)
  end
  
  if i.uniqueId ~= -1 then
  doItemSetAttribute(tmpItem, 'uid', i.uniqueId)
  end
  
  if i.text ~= '' then
  doItemSetAttribute(tmpItem, 'text', i.text)
  end
  
  return tmpItem
  end
  
  local function createChildLoot(parent, i, ext)
  if #i == 0 then
    return true
  end
  
  local size, cap = 0, getContainerCap(parent)
  for k = 1, #i do
  if size == cap then
  break
  end
  local tmp = createLoot(i[k], ext)
  if tmp then
  if isContainer(tmp) then
    if i[k].child == nil then
      break
    end
  if createChildLoot(tmp, i[k].child, ext) then
  doAddContainerItemEx(parent, tmp)
  size = size + 1
  else
  doRemoveItem(tmp)
  end
  else
  doAddContainerItemEx(parent, tmp)
  size = size + 1
  end
  end
  end
  
  return size > 0
  end
  
  local function dropLoot(pos, v, ext)
  local corpse = getTileItemById(pos, v.lookCorpse).uid
  if isContainer(corpse) then
    for i = 1, getContainerSize(corpse) do
      doRemoveItem(getContainerItem(corpse, 0).uid)
    end
    local size, cap = 0, getContainerCap(corpse)
      for i = 1, #v.loot do
        if size == cap then
          break
        end
    local tmp = createLoot(v.loot[i], ext)
  if tmp then
  if isContainer(tmp) then
  if createChildLoot(tmp, v.loot[i].child, ext) then
  doAddContainerItemEx(corpse, tmp)
  size = size + 1
  else
  doRemoveItem(tmp)
  end
  else
  doAddContainerItemEx(corpse, tmp)
  size = size + 1
  end
  end
  end
  end
  end
  
  function onKill(cid, target, lastHit)
  if lastHit and isMonster(target) then
  local v = getMonsterInfo(getCreatureName(target))
  if v.lookCorpse > 0 then
  local master = getCreatureMaster(target)
  if not master or master == target then
  addEvent(dropLoot, 0, getThingPos(target), v, getPlayerSlotItem(cid, t.slot).itemid == t.item)
  end
  addEvent(send, 100, cid, getThingPos(target), v.lookCorpse, v.description, getPlayerParty(cid))
  end
  end
  return true
  end

 

Bom, aparentemente o erro não aparece mais, só que por exemplo, coloquei a rate 5000 pra testar e só dropa alguns loots faceis, por exemplo: o DL só dropa a dragon slayer, DSM ou RH continua com rate normal.

  • Respostas 6
  • Visualizações 790
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • MatteusDeli
    MatteusDeli

    @stauro Boa noite, tente adicionar essa tag no final antes de fechar o </monster> de qualquer arquivo xml da pasta monster (por exemplo amazon.xml) para ver se vai acontecer esse erro.  

Posted Images

Postado
  • Autor
  Em 26/06/2021 em 16:34, MatteusDeli disse:

@stauro Boa tarde, tente assim

 

Não precisa adicionar a tag script nos monsters, aparentemente o que está dando esse erro é que o alguns monstros nao dropam a bag.

 


local t = {
  item = 2127,
  slot = CONST_SLOT_RING,
  newRate = 5
  }
  
  local rate = getConfigInfo('rateLoot')
  
  function getContentDescription(uid, comma)
  local ret, i, containers = '', 0, {}
  while i < getContainerSize(uid) do
  local v, s = getContainerItem(uid, i), ''
  local k = getItemInfo(v.itemid)
  if k.name ~= '' then
  if v.type > 1 and k.stackable and k.showCount then
  s = v.type .. ' ' .. getItemInfo(v.itemid).plural
  else
  local article = k.article
  s = (article == '' and '' or article .. ' ') .. k.name
  end
  ret = ret .. (i == 0 and not comma and '' or ', ') .. s
  if isContainer(v.uid) and getContainerSize(v.uid) > 0 then
  table.insert(containers, v.uid)
  end
  else
  ret = ret .. (i == 0 and not comma and '' or ', ') .. 'an item of type ' .. v.itemid .. ', please report it to gamemaster'
  end
  i = i + 1
  end
  for i = 1, #containers do
  ret = ret .. getContentDescription(containers[i], true)
  end
  return ret
  end
  
  local function send(cid, pos, corpseid, monster, party)
  local corpse = getTileItemById(pos, corpseid).uid
  local ret = isContainer(corpse) and getContentDescription(corpse)
  doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'Loot of ' .. monster .. ': ' .. (ret ~= '' and ret or 'nothing'))
  if party then
  for _, pid in ipairs(getPartyMembers(party)) do
  doPlayerSendChannelMessage(pid, '', 'Loot of ' .. monster .. ': ' .. (ret ~= '' and ret or 'nothing'), TALKTYPE_CHANNEL_W, CHANNEL_PARTY)
  end
  end
  end
  
  local function createLoot(i, ext)
  local item = type(i.id) == 'table' and i.id[math.random(#i.id)] or i.id
  local random = math.ceil(math.random(100000) / (ext and t.newRate or rate))
  local tmpItem
  
  if random < i.chance then
  tmpItem = doCreateItemEx(item, getItemInfo(item).stackable and random % i.count + 1 or 1)
  end
  
  if not tmpItem then
  return
  end
  
  if i.subType ~= -1 then
  doItemSetAttribute(tmpItem, 'subType', i.subType)
  end
  
  if i.actionId ~= -1 then
  doItemSetAttribute(tmpItem, 'aid', i.actionId)
  end
  
  if i.uniqueId ~= -1 then
  doItemSetAttribute(tmpItem, 'uid', i.uniqueId)
  end
  
  if i.text ~= '' then
  doItemSetAttribute(tmpItem, 'text', i.text)
  end
  
  return tmpItem
  end
  
  local function createChildLoot(parent, i, ext)
  if #i == 0 then
    return true
  end
  
  local size, cap = 0, getContainerCap(parent)
  for k = 1, #i do
  if size == cap then
  break
  end
  local tmp = createLoot(i[k], ext)
  if tmp then
  if isContainer(tmp) then
    if i[k].child == nil then
      break
    end
  if createChildLoot(tmp, i[k].child, ext) then
  doAddContainerItemEx(parent, tmp)
  size = size + 1
  else
  doRemoveItem(tmp)
  end
  else
  doAddContainerItemEx(parent, tmp)
  size = size + 1
  end
  end
  end
  
  return size > 0
  end
  
  local function dropLoot(pos, v, ext)
  local corpse = getTileItemById(pos, v.lookCorpse).uid
  if isContainer(corpse) then
    for i = 1, getContainerSize(corpse) do
      doRemoveItem(getContainerItem(corpse, 0).uid)
    end
    local size, cap = 0, getContainerCap(corpse)
      for i = 1, #v.loot do
        if size == cap then
          break
        end
    local tmp = createLoot(v.loot[i], ext)
  if tmp then
  if isContainer(tmp) then
  if createChildLoot(tmp, v.loot[i].child, ext) then
  doAddContainerItemEx(corpse, tmp)
  size = size + 1
  else
  doRemoveItem(tmp)
  end
  else
  doAddContainerItemEx(corpse, tmp)
  size = size + 1
  end
  end
  end
  end
  end
  
  function onKill(cid, target, lastHit)
  if lastHit and isMonster(target) then
  local v = getMonsterInfo(getCreatureName(target))
  if v.lookCorpse > 0 then
  local master = getCreatureMaster(target)
  if not master or master == target then
  addEvent(dropLoot, 0, getThingPos(target), v, getPlayerSlotItem(cid, t.slot).itemid == t.item)
  end
  addEvent(send, 100, cid, getThingPos(target), v.lookCorpse, v.description, getPlayerParty(cid))
  end
  end
  return true
  end

 

O erro voltou, agora na invasão de orc em thais.

252688710_LOOTRING2.thumb.jpg.068918926309abe491bad14b97a47d57.jpg

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.6k

Informação Importante

Confirmação de Termo