Ir para conteúdo

Featured Replies

Postado

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 por Apache (veja o histórico de edições)

Resolvido por 139

Ir para solução
Postado
  • 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
  • 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.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo