Destroy() only temporarily destroying objects

I have been programming a game called Frenzy Sprint. One of the items you can buy in a shop is a trail, but all of a sudden the code that unequips the trails stopped working. It literally worked a couple hours ago, but now clicking “unequip” does absolutely nothing on the server side. When I look at what’s going on in the Workspace, the trails go away for about half of a second and then come right back.

The system of equipping/unequipping (Idk if “unequipping” is a word, but I’ll use it anyway :wink:) items works this way:

  • A bool value determines whether the equip button should function as an “equip” or “unequip” button
  • Equip section works, so I won’t describe
  • Unequip section invokes a RemoteFunction; code will be explained
  • If RemoteFunction returns true, the equip button will display that

The issue is that it returns true, but the items come back after a very short period of time. So essentially the RemoteFunction runs its course but the trails just come back almost right away.

I have a couple trails in the store, but I’ll use the Blue trail as an example. Here is the code inside of the LocalScript (a child of the Equip button):

local equipped = script.Parent.Parent.Equipped
script.Parent.Activated:Connect(function()
	if equipped.Value == false then
		local equip = game:GetService("ReplicatedStorage"):FindFirstChild("EquipTrail"):InvokeServer("Blue")
		if equip == true then
			--This section works; deleted code in the forum for brevity
		end
	else
		local unequip = game:GetService("ReplicatedStorage"):FindFirstChild("UnequipTrail"):InvokeServer("Blue")
		if unequip == true then --If it returns true, that means it was successful
			equipped.Value = false
			script.Parent.Text = "Equip"
		end
	end
end)

In ServerScriptService, I took out a snippet of the code that refers to destroying, equipping, and unequipping the blue trail:

Destroying trails:

local function destroyAllTrails(player)
    local char = player.Character

	if char.Head:FindFirstChild("BlueTrail") ~= nil then
		char.Head.BlueTrail:Destroy()
		char.Head.TrailAttachment0:Destroy()
		char.HumanoidRootPart.TrailAttachment1:Destroy()
	end
end

Equipping the trail:

game.ReplicatedStorage.EquipTrail.OnServerInvoke = function(player, trailColor)

	if trailColor == "Blue" then
		destroyAllTrails(player)
		local char = player.Character
		local ServerStorage = game.ServerStorage.BlueTrail:Clone()
		ServerStorage.Parent = char.Head
		local attachment0 = Instance.new("Attachment",char.Head)
		attachment0.Name = "TrailAttachment0"
		local attachment1 = Instance.new("Attachment",char.HumanoidRootPart)
		attachment1.Name = "TrailAttachment1"
		ServerStorage.Attachment0 = attachment0
		ServerStorage.Attachment1 = attachment1
		return true
	end
end

And… last but not least, unequipping the trails:

game.ReplicatedStorage.UnequipTrail.OnServerInvoke = function(player, trailColor)
	local char = player.Character

	if trailColor == "Blue" then
		if char.Head:FindFirstChild("BlueTrail") ~= nil then
			char.Head.BlueTrail:Destroy()
			char.Head.TrailAttachment0:Destroy()
			char.HumanoidRootPart.TrailAttachment1:Destroy()
            return true
    		end
    	end
    end

So far, I’ve tried reverting the version to a version before the issue happened, but there was no success. There were tons of different things I tried, but nothing worked. I also looked up Remove() but apparently it’s now deprecated so that probably wouldn’t work. If anyone could help me out with this, I would really appreciate it. Thanks in advance!

1 Like

first, you probably already are anyway, but make sure you write equipped.Value = true underneath where you write equip == true in the local script. Secondly, write print() everywhere in both scripts to see when and how far the code runs.

2 Likes

Did you try to use FireServer instead of InvokeServer? Also if you Destroy() an instance. It shouldn’t be able to come back. Read this article for more information about Instance:Destroy(). And one question, how long does it exactly take for the trail to come back?

1 Like