• 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:

    Ir a la página : 1, 2  Siguiente

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

    [Adm] SevuOT

    [Adm] SevuOT
    Miembro
    Miembro
    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}
    }

    LootSystemOptions = {}
    LootSystemOptions.onlyVipStorage = 0
    LootSystemOptions.vipStorageType = "pertime" -- constant, pertime
    LootSystemOptions.moneyToBank = false

    LootSystemOptions.lootOnDistance = 0 -- 0 for disable

    function getDistanceToPos(pos, posex) return math.abs((pos.x-posex.x)+(pos.y-posex.y)) end

    function isContainerByItemId(itemid) -- By SevuEntertainment
        return (getItemInfo(itemid).group == 2)
    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
        local moneys = {
            [2148] = 1,
            [2152] = 100,
            [2160] = 10000
        }
        if check == true then
            local items = getContainerItems(tile.uid)
            if items then
                for i, x in pairs(items) do
                    local continue = false
                    if isInArray(getPlayerStorageTable(cid, 27000), tonumber(x.itemid)) then
                        if isInArray({2160, 2152, 2148}, tonumber(x.itemid)) then
                            if LootSystemOptions.moneyToBank then
                                local balance = getPlayerBalance(cid)
                                doPlayerSetBalance(cid, balance+(moneys*x.type))
                                doRemoveItem(x.uid)
                                continue = true
                            end
                        end
                        if not continue 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
    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
        local lootDis = true
        if LootSystemOptions.lootOnDistance ~= 0 then
            lootDis = false
            local distance = getDistanceToPos(getCreaturePosition(cid), getCreaturePosition())
            if distance <= LootSystemOptions.lootOnDistance then
                lootDis = true
            end
        end
        if lootDis and 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')
    if LootSystemOptions.onlyVipStorage ~= 0 then
        local vipstr = getPlayerStorageValue(cid, LootSystemOptions.onlyVipStorage)
        if LootSystemOptions.vipStorageType == "pertime" then
            if vipstr <= os.time() then
                doPlayerSendCancel(cid, "You not are vip.")
                return true
            end
        elseif LootSystemOptions.vipStorageType == "constant" then
            if vipstr == 1 then
                doPlayerSendCancel(cid, "You not are vip.")
                return true
            end
        end
    end
    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

    Actualizado: míercoles, 7 de novienbre de 2018.
    ahora tiene nuevas opciones: como por ejemplo que el dinero se guarde en tu balance del banco.
    tambien puedes declarar la opcion para que solo los jugadores vip puedan usar el comando.
    quizas le falten mas modificaciones, pero seguire mejorandolo cuando tenga tiempo.

    Mas info:

    en el mod encontraras estas variables:
    Código:
    LootSystemOptions = {}
    LootSystemOptions.onlyVipStorage = 0
    LootSystemOptions.vipStorageType = "pertime" -- constant, pertime
    LootSystemOptions.moneyToBank = false
    LootSystemOptions.lootOnDistance = 0

    onlyVipStorage: esta variable cuando esta en 0, no verificara si eres vip.
    vipStorageType: esta variable define el tipo de vip system que tengas, si es por tiempo, usa "pertime" y si tu vip es solo de storage = 1, entonces use "constant"
    moneyToBank = esta variable activa la funciona para que las monedas se guarden automaticamente en tu balance del bano.
    lootOnDistance = esta variable activa la verificacion para lotear solo a una distancia permitida, cuando esta en 0 esta verificacion es cancelada, para los que quieren no usarla.



    Última edición por [Adm] SevuOT el Sáb Dic 15, 2018 11:36 pm, editado 2 veces (Razón : Nueva variable incluida.)



    Si necesitas hospedaje para tu servidor usa este enlace y mira los buenos planes de Windows y Linux:
    Si tu cuenta de PayPal no esta verificada no importara, igual aceptan pagos con cuentas no verificadas.


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

    [Admin] God Maya

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



    [Mods] Autoloot para 0.3.6 hasta 0.4, corregido tipicos errores YNU5B25
    https://www.tibiaface.com

    Sotomayor

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

    [Adm] SevuOT

    [Adm] SevuOT
    Miembro
    Miembro
    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 los buenos planes de Windows y Linux:
    Si tu cuenta de PayPal no esta verificada no importara, igual aceptan pagos con cuentas no verificadas.


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

    Roo

    Roo
    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

    [Adm] SevuOT

    [Adm] SevuOT
    Miembro
    Miembro
    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 los buenos planes de Windows y Linux:
    Si tu cuenta de PayPal no esta verificada no importara, igual aceptan pagos con cuentas no verificadas.


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

    Psycho

    Psycho
    Moderador
    Moderador
    ese ese todo el script o falta algo por q no me recoge los items que agregue al autoloot!...



    AFC By Psycho & Alfa Server
    [Tienes que estar registrado y conectado para ver este vínculo]
    http://dio-pcl.ddns.net

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    [Tienes que estar registrado y conectado para ver este vínculo] escribió:ese ese todo el script o falta algo por q no me recoge los items que agregue al autoloot!...

    Tu problema mas que seguro es son las storages que tienen otras lecturas en tfs 0.3.6 como los pokemons ot trabajan con esas versiones tendrias que verificar como es la funcion de storages

    Enviado desde Topic'it



    [Mods] Autoloot para 0.3.6 hasta 0.4, corregido tipicos errores YNU5B25
    https://www.tibiaface.com

    [Adm] SevuOT

    [Adm] SevuOT
    Miembro
    Miembro
    se añadieron nuevas opciones al mod autoloot!
    [Tienes que estar registrado y conectado para ver este vínculo]



    Si necesitas hospedaje para tu servidor usa este enlace y mira los buenos planes de Windows y Linux:
    Si tu cuenta de PayPal no esta verificada no importara, igual aceptan pagos con cuentas no verificadas.


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

    Master2018

    Master2018
    Nuevo Miembro
    Nuevo Miembro
    gracias bastante bueno pero no recoje el dinero solo los itens Sad

    Simon Marin

    Simon Marin
    Miembro
    Miembro
    Hola muy buen sistema, muchas gracias...
    pero podrias editarlo para que cuando mates al monster no te den altiro el item que agregaste, si no que tienes que estar arriba del cuerpo para que se transfieran los item (no es necesario que lo abra)

    Por que me parece injusto que quite los item a distancia.

    por favor

    zephiro

    zephiro
    Miembro
    Miembro
    Lo tendran para la version 1.0? Saludos!

    https://www.youtube.com/channel/UCN7LXy4Jk7x8qiYA4ohvIeg?view_as

    jeank

    jeank
    Nuevo Miembro
    Nuevo Miembro
    buenas una disculpa por mi pregunta pero soy nuevo en esto de hacer ots, ¿donde debo agregar el script?

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    [Tienes que estar registrado y conectado para ver este vínculo] escribió:buenas una disculpa por mi pregunta pero soy nuevo en esto de hacer ots, ¿donde debo agregar el script?

    en la carpeta mods de su servidor



    [Mods] Autoloot para 0.3.6 hasta 0.4, corregido tipicos errores YNU5B25
    https://www.tibiaface.com

    jeank

    jeank
    Nuevo Miembro
    Nuevo Miembro
    gracias, mi server no tiene esa carpeta, pero tiene una llamada modules es lo mismo?

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    [Tienes que estar registrado y conectado para ver este vínculo] escribió:gracias, mi server no tiene esa carpeta, pero tiene una llamada modules es lo mismo?

    si no tienes esa carpeta no es compatible para su servidor



    [Mods] Autoloot para 0.3.6 hasta 0.4, corregido tipicos errores YNU5B25
    https://www.tibiaface.com

    Simon Marin

    Simon Marin
    Miembro
    Miembro
    Espero Respuesta Exclamation

    [Adm] SevuOT

    [Adm] SevuOT
    Miembro
    Miembro
    [Tienes que estar registrado y conectado para ver este vínculo] escribió:Espero Respuesta Exclamation
    Se ha hecho la actualizacion, vuelve a leer para mas información.
    [Tienes que estar registrado y conectado para ver este vínculo]



    Si necesitas hospedaje para tu servidor usa este enlace y mira los buenos planes de Windows y Linux:
    Si tu cuenta de PayPal no esta verificada no importara, igual aceptan pagos con cuentas no verificadas.


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

    Kamila

    Kamila
    Nuevo Miembro
    Nuevo Miembro
    y para que te el comando sea x tiempo es decir que al echarme un items me de x tiempo de auto loots

    Felipe93

    Felipe93
    Miembro
    Miembro
    Para que funcione a premium seria cambiar el VipStorage por PremiumStorage cierto?

    ralke

    ralke
    Miembro
    Miembro
    Buenas, para que este sistema funcione correctamente en tfs 0.4 deben reemplazar la funcion onDeath por onKill en la linea 173 agregando lo siguiente:

    Código:
    <event type="kill" name="LootEventKIll" event="script"><![CDATA[
    domodlib('Loot_func')
    function onKill(cid, target, lastHit)
        if isPlayer(cid) and getPlayerStorageValue(cid, info.Storages[3]) <= 0 and isMonster(target) and not isInArray(info.BlockMonsters, getCreatureName(target):lower()) then
            addEvent(corpseRetireItems, 0, cid ,getThingPos(target))
        end
        return true

    asi evitaras el error adjunto en la siguiente imagen[Mods] Autoloot para 0.3.6 hasta 0.4, corregido tipicos errores Error210

    En caso de necesitar el sistema con slots (cantidad maxima de items almacenados) utilizen en siguiente script:

    [Tienes que estar registrado y conectado para ver este vínculo]

    saludos!

    http://greedisland.ml/index.php

    [Adm] SevuOT

    [Adm] SevuOT
    Miembro
    Miembro
    [Tienes que estar registrado y conectado para ver este vínculo] gracias por ayudar, pero para que el pedazo de codigo que publicastes como FIXED! funcione correctamente deberian usar el mod completo que publicastes en el pastebin! debes asegurarte de informar eso, ya que muchos saldran publicando errores relacionados, gracias se le agradece estar mas atentos con estas cosas cuando se desea ayudar.



    Si necesitas hospedaje para tu servidor usa este enlace y mira los buenos planes de Windows y Linux:
    Si tu cuenta de PayPal no esta verificada no importara, igual aceptan pagos con cuentas no verificadas.


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

    ralke

    ralke
    Miembro
    Miembro
    @[Adm] SevuOT buenisimo, tratare de ser mas claro ^^, por otra parte seguí testeando el script. Les sugiero agregar a BlockItemsList = {} todas las id de items que tengan que ver con containers, tales como backpacks, bags, etc., ya que crean errores en la consola.

    Para ello reemplazar:
    Código:
    BlockItemsList = {2123,2515},

    Por:
    Código:
       BlockItemsList = {2123,2515,1987,1988,5801,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004},

    Y tambien existe problemas con los summons de algunas criaturas. Hasta el momento aconsejo reemplazar:

    Código:
     BlockMonsters = {},

    Por:
    Código:
    BlockMonsters = {'Snake','Fire Elemental'},

    Si encuentro mas errores intentare seguir ayudando!!

    Smile
    Saludos

    http://greedisland.ml/index.php

    [Adm] SevuOT

    [Adm] SevuOT
    Miembro
    Miembro
    si el sistema tiene sus detalles, corregi varios errores e implemente algunas cosas extras, sin embargo le faltaron mas cosas, puede que me anime a crear todo el sistema desde cero, ya que el sistema no es mio, solo le meti algunos parches, lamentablemente aun tienen sus problemitas.

    por cierto he visto que estas aprendiendo a crear scripts, te veo por buen camino, y eso es bueno para ti y la comunidad, esperemos que algun dia seas un pro, entre mas pro en el foro mas informacion valiosa tendremos aqui! = saludos



    Si necesitas hospedaje para tu servidor usa este enlace y mira los buenos planes de Windows y Linux:
    Si tu cuenta de PayPal no esta verificada no importara, igual aceptan pagos con cuentas no verificadas.


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

    Jemrelias5

    Jemrelias5
    Miembro
    Miembro
    Aja y como hago que funcione donde pego eso en que carpeta? Me meto en mods copio cualquier xml lo renombro con el nombre de autoloot.xml y copio eso adentro y ya? Asi o debo hacer otra cosa

    Contenido patrocinado


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

    Ir a la página : 1, 2  Siguiente

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