I am new to lua scripting and tried to create an obby checkpoint system for my first obby game but it doesn’t seem to work, I will attach some screenshots of what I’ve done so far, comments are welcome.
It seems like your code is on the right track! Here are some comments on your script:
- Make sure that the script is a child of the part that will serve as the checkpoint. From your screenshot, it looks like the script is a child of the workspace, which might not work as intended.
- In the
onTouch()
function, you’re currently usingplayer.Character.Humanoid
to get the player’s humanoid. However, if the player dies and respawns,player.Character
will be nil until they respawn again. You can use theCharacterAdded
event to update thehumanoid
variable when the player respawns:
local humanoid = nil
function onCharacterAdded(character)
humanoid = character:WaitForChild("Humanoid")
end
player.CharacterAdded:Connect(onCharacterAdded)
- You’re using
RemoteEvent
s to communicate between the server and the client, which is a good approach. However, you’re sending the checkpoint number as an argument to the event, which can be exploited by players to skip checkpoints. Instead, you can send the instance of the checkpoint part itself and check if the player touches the correct checkpoint:
function onTouch(otherPart)
local character = otherPart.Parent
if character and character:FindFirstChild("Humanoid") and character.Humanoid.Health > 0 and otherPart == script.Parent then
if not checkpointPassed then
checkpointPassed = true
game.ReplicatedStorage.CheckpointReached:FireClient(player, script.Parent) -- send the checkpoint part itself as an argument
end
end
end
- Finally, make sure that you’re adding the
onTouch()
function to theTouched
event of the checkpoint part:
script.Parent.Touched:Connect(onTouch)
For all these people apes that says that I use ChatGPT explain how did I scan the text with the “ChatGPT”
As @HolisThaDev made all great suggestions, including capitalizing “Humanoid” as it is case sensitive when in quotes, you had left it lower case in your “local hum” variable… but they fixed it in their suggestion.
It’s possible to scan the text with Chat GPT, its not stupid after all. But good Support Post!
bro really thinks iam a bot with 2329042349023 ai integrated
Go the last end and go down a line then paste this in:
for i,v in pairs(workspace.Checkpoints:GetChildren()) do -- gets all checkpoints in the folder
v.Touched:Connect(function(hit) -- when one of the checkpoints is touched
local char = hit.Parent -- lets say the leg hit the checkpoint, the leg's parent would be the character
local player = game.Players:GetPlayerFromCharacter(char) -- getting the player in game.Players from the character
local humanoid = char:WaitForChild("Humanoid") -- gets the humanoid
if player and humanoid then -- checks if there is a player with the character's name in game.Players, also checks if the character has a humanoid
if humanoid.Health <= 0 then return end -- if the player is dead then returns it, basically doing nothing from this point on
if player.leaderstats.Stage.Value == tonumber(v.Name) - 1 then --checks if the checkpoint touched is the next checkpoint
player.leaderstats.Stage.Value += 1 -- adds 1 to the existing stage on the leaderstats
end
end
end)
end
Also, don’t use the roblox spawns, use a regular part that teleports you to whichever stage you were on
if you don’t understand something or need help with anything, let me know
thanks, im gonna try with this!
Thankss!! This is really helpful, it worked, but now im reading the whole code in order to understand how works, just a last thing, how can i practice roblox coding??
Well I mainly got used to lua simply by watching videos like tutorials and when I was stuck, I would look on the devforum trying to understand as much as I can piece by piece. I am nowhere near a good scripter as most people, however I have some knowledge that I try and pass on to others like you!
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.