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
