Ir para conteúdo
Banner com Efeitos

Featured Replies

Postado

Olá galera, venho aqui pedir socorro a vocês novamente... Encontrei um script de auto loot aqui no forum que funcionou perfeitamente, porém, agora perto da inauguração do meu server estou precisando fazer uns ajustes. 

 

DUVIDA

 

1>Não sei como faço para limitar a quantidade de itens... Atualmente é possivel colocar mais de 10 itens, gostaria de limitar a 4.

2>Gostaria também de aumentar o limite, porém, só para premiuns, no script já tem a função de colocar somente premium, mas gostaria que os players Free pudesse colocar até 4 itens, e os p.a (VIP) coloquem até 10.

 

Se alguem souber como fazer isso e puder me ajudar, agradeço desde já, e caso venha a jogar meu ot um dia irei recompensa-lo :p

 

Segue o script

Spoiler

<?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 = 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))

               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))

               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)).."\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)

                                                            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>

 

Bom é isso, grato também quem leu até o final, se não puder ou não quiser ajudar, de um UP e ajude um parceiro o/

  • Respostas 14
  • Visualizações 861
  • Created
  • Última resposta

Top Posters In This Topic

Posted Images

Postado

Tente:

<?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 = {
	FreeLimit = 4,
	PremiumLimit = 10,
	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))
	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))
	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, value)
	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)).."\n"
	end
	if value == true then
		return 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)
				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")
	if isPremium(cid) and ShowItemsTabble(cid, true) > info.PremiumLimit then
		setPlayerStorageValue(cid, 27000, -1)
		doPlayerSendCancel(cid, "Error, you autoloot has been reseted")
	elseif not isPremium(cid) and ShowItemsTabble(cid, true) > info.FreeLimit then
		setPlayerStorageValue(cid, 27000, -1)
		doPlayerSendCancel(cid, "Error/Premium is out, you autoloot has been reseted")
	end
	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 not t[1] then
	ShowItemsTabble(cid, false)
	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
	elseif isPremium(cid) and ShowItemsTabble(cid, true) >= info.PremiumLimit then
		doPlayerSendCancel(cid, "Only "..info.PremiumLimit.." items for you.")
		return true
	elseif not isPremium(cid) and ShowItemsTabble(cid, true) >= info.FreeLimit then
		doPlayerSendCancel(cid, "Only "..info.FreeLimit.." items for free accounts.")
		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>

 

Bruno Carvalho / Ex-Administrador TibiaKing

[email protected]

 

Em 26/12/2016 em 03:47, Spraypaint disse:

A força da alienação vem dessa fragilidade dos indivíduos, quando apenas conseguem identificar o que os separa e não o que os une.

-miltinho

 

wMwSJFE.png?1

 

Postado
  • Autor
2 horas atrás, Comedinha disse:

Tente:


<?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 = {
	FreeLimit = 4,
	PremiumLimit = 10,
	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))
	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))
	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, value)
	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)).."\n"
	end
	if value == true then
		return 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)
				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")
	if isPremium(cid) and ShowItemsTabble(cid, true) > info.PremiumLimit then
		setPlayerStorageValue(cid, 27000, -1)
		doPlayerSendCancel(cid, "Error, you autoloot has been reseted")
	elseif not isPremium(cid) and ShowItemsTabble(cid, true) > info.FreeLimit then
		setPlayerStorageValue(cid, 27000, -1)
		doPlayerSendCancel(cid, "Error/Premium is out, you autoloot has been reseted")
	end
	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 not t[1] then
	ShowItemsTabble(cid, false)
	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
	elseif isPremium(cid) and ShowItemsTabble(cid, true) >= info.PremiumLimit then
		doPlayerSendCancel(cid, "Only "..info.PremiumLimit.." items for you.")
		return true
	elseif not isPremium(cid) and ShowItemsTabble(cid, true) >= info.FreeLimit then
		doPlayerSendCancel(cid, "Only "..info.FreeLimit.." items for free accounts.")
		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>

 

OBRIGADO POR TENTAR AJUDAR, PORÉM, não funcionou

 

OCORRE O SEGUINTE

 

