It results in an error with position, repeated no matter what and the second error if I rotated it before hand.
Errors at Line 85 and 93. 85: Attempt to index nil with position 93: Model:SetPrimaryCFrame() failed because no PrimaryPart has been set, or the PrimaryPart no longer exists. Please set Model.PrimaryPart before using this.
The errors only happen after it runs once. It's like it needs to update and realize that stuff doesn't exist. I don't really know.
Also there is another script, but it works fine.
local replicatedStorage = game:GetService("ReplicatedStorage") local placeStructure = replicatedStorage:WaitForChild("PlaceStructure") local structures = replicatedStorage:WaitForChild("Structures") local sillhouettes = replicatedStorage:WaitForChild("Sillhouettes") local UIS = game:GetService("UserInputService") local RunService = game:GetService("RunService") --local player = game.Player.LocalPlayer local player = game:GetService("Players").LocalPlayer local StructureFrame = script.Parent local char = player.Character or player.Character:Wait() local HumanoidRootPart = char:WaitForChild("HumanoidRootPart") local mouse = player:GetMouse() local yBuildingOffset = 0.5 local maxPlacingDistance = 50 local rKeyIsPressed = false local placingStructure = false local yOrientation=0 local goodTOPlace = false local placedStructure local clientStructure local rotating = false -- Handles start of temporary brick rotation function handleKeyInputStarted(input) if rotating == false then rotating = true rKeyIsPressed = true local rotationSpeed = 90 while rKeyIsPressed do wait() if placingStructure == true then yOrientation = yOrientation + rotationSpeed repeat wait() until rKeyIsPressed == false end end rotating = false end end -- Handles end of temporary brick rotation function handleKeyInputEnded(input) if input.KeyCode == Enum.KeyCode.R then rKeyIsPressed = false end end -- Handles construction of actual Brick when user is satisfied with placement/rotation function handleMouseInputBegan(input) if placingStructure == true then if goodTOPlace == true then local StructureCFrame = clientStructure.PrimaryPart.CFrame placedStructure = placeStructure:InvokeServer(clientStructure.Name, StructureCFrame) if placedStructure == true then placingStructure = false clientStructure:Destroy() StructureFrame.Enabled = true end end end end -- Handles general input (mouse or keyboard) input function handleInputStarted(input) if input.KeyCode == Enum.KeyCode.R then handleKeyInputStarted(input) elseif input.UserInputType == Enum.UserInputType.MouseButton1 then handleMouseInputBegan(input) end end -- Handles rendering the temporary Brick during placement function handleRenderStepped() 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.PrimaryPart.Position).Magnitude < maxPlacingDistance then goodTOPlace = true else goodTOPlace = false end local newAnglesCFrame = CFrame.Angles(0, math.rad(yOrientation), 0) local newCFrame = CFrame.new(position.X, position.Y + yBuildingOffset, position.z) clientStructure:SetPrimaryPartCFrame(newCFrame * newAnglesCFrame) end -- Handles constructing the temporary placement brick when the create button is pressed. function handleBrickButtonPressed(structureName) StructureFrame.Enabled = false if placingStructure == false then placingStructure = true clientStructure = sillhouettes:FindFirstChild(structureName):Clone() for x, v in pairs(clientStructure:GetChildren()) do if v:IsA("Part") then v.CanCollide = false end end clientStructure.Parent = game.Workspace local startingCFrame = CFrame.new(0, -2, -15) clientStructure:SetPrimaryPartCFrame(HumanoidRootPart.CFrame:ToWorldSpace(startingCFrame)) RunService.RenderStepped:Connect(handleRenderStepped) end end -- Iterate over all Buttons in the StructureFrame and attach a mouse listener for _, structureButton in pairs(StructureFrame.PurchasesScreen:GetChildren()) do if structureButton:IsA("TextButton") then structureButton.MouseButton1Up:Connect(function() handleBrickButtonPressed(structureButton.Name) end) end end UIS.InputBegan:Connect(handleInputStarted) UIS.InputEnded:Connect(handleKeyInputEnded)
I know this is a really long script and I'm sorry I just didn't know where else to look. If you read this all and find an answer then I really don't know how to thank you.