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