Este sistema foi montado a partir de um antigo sistema de lenhador e agora transformou-se em um sistema de mineração. Veja a chance de mineração conforme o level.

  • Nivel X ~ Y: Gold Nuggets = min, max; Chance = %
  • Nivel 0 ~ 9: Minimo = 1, Máximo = 2; Chance = 5 %
  • Nivel 10 ~ 19: Minimo = 2, Máximo = 4; Chance = 10 %
  • Nivel 20 ~ 29: Minimo = 3, Máximo = 6; Chance = 15 %
  • Nivel 30 ~ 39: Minimo = 4, Máximo = 8; Chance = 20 %
  • Nivel 40 ~ 49: Minimo = 5, Máximo = 10; Chance = 25 %
  • Nivel 50 ~ 59: Minimo = 6, Máximo = 12; Chance = 30 %
  • Nivel 60 ~ 69: Minimo = 7, Máximo = 14; Chance = 30 %
  • Nivel 70 ~ 79: Minimo = 8, Máximo = 16; Chance = 35 %
  • Nivel 80 ~ 89: Minimo = 9, Máximo = 18; Chance = 35 %
  • Nivel 90 ~ 99: Minimo = 10, Máximo = 20; Chance = 40 %
  • Nivel 100: Minimo = 11, Máximo = 22; Chance = 50 %

Esse sistema conta com mensagem de avanço de nivel ou seja, você passou do nivel 10 pro 11 mostra o seguinte:

“You advanced from level 10 to level 11 in mining.”

Delay, esse delay(atraso) funciona da seguinte forma, ao quebrar a rocha ela se torna um “destroço de pedra” e ao passar 480 segundos(pode ser modificado) a rocha volta.

OBS: Deixei o Delay pois ficaria dificil o player esperar o Server Save para achar mais rochas caso o servidor seja pequeno.

Oque o player ganha ao quebrar as rochas?

Golden Nuggets (configurável)

Instalação

Abra a pasta data/actions/script e adicione isso em um arquivo lua (Sugestão: mining.lua)

local STORAGE_SKILL_LEVEL = 10002

local STORAGE_SKILL_TRY = 10003

local config = {

levels = {

{level = {0,9}, quant = {1,2}, percent = 5},

{level = {10,19}, quant = {2,4}, percent = 10},

{level = {20,29}, quant = {3,6}, percent = 15},

{level = {30,39}, quant = {4,8}, percent = 20},

{level = {40,49}, quant = {5,10}, percent = 25},

{level = {50,59}, quant = {6,12}, percent = 30},

{level = {60,69}, quant = {7,14}, percent = 30},

{level = {70,79}, quant = {8,16}, percent = 35},

{level = {80,89}, quant = {9,18}, percent = 35},

{level = {90,99}, quant = {10,20}, percent = 40},

{level = {100}, quant = {11,22}, percent = 50}

},

rocks = {1356, 1285, 3607, 3616}, — Id das rochas que podem ser quebradas

stones = {}, — Modelo = {rock_id, rock_id}

default_stone = 2157, — pedra padrão

rock_delay = 480, — Tempo de volta da rocha (Em segundos)

bonus_chance = 3, — Chance (em porcentagem) de se conseguir um bonus de exp

bonus_exp = 1 — Bonus extra

}

————————————

— END Configurations —

————————————

function getMiningLevel(cid)

return getPlayerStorageValue(cid, STORAGE_SKILL_LEVEL)

end

function setPlayerMiningLevel(cid, n)

setPlayerStorageValue(cid, STORAGE_SKILL_LEVEL, n)

end

function addMiningLevel(cid, n)

setPlayerMiningLevel(cid, getMiningLevel(cid) + (isNumber(n) and n or 1))

setMiningTry(cid, 0)

end

function getMiningInfo(cid)

for i = 1, #config.levels do

min = config.levels[i].level[1]; max = config.levels[i].level[2]

