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)
