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

TFS 0.X [7.72] Autoloot Problem

potinho

Active Member
Joined
Oct 11, 2009
Messages
529
Solutions
14
Reaction score
43
Location
Brazil
Hi guys,

Im trying to use this AutoLoot System for my server ([0.4] Autoloot System (https://otland.net/threads/0-4-autoloot-system.272319/#post-2639823)), but when i will add a item, shows "This item does not exist" and my console got this error:


[29/12/2020 11:21:27] [Error - TalkAction Interface]
[29/12/2020 11:21:27] local cid = 268495768
[29/12/2020 11:21:27] local words = "/autoloot"
[29/12/2020 11:21:27] local param = "add,gold coin"
[29/12/2020 11:21:27] local channel = 65534
[29/12/2020 11:21:27] domodlib('Loot_func')
[29/12/2020 11:21:27] local t = string.explode(string.lower(param), ",")
[29/12/2020 11:21:27] if info_OnlyPremium == true and not isPremium(cid) then
[29/12/2020 11:21:27] doPlayerSendCancel(cid, "you must be a premium account.") return true
[29/12/2020 11:21:27] elseif not t[1] then
[29/12/2020 11:21:27] ShowItemsTabble(cid) return true
[29/12/2020 11:21:27] elseif tonumber(t[1]) or tonumber(t[2]) then
[29/12/2020 11:21:27] doPlayerSendCancel(cid, "enter!autoloot add,name or !autoloot remove,name") return true
[29/12/2020 11:21:27] elseif isInArray({"add","remove"}, tostring(t[1])) then
[29/12/2020 11:21:27] local func,check = tostring(t[1]) == "add" and addItemTable or removeItemTable, tostring(t[1]) == "add" and true or false
[29/12/2020 11:21:27] local item = getItemIdByName(tostring(t[2]), false)
[29/12/2020 11:21:27] if not item then
[29/12/2020 11:21:27] doPlayerSendCancel(cid, "This item does not exist.") return true
[29/12/2020 11:21:27] elseif check == true and isInArray(info.BlockItemsList, item) then
[29/12/2020 11:21:27] doPlayerSendCancel(cid, "You can not add this item in the list!") return true
[29/12/2020 11:21:27] elseif isInTable(cid, item) == check then
[29/12/2020 11:21:27] doPlayerSendCancel(cid, "This Item "..(check == true and "already" or "is not").." in your list.") return true
[29/12/2020 11:21:27] end
[29/12/2020 11:21:28] func(cid, item)
[29/12/2020 11:21:28] 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
[29/12/2020 11:21:28] end
[29/12/2020 11:21:28] return true
[29/12/2020 11:21:28] Description:
[29/12/2020 11:21:28] (LuaInterface::luaGetItemIdByName) Item not found

XML file in mods
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 = false,
AutomaticDeposit = false,
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>

PS: I tried to search for anothers scripts, but not find anyone who works on my server
 
Top