Você está desconectado.

Conecte-se e veja nossos conteúdos exclusivos!
 

  


[Action] Mining System

Compartilhe
avatar
GOD Vitor
Administrador
Administrador

King Coin(s) King Coin(s) : 33
Reputação : 13015
Facebook : Facebook.com/Vitor.Eduardo.5567
OTServ Favorito : otPokémonImeprium
Meu Char : Zoom
Seção Favorita : Spriting
Eu sou : Scripter
Tópicos : 256
Data de Cadastro : 26/09/2015
Idade : 19
Localização : Florianópolis

[Action] Mining System

Mensagem por GOD Vitor em 27/9/2015, 18:35

Nome: Mining System
Autor: Lwkass ( De outro fórum )
Modificação: Vittu ( De outro fórum )
Detalhes: um sistema de mineração com skill.

Bem pessoal esse era um sistema de lenhador, mas eu dei uma modificada eu transformei ele ne um script de mining, antes de falarem qualquer coisa, eu tive autorização do autor para modificar o script.

Nivel Máximo Padrão = 100

- Ganhos Por Nivel-

Spoiler:
|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?
Ele ganha Gold Nuggets(configuravel)

Instalação:
Abra a pasta data/actions/script e adicione isso em um arquivo lua (Sugestão: mining.lua)
Spoiler:
------------------------------------------------------
-- Script by: Lwkass
-- Mod: Vittu
-- Version: 2.0
-- Tested in: TFS 0.4
---------------------------
-- Configurations --
---------------------------
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
--Lumberjack 2.0 by: Lwkass


Adicione essa linha no actions.xml
Spoiler:
<action itemid="id_do_item" script="mining.lua"/>



id_do_item: coloque o id do item que deseja para quebrar as rochas, eu aconselho a usar a pick.
Id da pick: 2553

    Data/hora atual: 24/8/2017, 07:43