FE

Arrumar Script [Talkaction]

Por FehZito, 20 de mar. de 2012 em Scripts

script
9
1.9k
FehZitoF
20 de março de 2012 às 11:59

Os Errors São esses:

[Warning - Event::loadScript] Cannot load script (data/talkactions/scripts/aloot.lua)

data/talkactions/scripts/aloot.lua:91: '<eof>' expected near 'end'

[Warning - Event::loadScript] Event onKill not found (data/creaturescripts/scripts/aloot.lua)

 

local stor, limit = 7575, 5 --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, 'not valid item.')

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, 'not valid item.')

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, 'already added.')

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

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, '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

end

MulizeuM
20 de março de 2012 às 12:06

Ai

 

 

local stor, limit = 7575, 5 --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, 'not valid item.')
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, 'not valid item.')
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, 'already added.')
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
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, '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

FehZitoF
20 de março de 2012 às 12:12

No creaturescripts ta isso:

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

E aparece isso :

[Warning - Event::loadScript] Event onKill not found (data/creaturescripts/scripts/aloot.lua)

MulizeuM
20 de março de 2012 às 12:13

Mais isso ali e uma talkactions!

FehZitoF
20 de março de 2012 às 12:27

Mais eu acho que e uma talk e um creature.

catei daqui

http://www.xtibia.com/forum/topic/164233-auto-loot/

MulizeuM
20 de março de 2012 às 12:39

akeli ali que eu arrumei e talkactions esse aki e creature scripts

 

 

 

 

 

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

 

 

 

ai tu coloka

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

FehZitoF
20 de março de 2012 às 13:54

Quando dou o comando

APARECE:

 

 

 

Lua Script Error: [TalkAction Interface]

data/talkactions/scripts/aloot.lua:onSay

data/talkactions/scripts/aloot.lua:7: attempt to index local 'expl' (a nil value)

stack traceback:

data/talkactions/scripts/aloot.lua:7: in function <data/talkactions/scripts/aloot.lua:5>

Editado Março 20 por FehZito

VincV
20 de março de 2012 às 16:30

tenta assim

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

local allow_container = false --empty! not looted with items, atleast for now.

function onSay(cid, words, param)
if param == "" then
doPlayerSendCalcel(cid, esse comando presisa de parametros)
return FALSE
end
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, 'not valid item.')
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, 'not valid item.')
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, 'already added.')
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
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, '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

geanmarcellG
24 de março de 2012 às 17:48

Tenta esse aqui que eu uso funciona bem no meu:

 

http://www.4shared.com/rar/hxwDt8IX/file.html?