• TibiaFace

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

    .
    demo menumenu

    Afiliados



    Votar:

    [Mods] Autoloot para 0.3.6 hasta 0.4, corregido tipicos errores

    Compartir:

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

    Aqui esta el autoloot de siempre pero le he arreglado algunos detalles que suelen darle error a muchas personas.
    Código:
    <?xml version="1.0" encoding="ISO-8859-1"?> 
    <mod name="Loot System" version="1.0" author="Vodkart And Mkalo, Sevu Entertainment" contact="none.com" enabled="yes"> 
    <config name="Loot_func"><![CDATA[
    info = {
        BlockMonsters = {},
        BlockItemsList = {2123,2515}
    }
    function isContainerByItemId(itemid) -- By SevuEntertainment
        return getItemInfo(itemid).group == 2 and true or false
    end
    function setPlayerStorageTable(cid, storage, tab)
        local tabstr = "&"
        for i,x in pairs(tab) do
                tabstr = tabstr .. i .. "," .. x .. ";"
        end
        setPlayerStorageValue(cid, storage, tabstr:sub(1, #tabstr-1))
    end
    function getPlayerStorageTable(cid, storage)
        local tabstr = getPlayerStorageValue(cid, storage)
        local tab = {}
        if type(tabstr) ~= "string" then
                return {}
        end
        if tabstr:sub(1,1) ~= "&" then
                return {}
        end
        local tabstr = tabstr:sub(2, #tabstr)
        local a = string.explode(tabstr, ";")
        for i,x in pairs(a) do
                local b = string.explode(x, ",")
                tab[tonumber(b[1]) or b[1]] = tonumber(b[2]) or b[2]
        end
        return tab
    end
    function isInTable(cid, item)
            for _,i in pairs(getPlayerStorageTable(cid, 27000))do
                if tonumber(i) == tonumber(item) then
                    return true
                end
            end
    return false
    end
    function addItemTable(cid, item)
            local x = {}
                  for i = 1,#getPlayerStorageTable(cid, 27000) do
                      table.insert(x,getPlayerStorageTable(cid, 27000)[i])
                  end
                  if x ~= 0 then
                      table.insert(x,tonumber(item))
                      setPlayerStorageTable(cid, 27000, x)
                  else
                      setPlayerStorageTable(cid, 27000, {item})
                  end
    end
    function removeItemTable(cid, item)
            local x = {}
                  for i = 1,#getPlayerStorageTable(cid, 27000) do
                      table.insert(x,getPlayerStorageTable(cid, 27000)[i])
                  end
                  for i,v in ipairs(x) do
                      if tonumber(v) == tonumber(item) then
                      table.remove(x,i)
                  end
                  end
            return setPlayerStorageTable(cid, 27000, x)
    end
    function ShowItemsTabble(cid)
        local str,n = "-- My Loot List --\n\n",0
        for i = 1,#getPlayerStorageTable(cid, 27000) do
            n = n + 1
            str = str..""..n.." - "..getItemNameById(getPlayerStorageTable(cid, 27000)[i]).."\n"
        end
        str = str.."\n\nADD: /autoloot add,ITEM_NAME\nREMOVE: /autoloot remove,ITEM_NAME"
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, str)
        return doShowTextDialog(cid, 2529, str)
    end
    function getContainerItems(containeruid)
        local items = {}
        local containers = {}
        if type(getContainerSize(containeruid)) ~= "number" then
                return false
        end
        for slot = 0, getContainerSize(containeruid)-1 do
                local item = getContainerItem(containeruid, slot)
                if item.itemid == 0 then
                        break
                end
                if isContainer(item.uid) then
                        table.insert(containers, item.uid)
                end
                table.insert(items, item)
        end
        if #containers > 0 then
                for i,x in ipairs(getContainerItems(containers[1])) do
                        table.insert(items, x)
                end
                table.remove(containers, 1)
        end 
        return items
    end
    function getItemsInContainerById(container, itemid) -- Function By Kydrai
                local items = {}
                if isContainer(container) and getContainerSize(container) > 0 then
                                for slot=0, (getContainerSize(container)-1) do
                                                local item = getContainerItem(container, slot)
                                                if isContainer(item.uid) then
                                                                local itemsbag = getItemsInContainerById(item.uid, itemid)
                                                                for i=0, #itemsbag do
                                                                                table.insert(items, itemsbag[i])
                                                                end
                                                else
                                                                if itemid == item.itemid then
                                                                                table.insert(items, item.uid)
                                                                end
                                                end
                                end
                end
                return items
    end
    function doPlayerAddItemStacking(cid, itemid, quant) -- by mkalo
        local item = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid)
        local piles = 0
        if #item > 0 then
                for i,x in pairs(item) do
                        if getThing(x).type < 100 then
                                local it = getThing(x)
                                doTransformItem(it.uid, itemid, it.type+quant)
                                if it.type+quant > 100 then
                                        doPlayerAddItem(cid, itemid, it.type+quant-100)
                                end
                        else
                              piles = piles+1
                        end
                end
        else
                return doPlayerAddItem(cid, itemid, quant)
        end
        if piles == #item then
                doPlayerAddItem(cid, itemid, quant)
        end
    end
        function corpseRetireItems(cid, pos)
            local check = false
            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 items = getContainerItems(tile.uid)
            if items then
                for i, x in pairs(items) do
                    if isInArray(getPlayerStorageTable(cid, 27000), tonumber(x.itemid)) then
                        if isItemStackable(x.itemid) then
                            doPlayerAddItemStacking(cid, x.itemid, x.type)
                        else
                            doPlayerAddItem(cid, x.itemid)
                        end
                        doRemoveItem(x.uid)
                    end
                end
            end
        end
    end
    ]]></config>
    <event type="login" name="LootLogin" event="script"><![CDATA[
    function onLogin(cid)
    registerCreatureEvent(cid, "MonsterAttack")
    return true
    end]]></event>
    <event type="death" name="LootEventDeath" event="script"><![CDATA[
    domodlib('Loot_func')
        function onDeath(cid, corpse, deathList)
        local killer,pos = deathList[1],getCreaturePosition(cid)
        local lookCorpse = getMonsterInfo(getCreatureName(cid)).lookCorpse
        if isContainerByItemId(lookCorpse) then
           addEvent(corpseRetireItems,1,killer,pos)
        end
    return true
    end]]></event>
    <event type="combat" name="MonsterAttack" event="script"><![CDATA[
    domodlib('Loot_func')
            if isPlayer(cid) and isMonster(target) and not isInArray(info.BlockMonsters,string.lower(getCreatureName(target))) then
                registerCreatureEvent(target, "LootEventDeath")
                            end
    return true]]></event>
    <talkaction words="!autoloot;/autoloot" event="buffer"><![CDATA[
    domodlib('Loot_func')
    local t = string.explode(string.lower(param), ",")
    if not t[1] then
    ShowItemsTabble(cid) return true
    elseif tonumber(t[1]) or tonumber(t[2]) then
    doPlayerSendCancel(cid, "enter!autoloot add,name or !autoloot remove,name") return true
    elseif isInArray({"add","remove"}, tostring(t[1])) then
    local func,check = tostring(t[1]) == "add" and addItemTable or removeItemTable, tostring(t[1]) == "add" and true or false
    local item = getItemIdByName(tostring(t[2]), false)
    if not item then
    doPlayerSendCancel(cid, "This item does not exist.") return true
    elseif check == true and isInArray(info.BlockItemsList, item) then
    doPlayerSendCancel(cid, "You can not add this item in the list!") return true
    elseif isInTable(cid, item) == check then
    doPlayerSendCancel(cid, "This Item "..(check == true and "already" or "is not").." in your list.") return true
    end
    func(cid, item)
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,check == true and "you added the item "..t[2].." in the list" or "you removed the item "..t[2].." from the list") return true
    end
    return true]]></talkaction>
    </mod>
    Esta testeado en consola 0.4 y 0.3.6
    Si presenta un error dejen el capture en los comentarios.
    Aunque no creo que vaya a pasar ESO XD



    Si necesitas hospedaje para tu servidor usa este enlace y mira las buenos planes de Windows y Linux:

    SevuOT Online, Version:10 and Custom.

    Ver perfil de usuario

    [Admin] God Maya

    avatar
    Administrador
    Administrador
    o excelente gracias [Tienes que estar registrado y conectado para ver este vínculo] +1



    Ver perfil de usuario http://www.tibiaface.com

    Sotomayor

    avatar
    Miembro
    Miembro
    Hermoso, funciono perfecto hay manera de que el dinero se pueda ir directamente al banco cuando lo juntes??

    Ver perfil de usuario
    Sotomayor estos dias hago ese update para que sea una opcion en el mod, he estado bastante ocupado y por eso es que no me la paso mucho aqui en el foro.



    Si necesitas hospedaje para tu servidor usa este enlace y mira las buenos planes de Windows y Linux:

    SevuOT Online, Version:10 and Custom.

    Ver perfil de usuario

    Roo

    avatar
    Miembro
    Miembro
    Hola [Tienes que estar registrado y conectado para ver este vínculo] Disculpa exactamente como es que funciona, Se ve muy bueno!! Very Happy

    Ver perfil de usuario
    Eliminas un monster y se va el loot a tu backpack automaticamente, solo los items que estan en tu lista de autoloot.



    Si necesitas hospedaje para tu servidor usa este enlace y mira las buenos planes de Windows y Linux:

    SevuOT Online, Version:10 and Custom.

    Ver perfil de usuario

    Contenido patrocinado


    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).