Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function findpartsnear(part)
- local pos = part.Position
- local parts = {}
- local ray1 = Ray.new(part.Position,Vector3.new(pos.X,pos.Y,pos.Z - 7 ))
- local ray2 = Ray.new(part.Position,Vector3.new(pos.X,pos.Y,pos.Z + 7 ))
- local ray3 = Ray.new(part.Position,Vector3.new(pos.X,pos.Y - 7,pos.Z))
- local ray4 = Ray.new(part.Position,Vector3.new(pos.X,pos.Y + 7,pos.Z))
- local ray5 = Ray.new(part.Position,Vector3.new(pos.X - 7,pos.Y ,pos.Z))
- local ray6 = Ray.new(part.Position,Vector3.new(pos.X + 7,pos.Y,pos.Z))
- local part1,position1 = workspace:FindPartOnRay(ray1,nil,true,false)
- local part2,position2 = workspace:FindPartOnRay(ray2,nil,true,false)
- local part3,position3 = workspace:FindPartOnRay(ray3,nil,true,false)
- local part4,position4 = workspace:FindPartOnRay(ray4,nil,true,false)
- local part5,position5 = workspace:FindPartOnRay(ray5,nil,true,false)
- local part6,position6 = workspace:FindPartOnRay(ray6,nil,true,false)
- if part1 then
- parts[#parts+1] = part1
- end
- if part2 then
- parts[#parts+1] = part2
- end
- if part3 then
- parts[#parts+1] = part3
- end
- if part4 then
- parts[#parts+1] = part4
- end
- if part5 then
- parts[#parts+1] = part5
- end
- if part6 then
- parts[#parts+1] = part6
- end
- return parts
- end
- function findabove(part)
- local pos = part.Position
- local ray = Ray.new(part.Position,Vector3.new(0, 7,0))
- local part,position = workspace:FindPartOnRay(ray,nil,true,false)
- if part then
- return part
- end
- end
- function checkifgrassblock(part)
- if part.Material == Enum.Material.Grass and part.BrickColor == BrickColor.new("Camo") then
- return true
- else
- return false
- end
- end
- function checkifsnow(part)
- if part.Material == Enum.Material.Slate and part.BrickColor == BrickColor.new("Institutional white") then
- return true
- else
- return false
- end
- end
- function checkifstone(part)
- if part.Material == Enum.Material.Slate and part.BrickColor == BrickColor.new("Medium stone grey") then
- return true
- else
- return false
- end
- end
- local threshold = 30
- local snowthreshold = 145
- local grassthreshhold = 0
- local folder = workspace.TerrainParts
- local maxX = 150
- local maxY = 100
- local maxZ = 150
- local maxnoise = 41
- local amplitude = 20
- local blocksize = 4
- function generate()
- local seed = math.random(1,1000000)
- for x = 0,maxX do
- for z = 0, maxZ do
- for y = maxY,0,-1 do
- local xnoise = math.noise(y/maxnoise,z/maxnoise,seed) * amplitude
- local ynoise = math.noise(x/maxnoise,z/maxnoise,seed) *amplitude
- local znoise = math.noise(x/maxnoise,y/maxnoise,seed) * amplitude
- local density = xnoise + ynoise + znoise + y
- if density < threshold then
- local part = Instance.new("Part",folder)
- part.Anchored = true
- part.Size = Vector3.new(blocksize,blocksize,blocksize)
- part.CFrame = CFrame.new(x*blocksize,y*blocksize,z*blocksize)
- local partabove = findabove(part)
- if part.Position.Y >= snowthreshold then
- part.Material = Enum.Material.Slate
- part.BrickColor = BrickColor.new("Institutional white")
- elseif part.Position.Y >= grassthreshhold then
- part.Material = Enum.Material.Grass
- part.BrickColor = BrickColor.new("Camo")
- end
- if partabove then
- if checkifgrassblock(partabove) == true or checkifstone(partabove) == true then
- part.Material = Enum.Material.Slate
- part.BrickColor = BrickColor.new("Medium stone grey")
- end
- end
- end
- end
- game:GetService("RunService").Heartbeat:Wait()
- end
- game:GetService("RunService").Heartbeat:Wait()
- end
- end
- generate()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement