My Question I generated a cave system with perlin noise, but I cant figure out how to make the generated blocks minable with a pickaxe. If anyone can help me that would be epic!

Sidenotes

Btw I know how to do it by inserting a script into each block but that would cause immense amounts of lag!

IMGUR Link

https://imgur.com/a/JpBdtbe

Generation Script -Generation.lua-

local mxs = 32
local mys = 128
local mzs = 32
local seed = math.random(0,1000000)
local ns = 20
local amp = 25
local ores = {'Coal','Iron','Silver','Sulfur'}
local colors = {Color3.new(0, 0, 0),Color3.new(0.72549, 0.72549, 0.72549),Color3.new(0.368627, 0.368627, 0.552941),Color3.new(1, 1, 0.498039)}
local deepness = {500,450,425,475}
local hp = {10,15,20,5}
local prices = {15,20,70,130}
--
for x = 0,mxs do
	for z = 0,mzs do
		for y = 0,mys do
			local xnoise = math.noise(y/ns,z/ns)*amp
			local ynoise = math.noise(x/ns,z/ns)*amp
			local znoise = math.noise(x/ns,y/ns)*amp
			--
			local density = xnoise + ynoise + znoise
			if density < 15 then
				local randomOre = math.random(1,20)
				if randomOre == 10 then
					local chance = math.random(1,#ores)
					part = Instance.new('Part',workspace.Terrain)
					part.Name = chance
					part.CFrame = CFrame.new(x*4,y*4,z*4)
					local name = tonumber(part.Name)
					if deepness[name] < part.Position.Y then part:Destroy() end
					e = Instance.new('IntValue',part)
					e.Name = hp[chance]
					e.Value = hp[chance]
					part.Color = colors[chance]
					part.Anchored = true
					part.Size = Vector3.new(4,4,4)
					part.Material = Enum.Material.Neon
					
				else
					part = Instance.new('Part',workspace.Terrain)
					e = Instance.new('IntValue',part)
					e.Name = 'Health'
					e.Value = 5
					part.Color = Color3.fromRGB(200, 200, 200)
					part.Anchored = true
					part.Size = Vector3.new(4,4,4)
					part.CFrame = CFrame.new(x*4,y*4,z*4)
					part.Name = e.Value
					part.Material = Enum.Material.Slate
					if part.Position.Y < 400 then
						local rndm = math.random(1,3)
						if rndm == 2 then
							part.Color = Color3.fromRGB(150, 150, 150)
							e.Value = 50
							part.Name = e.Value
						end
					end
					if part.Position.Y < 300 then
						local rndm = math.random(1,3)
						if rndm == 2 then
						part.Color = Color3.fromRGB(125, 125, 125)
						e.Value = 500
						part.Name = e.Value
						end
					end
					if part.Position.Y < 200 then
						local rndm = math.random(1,3)
						if rndm == 2 then
						part.Color = Color3.fromRGB(118, 118, 118)
						e.Value = 550
						part.Name = e.Value
						end
					end
					if part.Position.Y < 100 then
						local rndm = math.random(1,3)
						if rndm == 2 then
						part.Color = Color3.fromRGB(77, 77, 77)
						e.Value = 600
						part.Name = e.Value
						end
					end
					if part.Position.Y < 50 then
						local rndm = math.random(1,3)
						if rndm == 2 then
						part.Color = Color3.fromRGB(84, 84, 84)
						e.Value = 850
						part.Name = e.Value
						end
					end
				end
			end
		end
	end
end
script.Disabled = true

2 comments

0

maybe u could do it like how massacre miners did, only load the blocks when its needed like when the player is there. otherwise dont

0

How could I do this?