• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

[Mod] Auto Loot

Hi, when you say "exclusive versions", are paid versions? Is there any website or publications on this?
Modules was a feature of tfs back in the past. Some distros did updste tfs but kept that feature. Otx is one of those distros
 
Modules was a feature of tfs back in the past. Some distros did updste tfs but kept that feature. Otx is one of those distros

Hmm ty. I use 1.3 source TFS and dont have.
To replace the module is there another file? Is it can to be implemented? I see several interesting functions in modules and I do not use them because idk where to adapt.
 
here fix


Lua:
<?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>

I use this script, but he crash distro if players put 26+ items on autoloot, any can help me for make one limit on auto loot items on this script?
 
Hello, i have problem with this script, it work with all items, but dont work with money, can u help me? Or just try do something like !autoloot gold? and it will be take money to your backpack?
 
Hello, i have problem with this script, it work with all items, but dont work with money, can u help me? Or just try do something like !autoloot gold? and it will be take money to your backpack?

when u pick up gold it goes to your bank

sorry for reviving this old post but i tested this system and having this error, please help!

solved at the moment! i saw you had to replace function onDeath for onKill line 173

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

Attachments

Last edited:
Back
Top