Hello, everyone
Some one can fix The problem (Erro in Autoloot)
OTX-8.60
Some one can fix The problem (Erro in Autoloot)
OTX-8.60
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 = {
AutomaticDeposit = true,
BlockMonsters = {},
BlockItemsList = {8933,11329,2160,11337,11334,7759,7760,7761,7762,11419,11420,11421,11422,8927,11332,11331,11373,11374,11375,11376,11377,11378,1993,1994,11319,11425},
Max_Slots = {free = 10, premium = 10},
Storages = {27500,28508,28506,28507},
items_price = {[2432] = 1000,[2514] = 5000, [2151] = 100,[2150] = 100,[2393] = 2000}
}
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, info.Storages[1]))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, info.Storages[1]) do
table.insert(x,getPlayerStorageTable(cid, info.Storages[1])[i])
end
if x ~= 0 then
table.insert(x,tonumber(item))
setPlayerStorageTable(cid, info.Storages[1], x)
else
setPlayerStorageTable(cid, info.Storages[1], {item})
end
end
function removeItemTable(cid, item)
local x = {}
for i = 1,#getPlayerStorageTable(cid, info.Storages[1]) do
table.insert(x,getPlayerStorageTable(cid, info.Storages[1])[i])
end
for i,v in ipairs(x) do
if tonumber(v) == tonumber(item) then
table.remove(x,i)
end
end
return setPlayerStorageTable(cid, info.Storages[1], x)
end
function ShowItemsTabble(cid)
local n,str = 0,"[+] Auto Loot Commands [+]\n\n!autoloot Nome do Item --> Adicione um item especifico em sua lista.\n!autoloot money --> Colete dinheiro automaticamente.\n!autoloot clear --> Limpe sua lista de coleta.\n!autoloot on/off --> Ative ou Desative sua coleta automatica.\n\n[+] Auto Loot Info [+]\n\nSystem: "..(getPlayerStorageValue(cid, info.Storages[3]) <= 0 and "Ativado" or "Desativado")..".\nColeta de Dinheiro: "..(getPlayerStorageValue(cid, info.Storages[2]) > 0 and "Ativado" or "Desativado")..".\nBalance Total: ["..getPlayerBalance(cid).."] gp's.\nMaximum Slots: ["..#getPlayerStorageTable(cid, info.Storages[1]).."/"..(isPremium(cid) and info.Max_Slots.premium or info.Max_Slots.free).."]\n\n[+] Auto Loot Slots [+]\n\n"
for i = 1,#getPlayerStorageTable(cid, info.Storages[1]) do
n = n + 1
str = str.."Slot "..n.." - "..getItemNameById(getPlayerStorageTable(cid, info.Storages[1])[i]).."\n"
end
return doPlayerPopupFYI(cid, 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, amount) -- revisado
local item, _G = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid), 0
if #item > 0 then
for _ ,x in pairs(item) do
local ret = getThing(x)
if ret.type < 100 then
doTransformItem(ret.uid, itemid, ret.type+amount)
if ret.type+amount > 100 then
doPlayerAddItem(cid, itemid, ret.type+amount-100)
end
break
else
_G = _G+1
end
end
if _G == #item then
doPlayerAddItem(cid, itemid, amount)
end
else
return doPlayerAddItem(cid, itemid, amount)
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 AutomaticItensSelling(cid, x)
return doPlayerAddMoney(cid, x) and doPlayerDepositMoney(cid, x)
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 true
end
return true
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, info.Storages[1]), tonumber(x.itemid)) or getPlayerStorageValue(cid, info.Storages[2]) > 0 and isInArray({2148,2152,2160},tonumber(x.itemid)) then
if isItemStackable(x.itemid) then
if getPlayerStorageValue(cid, info.Storages[4]) > 0 and info.items_price[tonumber(x.itemid)] then
AutomaticItensSelling(cid, (info.items_price[tonumber(x.itemid)]*x.type))
else
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
end
else
if getPlayerStorageValue(cid, info.Storages[4]) > 0 and info.items_price[tonumber(x.itemid)] then
AutomaticItensSelling(cid, info.items_price[tonumber(x.itemid)])
else
doPlayerAddItem(cid, x.itemid)
end
end
doRemoveItem(x.uid)
end
end
end
end]]></config>
<event type="login" name="LootLogin" event="script"><![CDATA[
function onLogin(cid)
registerCreatureEvent(cid, "LootEventKIll")
if isPremium(cid) and getPlayerStorageValue(cid, 27001) <= 0 then
setPlayerStorageValue(cid, 27001, 1)
elseif getPlayerStorageValue(cid, 27001) > 0 and not isPremium(cid) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[Auto Loot] Voce nao possui Premium Time, Crie uma nova lista!")
setPlayerStorageValue(cid, 27001, -1)
setPlayerStorageValue(cid, info.Storages[1], -1)
end
return true
end]]></event>
<event type="kill" name="LootEventKIll" event="script"><![CDATA[
domodlib('Loot_func')
function onKill(cid, target, lastHit)
if isPlayer(cid) and getPlayerStorageValue(cid, info.Storages[3]) <= 0 and isMonster(target) and not isInArray(info.BlockMonsters, getCreatureName(target):lower()) then
addEvent(corpseRetireItems, 0, cid ,getThingPos(target))
end
return true
end]]></event>
<talkaction words="!autoloot;/autoloot" event="buffer"><![CDATA[
domodlib('Loot_func')
local param, slots = param:lower(), getPlayerStorageValue(cid, 13540) - os.time() > 0 and info.Max_Slots.premium or info.Max_Slots.free
if not param or param == "" then
ShowItemsTabble(cid) return true
elseif tonumber(param) then
doPlayerSendCancel(cid, "enter commands: !autoloot item name [+] !autoloot clean [+] !autoloot money [+] !autoloot on/off") return true
elseif isInArray({"clean","limpar", "clear"}, param) then
setPlayerStorageValue(cid, info.Storages[1], -1)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Auto Loot] Your list has been cleaned.") return true
elseif isInArray({"start","stop","on","off"}, param) then
setPlayerStorageValue(cid, info.Storages[3], getPlayerStorageValue(cid, info.Storages[3]) <= 0 and 1 or 0)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Auto Loot] "..(getPlayerStorageValue(cid, info.Storages[3]) > 0 and "Stopped" or "Started")..".") return true
elseif isInArray({"money","gold","gps","dinheiro"}, param) then
setPlayerStorageValue(cid, info.Storages[2], getPlayerStorageValue(cid, info.Storages[2]) <= 0 and 1 or 0)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Auto Loot] Coleta de Dinheiro "..(getPlayerStorageValue(cid, info.Storages[2]) > 0 and "Ativado" or "Desativado")..".") return true
elseif isInArray({"autoselling","autosell","autovender","vender"}, param) then
setPlayerStorageValue(cid, info.Storages[4], getPlayerStorageValue(cid, info.Storages[4]) <= 0 and 1 or 0)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Auto Loot] Automatic Itens Selling "..(getPlayerStorageValue(cid, info.Storages[4]) > 0 and "Activated" or "disabled")..".") return true
end
local item = ExistItemByName(tostring(param))
if not item then
doPlayerSendCancel(cid, "This item does not exist.") return true
end
local item = getItemIdByName(tostring(param))
if not item then
doPlayerSendCancel(cid, "This item does not exist.") return true
end
local var = isInTable(cid, item)
if isInArray({2148,2152,2160},item) then
doPlayerSendCancel(cid, "Enter !autoloot money para coletar dinheiro automaticamente!") return true
elseif isInArray(info.BlockItemsList, item) then
doPlayerSendCancel(cid, "You can not add this item in the list!") return true
elseif not var and #getPlayerStorageTable(cid, info.Storages[1]) >= 5 then
doPlayerSendCancel(cid, "max 5 item from auto loot") return true
end
if not var then
addItemTable(cid, item)
else
removeItemTable(cid, item)
end
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,not var and "Voce adicionou o item "..param.." em sua lista de coleta." or "Voce removeu o item "..param.." da sua lista de coleta.")
return true]]></talkaction>
</mod>