Não bugou a distro, porém, ao entrar em uma conta premium Eu dei o comando /autoloot "funcionou, mostrou a lista de itens que não tinha nenhum" 

Dei o comando /autoloot add, Sword "Funcionou, devolveu a msg falando q sword foi adicionado a lsita auto loot"

Tentei adicionar outro item, o comando n respondeu, e deu um erro na distro

56e21aa993aa6_errodistro.png.dea6fc80ac9

 

Eu tento dar /autoloot "só para ver se o item sword foi realmente adicionado ai tbm não responde e da outro erro igual" 

 

Se souber como proceder obrigado, caso não. Obrigado pela tentiva e deixe seu up pra quem sabe outra pessoa me ajudar. Vlw mano o/

Postado

Tente assim:

<?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 = {
	FreeLimit = 4,
	PremiumLimit = 10,
	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))
	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))
	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, value)
	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)).."\n"
	end
	if value then
		return 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)
				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")
	if isPremium(cid) and ShowItemsTabble(cid, true) > info.PremiumLimit then
		setPlayerStorageValue(cid, 27000, -1)
		doPlayerSendCancel(cid, "Error, you autoloot has been reseted")
	elseif not isPremium(cid) and ShowItemsTabble(cid, true) > info.FreeLimit then
		setPlayerStorageValue(cid, 27000, -1)
		doPlayerSendCancel(cid, "Error/Premium is out, you autoloot has been reseted")
	end
	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 not t[1] then
	ShowItemsTabble(cid, false)
	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
	elseif isPremium(cid) and tonumber(ShowItemsTabble(cid, true)) >= info.PremiumLimit then
		doPlayerSendCancel(cid, "Only "..info.PremiumLimit.." items for you.")
		return true
	elseif not isPremium(cid) and tonumber(ShowItemsTabble(cid, true)) >= info.FreeLimit then
		doPlayerSendCancel(cid, "Only "..info.FreeLimit.." items for free accounts.")
		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>

 

Basicamente o erro que ta dando é que versões antigas da TFS quando da return 0 ou 1 volta como return false ou true...

Não me lembro se tonumber resolve o problema, mas caso aconteça novamente tenho uma ideia de como resolver...

Bruno Carvalho / Ex-Administrador TibiaKing

[email protected]

 

Em 26/12/2016 em 03:47, Spraypaint disse:

A força da alienação vem dessa fragilidade dos indivíduos, quando apenas conseguem identificar o que os separa e não o que os une.

-miltinho

 

wMwSJFE.png?1

 

Postado
  • Autor
1 hora atrás, Comedinha disse:

Tente assim:


<?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 = {
	FreeLimit = 4,
	PremiumLimit = 10,
	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))
	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))
	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, value)
	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)).."\n"
	end
	if value then
		return 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)
				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")
	if isPremium(cid) and ShowItemsTabble(cid, true) > info.PremiumLimit then
		setPlayerStorageValue(cid, 27000, -1)
		doPlayerSendCancel(cid, "Error, you autoloot has been reseted")
	elseif not isPremium(cid) and ShowItemsTabble(cid, true) > info.FreeLimit then
		setPlayerStorageValue(cid, 27000, -1)
		doPlayerSendCancel(cid, "Error/Premium is out, you autoloot has been reseted")
	end
	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 not t[1] then
	ShowItemsTabble(cid, false)
	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
	elseif isPremium(cid) and tonumber(ShowItemsTabble(cid, true)) >= info.PremiumLimit then
		doPlayerSendCancel(cid, "Only "..info.PremiumLimit.." items for you.")
		return true
	elseif not isPremium(cid) and tonumber(ShowItemsTabble(cid, true)) >= info.FreeLimit then
		doPlayerSendCancel(cid, "Only "..info.FreeLimit.." items for free accounts.")
		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>

 

Basicamente o erro que ta dando é que versões antigas da TFS quando da return 0 ou 1 volta como return false ou true...

Não me lembro se tonumber resolve o problema, mas caso aconteça novamente tenho uma ideia de como resolver...

De novo dando o mesmo problema, segue a imagem.

 

56e23533240f4_Denovoproblema.png.0ad34f1

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo