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

Grid placement system goes crazy?

Asked by
zomspi 541 Moderation Voter
3 years ago

I've made a grid placing system and I have tried to make it so I click a button and while the amount of blocks is >= 1 I can place a block, the issue is after I place 4 - 5 blocks the placing system which is the green structure goes crazy and kinda spazzes out. In writing this I am also aware that the script below (local script) does not change the value of the amount but that isn't my issue right now. Thanks!

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local PlaceStructure = 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.Character:Wait()
local HumanoidRootPart = char:WaitForChild("HumanoidRootPart")

local mouse = player:GetMouse()

local isClicked = false
local isEnabled = false

local gridSize = 2
local yBuildingOffset = 2
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()
            local Amount = Structures:FindFirstChild(StructureButton.Name):FindFirstChild("Amount").Value

            if isEnabled == false and Amount >= 1 then
                isEnabled = true 

                while isEnabled == true do
                    wait(1)
            StructureFrame.Visible = true

            local yOrientation = 5
            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 = game.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 (hit:IsA("Part")) and (HumanoidRootPart.Position - clientStructure.Position).magnitude < maxPlacingDistance then
                        goodToPlace = true
                        clientStructure.BrickColor = BrickColor.new("Forest green")
                    else
                        goodToPlace = false
                        clientStructure.BrickColor = BrickColor.new("Crimson")
                    end
                    local newAnglesCFrame = CFrame.Angles(0, math.rad(yOrientation), 0)
                    local newCFrame = CFrame.new(math.floor(position.X / gridSize) * gridSize, math.floor(position.Y / gridSize) * gridSize + yBuildingOffset, math.floor(position.Z / gridSize) * gridSize)
                    clientStructure.CFrame = newCFrame
                end)

                UIS.InputBegan:Connect(function(input)
                    if input.KeyCode == Enum.KeyCode.R then
                        rKeyIsPressed = true

                        local rotationSpeed = 0
                        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 isClicked == false then
                        isClicked = true
                        if placingStructure == true then
                            if goodToPlace == true then
                                local StructureCFrame = clientStructure.CFrame
                                placedStructure = PlaceStructure:InvokeServer(clientStructure.Name, StructureCFrame)
                                Amount -= 1
                                if placedStructure == true then
                                    placingStructure = false
                                    clientStructure:Destroy()
                                            StructureFrame.Visible = true
                                        end
                                end
                            end
                        end
                    end
                end)
                UIS.InputEnded:Connect(function(input)
                    if input.UserInputType == Enum.UserInputType.MouseButton1 then
                        isClicked = false
                    end

                end)
                end
                end
            else
                isEnabled = false
            end
        end)
    end
    end

Here is a video of it happening: https://streamable.com/cnsesp

Answer this question