CA
resolvido

[Encerrado] [PEDIDO] Auto Loot

Por CaioValverde, 19 de out. de 2013 em Tópicos Sem Resposta

8
1.3k
19 de outubro de 2013 às 01:52

Alguém sabe um modo de colocar um auto loot no meu ot em base de PDA? Tentei alguns aqui do fórum e não foram funcionais, se alguém puder me ajudar...

 

Grato desde já, Caio Valverde.

Matador18M
19 de outubro de 2013 às 01:53

Poderia me explicar Melhor?

zipter98Z
19 de outubro de 2013 às 02:24

Esses autoloots que você mencionou não são funcionais em que sentido? Total? Ou em alguns bugs, como os comuns "item sumir as vezes", "após 100 unidades do item x não 'loota' mais ele", etc.?

Editado Outubro 19 por zipter98

19 de outubro de 2013 às 02:52

@zipter98

Então... Nem chegou a funcionar, em nenhum sentido...

 

@Matador18

Um sistema que ao player ativar todo item iria para sua bag ou ele escolher quais itens vão para a Bag...

Editado Outubro 19 por CaioValverde

zipter98Z
19 de outubro de 2013 às 14:59

Peguei aqui um sistema de autoloot de um servidor que havia baixado, não testei, porém suponho que se fizer tudo corretamente, vai funcionar. (tem alguns bugs, como os que citei em meu comentário anterior [esses bugs tem em, praticamente, todo autoloot]).

TALKACTION:

 

Tag:

 

<talkaction words="/aloot" hide="yes" event="script" value="aloot.lua"/>

Arquivo lua [nome: aloot]

 

local stor, limit = 7575, 50000 --storage, limit to add.

