Advertisement
Guest User

ok

a guest
Feb 28th, 2020
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.77 KB | None | 0 0
  1. function findpartsnear(part)
  2.     local parts = {}
  3.  
  4.     local rays = {
  5.         ray1 = Ray.new(part.Position, Vector3.new(part.Position.X, part.Position.Y, part.Position.Z - 7 ))
  6.         ray2 = Ray.new(part.Position, Vector3.new(part.Position.X, part.Position.Y, part.Position.Z + 7 ))
  7.         ray3 = Ray.new(part.Position, Vector3.new(part.Position.X, part.Position.Y - 7, part.Position.Z))
  8.         ray4 = Ray.new(part.Position, Vector3.new(part.Position.X, part.Position.Y + 7, part.Position.Z))
  9.         ray5 = Ray.new(part.Position, Vector3.new(part.Position.X - 7, part.Position.Y, part.Position.Z))
  10.         ray6 = Ray.new(part.Position, Vector3.new(part.Position.X + 7, part.Position.Y, part.Position.Z))
  11.     {
  12.  
  13.     for i, ray in pairs(rays) do
  14.         local part, position = workspace:FindPartOnRay(ray, part)
  15.         if part then
  16.             table.insert(parts, i, part)
  17.         end
  18.     end
  19.  
  20.     return parts
  21. end
  22.  
  23. function findabove(part)
  24.     local ray = Ray.new(part.Position, Vector3.new(0, 7, 0))
  25.     return workspace:FindPartOnRay(ray, part)
  26. end
  27.  
  28. function checkItem(part, material, color)
  29.     if part.Material == material and part.BrickColor == color then
  30.         return true
  31.     end
  32.     return false
  33. end
  34.  
  35. local threshold = 30
  36. local snowthreshold = 145
  37. local grassthreshhold = 0
  38. local folder = workspace.Terrain
  39. local maxX = 150
  40. local maxY = 100
  41. local maxZ = 150
  42. local maxnoise = 41
  43. local amplitude = 20
  44. local blocksize = 4
  45.  
  46. function generate(seed)
  47.     for x = -maxX, maxX do
  48.         for z = -maxZ, maxZ do
  49.             for y = maxY, 0, -1 do
  50.                 local xnoise = math.noise(y / maxnoise, z / maxnoise, seed) * amplitude
  51.                 local ynoise = math.noise(x / maxnoise, z / maxnoise, seed) * amplitude
  52.                 local znoise = math.noise(x / maxnoise, y / maxnoise, seed) * amplitude
  53.                 local density = xnoise + ynoise + znoise + y
  54.  
  55.                 if density < threshold then
  56.                     local part = Instance.new("Part")
  57.                     part.Anchored = true
  58.                     part.Size = Vector3.new(blocksize, blocksize, blocksize)
  59.                     part.CFrame = CFrame.new(x * blocksize, y * blocksize, z * blocksize)
  60.                     local partabove = findabove(part)
  61.  
  62.                     if part.Position.Y >= snowthreshold then
  63.                         part.Material = Enum.Material.Slate
  64.                         part.BrickColor = BrickColor.new("Institutional white")
  65.                     elseif part.Position.Y >= grassthreshhold then
  66.                         part.Material = Enum.Material.Grass
  67.                         part.BrickColor = BrickColor.new("Camo")
  68.                     end
  69.  
  70.                     local grass = check(partabove, Enum.Material.Grass, BrickColor.new("Camo"))
  71.                     local stone = check(partabove, Enum.Material.Slate, BrickColor.new("Medium stone grey"))
  72.                     if (partabove(part)) and (grass or stone) then
  73.                         part.Material = Enum.Material.Slate
  74.                         part.BrickColor = BrickColor.new("Medium stone grey")
  75.                     end
  76.  
  77.                     part.Parent = folder
  78.                 end
  79.             end
  80.         end
  81.     end
  82. end
  83.  
  84. generate(math.random())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement