por exemplo a pessoa podia pegar o addon com dois itens diferentes tanto com o x item quanto com o y, se eu coloco isso no script ele diz que precisa de 2 itens, como eu faço pra ser um ou outro?
Claro tá comparando o tamanho das tables...
Você não precisa de getTableMax para saber o tamanho da tabela, é só você colocar um ( # ) na frente do nome dela... #table -> retorna o tamanho da table.
Tenta isso:
local c = {
checkItems = {[2656] = 1, [5880] = 100}, -- [itemId] = quantidade
checkPlaces = {{x=175, y=392, z=10}, {x=175, y=394, z=10}}, -- posicoes
addons = {{145, 149}, name = "Wizard Addon"}, -- {addon female/male}, nome do outfit
storage = 21003,
level = 0
}
local function getTableMax(t)
local ret = 0
for _, i in pairs(t) do
ret = ret + 1
end
return ret
end
function onUse(cid, item, fromPosition, itemEx, toPosition)
if(getPlayerStorageValue(cid, c.storage) == -1) then
if(getPlayerLevel(cid) > c.level) then
local done = {}
for n, pos in pairs(c.checkPlaces) do
for itemId, count in pairs(c.checkItems) do
local posItem = getTileItemById(pos, itemId)
if(posItem.uid ~= 0 and (count == 1 or posItem.type >= count) and not done[itemId]) then
done[itemId] = {count, pos}
end
end
end
for k, v in pairs(done) do
if (isInArray(c.checkItems, v) and c.checkItems[k]) then
for i, t in pairs(done) do
doRemoveItem(getTileItemById(t[2], i).uid, t[1])
doSendMagicEffect(t[2], CONST_ME_FIREAREA)
end
setPlayerStorageValue(cid, c.storage, 1)
for i = 1, #c.addons[1] do
doPlayerAddOutfit(cid, c.addons[1], 3)
end
doPlayerSendTextMessage(cid, 21, "You just earned the "..(c.addons.name)..".")
else
doPlayerSendCancel(cid, "You need item.")
break
end
end
else
doPlayerSendCancel(cid, "You need level "..(c.level)..".")
end
else
doPlayerSendCancel(cid, "You have already completed this addon.")
end
return true
end







info
Grupo: Campones
Registrado: 05/10/13
Posts: 51
Reputação: -1
Bom eu tenho esse script aqui, consiste em colocar o item (checkitems) em um tile configuravel no script e retira o item e da o addo, bom eu precisava que fosse um item ou outro item.
por exemplo a pessoa podia pegar o addon com dois itens diferentes tanto com o x item quanto com o y, se eu coloco isso no script ele diz que precisa de 2 itens, como eu faço pra ser um ou outro?
local c = { checkItems = {[2656] = 1, [5880] = 100}, -- [itemId] = quantidade checkPlaces = {{x=175, y=392, z=10}, {x=175, y=394, z=10}}, -- posicoes addons = {{145, 149}, name = "Wizard Addon"}, -- {addon female/male}, nome do outfit storage = 21003, level = 0 } local function getTableMax(t) local ret = 0 for _, i in pairs(t) do ret = ret + 1 end return ret end function onUse(cid, item, fromPosition, itemEx, toPosition) if(getPlayerStorageValue(cid, c.storage) == -1) then if(getPlayerLevel(cid) > c.level) then local done = {} for n, pos in pairs(c.checkPlaces) do for itemId, count in pairs(c.checkItems) do local posItem = getTileItemById(pos, itemId) if(posItem.uid ~= 0 and (count == 1 or posItem.type >= count) and not done[itemId]) then done[itemId] = {count, pos} break end end end if(getTableMax(done) == getTableMax(c.checkItems)) then for i, t in pairs(done) do doRemoveItem(getTileItemById(t[2], i).uid, t[1]) doSendMagicEffect(t[2], CONST_ME_FIREAREA) end setPlayerStorageValue(cid, c.storage, 1) for i = 1, #c.addons[1] do doPlayerAddOutfit(cid, c.addons[1], 3) end doPlayerSendTextMessage(cid, 21, "You just earned the "..(c.addons.name)..".") else doPlayerSendCancel(cid, "You need all itens.") end else doPlayerSendCancel(cid, "You need level "..(c.level)..".") end else doPlayerSendCancel(cid, "You have already completed this addon.") end return true end