local allow_container = false --empty! not looted with items, atleast for now.
function onSay(cid, words, param)
local expl = param:explode(':')
local action, rst = expl[1], expl[2]
if (action:lower() == 'check') then
local infos, list = getPlayerStorageValue(cid, stor), {}
if (infos ~= -1) then
list = tostring(infos):explode(',')
end
local txt = 'Autoloot List:\n'
if (#list > 0) then
for k, id in ipairs(list) do
id = id:gsub('_', '')
if tonumber(id) then
txt = txt .. getItemNameById(tonumber(id)) .. ((k < #list) and '\n' or '')
end
end
else
txt = 'Empty'
end
doPlayerPopupFYI(cid, txt)
elseif (action:lower() == 'add') then
local infos, list = getPlayerStorageValue(cid, stor), {}
if (infos ~= -1) then
list = tostring(infos):gsub('_', ''):explode(',')
end
if (#list >= limit) then
return doPlayerSendCancel(cid, 'You already have ' .. limit .. ' autolooting items.')
end
local item = tonumber(rst)
if not item then
item = getItemIdByName(rst, false)
if not item then
return doPlayerSendCancel(cid, 'Esse item nao existe.')
end
end
if not allow_container and isItemContainer(item) then
return doPlayerSendCancel(cid, 'this item can not be autolooted.')
end
local attrs = getItemInfo(item)
if not attrs then
return doPlayerSendCancel(cid, 'Esse item nao existe.')
elseif not attrs.movable or not attrs.pickupable then
return doPlayerSendCancel(cid, 'this item can not be autolooted.')
end
if isInArray(list, item) then
return doPlayerSendCancel(cid, 'Ja foi adicionado.')
end
table.insert(list, tostring(item))
local new = ''
for v, id in ipairs(list) do
new = new .. '_' .. id:gsub('_' ,'') .. ((v < #list) and ',' or '')
end
doPlayerSetStorageValue(cid, stor, tostring(new))
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Item >>' .. getItemNameById(item) .. '<< has been added to the autoloot list.')
elseif (action:lower() == 'remove') then
local infos, list = getPlayerStorageValue(cid, stor), {}
if (infos ~= -1) then
list = tostring(infos):gsub('_', ''):explode(',')
end
if (#list == 0) then
return doPlayerSendCancel(cid, 'You dont have any item added.')
end
local item = tonumber(rst)
if not item then
item = getItemIdByName(rst, false)
if not item then
return doPlayerSendCancel(cid, 'not valid item.')
end
end
if not isInArray(list, item) then
return doPlayerSendCancel(cid, 'This item is not in the list.')
end
local new = ''
for v, id in ipairs(list) do
if (tonumber(id) ~= item) then
new = new .. '_' .. id:gsub('_' ,'') .. ((v < #list) and ',' or '')
end
end
doPlayerSetStorageValue(cid, stor, tostring(new))
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Item >>' .. getItemNameById(item) .. '<< removed from the autoloot list.')
end
return true

end

 

 

CREATURESCRIPTS:

 

Tags:

 

<event type="login" name="aloot_reg" event="script" value="aloot.lua"/>

 

<event type="kill" name="aloot_kill" event="script" value="aloot.lua"/>

 

Arquivo lua: [nome: aloot]

 

function onLogin(cid)

registerCreatureEvent(cid, "aloot_kill")
return true
end
local stor = 7575
function autoloot(cid, target, pos)
local function doStack(cid, itemid, new)
local count = getPlayerItemCount(cid, itemid)
if (count > 100) then
count = count - math.floor(count / 100) * 1
end
local newCount = count + new
if (count ~= 0) then
local find = getPlayerItemById(cid, true, itemid, count).uid
if (find > 0) then
doRemoveItem(find)
else
newCount = new
end
end
local item = doCreateItemEx(itemid, newCount)
doPlayerAddItemEx(cid, item, true)
end
local function scanContainer(cid, uid, list)
for k = (getContainerSize(uid) - 1), 0, -1 do
local tmp = getContainerItem(uid, k)
if (isInArray(list, tmp.itemid)) then
if isItemStackable(tmp.itemid) and (getPlayerItemCount(cid, tmp.itemid) > 0) then
doStack(cid, tmp.itemid, tmp.type)
else
local item = doCreateItemEx(tmp.itemid, tmp.type)
doPlayerAddItemEx(cid, item, true)
end
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Looted ' .. tmp.type .. ' ' .. getItemNameById(tmp.itemid) .. '.')
doRemoveItem(tmp.uid)
elseif isContainer(tmp.uid) then
scanContainer(cid, tmp.uid, list)
end
end
end
local items = {}
for i = getTileInfo(pos).items, 1, -1 do
pos.stackpos = i
table.insert(items, getThingFromPos(pos))
end
if (#items == 0) then
return
end
local corpse = -1
for _, item in ipairs(items) do
local name = getItemName(item.uid):lower()
if name:find(target:lower()) then
corpse = item.uid
break
end
end
if (corpse ~= -1) and isContainer(corpse) then
scanContainer(cid, corpse, tostring(getPlayerStorageValue(cid, stor)):gsub('_', ''):explode(','))
end
end
function onKill(cid, target, lastHit)
if not isPlayer(target) then
local infos = getPlayerStorageValue(cid, stor)
if (infos == -1) then
return true
end
local list = tostring(infos):explode(',')
if (#list == 0) then
return true
end
addEvent(autoloot, 150, cid, getCreatureName(target), getCreaturePosition(target))
end
return true

end

 

 

Registre no login.lua:

 

registerCreatureEvent(cid, "aloot_kill")
19 de outubro de 2013 às 20:21

Testarei e estarei dando edit... Mas mesmo assim valeu!

 

EDIT!

@zipter98

Deu esse erro:

 

[20/10/2013 23:30:38] [Error - TalkAction Interface]

[20/10/2013 23:30:38] data/talkactions/scripts/aloot.lua:onSay
[20/10/2013 23:30:38] Description:
[20/10/2013 23:30:38] data/talkactions/scripts/aloot.lua:8: attempt to index local 'action' (a nil value)
[20/10/2013 23:30:38] stack traceback:
[20/10/2013 23:30:38] data/talkactions/scripts/aloot.lua:8: in function <data/talkactions/scripts/aloot.lua:5>

Editado Outubro 20 por CaioValverde

2 semanas depois...
GabrieltxuG
28 de outubro de 2013 às 22:26

Tópico movido para a seção de dúvidas e pedidos resolvidos.

4 anos depois...
StigalS
21 de abril de 2018 às 03:11
A questão neste tópico de suporte foi encerrada por falta de respostas. Este tópico está fechado e foi movido para Suporte - Tópicos Sem Resposta.

+ Caso a dúvida não tenha sido resolvida você poderá criar outro tópico solicitando ajuda.
* Lembre-se que é permitido dar UP no tópico a cada 24 horas para assim o destacar e manter movimentado.