Olá pessoal tudo bem? sou novo aqui no fórum, mais vou tentar ajudar um pouco com meu conhecimento
Hoje estarei trazendo para vocês um script que todos tem vontade de ter(eu acho) HUAHAUHAUH
quando você entra naquele baiak e digita !autoloot e ve aquele scriptzão de pega loot e fica com vontade de ter,
hoje estarei trazendo ele aqui pra vocês:
Primeiramente o sistema é contido em 3 arquivos(Talkactions,creaturescripts,login.lua)
Vamos começar pelo talkactions!
Em talkactions.xml adicione a seguinte tag:
<talkaction words="!autoloot" event="script" value="Auto Loot.lua"/>
Agora vá na pasta talkactions/scripts e crie 1 arquivo chamado Auto Loot.lua e nele adicione o seguinte codigo:
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
local function getPlayerList(cid)
local tab = {}
if getPlayerStorageValue(cid, 04420021) ~= -1 then
table.insert(tab, getPlayerStorageValue(cid, 04420021))
end
if getPlayerStorageValue(cid, 04420031) ~= -1 then
table.insert(tab, getPlayerStorageValue(cid, 04420031))
end
if getPlayerStorageValue(cid, 04420041) ~= -1 then
table.insert(tab, getPlayerStorageValue(cid, 04420041))
end
if getPlayerStorageValue(cid, 04420051) ~= -1 then
table.insert(tab, getPlayerStorageValue(cid, 04420051))
end
if #tab > 0 then
return tab
end
return false
end
local function addToList(cid, name)
local itemid = getItemIdByName(name)
if getPlayerList(cid) and isInArray(getPlayerList(cid), itemid) then
return false
end
if getPlayerStorageValue(cid, 04420021) == -1 then
return doPlayerSetStorageValue(cid, 04420021, itemid)
elseif getPlayerStorageValue(cid, 04420031) == -1 then
return doPlayerSetStorageValue(cid, 04420031, itemid)
elseif getPlayerStorageValue(cid, 04420041) == -1 then
return doPlayerSetStorageValue(cid, 04420041, itemid)
elseif getPlayerStorageValue(cid, 04420051) == -1 then
return doPlayerSetStorageValue(cid, 04420051, itemid)
end
end
local function removeFromList(cid, name)
local itemid = getItemIdByName(name)
if getPlayerStorageValue(cid, 04420021) == itemid then
return doPlayerSetStorageValue(cid, 04420021, -1)
elseif getPlayerStorageValue(cid, 04420031) == itemid then
return doPlayerSetStorageValue(cid, 04420031, -1)
elseif getPlayerStorageValue(cid, 04420041) == itemid then
return doPlayerSetStorageValue(cid, 04420041, -1)
elseif getPlayerStorageValue(cid, 04420051) == itemid then
return doPlayerSetStorageValue(cid, 04420051, -1)
end
return false
end
function onSay(cid, words, param)
if param == "" then
local fi = getPlayerStorageValue(cid, 04420021) ~= -1 and getItemNameById(getPlayerStorageValue(cid, 04420021)) or ""
local se = not vip.hasVip(cid) and "Não disponível para free account" or getPlayerStorageValue(cid, 04420031) ~= -1 and getItemNameById(getPlayerStorageValue(cid, 04420031)) or ""
local th = not vip.hasVip(cid) and "Não disponível para free account" or getPlayerStorageValue(cid, 04420041) ~= -1 and getItemNameById(getPlayerStorageValue(cid, 04420041)) or ""
local fo = not vip.hasVip(cid) and "Não disponível para free account" or getPlayerStorageValue(cid, 04420051) ~= -1 and getItemNameById(getPlayerStorageValue(cid, 04420051)) or ""
local stt = getPlayerStorageValue(cid, 04421011) == 1 and "sim" or "não"
local str = getPlayerStorageValue(cid, 04421001) == 1 and "sim" or "não"
doPlayerPopupFYI(cid, "{Auto-Loot} ---Menu Auto Loot do jogador\n{Auto-Loot} ----------------\n{Auto-Loot} ---Coletar dinheiro: "..stt..". Para ligar/desligar: !autoloot gold \n{Auto-Loot} ---Coletar itens únicos: "..str..". Para ligar/desligar: !autoloot power\n{Auto-Loot} --Configuração dos slots:\n{Auto-Loot} ---Slot 1: "..fi.."\n{Auto-Loot} ---Slot 2: "..se.."\n{Auto-Loot} ---Slot 3: "..th.."\n{Auto-Loot} ---Slot 4: "..fo.."\n{Auto-Loot} ---Para adicionar um novo item aos slots: !autoloot add, <nome do item>\n{Auto-Loot} ---Para retirar um item dos slots: !autoloot remove, <nome do item>\n{Auto-Loot} ---Para limpar todos os slots utilize: !autoloot clear\n{Auto-Loot} ---Para informações de quanto você já fez utilizando a coleta de dinheiro, use: !autoloot goldinfo\n\nSe seu autoloot bugar use !autoloot desbug\n\n{Auto-Loot} ----------------")
return true
end
local t = string.explode(param, ",")
if t[1] == "power" then
local check = getPlayerStorageValue(cid, 04421001) == -1 and "ligou" or "desligou"
doPlayerSetStorageValue(cid, 04421001, getPlayerStorageValue(cid, 04421001) == -1 and 1 or -1)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você "..check.." o auto loot.")
elseif t[1] == "gold" then
local check = getPlayerStorageValue(cid, 04421011) == -1 and "ligou" or "desligou"
doPlayerSetStorageValue(cid, 04421011, getPlayerStorageValue(cid, 04421011) == -1 and 1 or -1)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você "..check.." a coleta de dinheiro.")
doPlayerSetStorageValue(cid, 04421021, 0)
elseif t[1] == "goldinfo" then
local str = getPlayerStorageValue(cid, 04421011) == -1 and "O sistema de coleta de dinheiro está desligado" or "O sistema já coletou "..getPlayerStorageZero(cid, 04421021).." gold coins"
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, str)
elseif t[1] == "add" then
if ExistItemByName(t[2]) then
local item = getItemIdByName(t[2])
if isInArray({2160, 2148, 2152}, item) then
return doPlayerSendCancel(cid, "Você não pode adicionar moedas no autoloot. Para coletar dinheiro use !autoloot gold")
end
if vip.hasVip(cid) then
if getPlayerStorageValue(cid, 04420011) < 3 then
if addToList(cid, t[2]) then
doPlayerSetStorageValue(cid, 04420011, getPlayerStorageValue(cid, 04420011) + 1)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, t[2].." adicionado à sua lista do auto loot! Para ver sua lista diga !autoloot list")
else
doPlayerSendCancel(cid, t[2].." já está em sua lista!")
end
else
doPlayerSendCancel(cid, "Sua lista já tem 4 itens! Você deve remover algum antes de adicionar outro.")
end
else
if getPlayerStorageValue(cid, 04420011) == -1 then
if addToList(cid, t[2]) then
doPlayerSetStorageValue(cid, 04420011, getPlayerStorageValue(cid, 04420011) + 1)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, t[2].." adicionado à sua lista do auto loot! Para ver sua lista diga !autoloot")
else
doPlayerSendCancel(cid, t[2].." já está em sua lista!")
end
else
doPlayerSendCancel(cid, "Você já tem um item adicionado no auto loot! Para adicionar outro, você deve remover o item atual.")
end
end
else
doPlayerSendCancel(cid, "Este item não existe!")
end
elseif t[1] == "remove" then
if ExistItemByName(t[2]) then
if removeFromList(cid, t[2]) then
doPlayerSetStorageValue(cid, 04420011, getPlayerStorageValue(cid, 04420011) - 1)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, t[2].." removido da sua lista do auto loot!")
else
doPlayerSendCancel(cid, "Este item não está na sua lista!")
end
else
doPlayerSendCancel(cid, "Este item não existe!")
end
elseif t[1] == "clear" then
if getPlayerStorageValue(cid, 04420011) > -1 then
doPlayerSetStorageValue(cid, 04420011, -1)
doPlayerSetStorageValue(cid, 04420021, -1)
doPlayerSetStorageValue(cid, 04420031, -1)
doPlayerSetStorageValue(cid, 04420041, -1)
doPlayerSetStorageValue(cid, 04420051, -1)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Lista limpa!")
else
doPlayerSendCancel(cid, "Sua lista ja esta limpa!")
end
elseif t[1] == "desbug" or t[1] == "desbugar" then
doPlayerSetStorageValue(cid, 04420011, -1)
doPlayerSetStorageValue(cid, 04420021, -1)
doPlayerSetStorageValue(cid, 04420031, -1)
doPlayerSetStorageValue(cid, 04420041, -1)
doPlayerSetStorageValue(cid, 04420051, -1)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Desbugado!")
elseif t[1] == "list" then
local fi = getPlayerStorageValue(cid, 04420021) ~= -1 and ""..getItemNameById(getPlayerStorageValue(cid, 04420021)).."\n" or ""
local se = getPlayerStorageValue(cid, 04420031) ~= -1 and ""..getItemNameById(getPlayerStorageValue(cid, 04420031)).."\n" or ""
local th = getPlayerStorageValue(cid, 04420041) ~= -1 and ""..getItemNameById(getPlayerStorageValue(cid, 04420041)).."\n" or ""
local fo = getPlayerStorageValue(cid, 04420051) ~= -1 and ""..getItemNameById(getPlayerStorageValue(cid, 04420051)).."\n" or ""
doPlayerPopupFYI(cid, "O sistema auto loot está coletando:\n "..fi..""..se..""..th..""..fo)
end
return true
end
Lembrando esse script libera dois slots de autoloot pra free account e quatro slots para vip account, o sistema configurado nele é o vipSystemByMock caso use um script diferente basta alterar função vip.hasVip(cid)
Vamos continuar?
Próximo passo vamos adicionar o creaturescripts!
Na pasta creaturescripts, abra o creaturescripts.xml e adicione a seguinte tag:
<event type="kill" name="autoloot" event="script" value="Auto Loot.lua"/>
Agora dentro da pasta creaturescripts vá ate a pasta scripts e crie um arquivo chamado Auto Loot.lua e adicione o seguinte codigo:
local aloot_boost = {[2406] = 36, [2537] = 4800, [2377] = 480, [2663] = 600, [2472] = 195000, [2398] = 36, [2475] = 7200, [2519] = 6500, [2497] = 10700, [2523] = 180000, [2494] = 325000, [2400] = 144000, [2491] = 6000, [2421] = 325000, [2646] = 260000, [2477] = 7200, [2413] = 84, [2656] = 18000, [2498] = 52000, [2647] = 600, [2534] = 32500, [7402] = 19500, [2466] = 26000, [2465] = 240, [2408] = 120000, [2518] = 1800, [2500] = 3000, [2376] = 30, [2470] = 91000, [2388] = 24, [2645] = 26000, [2434] = 2400, [2463] = 480, [2536] = 11700, [2387] = 240, [2396] = 4800, [2381] = 240, [2528] = 4800, [2409] = 1800, [2414] = 12000, [2427] = 9000, [2407] = 7200, [2458] = 42, [2383] = 960, [2392] = 3600, [2488] = 18000, [2525] = 120, [2423] = 240, [7382] = 13000, [2462] = 1300, [2520] = 39000, [2390] = 180000, [2417] = 72, [2436] = 1200, [5741] = 52000, [2378] = 120, [2487] = 24000, [2476] = 6500, [8891] = 36000, [2459] = 36, [2195] = 52000, [2391] = 7200, [2464] = 120, [8889] = 72000, [2432] = 13000, [2431] = 108000, [2492] = 52000, [2515] = 240, [2430] = 2400, [2393] = 13000, [7419] = 36000, [2522] = 130000, [2514] = 65000}
local function getPlayerStorageZero(cid, storage) -- By Killua
local sto = getPlayerStorageValue(cid, storage)
if tonumber(sto) then
return tonumber(sto) > tonumber(0) and tonumber(sto) or tonumber(0)
end
return tonumber(0)
end
local tabela = {}
local function getPlayerList(cid)
local tab = {}
if getPlayerStorageValue(cid, 04420021) ~= -1 then
table.insert(tab, getPlayerStorageValue(cid, 04420021))
end
if getPlayerStorageValue(cid, 04420031) ~= -1 then
table.insert(tab, getPlayerStorageValue(cid, 04420031))
end
if getPlayerStorageValue(cid, 04420041) ~= -1 then
table.insert(tab, getPlayerStorageValue(cid, 04420041))
end
if getPlayerStorageValue(cid, 04420051) ~= -1 then
table.insert(tab, getPlayerStorageValue(cid, 04420051))
end
if #tab > 0 then
return tab
end
return {}
end
local function boost(cid)
return tonumber(getPlayerStorageValue(cid,722381)) >= os.time()
end
local function autoLoot(cid, pos)
if not isPlayer(cid) then return end
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 info.uid and info.itemid then
if isContainer(info.uid) then
local bag = getContainerItemsInfo(info.uid)
for i = 1, countTable(bag) 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)
if boost(cid) then
if aloot_boost[bag[i].itemid] then
doPlayerSetBalance(cid,getPlayerBalance(cid) + aloot_boost[bag[i].itemid])
str = str.." 1 "..getItemNameById(bag[i].itemid).." ("..aloot_boost[bag[i].itemid].."gp no banco) +"
else
doPlayerAddItem(cid, bag[i].itemid, 1)
str = str.." 1 "..getItemNameById(bag[i].itemid).." +"
end
else
doPlayerAddItem(cid, bag[i].itemid, 1)
str = str.." 1 "..getItemNameById(bag[i].itemid).." +"
end
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)
if boost(cid) then
if aloot_boost[info.itemid] then
doPlayerSetBalance(cid,getPlayerBalance(cid) + aloot_boost[info.itemid])
str = str.." 1 "..getItemNameById(info.itemid).." ("..aloot_boost[info.itemid].."gps no banco) +"
else
doPlayerAddItem(cid, info.itemid, 1)
str = str.." 1 "..getItemNameById(info.itemid).." +"
end
else
doPlayerAddItem(cid, info.itemid, 1)
str = str.." 1 "..getItemNameById(info.itemid).." +"
end
end
end
end
end
end
setPlayerTableStorage(cid,822564,{[1] = str, [2] = 0})
end
local function autoGold(cid, pos)
if not isPlayer(cid) then return end
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) 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) * multiplie)
total = total + bag[i].quant * multiplie
doPlayerSetStorageValue(cid, 04421021, tonumber(getPlayerStorageZero(cid, 04421021)) + tonumber(info.quant) * tonumber(multiplie))
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) + info.quant * multiplie)
doPlayerSetStorageValue(cid, 04421021, tonumber(getPlayerStorageZero(cid, 04421021)) + tonumber(info.quant) * tonumber(multiplie))
total = total + info.quant * multiplie
end
end
end
end
end
if total > 0 then
total = total - (total * 0.2)
total = math.ceil(total)
doPlayerSetBalance(cid,getPlayerBalance(cid) + total)
local tab = getPlayerTableStorage(cid,822564)
tab[2] = total
setPlayerTableStorage(cid,822564,tab)
end
end
local function sendMsg(cid)
if not isPlayer(cid) then return end
local tab = getPlayerTableStorage(cid,822564)
if countTable(tab) >= 1 then
if tab[1] then
if tab[2] and tab[2] > 0 then
doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "[Auto Loot System] Coletados: ".. tab[1] .." ".. tab[2] .." gold coins.")
else
if type(tab[1]) == "string" and string.len(tab[1]) > 1 then
doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "[Auto Loot System] Coletados: "..tab[1])
end
end
elseif not tab[1] then
if tab[2] then
doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "[Auto Loot System] Coletados: "..tab[2].." gold coins.")
end
end
end
doPlayerSetStorageValue(cid,822564,-1)
end
function onKill(cid, target, lastHit)
if isPlayer(cid) and isMonster(target) then
if getPlayerStorageValue(cid, 04421001) == 1 and #getPlayerList(cid) > 0 then
local pos = getCreaturePosition(target)
addEvent(autoLoot, 500, cid, pos)
end
if getPlayerStorageValue(cid, 04421011) == 1 then
local pos = getCreaturePosition(target)
addEvent(autoGold, 540, cid, pos)
end
if getPlayerStorageValue(cid, 04421001) == 1 or getPlayerStorageValue(cid, 04421011) == 1 then
addEvent(sendMsg, 560, cid)
end
end
return true
end
E por fim ainda dentro da pagina scripts procure o arquivo login.lua e registre a seguinte tag:
registerCreatureEvent(cid, "autoloot")
registerCreatureEvent(cid, "Auto Loot")
Créditos: Killua - Vitor cardoso bertolucci
Obrigado a todos e até a próxima!
JNetworks.com.br
Jnetworks agradece a preferência!
Está querendo abrir 1 OTServer e não sabe onde hospedar?
Acesse: JNetworks.com.br
Instalamos seu OTServer apartir da contratação de 3GB de ram!