Ir para conteúdo

Featured Replies

Postado

Estou usando esse sistema de Mining System

 

Citar

------------------------------------------------------

-- 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

 

 

Porém esse script eu vou lá com a pick, bato na pedra e ela some, teria como colocar uma quantidade de vezes que posso bater na pedra até ela sumir, por exemplo a pedra aparecer com um valor entre 50-100 ou algum valor fixo, que depois que eu bater essas X vezes ela entra em respaw

Postado

tenho esse sistema que funciona quase como voce quer. pode bater quatas vezes quiser que nao some o item

 

Spoiler

terra = {9021,9022,9023,9024,9025}
 levels = {
[-1] = 2229, ---- skull
[0] = 1294, --- small stone
[1] = 3976, --- worm
[10] = 2145, -- Small Diamond 
[20] = 2144, -- Black Pearls 
[27] = 2143, -- White Pearls
[35] = 2156, --- red gem
[36] = 2158, -- blue gem 
[37] = 2155, -- green gem 
[38] = 2153, -- violet gem
[39] = 2154, -- yellow gem
[40] = 2147, -- small enchanted emerald 
[42] = 2146, -- Small Enchanted Sapphiire
[45] = 2150, -- Small Enchanted Amethyst
[50] = 2149, -- Small Enchanted Ruby
[60] = 2157, -- Gold Nuggets
[70] = 12469  -- Life Crystal


local config = {
storage = 19333,
chance = 10, --- chance de achar um item ou não
k = 1, --- 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) == 80 then
doPlayerSendTextMessage(cid, 20, "For reaching level "..getPlayerStorageValue(cid, config.storage) .." you have been awarded with Mining Helmet.")
doPlayerAddItem(cid, 7497, 1, true)
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

 

Postado
Em 12/10/2022 em 19:54, molezinha disse:

@Carlinhous1996 vou testar

 

mas esse sistema foge um pouco, queria um countdown entre a mineração e que conforme o level fosse maior, maior a quantidade do item vem para você

esse funciona assim, quanto lvl maior, maior é a probabilidade de itens melhores

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.6k

Informação Importante

Confirmação de Termo