New'gadu 0 Postado Janeiro 1, 2020 Share Postado Janeiro 1, 2020 Alguém poderia me arruma um scripting de box Exemplo: De conseguir um item por % esse item é agrupável de 1 a 100 e quando abrir a box seja random tipo 1% de vim 100 2% de vim 99 3 % de vim 98 4 % de vim 97 5 % de vim 96 99 % de vim 1 etc... Link para o comentário Compartilhar em outros sites More sharing options...
0 Yan Oliveira 211 Postado Janeiro 2, 2020 Share Postado Janeiro 2, 2020 (editado) Não sei se é assim que quer, porque está meio confuso seu pedido. Mas faça o teste e veja se é assim que você pediu. Vá em Data/Actions/Scripts e crie um arquivo box_random.lua (Crie com a codificação ANSI porque tem textos em português com acentuação, para não dar problema) e adicione o código dentro: local id_item = 12163 -- ID DO ITEM local quantidade_item = math.abs(math.random(1, 100)) -- GERA A QUANTIDADE DO ITEM RANDOMICAMENTE local level = 1 -- LEVEL MÍNIMO local id_box = 12338 -- ID DA BOX function onUse(cid, item, frompos, item2, topos) 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 doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"Parabéns, você recebeu " ..quantidade_item.. " " ..getItemNameById(id_item)) -- MENSAGEM PARA O PLAYER 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 Agora vá em Data/Actions e abra o actions.xml e adicione a tag: <action itemid="ID_BOX" event="script" value="box_random.lua"/> <!-- COLOQUE O ID DA BOX ONDE ESTÁ ESCRITO ID_BOX --> Testei aqui e funcionou, mas testa e me fala se funciona e se é assim que quer. Editado Janeiro 2, 2020 por Yan18 Link para o comentário Compartilhar em outros sites More sharing options...
0 Marshmello 270 Postado Janeiro 4, 2020 Share Postado Janeiro 4, 2020 (editado) Testa assim Brow local config = { [90] = {ID, COUNT}, -- [PORCENTAGEM] = {ID DO ITEM, QUANTIDADE} [80] = {ID, COUNT}, [59] = {ID, COUNT}, [50] = {ID, COUNT}, [40] = {ID, COUNT}, [30] = {ID, COUNT}, [20] = {ID, COUNT}, [10] = {ID, COUNT}, [3] = {ID, COUNT}, [1] = {ID, COUNT}, } function onUse(cid) local chance_growing = {} for chance, _ in pairs(config) do table.insert(chance_growing, chance) end table.sort(chance_growing, function(a, b) return a > b end) local chance = 0 for _, v in pairs(chance_growing) do if math.random(100) < v then chance = v break end end local item = config[chance] if item then doPlayerAddItem(cid, item[1], item[2]) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você encontrou ".. item[2] .." ".. item[1] .. ".") doSendMagicEffect(getThingPos(cid), 13) else doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Não foi dessa vez, tente na próxima ):") end return true end Editado Janeiro 4, 2020 por Marshmello Link para o comentário Compartilhar em outros sites More sharing options...
0 New'gadu 0 Postado Janeiro 5, 2020 Autor Share Postado Janeiro 5, 2020 (editado) Em 02/01/2020 em 19:55, Yan18 disse: Não sei se é assim que quer, porque está meio confuso seu pedido. Mas faça o teste e veja se é assim que você pediu. Vá em Data/Actions/Scripts e crie um arquivo box_random.lua (Crie com a codificação ANSI porque tem textos em português com acentuação, para não dar problema) e adicione o código dentro: local id_item = 12163 -- ID DO ITEM local quantidade_item = math.abs(math.random(1, 100)) -- GERA A QUANTIDADE DO ITEM RANDOMICAMENTE local level = 1 -- LEVEL MÍNIMO local id_box = 12338 -- ID DA BOX function onUse(cid, item, frompos, item2, topos) 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 doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"Parabéns, você recebeu " ..quantidade_item.. " " ..getItemNameById(id_item)) -- MENSAGEM PARA O PLAYER 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 Agora vá em Data/Actions e abra o actions.xml e adicione a tag: <action itemid="ID_BOX" event="script" value="box_random.lua"/> <!-- COLOQUE O ID DA BOX ONDE ESTÁ ESCRITO ID_BOX --> Testei aqui e funcionou, mas testa e me fala se funciona e se é assim que quer. Olá! testei, mas sempre que eu abro a box ela da o item com quantidade sempre 85 não está vindo random! téria como vc fazer para que funcionasse com porcentagem? tipo 99% de vim de 1 a 100 esse item (ID 2362) e 1% (ID 2361)? E a box ao usar não remove do player, onde encaixa a função "doRemoveItem(item.uid, 1)" para remover? Em 04/01/2020 em 04:42, Marshmello disse: Testa assim Brow local config = { [90] = {ID, COUNT}, -- [PORCENTAGEM] = {ID DO ITEM, QUANTIDADE} [80] = {ID, COUNT}, [59] = {ID, COUNT}, [50] = {ID, COUNT}, [40] = {ID, COUNT}, [30] = {ID, COUNT}, [20] = {ID, COUNT}, [10] = {ID, COUNT}, [3] = {ID, COUNT}, [1] = {ID, COUNT}, } function onUse(cid) local chance_growing = {} for chance, _ in pairs(config) do table.insert(chance_growing, chance) end table.sort(chance_growing, function(a, b) return a > b end) local chance = 0 for _, v in pairs(chance_growing) do if math.random(100) < v then chance = v break end end local item = config[chance] if item then doPlayerAddItem(cid, item[1], item[2]) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você encontrou ".. item[2] .." ".. item[1] .. ".") doSendMagicEffect(getThingPos(cid), 13) else doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Não foi dessa vez, tente na próxima ):") end return true end Oi! testei a sua, mas aparenta que a random dela não está me calibrada... sempre da 1 e uma vez perdida 10 mas nunca cair as outras porcentagem Editado Janeiro 5, 2020 por New'gadu Link para o comentário Compartilhar em outros sites More sharing options...
0 Yan Oliveira 211 Postado Janeiro 5, 2020 Share Postado Janeiro 5, 2020 2 horas atrás, New'gadu disse: Olá! testei, mas sempre que eu abro a box ela da o item com quantidade sempre 85 não está vindo random! téria como vc fazer para que funcionasse com porcentagem? tipo 99% de vim de 1 a 100 esse item (ID 2362) e 1% (ID 2361)? E a box ao usar não remove do player, onde encaixa a função "doRemoveItem(item.uid, 1)" para remover? Oi! testei a sua, mas aparenta que a random dela não está me calibrada... sempre da 1 e uma vez perdida 10 mas nunca cair as outras porcentagem 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.) New'gadu reagiu a isso 1 Link para o comentário Compartilhar em outros sites More sharing options...
0 New'gadu 0 Postado Janeiro 5, 2020 Autor Share Postado Janeiro 5, 2020 8 minutos atrás, Yan18 disse: 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.) Funcionou perfeitamente! Poderia me fazer outro? Uma box que ao abrir venha 6 items? como meu serve trabalha com sets gostaria de uma box contendo 6 item (os sets) grato desde já. Link para o comentário Compartilhar em outros sites More sharing options...
0 Yan Oliveira 211 Postado Janeiro 5, 2020 Share Postado Janeiro 5, 2020 (editado) 14 minutos atrás, New'gadu disse: Funcionou perfeitamente! Poderia me fazer outro? Uma box que ao abrir venha 6 items? como meu serve trabalha com sets gostaria de uma box contendo 6 item (os sets) grato desde já. Que bom que funcionou! ? Faço sim, mas você precisa criar um outro tópico para isso, pois além de ser um outro pedido, se alguma outra pessoa quiser o mesmo pedido que o seu já existirá um tópico para isso. Enquanto você cria o tópico, eu irei fazendo o script para você. E lembrando que você precisa criar o tópico na área de pedidos, pois essa área é para scripts já existentes que estão com problemas. Área correta para pedidos de script: https://www.xtibia.com/forum/forum/1260-scripts/ Editado Janeiro 5, 2020 por Yan18 Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
New'gadu 0
Alguém poderia me arruma um scripting de box
Exemplo: De conseguir um item por % esse item é agrupável de 1 a 100 e quando abrir a box seja random
tipo 1% de vim 100
2% de vim 99
3 % de vim 98
4 % de vim 97
5 % de vim 96
99 % de vim 1 etc...
Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados