[Mod] Auto Loot

Joined
Mar 25, 2010
Messages
358
Best answers
0
Likes
158
#1
Credits: MatheusMkalo & Vodkart

tested version: 8.6 and 9.1






Auto Loot.xml
Lua:
<?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+: http://pastebin.com/gxr52zp8


Commads:
----------------
/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
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:
Code:
func(cid, item) -- after this line
doPlayerSave(cid) -- add this function
 
Last edited:
Joined
Apr 9, 2009
Messages
479
Best answers
0
Likes
7
Location
Germany
#3
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
Best answers
7
Likes
2,943
Location
Netherlands
#4
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.
 
Joined
Mar 25, 2010
Messages
358
Best answers
0
Likes
158
#5
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
 
Joined
Apr 9, 2009
Messages
479
Best answers
0
Likes
7
Location
Germany
#6
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,930
Best answers
27
Likes
1,377
Location
Sweden
#7
Which bots are you talking about?
 
Joined
Apr 9, 2009
Messages
479
Best answers
0
Likes
7
Location
Germany
#8
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
Best answers
0
Likes
118
Location
Warsaw, Poland
#12
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,726
Best answers
20
Likes
1,982
Location
Sweden?
#13
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.
 
Top