Postado Fevereiro 17, 2021 4 anos tenho essa action de mining com uma chance geral para todos os leveis de mineração gostaria de colocar uma chance diferente para cada level de mining. Se alguém conseguir fazer pra mim agradeço, já tentei não consegui Spoiler terra = {351,352,353,354,355,4471,4478,4474,4485,4475,4473,4478,4472,4476,4477,11262} -- Quero que fique dessa maneira \/ --{level = {0,19}, percent = 5}, + o id do item --{level = {10,19}, percent = 6}, + o id do item --{level = {20,59}, percent = 7}, + o id do item --{level = {60,89}, percent = 8}, + o id do item --{level = {90,99}, percent = 9}, + o id do item --{level = {100}, percent = 10} + o id do item levels = { [-1] = 2328, ---- skull [0] = 2328, --- small stone [1] = 2328, --- worm [10] = 2328, -- Small Emerald [12] = 2328, -- Small Sapphire [15] = 2328, -- Small Diamond [17] = 2328, -- Small Amethyst [20] = 2328, -- Small Ruby [25] = 2328, -- Black Pearls [27] = 2328, -- White Pearls [30] = 2328, -- Gold Nuggets [35] = 2328, --- red gem [36] = 2328, -- blue gem [37] = 2328, -- green gem [38] = 2328, -- violet gem [39] = 2328, -- yellow gem [40] = 2328, -- small enchanted emerald [42] = 2328, -- Small Enchanted Sapphiire [45] = 2328, -- Small Enchanted Amethyst [50] = 2328, -- Small Enchanted Ruby [70] = 2328 -- Life Crystal } local config = { storage = 19333, chance = 20, --- chance de achar um item ou não k = 0.2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante) experience = 19334 } function onUse(cid, item, fromPosition, itemEx, toPosition) local drops = {} function getDrops(cid) for i= -1,getPlayerStorageValue(cid, config.storage) do if levels[i] then table.insert(drops, levels[i]) end end return true end if isInArray(terra, itemEx.itemid) then getDrops(cid) doPlayerSetStorageValue(cid, config.experience, getPlayerStorageValue(cid, config.experience)+1) local experience = getPlayerStorageValue(cid, config.experience) if experience >= (8+(getPlayerStorageValue(cid, config.storage)^2))/config.k then doPlayerSetStorageValue(cid, config.storage, getPlayerStorageValue(cid, config.storage)+1) doPlayerSendTextMessage(cid, 27, "Congratulations, you have leveled! Your currect level is "..getPlayerStorageValue(cid, config.storage) ..".") if getPlayerStorageValue(cid, config.storage) == 50 then doPlayerSendTextMessage(cid, 20, "For reaching level "..getPlayerStorageValue(cid, config.storage) .." you have been awarded with Mining Helmet.") doPlayerAddItem(cid, 7497, 1, false) end end if config.chance >= math.random(1,100) then if #drops >= 1 then local item = drops[math.random(1,#drops)] doPlayerSendTextMessage(cid, 27, "You have found a "..getItemNameById(item)..".") doPlayerAddItem(cid, item, 1, true) end doSendMagicEffect(toPosition, 3) else doSendMagicEffect(toPosition, 2) return true end elseif itemEx.itemid == item.itemid then doPlayerSendTextMessage(cid, 27, "You're currenctly level "..getPlayerStorageValue(cid, config.storage)..".") else return false end return true end Editado Fevereiro 17, 2021 4 anos por Apache (veja o histórico de edições)
Postado Fevereiro 18, 2021 4 anos Solução Criei uma tabela de chance de acordo com o level e adaptei o código pra puxar a chance dela. Spoiler terra = {351,352,353,354,355,4471,4478,4474,4485,4475,4473,4478,4472,4476,4477,11262} tabela = { -- ordem descrecente {level = 100, percent = 50}, {level = 80, percent = 25}, {level = 60, percent = 20}, {level = 40, percent = 15}, {level = 20, percent = 10}, {level = 0, percent = 5}, } levels = { [-1] = 2328, ---- skull [0] = 2328, --- small stone [1] = 2328, --- worm [10] = 2328, -- Small Emerald [12] = 2328, -- Small Sapphire [15] = 2328, -- Small Diamond [17] = 2328, -- Small Amethyst [20] = 2328, -- Small Ruby [25] = 2328, -- Black Pearls [27] = 2328, -- White Pearls [30] = 2328, -- Gold Nuggets [35] = 2328, --- red gem [36] = 2328, -- blue gem [37] = 2328, -- green gem [38] = 2328, -- violet gem [39] = 2328, -- yellow gem [40] = 2328, -- small enchanted emerald [42] = 2328, -- Small Enchanted Sapphiire [45] = 2328, -- Small Enchanted Amethyst [50] = 2328, -- Small Enchanted Ruby [70] = 2328 -- Life Crystal } local config = { storage = 19333, k = 0.2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante) experience = 19334 } function onUse(cid, item, fromPosition, itemEx, toPosition) local drops = {} function getDrops(cid) for i= -1,getPlayerStorageValue(cid, config.storage) do if levels[i] then table.insert(drops, levels[i]) end end return true end if isInArray(terra, itemEx.itemid) then getDrops(cid) doPlayerSetStorageValue(cid, config.experience, getPlayerStorageValue(cid, config.experience)+1) local experience = getPlayerStorageValue(cid, config.experience) if experience >= (8+(getPlayerStorageValue(cid, config.storage)^2))/config.k then doPlayerSetStorageValue(cid, config.storage, getPlayerStorageValue(cid, config.storage)+1) doPlayerSendTextMessage(cid, 27, "Congratulations, you have leveled! Your currect level is "..getPlayerStorageValue(cid, config.storage) ..".") if getPlayerStorageValue(cid, config.storage) == 50 then doPlayerSendTextMessage(cid, 20, "For reaching level "..getPlayerStorageValue(cid, config.storage) .." you have been awarded with Mining Helmet.") doPlayerAddItem(cid, 7497, 1, false) end end local mining = getPlayerStorageValue(cid, config.storage) for k, v in ipairs(tabela) do if mining >= tabela[k].level then chance = tabela[k].percent break end end if chance >= math.random(1,100) then if #drops >= 1 then local item = drops[math.random(1,#drops)] doPlayerSendTextMessage(cid, 27, "You have found a "..getItemNameById(item)..".") doPlayerAddItem(cid, item, 1, true) end doSendMagicEffect(toPosition, 3) else doSendMagicEffect(toPosition, 2) return true end elseif itemEx.itemid == item.itemid then doPlayerSendTextMessage(cid, 27, "You're currenctly level "..getPlayerStorageValue(cid, config.storage)..".") else return false end return true end
Postado Fevereiro 18, 2021 4 anos Autor 7 horas atrás, 139 disse: Criei uma tabela de chance de acordo com o level e adaptei o código pra puxar a chance dela. Ocultar conteúdo terra = {351,352,353,354,355,4471,4478,4474,4485,4475,4473,4478,4472,4476,4477,11262} tabela = { -- ordem descrecente {level = 100, percent = 50}, {level = 80, percent = 25}, {level = 60, percent = 20}, {level = 40, percent = 15}, {level = 20, percent = 10}, {level = 0, percent = 5}, } levels = { [-1] = 2328, ---- skull [0] = 2328, --- small stone [1] = 2328, --- worm [10] = 2328, -- Small Emerald [12] = 2328, -- Small Sapphire [15] = 2328, -- Small Diamond [17] = 2328, -- Small Amethyst [20] = 2328, -- Small Ruby [25] = 2328, -- Black Pearls [27] = 2328, -- White Pearls [30] = 2328, -- Gold Nuggets [35] = 2328, --- red gem [36] = 2328, -- blue gem [37] = 2328, -- green gem [38] = 2328, -- violet gem [39] = 2328, -- yellow gem [40] = 2328, -- small enchanted emerald [42] = 2328, -- Small Enchanted Sapphiire [45] = 2328, -- Small Enchanted Amethyst [50] = 2328, -- Small Enchanted Ruby [70] = 2328 -- Life Crystal } local config = { storage = 19333, k = 0.2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante) experience = 19334 } function onUse(cid, item, fromPosition, itemEx, toPosition) local drops = {} function getDrops(cid) for i= -1,getPlayerStorageValue(cid, config.storage) do if levels[i] then table.insert(drops, levels[i]) end end return true end if isInArray(terra, itemEx.itemid) then getDrops(cid) doPlayerSetStorageValue(cid, config.experience, getPlayerStorageValue(cid, config.experience)+1) local experience = getPlayerStorageValue(cid, config.experience) if experience >= (8+(getPlayerStorageValue(cid, config.storage)^2))/config.k then doPlayerSetStorageValue(cid, config.storage, getPlayerStorageValue(cid, config.storage)+1) doPlayerSendTextMessage(cid, 27, "Congratulations, you have leveled! Your currect level is "..getPlayerStorageValue(cid, config.storage) ..".") if getPlayerStorageValue(cid, config.storage) == 50 then doPlayerSendTextMessage(cid, 20, "For reaching level "..getPlayerStorageValue(cid, config.storage) .." you have been awarded with Mining Helmet.") doPlayerAddItem(cid, 7497, 1, false) end end local mining = getPlayerStorageValue(cid, config.storage) for k, v in ipairs(tabela) do if mining >= tabela[k].level then chance = tabela[k].percent break end end if chance >= math.random(1,100) then if #drops >= 1 then local item = drops[math.random(1,#drops)] doPlayerSendTextMessage(cid, 27, "You have found a "..getItemNameById(item)..".") doPlayerAddItem(cid, item, 1, true) end doSendMagicEffect(toPosition, 3) else doSendMagicEffect(toPosition, 2) return true end elseif itemEx.itemid == item.itemid then doPlayerSendTextMessage(cid, 27, "You're currenctly level "..getPlayerStorageValue(cid, config.storage)..".") else return false end return true end show isso ai mano obrigado
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.