Sobre vir o valor repetido, foi erro meu, falta de atenção, pois como deixei a variável fora da function onUse ele deixava sempre o valor que gerou randomico fixo. Eu tinha criado a váriavel dentro do escopo, mas ai deixando organizado, comentado e legível para você acabei colocando fora da função. Estarei mandando corrigido.
Sobre o seu pedido, eu não acho que vale a pena fazer desse jeito, porque você vai fazer um esforço para duas coisas que na verdade é uma, pois como é aleatório, como você vai saber a porcentagem que vai sair? Não tem como entendeu? De qualquer forma vai ser aleatório, então eu sugiro que deixa a quantidade de itens aleatoriamente direto igual eu fiz. E nem estou falando isso para não precisar fazer, pois se quiser posso tentar fazer, mas a questão é que vai gastar esforço com uma coisa sem necessidade.
Mas reflita sobre o que falei e veja se vai aceitar o meu conselho ou se vai querer como pediu inicialmente.
Estou mandando o código corrigido, pode testar que agora virá valores aleatórios normal. Mandarei até uma print que testei para comprovar. Substitua o código por esse:
local id_item = 2392 -- ID DO ITEM
local level = 1 -- LEVEL MÍNIMO
local id_box = 12338 -- ID DA BOX
function onUse(cid, item, frompos, item2, topos)
local quantidade_item = math.floor(math.random(1, 100)) -- GERA A QUANTIDADE DO ITEM RANDOMICAMENTE
if item.itemid == id_box then -- VERIFICA SE CLICOU NA BOX, ALTERAR O ID DA BOX NA VARIÁVEL
if getPlayerLevel(cid) >= level then -- VERIFICA SE O PLAYER TEM O NÍVEL NECESSÁRIO. DEIXEI COMO 1 CASO NÃO QUEIRA QUE TENHA VERIFICAÇÃO DE NÍVEL, POIS O NÍVEL MÍNIMO É 1. QUALQUER COISA SÓ ALTERAR NA VARIÁVEL
doPlayerAddItem(cid, id_item, quantidade_item) -- SETAR O ID DO ITEM NA VARIÁVEL
doSendMagicEffect(getThingPos(cid), 27) -- EFEITO AO ABRIR A BOX
if quantidade_item > 1 then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"Parabéns, você recebeu " ..quantidade_item.. " " ..getItemNameById(id_item) .."s") -- MENSAGEM PARA O PLAYER NO PLURAL CASO SEJA A QUANTIDADE MAIOR QUE 1
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"Parabéns, você recebeu " ..quantidade_item.. " " ..getItemNameById(id_item)) -- MENSAGEM PARA O PLAYER NO SINGULAR SE A QUANTIDADE FOR 1
end
doRemoveItem(item.uid, 1) -- REMOVE A BOX DA BAG DO PLAYER
else
doPlayerSendCancel(cid,"Você dever ser no mínimo nível "..level.." para abrir a box.") -- MENSAGEM CASO NÃO TENHA NÍVEL
end
return true
end
end
Print:
Como pode ver fiz o teste, cliquei 4x na box e veio quantidades diferentes nas 4 vezes. Testa ai e me fala.
(Fazendo um adendo, eu troquei no código a função math.abs para math.floor porque o abs pode pegar número real, e o floor só pega inteiro, outro erro meu rs. Também acrescentei uma verificação para caso a quantidade de itens seja maior que um ele fala o nome do item no plural, e com 1 no singular.)