• 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 Problem tfs 0.4

jareczekjsp

Member
Joined
Jan 30, 2023
Messages
188
Reaction score
9
GitHub
Jarek123
Hello Guys I have problem with autoloot TFS 0.4 Tibia 8.6
When Player Died I see error in console Like that

Broadcasted message: "The player Sharpshoot [Level: 1007] was killed by the player Destruction [Level: 2577]".
[0:26:55] Sharpshoot has logged out.

[0:26:55] [Error - CreatureScript Interface]
[0:26:55] In a timer event called from:
[0:26:55] data/creaturescripts/scripts/autoloot.lua:eek:nKill
[0:26:55] Description:
[0:26:55] (internalGetPlayerInfo) Player not found when requesting player info #22

[0:26:55] [Error - CreatureScript Interface]
[0:26:55] In a timer event called from:
[0:26:55] data/creaturescripts/scripts/autoloot.lua:eek:nKill
[0:26:55] Description:
[0:26:55] data/creaturescripts/scripts/autoloot.lua:124: attempt to perform arithmetic on a boolean value
[0:26:55] stack traceback:
[0:26:55] data/creaturescripts/scripts/autoloot.lua:124: in function <data/creaturescripts/scripts/autoloot.lua:76>
[0:26:57] Sharpshoot has logged in.

My Script is:

Lua:
local tabela = {}

local function getPlayerList(cid)
    local tab = {}
    if getPlayerStorageValue(cid, 442002) ~= -1 then
        table.insert(tab, getPlayerStorageValue(cid, 442002))
    end
    if getPlayerStorageValue(cid, 442003) ~= -1 then
        table.insert(tab, getPlayerStorageValue(cid, 442003))
    end
    if getPlayerStorageValue(cid, 442004) ~= -1 then
        table.insert(tab, getPlayerStorageValue(cid, 442004))
    end
    if getPlayerStorageValue(cid, 442005) ~= -1 then
        table.insert(tab, getPlayerStorageValue(cid, 442005))
    end
    if #tab > 0 then
        return tab
    end
    return false
end

local function autoLoot(cid, pos, targetName)
    local check = false
    local str = ""
    local position = {}
    for i = 1, 255 do
        pos.stackpos = i
        if getThingFromPos(pos).uid and getThingFromPos(pos).uid > 0 and isContainer(getThingFromPos(pos).uid) then
            position = pos
            check = true
            break
        end
    end
    if check then
        local corpse = getContainerItemsInfo(getThingFromPos(position).uid)       
        if corpse then
            for index, info in pairs(corpse) do
                if index < countTable(corpse) then
                    if tonumber(info.uid) and tonumber(info.itemid) then
                        if isContainer(info.uid) then
                            local bag = getContainerItemsInfo(info.uid)
                            for i = 1, countTable(bag) - 1 do
                                if isInArray(getPlayerList(cid), bag[i].itemid) then
                                    if bag[i].quant > 1 then
                                        doRemoveItem(bag[i].uid, bag[i].quant)
                                        doPlayerAddItem(cid, bag[i].itemid, bag[i].quant)
                                        str = str.." "..bag[i].quant.." "..getItemNameById(bag[i].itemid)..","
                                    else
                                        doRemoveItem(bag[i].uid)
                                        doPlayerAddItem(cid, bag[i].itemid, 1)
                                        str = str.." 1 "..getItemNameById(bag[i].itemid)..","
                                    end
                                end
                            end
                        end
                    end
                end
                if isInArray(getPlayerList(cid), info.itemid) then
                    if info.quant > 1 then
                        doRemoveItem(info.uid, info.quant)
                        doPlayerAddItem(cid, info.itemid, info.quant)
                        str = str.." "..info.quant.." "..getItemNameById(info.itemid)..","
                    else
                        doRemoveItem(info.uid)
                        doPlayerAddItem(cid, info.itemid, 1)
                        str = str.." 1 "..getItemNameById(info.itemid)..","
                    end
                end
            end
        end
    end
    tabela[targetName] = {item = "[Auto Loot System] Collected: "..str, gold = 0}
