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

autoloot for tfs 1.0

Status
Not open for further replies.
E

Evil Puncker

Guest
Here is the script that I tried to make run on tfs 1.0, no error in console but for some reason it doesn't work:

Loot.lua
PHP:
info = {
    OnlyPremium = false,
    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.split(tabstr, ";")
    for i,x in pairs(a) do
            local b = string.split(x, ",")
            tab[tonumber(b[1]) or b[1]] = tonumber(b[2]) or b[2]
    end
    return tab
end
function ExistItemByName(name) -- by vodka
    local items = io.open("data/items/items.xml", "r"):read("*all")
    local get = items:match('name="' .. name ..'"')
    if get == nil or get == "" then
        return false
    end
return true
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

creaturescript:
PHP:
dofile('data/Loot.lua')
function onDeath(cid, corpse, deathList)
    local killer,pos = deathList[1],getCreaturePosition(cid)
    addEvent(corpseRetireItems,1,killer,pos)
return true
end

talkaction:
PHP:
dofile('data/Loot.lua')
function onSay(cid, words, param)
    local t = param:split(",")
    if not t[1] then
        ShowItemsTabble(cid) return true
    elseif tonumber(t[1]) or tonumber(t[2]) then
        doPlayerSendCancel(cid, "enter !at add,name or !at 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 = ExistItemByName(tostring(t[2]))
    if not item then
        doPlayerSendCancel(cid, "This item does not exist.") return true
    end
        local itemlist = getItemIdByName(tostring(t[2]))
    if check == true and isInArray(info.BlockItemsList, itemlist) then
        doPlayerSendCancel(cid, "You can not add this item in the list!") return true
    elseif isInTable(cid, itemlist) == check then
        doPlayerSendCancel(cid, "This Item "..(check == true and "already" or "is not").." in your list.") return true
    end
    func(cid, itemlist)
        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
end
 
Status
Not open for further replies.
Back
Top