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)
