Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Block in my block placement system is cloning when it's not supposed to. Why?

Asked by 1 year ago

I have currently followed TheDevKing's tutorial of the block placement.

https://www.youtube.com/watch?v=hEqdq9VXfT4

The problem is, whenever I attempt to place this block, it always clones. Why?

I may show you my scripts.

StarterGui > MainGui > StructureHandler (LocalScript)

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local PlacteStructure = ReplicatedStorage:WaitForChild("PlaceStructure")
local Structures = ReplicatedStorage:WaitForChild("Structures")

local UIS = game:GetService("UserInputService")
local RunService = game:GetService("RunService")

local player = game.Players.LocalPlayer
local StructureFrame = script.Parent.StructureFrame
local char = player.Character or player.CharacterAdded:Wait()
local HumanoidRootPart = char:WaitForChild("HumanoidRootPart")

local mouse = player:GetMouse()

local yBuildingOffset = 1
local maxPlacingDistance = 50
local rKeyIsPressed = false
local placingStructure = false

for _, structureButton in pairs(StructureFrame:GetChildren()) do
    if structureButton:IsA("TextButton") then
        structureButton.MouseButton1Up:Connect(function()

            StructureFrame.Visible = false

            local yOrientation = 0
            local goodToPlace = false
            local placedStructure

            if placingStructure == false then
                placingStructure = true

                local clientStructure = Structures:FindFirstChild(structureButton.Name):Clone()
                clientStructure.BrickColor = BrickColor.new("Forest green")
                clientStructure.Material = "Neon"
                clientStructure.CanCollide = false
                clientStructure.Parent = workspace

                local startingCFrame = CFrame.new(0, -2, -15)
                clientStructure.CFrame = HumanoidRootPart.CFrame:ToWorldSpace(startingCFrame)

                RunService.RenderStepped:Connect(function()
                    local mouseRay = mouse.UnitRay
                    local castRay = Ray.new(mouseRay.Origin, mouseRay.Direction * 1000)
                    local ignoreList = {clientStructure, char}
                    local hit, position = workspace:FindPartOnRayWithIgnoreList(castRay, ignoreList)

                    if hit and (HumanoidRootPart.Position - clientStructure.Position).Magnitude <  maxPlacingDistance then
                        goodToPlace = true
                        clientStructure.BrickColor = BrickColor.new("Medium stone grey")
                    else
                        goodToPlace = false
                        clientStructure.BrickColor = BrickColor.new("Crimson")
                    end

                    local newAnglesCFrame = CFrame.Angles(0, math.rad(yOrientation), 0)
                    local newCFrame = CFrame.new(position.X, position.Y + yBuildingOffset, position.Z)
                    clientStructure.CFrame = newCFrame  * newAnglesCFrame
                end)
                UIS.InputBegan:Connect(function(input)
                    if input.KeyCode == Enum.KeyCode.R then
                        rKeyIsPressed = true

                        local rotationSpeed = 5
                        while rKeyIsPressed do
                            wait()
                            if placingStructure == true then
                                yOrientation = yOrientation + rotationSpeed

                            end
                        end
                    end
                end)
                UIS.InputEnded:Connect(function(input)
                    if input.KeyCode == Enum.KeyCode.R then
                        rKeyIsPressed = false
                    end
                end)
                UIS.InputBegan:Connect(function(input)
                    if input.UserInputType == Enum.UserInputType.MouseButton1 then
                        if placingStructure == true then
                            if goodToPlace == true then
                                local StructureCFrame = clientStructure.CFrame
                                placedStructure = PlacteStructure:InvokeServer(clientStructure.Name, StructureCFrame)

                                if placedStructure == true then
                                    placingStructure = false
                                    clientStructure:Destroy()
                                    StructureFrame.Visible = true
                                end
                            end
                        end
                    end
                end)
            end
        end)
    end
end

ServerScriptService > RemoteHandler (ServerScript)

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local PlacteStructure = ReplicatedStorage:WaitForChild("PlaceStructure")
local Structures = ReplicatedStorage:WaitForChild("Structures")

PlacteStructure.OnServerInvoke = function(player, StructureName, StructureCFrame)
    local crafted
    local realStructure = Structures:FindFirstChild(StructureName):Clone()

    if realStructure then
        realStructure.CFrame = StructureCFrame
        realStructure.Parent = workspace
        crafted = true
    else
        crafted = false
    end

    return crafted
end

Answer this question