end

local function autoGold(cid, pos, targetName)
    local check = false
    local total = 0
    local position = {}
    for i = 1, 255 do
        pos.stackpos = i
        if getThingFromPos(pos).uid and getThingFromPos(pos).uid > 0 and isContainer(getThingFromPos(pos).uid) then
            position = pos
            check = true
            break
        end
    end
    if check then
        local corpse = getContainerItemsInfo(getThingFromPos(position).uid)
        if corpse then
            for index, info in pairs(corpse) do
                if info.uid and info.itemid then
                    if index < countTable(corpse) then
                        if isContainer(info.uid) then
                            local bag = getContainerItemsInfo(info.uid)
                            for i = 1, countTable(bag) - 1 do
                                if isInArray({2148, 2152, 2160}, bag[i].itemid) then
                                    local multiplie = 1
                                    if bag[i].itemid == 2148 then
                                        multiplie = 1
                                    elseif bag[i].itemid == 2152 then
                                        multiplie = 100
                                    elseif bag[i].itemid == 2160 then
                                        multiplie = 10000
                                    end
                                    doRemoveItem(bag[i].uid, bag[i].quant)
                                    doPlayerSetBalance(cid, getPlayerBalance(cid) + (tonumber(bag[i].quant) and tonumber(bag[i].quant) * multiplie or 0))
                                    total = total + (tonumber(bag[i].quant) and tonumber(bag[i].quant) * multiplie or 0)
                                    doPlayerSetStorageValue(cid, 442102, getPlayerStorageZero(cid, 442102) + (tonumber(bag[i].quant) and tonumber(bag[i].quant) * multiplie or 0))
                                end
                            end
                        end
                    end
                    if isInArray({2148, 2152, 2160}, info.itemid) then
                        local multiplie = 1
                        if info.itemid == 2148 then
                            multiplie = 1
                        elseif info.itemid == 2152 then
                            multiplie = 100
                        elseif info.itemid == 2160 then
                            multiplie = 10000
                        end
                        doRemoveItem(info.uid, info.quant)
                        doPlayerSetBalance(cid, getPlayerBalance(cid) + (tonumber(info.quant) and tonumber(info.quant) * tonumber(multiplie) or 0))
                        doPlayerSetStorageValue(cid, 442102, getPlayerStorageZero(cid, 442102) + (tonumber(info.quant) and tonumber(info.quant) * tonumber(multiplie) or 0))
                        total = total + (tonumber(info.quant) and tonumber(info.quant) * multiplie or 0)
                    end
                end
            end
        end
    end
    if tabela[targetName] and tabela[targetName].gold then
        tabela[targetName].gold = total
    end
end

local function sendMsg(cid, targetName)
    if tabela[targetName] and tabela[targetName].gold then
        if tabela[targetName].gold == 0 then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, tabela[targetName].item)
        else
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, tabela[targetName].item.." "..tabela[targetName].gold.." gold coins.")
        end
        tabela[targetName] = nil
    end
end

function onKill(cid, target, lastHit)
    if isPlayer(cid) and isMonster(target) then
        local targetName = getCreatureName(target)
        if getPlayerStorageValue(cid, 442100) == 1 and getPlayerList(cid) then
            local pos = getCreaturePosition(target)
            addEvent(autoLoot, 500, cid, pos, targetName)
        end
        if getPlayerStorageValue(cid, 442101) == 1 then
            local pos = getCreaturePosition(target)
            addEvent(autoGold, 500, cid, pos, targetName)
        end
        if getPlayerStorageValue(cid, 442100) == 1 or getPlayerStorageValue(cid, 442101) == 1 then
            addEvent(sendMsg, 540, cid, targetName)
        end
    end
    return true
end
 
Back
Top