[Mod] Auto Loot

Critico

Sexy
Joined
Mar 25, 2010
Messages
358
Reaction score
162
Credits: MatheusMkalo & Vodkart

tested version: 8.6 and 9.1






Auto Loot.xml
XML:
<?xml version="1.0" encoding="ISO-8859-1"?> 
<mod name="Loot System" version="1.0" author="Vodkart And Mkalo" contact="none.com" enabled="yes"> 
<config name="Loot_func"><![CDATA[

        info = {
            OnlyPremium = true,
            AutomaticDeposit = true,
            BlockMonsters = {},
            BlockItemsList = {2123,2515}
            }

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
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 AutomaticDeposit(cid,item,n)
local deposit = item == tonumber(2160) and (n*10000) or tonumber(item) == 2152 and (n*100) or (n*1)
return doPlayerDepositMoney(cid, deposit)
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)
                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)
                        if info.AutomaticDeposit == true and isInArray({"2148","2152","2160"},tonumber(x.itemid)) then
                        AutomaticDeposit(cid,x.itemid,x.type)
                        end
                                else
                                        doPlayerAddItem(cid, x.itemid)
                                end
                                    doRemoveItem(x.uid)
                        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)
    addEvent(corpseRetireItems,1,killer,pos)
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 info.OnlyPremium == true and not isPremium(cid) then
doPlayerSendCancel(cid, "you must be a premium account.") return true
elseif 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>
Version 9.6+: [Lua] <?xml version="1.0" encoding="ISO-8859-1"?> <mod name="Loot System" version=" - Pastebin.com (http://pastebin.com/gxr52zp8)


Commads:
Code:
----------------
/autoloot -- show yor loot list
------------------
/autoloot add,ITEM NAME -- add item in your loot list
ex:
/autoloot add,gold coin
------------------
/autoloot remove,ITEM NAME -- remove item from your loot list

Configuration
Lua:
OnlyPremium = true

need to be premium to use the command

------------------------------
AutomaticDeposit = true

if the drop money automatically goes to the bank

-----------------------------------------
BlockMonsters = {}

here you can block some monster he does not use auto loot

exemple:

BlockMonsters = {'hydra,'demon'}

------------------------
BlockItemsList = {2123,2515}

Here is to block some items that he will not get with the autoloot
--------------------------------

OBS:
If your server, you need to relog to update the list, add this function after:
Lua:
func(cid, item) -- after this line
doPlayerSave(cid) -- add this function
 

Attachments

Last edited by a moderator:

Maxens

Member
Joined
Apr 9, 2009
Messages
479
Reaction score
7
Location
Germany
Nice Script, but I think this scrippt will a little bit "fuck up" the server... everyone makes that loot script on and let his char botting...lvl+money and so on ;/ and if you have this script in your server you have to make the prices much higher for everything I think :p
 

Limos

Premium User
Joined
Jun 7, 2010
Messages
10,017
Reaction score
2,949
Location
Netherlands
If people use bot, then they can use autoloot with their bot. I think this will be good for servers where most of the loot isn't usefull.
 
OP
Critico

Critico

Sexy
Joined
Mar 25, 2010
Messages
358
Reaction score
162
Nice Script, but I think this scrippt will a little bit "fuck up" the server... everyone makes that loot script on and let his char botting...lvl+money and so on ;/ and if you have this script in your server you have to make the prices much higher for everything I think :p
just block some monster or block some items from auto loot
 

Maxens

Member
Joined
Apr 9, 2009
Messages
479
Reaction score
7
Location
Germany
If people use bot, then they can use autoloot with their bot. I think this will be good for servers where most of the loot isn't usefull.
Some bots are bugged with auto-looting...thats the reason why i said it :p
 

Ninja

Global Moderator
Staff member
Global Moderator
Joined
Apr 6, 2010
Messages
5,943
Reaction score
1,407
Location
Sweden
Which bots are you talking about?
 

Maxens

Member
Joined
Apr 9, 2009
Messages
479
Reaction score
7
Location
Germany
I think some of bots which are available for free... and Tibia Bot NG for Tibia 7.92 - 8.1 I think
 

Potar

SocialWorld
Joined
Mar 1, 2009
Messages
1,664
Reaction score
119
Location
Warsaw, Poland
Becomes jammed, for example i got 3 mods, it is working fine without any errors on the console for 20h, one time 1h, another time 5h, without errors ^_^.

So i cahnged all mods for libs / creature etc. and working fine.
 

Printer

if Printer then print("LUA") end
Premium User
Joined
Dec 27, 2009
Messages
5,734
Reaction score
2,005
Location
Sweden?
I dont know if its just me, but it doesnt pick up the item :O, I checked the list and the item is there :S

I dont get any errors on the console.
 

Printer

if Printer then print("LUA") end
Premium User
Joined
Dec 27, 2009
Messages
5,734
Reaction score
2,005
Location
Sweden?
I have it open still nothing.
 
OP
Critico

Critico

Sexy
Joined
Mar 25, 2010
Messages
358
Reaction score
162
I dont know if its just me, but it doesnt pick up the item :O, I checked the list and the item is there :S

I dont get any errors on the console.
Server version, TFS?

8.54?
 
Top