How to make it so that when a player has already touched a checkpoint and the sound is played, if they end up dying and respawns, the sound would not be played again??
Every time I reset my character while testing and I respawn on a checkpoint that I have already touched and the sound has already played, the sound plays again.
Here's the script:
local CKsound = workspace.SoundLibrary.CheckpointSound local Players = game:GetService("Players") local CharSpawn = {} Players.PlayerAdded:Connect(function(player) player.CharacterAdded:Connect(function(Char) Char = CharSpawn local PlayerLevel = player:WaitForChild("leaderstats").Level wait(PlayerLevel) local play = false local debounce = false local LevelName = script.Parent.Parent.Parent.Parent.Checkpoints["2"] print("Online") if not CharSpawn[player.Name] and LevelName.Name ~= PlayerLevel.Value then CharSpawn[player.Name] = true print(player.Name, "has spawned on a different checkpoint") end script.Parent.Touched:Connect(function(hit) for i, parts in ipairs(script.Parent:GetTouchingParts()) do if parts == hit.Parent or not hit.Parent:FindFirstChildWhichIsA("Humanoid") then debounce = false print("Touch reset") else if hit.Parent:FindFirstChildWhichIsA("Humanoid") and parts ~= hit.Parent then local Player = Players:GetPlayerFromCharacter(hit.Parent) if Player and debounce == false then debounce = true print("ACTIVE") if Player and play == false then if LevelName ~= nil then print("Part Name is", LevelName, "and Player Level is ", PlayerLevel.Value) if not CharSpawn[player.Name] and LevelName.Name == PlayerLevel.Value then play = true print(player.Name, "has spawned on same checkpoint") end if CharSpawn[player.Name] == true and LevelName.Name == PlayerLevel.Value then play = true CKsound:Play() print("Checkpoint reached") print(Player, "has touched Checkpoint", LevelName.Name) else if CharSpawn[player.Name] == true and LevelName.Name ~= PlayerLevel.Value then play = false print("Checkpoint not reached") end end for i, char in ipairs(Players:GetPlayers()) do local humanoid = char.Character:WaitForChild("Humanoid") humanoid.Died:Connect(function() if play == true and LevelName.Name == PlayerLevel.Value then print(player.Name, "has died!") CKsound:Stop() print("Checkpoint touched already") end end) end PlayerLevel:GetPropertyChangedSignal("Value"):Connect(function() print("Part Name is", LevelName, "and Player Level is ", PlayerLevel.Value) if LevelName.Name == PlayerLevel.Value then play = true CKsound:Play() print("Checkpoint reached") print(Player, "has touched Checkpoint", LevelName.Name) else if LevelName.Name ~= PlayerLevel.Value then play = false print("Checkpoint not reached") end end end) end end end end end end end) end) end) Players.PlayerRemoving:Connect(function(plr) table.remove(CharSpawn, table.find(CharSpawn, plr.Name)) print(plr, "left") end)
This piece of coding that I added to help fix the issue is not helping either:
for i, char in ipairs(Players:GetPlayers()) do local humanoid = char.Character:WaitForChild("Humanoid") humanoid.Died:Connect(function() if play == true and LevelName.Name == PlayerLevel.Value then print(player.Name, "has died!") CKsound:Stop() print("Checkpoint touched already") end end) end