I have created a piece off code that allows the players to put anchors down which connect together and the last one placed connects to the player by a rope. However, the attachments are randomly not being found after the delete has run a phew times.
There is a part in ServerStorage called Anchor which is cloned. Parented to it are the following things:
A attachment, also called Anchor.
Two variables, nextanchor and previousanchor.
I have added an if statement to prevent the error breaking it in the remove, but it won't work correctly if it skips the part in the if statement.
The line off code is similar in place and remove, and it is this line that is having a error in both:
NewRope.Attachment1 = Anchor.Anchor
The full script:
game.ReplicatedStorage.Remotes.PlaceAnchor.OnServerEvent:Connect(function(Player) local Character = Player.Character local LastAnchor:ObjectValue = Player:FindFirstChild("LastAnchor") local Anchors:IntValue = Player:FindFirstChild("Anchors") local Rope:RopeConstraint = Character:FindFirstChild("Rope") if Anchors.Value >= 1 then local Anchor = game.ServerStorage.Anchor:Clone() Anchor.Parent = workspace Anchor.CFrame = Character.HumanoidRootPart.CFrame if LastAnchor.Value then local LastAnchorAttachment = LastAnchor.Value.Anchor local NewRope = Instance.new("RopeConstraint") NewRope.Parent = LastAnchor.Value NewRope.Attachment0 = LastAnchorAttachment NewRope.Attachment1 = Anchor.Anchor NewRope.Length = 52 NewRope.Visible = true NewRope.Name = "Rope" Anchor.PreviosAnchor.Value = LastAnchor.Value LastAnchor.Value.NextAnchor.Value = Anchor end Anchors.Value -= 1 LastAnchor.Value = Anchor Rope.Attachment1 = Anchor.Anchor Rope.Visible = true end end) game.ReplicatedStorage.Remotes.RemoveAnchor.OnServerEvent:Connect(function(Player) local Character = Player.Character local LastAnchor:ObjectValue = Player:FindFirstChild("LastAnchor") local Anchors:IntValue = Player:FindFirstChild("Anchors") local Rope:RopeConstraint = Character:FindFirstChild("Rope") local OP = OverlapParams.new() OP.FilterDescendantsInstances = {Character} local SurroundingParts = workspace:GetPartBoundsInBox(Character.HumanoidRootPart.CFrame, Vector3.new(10,10,10),OP) for i, SurroundingPart in pairs(SurroundingParts) do if SurroundingPart.Name == "Anchor" and SurroundingPart:IsA("Part") then if SurroundingPart.PreviosAnchor.Value then local LastAnchor2 = SurroundingPart.PreviosAnchor.Value if SurroundingPart.NextAnchor.Value then local LastRope:RopeConstraint = LastAnchor2:FindFirstChild("Rope") local NextAnchor = SurroundingPart.NextAnchor.Value if LastAnchor2:FindFirstChild("Anchor") then LastRope.Attachment1 = NextAnchor.Anchor end SurroundingPart:Destroy() Anchors.Value += 1 -- Next anchor placed break else -- Next anchor not placed local NextAnchor = Character local LastRope:RopeConstraint = Character:FindFirstChild("Rope") if LastAnchor2:FindFirstChild("Anchor") then LastRope.Attachment1 = LastAnchor2.Anchor end SurroundingPart:Destroy() Anchors.Value += 1 break end else -- No anchor before. if SurroundingPart.NextAnchor.Value then SurroundingPart:Destroy() Anchors.Value += 1 -- Next anchor placed break else -- Next anchor not placed local NextAnchor = Character SurroundingPart:Destroy() Anchors.Value += 1 break end end end end end)