• TibiaFace

    Tibiaface | Una comunidad Open Tibia donde encontras : mapas, scripts, Otserver, npc y amigos etc ...

    .
    demo menumenu

    Afiliados



    Votar:

    [Mods] error con autoloot

    Compartir:

    Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje (Página 1 de 1.)

    1[Mods] error con autoloot Empty [Mods] error con autoloot Miér Jul 21, 2021 7:08 pm

    ioke

    ioke
    Miembro
    Miembro
    Descripcion escribió:al matar el bicho no muere se queda de pie pero sin nombre y sin vida y aparece el siguiente error en la consola

    Código:
    [1:2:03.166] [Error - CreatureScript Interface]
    [1:2:03.166] domodlib('Loot_func')
    [1:2:03.181] function onKill(cid, target, lastHit)
    [1:2:03.181]    if isPlayer(cid) and getPlayerStorageValue(cid, info.Storages[1]) <= 0 and isMonster(target) and not isInArray(info.BlockMonsters, getCreatureName(target):lower()) then
    [1:2:03.197]       addEvent(corpseRetireItems, 0, cid ,getThingPos(target))
    [1:2:03.197]    end
    [1:2:03.212]    return true
    [1:2:03.212] end:onKill
    [1:2:03.212] Description:
    [1:2:03.212] [string "LuaInterface::loadBuffer"]:3: attempt to index field 'Storages' (a nil value)
    [1:2:03.228] stack traceback:
    [1:2:03.228]    [string "LuaInterface::loadBuffer"]:3: in function <[string "LuaInterface::loadBuffer"]:2>


    hacia tiempo no me daba problemas el autoloot y no he modificado nada de este mod

    Código:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <mod name="Perfect Auto Loot" version="2.0" author="Vodkart" contact="none.com" enabled="yes">
    <config name="Loot_func"><![CDATA[

    help = {}
    help.goldToBank = true
    help.goldBankAnimation = true
    help.distanceLooting = 7
    help.Slots = 6
    help.vipStorage = {0,0}
    help.playerLevel = 8
    help.corpseEffect = CONST_ME_NONE
    help.golds = {2148, 2152, 2160}
    help.tittle = "Welcomen to Autoloot System\nCreate by GOD Ioke\n\nCommands Options:\n!autoloot help\n!autoloot clear\n!autoloot item name\n\nMoney Coommand:\n!autoloot money (Recolect Money)\n!autoloot deposit (Deposit to Bank)\n"
    help.notHaveCapDrop = true
    info = {
       distro = 1, -- 1 = TFS // 2 = talk modificada
       directory = "data/logs/autoloot",

       Talkaction_delay = 5, -- em segundos // delay para remover e adicionar item
       BlockMonsters = {},
       BlockItemsList = {2123,2515},
       Money_ids = {2148, 2152, 2160}, -- id das moedas do ot
       Max_Slots = {free = 6, premium = 6},
       Storages = {988801, 988802, 988803, 988804, 988805, 988806, 988807}
    }


    function isInTable(cid, item)
       for _,i in pairs(getItensFromAutoloot(cid)) do
          if tonumber(i) == tonumber(item) then
             return true
          end
       end
       return false
    end
    function doremoveItemFromAutoloot(cid, itemid)
        local file, fileContent = io.open(info.directory.."/"..getCreatureName(cid)..".txt", 'r'),{}
        for line in file:lines() do
        if line ~= "" and tonumber(line) ~= tonumber(itemid) then
                 fileContent[#fileContent + 1] = line
           end
        end
        io.close(file)
        file = io.open(info.directory.."/"..getCreatureName(cid)..".txt", 'w')
        for index, value in ipairs(fileContent) do
        file:write(value..'\n')
        end
        io.close(file)
    end
    function doAddItemFromAutoloot(cid, itemid)
             if not existsAutoloot(cid) then
                doCreateLootUserName(cid, itemid) return true
             end
             local file = io.open(info.directory.."/"..getCreatureName(cid)..".txt", "a+")                    
             file:write('\n'..itemid)
             file:close()
    end
    function existsAutoloot(cid)
      local f = io.open(info.directory.."/"..getCreatureName(cid)..".txt", "rb")
      if f then f:close() end
      return f ~= nil
    end
    function doCreateLootUserName(cid, itemid)
        newFile = io.open(info.directory.."/"..getCreatureName(cid)..".txt", "w+" )
        newFile:write(itemid)
        newFile:close()
    end
    function getItensFromAutoloot(cid)
      if not existsAutoloot(cid) then return {} end
      lines = {}
      for line in io.lines(info.directory.."/"..getCreatureName(cid)..".txt") do
         if line ~= "" then
                 lines[#lines + 1] = tonumber(line)
         end
      end
      return lines
    end
    function doCleanAutoloot(cid)
    return os.remove(info.directory.."/"..getCreatureName(cid)..".txt")
    end
    function showPlayerAutolootHelp(cid)
        local content = "Welcomen to Autoloot System\nCreate by GOD Ioke\n\nCommands Options:\n!autoloot help\n!autoloot clear\n!autoloot item name\n\nMoney Coommand:\n!autoloot money (Recolect Money)\n!autoloot deposit (Deposit to Bank)\nFor you info:\n"
        for key, value in pairs(help) do
            if not isInArray({"storageItems", "blockMonsters", "vipStorage", "golds", "tittle"}, key) then
                content = string.format("%s%c %s: %s\n", content, 155, tostring(key), tostring(value))
            end
        end
        return doShowTextDialog(cid, 2529, content)
    end
    function ShowItemsTabble(cid)
       local auto_list = getItensFromAutoloot(cid)  
       local n,str = 0,"Welcomen to Autoloot System\nCreate by GOD Ioke\n\nCommands Options:\n!autoloot help\n!autoloot clear\n!autoloot item name\n\nMoney Coommand:\n!autoloot money (Recolect Money)\n!autoloot deposit (Deposit to Bank)\n!Your slots in use: ["..#auto_list.."/"..(isPremium(cid) and info.Max_Slots.premium or info.Max_Slots.free).."]\n\nYour autoloot items:\n"
       if #auto_list > 0 then
          for i = 1, #auto_list do
             n = n + 1
             str = str.."- "..getItemNameById(auto_list[i]).."\n"
          end
       end
       return doShowTextDialog(cid, 2529, str)
    end
    function getContainerItems(container, array, haveCap)
        array = array or {}
        haveCap = haveCap or false
        if not isContainer(container.uid) or getContainerSize(container.uid) == 0 then
            array[#array +1] = container
        else
            local size = getContainerSize(container.uid)
            haveCap = (getContainerCap(container.uid) -size) > 0
            for slot = 0, (size -1) do
                local item = getContainerItem(container.uid, slot)
                if item.itemid > 1 then
                    getContainerItems(item, array, haveCap)
                end
            end
        end
        return #array >= 1 and array, haveCap
    end
    function getContainerItemsById(container, itemid)
        local founds = {}
        local items = not container.uid and container or getContainerItems(container)
        for index, item in pairs(items) do
            if item.itemid == itemid then
                founds[#founds +1] = item
            end
        end
        return #founds >= 1 and founds
    end
    function AutomaticDeposit(cid, item, n)
       if isInArray(info.Money_ids, item) and getPlayerStorageValue(cid, info.Storages[4]) > 0 then
          local deposit = item == tonumber(2160) and (n*10000) or tonumber(item) == 2152 and (n*100) or (n)
          doPlayerDepositMoney(cid, deposit)
       end
       return true
    end
    function getAllContainerFree(cid) -- by vodka
        local containers,soma = {},0
        for i = CONST_SLOT_FIRST, CONST_SLOT_LAST do
            local sitem = getPlayerSlotItem(cid, i)
            if sitem.uid > 0 then
                if isContainer(sitem.uid) then
                    table.insert(containers, sitem.uid)
          soma = soma + getContainerSlotsFree(sitem.uid)
                end
            end
        end
        while #containers > 0 do
            for k = (getContainerSize(containers[1]) - 1), 0, -1 do
                local tmp = getContainerItem(containers[1], k)
                if isContainer(tmp.uid) then
                    table.insert(containers, tmp.uid)
                    soma = soma + getContainerSlotsFree(tmp.uid)
                end
            end
            table.remove(containers, 1)
        end
        return soma
    end
    function getContainerSlotsFree(container) -- by vodka
             return getContainerCap(container)-getContainerSize(container)
    end
    function doPlayerAddItemStackable(cid, itemid, count)
        local container = getPlayerSlotItem(cid, CONST_SLOT_BACKPACK)
        if container.itemid > 1 then
            local items = getContainerItemsById(container, itemid)
            if not items then
                return doPlayerAddItem(cid, itemid, count)
            else
                local piles = #items
                for index, item in pairs(items) do
                    if item.type < 100 then
                        local sum = item.type + count
                        local result = doTransformItem(item.uid, itemid, sum)
                        if sum <= 100 then
                            return result
                        else
                            return doPlayerAddItem(cid, itemid, sum - 100)
                        end
                    else
                        piles = piles - 1
                        if piles == 0 then
                            return doPlayerAddItem(cid, itemid, count)
                        end
                    end
                end
            end
        end
        return false
    end
    function corpseRetireItems(cid, pos)
       local check, slots = false, 0
       for i = 0, 255 do
          pos.stackpos = i
          tile = getTileThingByPos(pos)
          if tile.uid > 0 and isCorpse(tile.uid) then
             check = true break
          end
       end
       if check == true then
          local str, var = "", getContainerItems(tile)
          if var then
             local list = getItensFromAutoloot(cid)
             for _, item in pairs(var) do
                local id = item.itemid
                if #list > 0 and isInArray(list, id) or getPlayerStorageValue(cid, info.Storages[2]) > 0 and isInArray(info.Money_ids, id) then
                   local info = getItemInfo(id)
                   local amount = isItemStackable(id) and item.type or 1
                   local total_cap = getItemWeight(item.uid)*amount
                   slots = getAllContainerFree(cid)
                   if slots > 0 and getPlayerFreeCap(cid) >= total_cap then
                      if isItemStackable(id) then
                         str = str.." "..amount.." "..(amount > 1 and info.plural or info.name)..","
                         doPlayerAddItemStackable(cid, id, amount)
                         AutomaticDeposit(cid, id, amount)
                      else
                         str = str.." ".. info.article.." " .. info.name ..","
                         doPlayerAddItem(cid, id)
                      end
                      doRemoveItem(item.uid)  
                   end
                end
             end
            
          end
       end
    end
    function ExistItemByName(name) -- by vodka
        local items = io.open("data/items/items.xml", "r"):read("*all")
        local get = items:lower():match('name="' .. name:lower() ..'"')
        if get == nil or get == "" then
            return false
        end
    return true
    end
    ]]></config>
    <event type="login" name="LootLogin" event="script"><![CDATA[
    domodlib('Loot_func')
    function onLogin(cid)
       registerCreatureEvent(cid, "LootEventKIll")
       if isPremium(cid) and getPlayerStorageValue(cid, 853608) <= 0 then
          setPlayerStorageValue(cid, 853608, 1)
       elseif getPlayerStorageValue(cid, 853608) > 0 and not isPremium(cid) then
          doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[Auto Loot] You premium is Over, Start a new list!")
          setPlayerStorageValue(cid, 853608, -1)
          doCleanAutoloot(cid)
       end
       return true
    end]]></event>
    <event type="kill" name="LootEventKIll" event="script"><![CDATA[
    domodlib('Loot_func')
    function onKill(cid, target, lastHit)
       if isPlayer(cid) and getPlayerStorageValue(cid, info.Storages[1]) <= 0 and isMonster(target) and not isInArray(info.BlockMonsters, getCreatureName(target):lower()) then
          addEvent(corpseRetireItems, 0, cid ,getThingPos(target))
       end
       return true
    end]]></event>
    <talkaction words="!autoloot;/autoloot" event="buffer"><![CDATA[
    domodlib('Loot_func')
    local param, slots = param:lower(), isPremium(cid) and info.Max_Slots.premium or info.Max_Slots.free
    if not param or param == "" then
       ShowItemsTabble(cid) return true
    elseif tonumber(param) then
       doPlayerSendCancel(cid, "enter commands: !autoloot item name [+] !autoloot clean [+] !autoloot money [+] !autoloot on/off") return true
    elseif isInArray({"clean","limpar", "clear"}, param) then
       if existsAutoloot(cid) then doCleanAutoloot(cid) end
       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Auto Loot] Your list has been cleaned.") return true
    elseif isInArray({"help"}, param) then
        showPlayerAutolootHelp(cid) return true
    elseif isInArray({"start","stop","on","off"}, param) then
       setPlayerStorageValue(cid, info.Storages[1], getPlayerStorageValue(cid, info.Storages[1]) <= 0 and 1 or 0)
       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"Auto Loot "..(getPlayerStorageValue(cid, info.Storages[1]) > 0 and "Stopped" or "Started")..".") return true
    elseif isInArray({"warn","aviso"}, param) then
       setPlayerStorageValue(cid, info.Storages[3], getPlayerStorageValue(cid, info.Storages[3]) <= 0 and 1 or 0)
       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"Auto Loot Backpack Warn "..(getPlayerStorageValue(cid, info.Storages[3]) > 0 and "disabled" or "Activated")..".") return true
    elseif isInArray({"mensagem","message","mensagen","msg"}, param) then
       setPlayerStorageValue(cid, info.Storages[6], getPlayerStorageValue(cid, info.Storages[6]) <= 0 and 1 or 0)
       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"Auto Loot Message "..(getPlayerStorageValue(cid, info.Storages[6]) > 0 and "disabled" or "Activated")..".") return true
    elseif isInArray({"cor","color","type"}, param) then
       setPlayerStorageValue(cid, info.Storages[5], getPlayerColorLootMessage(cid) == #Color_Loot and 0 or getPlayerColorLootMessage(cid)+1)
       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"Auto Loot Message Color Changed to "..Color_Loot[getPlayerColorLootMessage(cid)][2]..".") return true
    elseif isInArray({"money","gold","gps","dinheiro"}, param) then
       setPlayerStorageValue(cid, info.Storages[2], getPlayerStorageValue(cid, info.Storages[2]) <= 0 and 1 or 0)
       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"Auto Loot Gold Colleting "..(getPlayerStorageValue(cid, info.Storages[2]) > 0 and "Activated" or "disabled")..".") return true
    elseif isInArray({"deposito","bank","gbank","deposit","autodeposit"}, param) then
       setPlayerStorageValue(cid, info.Storages[4], getPlayerStorageValue(cid, info.Storages[4]) <= 0 and 1 or 0)
       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Auto Loot] Automatic Gold Bank "..(getPlayerStorageValue(cid, info.Storages[4]) > 0 and "Activated" or "disabled")..".") return true
    end
    if info.distro ~= 1 then
       item = ExistItemByName(tostring(param))
       if not item then
          doPlayerSendCancel(cid, "This item does not exist.") return true
       end
       item = getItemIdByName(tostring(param))
    else
       item = getItemIdByName(param, false)
       if not item then
          doPlayerSendCancel(cid, "This item does not exist.") return true
       end
    end
    local var = isInTable(cid, item)
    if isInArray(info.Money_ids, item) then
       doPlayerSendTextMessage(cid, MESSAGE_FIRST, "Enter !autoloot money to add money in your list!") return true  
    elseif isInArray(info.BlockItemsList, item) then
       doPlayerSendCancel(cid, "You can not add this item in the list!") return true
    elseif not var and #getItensFromAutoloot(cid) >= slots then
       doPlayerSendCancel(cid, "max "..slots.." from auto loot") return true
    elseif getPlayerStorageValue(cid, info.Storages[7]) - os.time() > 0 then
          doPlayerSendCancel(cid, "wait a second to use this command again") return true
    end
    if not var then
       doAddItemFromAutoloot(cid, item)
    else
       doremoveItemFromAutoloot(cid, item)
    end
    setPlayerStorageValue(cid, info.Storages[7], os.time()+info.Talkaction_delay)
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,not var and "you added the item "..param.." in the list" or "you removed the item "..param.." from the list, please wait 5 seconds to save the directory.")
    return true]]></talkaction>
    </mod>

    Captura del Error escribió:Imagen del error: [Mods] error con autoloot Empty
    El error radica en: Consola

    http://baiakciteron.sytes.net

    Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje (Página 1 de 1.)

    Permisos de este foro:
    No puedes responder a temas en este foro.

     

    BienvenidosTibiaFace es una comunidad de Open Tibia. Para participar debes estar registrado (click para Regístrate).