if (getMiningLevel(cid) >= min and getMiningLevel(cid) <= max) then return {quantity = {min = config.levels[i].quant[1], max = config.levels[i].quant[2]}, chance = config.levels[i].percent} end end end function getStoneByRock(rockid) for i = 1, #config.stones do if (config.stones[2] == rockid) then return config.stones[1] end end return config.default_stone end function getMiningTries(cid) return getPlayerStorageValue(cid, STORAGE_SKILL_TRY) end function setMiningTry(cid, n) setPlayerStorageValue(cid, STORAGE_SKILL_TRY, n) end function addMiningTry(cid, bonus) setMiningTry(cid, getMiningTries(cid) + 1 + (bonus and config.bonus_exp or 0)) if (getMiningTries(cid) >= getMiningExpTo(getMiningLevel(cid))) then — Up

doPlayerSendTextMessage(cid, 22, “You advanced from level ” .. getMiningLevel(cid) .. ” to level “.. (getMiningLevel(cid) + 1) ..” in mining.”)

if ((getMiningLevel(cid)+1) == getMiningMaxLevel()) then

doPlayerSendTextMessage(cid, 22, “Max level reached in mining.”)

end

addMiningLevel(cid)

doSendMagicEffect(getCreaturePosition(cid), math.random(28,30))

setMiningTry(cid, 0)

end

end

function getMiningExpTo(level)

return ((level*1.5)+((level+1)*7))

end

function getMiningMaxLevel()

return config.levels[#config.levels].level[#config.levels[#config.levels].level]

end

—————————

function onUse(cid, item, fromPosition, itemEx, toPosition)

rock = { id = itemEx.itemid, uid = itemEx.uid, position = toPosition }

player = { position = getCreaturePosition(cid) }

if (getMiningLevel(cid) < 0) then

setPlayerMiningLevel(cid, 0)

end

if (isInArray(config.rocks, rock.id)) then

addMiningTry(cid)

if (math.random(1,100) <= getMiningInfo(cid).chance) then local collected = math.random(getMiningInfo(cid).quantity.min, getMiningInfo(cid).quantity.max) doPlayerAddItem(cid, getStoneByRock(rock.id), collected) doPlayerSendTextMessage(cid, 22, “You got ” .. collected .. ” gold” .. (collected > 1 and “s” or “”) .. ” nuggets.”)

if (math.random(1,100) <= config.bonus_chance) then — Bonus calc

addMiningTry(cid, true)

doSendAnimatedText(player.position, “Bonus!”, COLOR_ORANGE)

end

event_rockCut(rock)

else

if (math.random(1,100) <= (10-getMiningInfo(cid).chance/10)) then

doPlayerSendTextMessage(cid, 22, “You got nothing.”)

event_rockCut(rock)

else

doSendMagicEffect(rock.position, 3)

doSendAnimatedText(rock.position, “Poff!”, COLOR_GREEN)

end

end

else

doPlayerSendCancel(cid, “This can’t be cut.”)

end

end

function event_rockCut(rock)

addEvent(event_rockGrow, config.rock_delay * 1000, rock.position, rock.id)

doTransformItem(rock.uid, 3610)

doSendMagicEffect(rock.position, 3)

doSendAnimatedText(rock.position, “Tack!”, COLOR_GREEN)

doItemSetAttribute(rock.uid, “name”, “A trunk of ” .. getItemNameById(rock.id))

end

function event_rockGrow(rockPos, old_id)

local rock = getThingFromPos(rockPos).uid

doTransformItem(rock, old_id)

doItemSetAttribute(rock, “name”, getItemNameById(old_id))

doSendMagicEffect(rockPos, 3)

end

Por final agora adicione a tag XML:

<action itemid=”id_do_item” script=”mining.lua”/>

Créditos: @3visan

LEAVE A REPLY

Please enter your comment!
Please enter your name here