• TibiaFace

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

    .
    demo menumenu

    Afiliados



    Votar:

    error Autoloot

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

    1default error Autoloot el Vie Ago 11, 2017 6:11 pm

    jesusaron

    avatar
    Miembro
    Miembro
    Mi Problema:
    el error es este


    Imagen de mi error:


    Esta en:
    Consola
    Código:
    function onSay(player, words, param)
        local split = param:split(",")

        local action = split[1]
        if action == "add" then
            local item = split[2]:gsub("%s+", "", 1)
            local itemType = ItemType(item)
            if itemType:getId() == 0 then
                itemType = ItemType(tonumber(item))
                if itemType:getId() == 0 then
                    player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "There is no item with that id or name.")
                    return false
                end
            end

            local itemName = tonumber(split[2]) and itemType:getName() or item
            local size = 0
            for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do
                local storage = player:getStorageValue(i)
                if size == AUTO_LOOT_MAX_ITEMS then
                    player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "The list is full, please remove from the list to make some room.")
                    break
                end

                if storage == itemType:getId() then
                    player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." is already in the list.")
                    break
                end

                if storage <= 0 then
                    player:setStorageValue(i, itemType:getId())
                    player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." has been added to the list.")
                    break
                end

                size = size + 1
            end
        elseif action == "remove" then
            local item = split[2]:gsub("%s+", "", 1)
            local itemType = ItemType(item)
            if itemType:getId() == 0 then
                itemType = ItemType(tonumber(item))
                if itemType:getId() == 0 then
                    player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "There is no item with that id or name.")
                    return false
                end
            end

            local itemName = tonumber(split[2]) and itemType:getName() or item
            for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do
                if player:getStorageValue(i) == itemType:getId() then
                    player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." has been removed from the list.")
                    player:setStorageValue(i, 0)
                    return false
                end
            end

            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." was not founded in the list.")
        elseif action == "show" then
            local text = "-- Auto Loot List --\n"
            local count = 1
            for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do
                local storage = player:getStorageValue(i)
                if storage > 0 then
                    text = string.format("%s%d. %s\n", text, count, ItemType(storage):getName())
                    count = count + 1
                end
            end

            if text == "" then
                text = "Empty"
            end
     
            player:showTextDialog(1950, text, false)
        elseif action == "clear" then
            for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do
                player:setStorageValue(i, 0)
            end

            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "The autoloot list has been cleared.")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Use the commands: !autoloot {add, remove, show, clear}")
        end

        return false
    end

    Ver perfil de usuario

    2default Re: error Autoloot el Vie Ago 11, 2017 6:20 pm

    [Admin] God Maya

    avatar
    Administrador
    Administrador
    prueba a ver

    Código:
            function onSay(cid, words, param)
    local player = Player(cid)
                local split = param:split(",")

                local action = split[1]
                if action == "add" then
                    local item = split[2]:gsub("%s+", "", 1)
                    local itemType = ItemType(item)
                    if itemType:getId() == 0 then
                        itemType = ItemType(tonumber(item))
                        if itemType:getId() == 0 then
                            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "There is no item with that id or name.")
                            return false
                        end
                    end

                    local itemName = tonumber(split[2]) and itemType:getName() or item
                    local size = 0
                    for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do
                        local storage = player:getStorageValue(i)
                        if size == AUTO_LOOT_MAX_ITEMS then
                            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "The list is full, please remove from the list to make some room.")
                            break
                        end

                        if storage == itemType:getId() then
                            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." is already in the list.")
                            break
                        end

                        if storage <= 0 then
                            player:setStorageValue(i, itemType:getId())
                            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." has been added to the list.")
                            break
                        end

                        size = size + 1
                    end
                elseif action == "remove" then
                    local item = split[2]:gsub("%s+", "", 1)
                    local itemType = ItemType(item)
                    if itemType:getId() == 0 then
                        itemType = ItemType(tonumber(item))
                        if itemType:getId() == 0 then
                            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "There is no item with that id or name.")
                            return false
                        end
                    end

                    local itemName = tonumber(split[2]) and itemType:getName() or item
                    for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do
                        if player:getStorageValue(i) == itemType:getId() then
                            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." has been removed from the list.")
                            player:setStorageValue(i, 0)
                            return false
                        end
                    end

                    player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." was not founded in the list.")
                elseif action == "show" then
                    local text = "-- Auto Loot List --\n"
                    local count = 1
                    for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do
                        local storage = player:getStorageValue(i)
                        if storage > 0 then
                            text = string.format("%s%d. %s\n", text, count, ItemType(storage):getName())
                            count = count + 1
                        end
                    end

                    if text == "" then
                        text = "Empty"
                    end
           
                    player:showTextDialog(1950, text, false)
                elseif action == "clear" then
                    for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do
                        player:setStorageValue(i, 0)
                    end

                    player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "The autoloot list has been cleared.")
                else
                    player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Use the commands: !autoloot {add, remove, show, clear}")
                end

                return false
            end



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

    3default [Talkactions] error consola el Vie Ago 11, 2017 6:26 pm

    jesusaron

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

    Ver perfil de usuario

    4default Re: error Autoloot el Vie Ago 11, 2017 7:07 pm

    [Admin] God Maya

    avatar
    Administrador
    Administrador
    en creature scripts

    Código:
    function onDeath(player, corpse, killer, mostDamageKiller, unjustified, mostDamageUnjustified)
        addEvent(getCorpseLootList, 100, killer, player:getPosition())
        return true
    end

    en login.lua

    Código:
    player:registerEvent("AutoLoot")

    si no se registra asi entonces

    Código:
    'Autoloot',

    en creaturescripts.xml

    Código:


    <event script="autoLoot.lua" name="AutoLoot" type="death"/>


    nos vamos a la carpeta data creamos un archivo autoloot.lua y pegamos esto dentro

    Código:
    Loot = {}
     
        LOOTSTORAGE = 45713
     
        function Loot:create()
            return setmetatable({}, {__index = self})
        end
     
        function Loot:add(id)
            return table.insert(self, id)
        end
     
        function Loot:remove(id)
            local newtb = {}
            for k, v in pairs(self) do
                if (v + 0) ~= (id + 0) then
                    table.insert(newtb, v)
                end
            end
            self = setmetatable(newtb, {__index = self})
            return self
        end
     
        function Loot:getString()
            local str = ""
            for k, v in pairs(self) do
                str = str.. v.. ";"
            end
            return str
        end
     
        function Loot:getTable()
            local tb = {}
            for k, v in pairs(self) do
                table.insert(tb, v)
            end
            return tb
        end
     
        function Loot:saveToPlayer(player)
            return doPlayerAddStorageValue(player, LOOTSTORAGE, self:getString())
        end
     
        function getPlayerLootList(player)
            local lootList = getPlayerStorageValue(player, LOOTSTORAGE)
            lootList = lootList:split(";")
            local tableList = {}
            for k, v in pairs(lootList) do
                table.insert(tableList, v)
            end
            return setmetatable(tableList, {__index = Loot})
        end
     
        function getCorpseLootList(player, pos)
            local loot = {}
            local text = ""
            local corpse = Tile(pos):getTopVisibleThing()
            local plits = getPlayerLootList(player):getTable()
     
            for i = 0, corpse:getSize() do
                table.insert(loot, getContainerItem(corpse.uid, i))
            end
     
            for k, v in pairs(plits) do
                for x, y in pairs(loot) do
                    if (v + 1) == (y.itemid + 1) then
                        doPlayerAddItem(player, y.itemid, Item(y.uid):getCount())
                        doRemoveItem(y.uid, Item(y.uid):getCount())
                    end
                end
            end
            return loot
        end

    en talkactions/script

    Código:
    function onSay(cid, words, param)
     
            local var = param:split(",")
            local loots = Loot:create()
            loots = getPlayerLootList(cid)
            if words == "/autoloot" then
                if var[1] == "add" then
                    if getItemIdByName(var[2]) then
                        for k, v in pairs(loots) do
                            if (getItemIdByName(var[2]) + 0 ) == (v + 0) then
                                return cid:sendCancelMessage("Alread added in the loot list.")
                            end
                        end
                        loots:add(getItemIdByName(var[2]))
                        loots:saveToPlayer(cid)
                        return cid:sendCancelMessage("Item ".. var[2].. ", added to loot list.")
                    else
                        return cid:sendCancelMessage("This item dont exist.")
                    end
                elseif var[1] == "remove" then
                    if getItemIdByName(var[2]) then
                        for k, v in pairs(loots) do
                            if (getItemIdByName(var[2]) + 0 ) == (v + 0) then
                                loots = loots:remove(getItemIdByName(var[2]))
                                loots:saveToPlayer(cid)
                                return cid:sendCancelMessage("Item ".. var[2].. ", removed from loot list.")
                            end
                        end
                        return cid:sendCancelMessage("Item are not in loot list.")
                    else
                        return cid:sendCancelMessage("Item name dont exist.")
                    end
                elseif var[1] == "list" then
                    local text = "-- My Loot List --\n\n"
                    for k, v in pairs(loots) do
                        text = text.. k..": "..getItemName(v).."\n"
                    end
                    cid:popupFYI(text)
                end
            end
            return true
        end

    Código:
    <talkaction words="/autoloot" separator=" " script="autoloot.lua" />


    ahora encada moustro que quieran el auto loot le añaden esto

    Código:
    <script>
    <event name="AutoLoot"/>
    </script>

    ejemplo

    Código:
    <?xml version="1.0" encoding="UTF-8"?>
    <monster name="Drillworm" nameDescription="drillworm" race="venom" experience="1100" speed="240" manacost="0">
       <health now="1500" max="1500"/>
       <look type="527" corpse="19705"/>
       <targetchange interval="4000" chance="20"/>


    <script>
    <event name="AutoLoot"/>    ----------> ahi
    </script>

       <flags>
          <flag summonable="0"/>
          <flag attackable="1"/>
          <flag hostile="1"/>
          <flag illusionable="0"/>
          <flag convinceable="0"/>
          <flag pushable="0"/>
          <flag canpushitems="1"/>
          <flag canpushcreatures="1"/>
          <flag targetdistance="1"/>
          <flag staticattack="90"/>
          <flag runonhealth="0"/>
       </flags>


    es posible que doPlayerAddStorageValue no funcione abria que probar el sistema si no lanza error en ello




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

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