This script is meant to place blocks on a 3d grid by rounding. BUT it only works on the top right and front Faces. ANY other faces will result in it placing the block inside the original.
local Mouse = game.Players.LocalPlayer:GetMouse() local Positiona local bloc local pos local X local Y local Z local lasserx local lassery local lasserz script.Parent.Activated:Connect(function() script.Parent.place:FireServer(Positiona, bloc, pos) bloc = script.Parent:GetAttribute("block") pos = Mouse.Target end) Mouse.Move:Connect(function() -- NEW PLACEMENT SYSTEM local GridSize = 4 if Mouse.TargetSurface.Name == "Top" or "Right" or "Front" then X = math.floor((Mouse.Hit.X + GridSize / 2) / GridSize) * GridSize Y = math.ceil((Mouse.Hit.Y + GridSize / 4 ) / GridSize) * GridSize - 1.5 Z = math.floor((Mouse.Hit.Z + GridSize / 2) / GridSize) * GridSize lasserx = false lassery = false lasserz = false elseif Mouse.TargetSurface.Name == "Bottom" then X = math.floor((Mouse.Hit.X + GridSize / 2) / GridSize) * GridSize Y = math.ceil((Mouse.Hit.Y + GridSize / 4 ) / GridSize) * GridSize - 1.5 Z = math.floor((Mouse.Hit.Z + GridSize / 2) / GridSize) * GridSize lasserx = false lassery = true lasserz = false elseif Mouse.TargetSurface.Name == "Left" then X = math.floor((Mouse.Hit.X + GridSize / 2) / GridSize) * GridSize Y = math.ceil((Mouse.Hit.Y + GridSize / 4 ) / GridSize) * GridSize - 1.5 Z = math.floor((Mouse.Hit.Z + GridSize / 2) / GridSize) * GridSize lasserx = true lassery = false lasserz = false elseif Mouse.TargetSurface.Name == "Back" then X = math.floor((Mouse.Hit.X + GridSize / 2) / GridSize) * GridSize Y = math.ceil((Mouse.Hit.Y + GridSize / 4 ) / GridSize) * GridSize - 1.5 Z = math.floor((Mouse.Hit.Z + GridSize / 2) / GridSize) * GridSize lasserx = false lassery = false lasserz = true end if lasserx == true then Positiona = CFrame.new(X - 1, Y, Z) elseif lassery == true then Positiona = CFrame.new(X, Y - 1, Z) elseif lasserz == true then Positiona = CFrame.new(X, Y, Z - 1) else Positiona = CFrame.new(X, Y, Z) end end)