Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How do you make it so if you step on a brick a gui will pop up then go away shortly after?

Asked by
quinzt 201 Moderation Voter
5 years ago
Edited by SerpentineKing 5 years ago

so basically, im trying to make a title sequence and when you step on the brick, the title of the game will appear (I have that done already). The thing I need help with is making it only stay on the screen for like 5 seconds then get destroyed never to be seen again (even after youve died and re-spawned).

This is the script I have so far:

local Part = script.Parent

Part.Touched:connect(function(HIT)
    local H = HIT.Parent:FindFirstChild("Humanoid")
    if H then
            local Player = game.Players:GetPlayerFromCharacter(HIT.Parent)
            Player.PlayerGui.TitleSequence.Frame.Visible = true
    end
end) 

I have never used this before so sorry if i asked the question wrong or something

2 answers

Log in to vote
1
Answered by 5 years ago
Edited 5 years ago

Information

Use :GetService() to retrieve the Players Service

Use :WaitForChild() to make sure an instance exists before using it

Use a "debounce" so that the touched event doesn't run your code again before the cooldown (5 seconds) is done

I'd check the existence of the HIT, its parent, and the player rather than the Humanoid so that you can be sure that a player and not some npc touched the part.

Use :Destroy() to remove an instance forever

Revised Server Script

local Part = script.Parent
local debounce = false

Part.Touched:connect(function(HIT)
    if HIT and HIT.Parent and game:GetService("Players"):GetPlayerFromCharacter(HIT.Parent) then
        local Player = game:GetService("Players"):GetPlayerFromCharacter(HIT.Parent)
        local gui = Player:WaitForChild("PlayerGui"):FindFirstChild("TitleSequence")

        if gui and debounce == false then
            debounce = true
            gui:WaitForChild("Frame").Visible = true
            wait(5)
            gui:Destroy()
            debounce = false
        end
    end
end) 

IMPORTANT: make sure that the "TitleSequence"'s ResetOnSpawn property is set to false so that a player's death will not reinstate the ScreenGui

1
wow tysm i never actually thought anyone would answer my question... quinzt 201 — 5y
Ad
Log in to vote
0
Answered by 5 years ago

Well first off, your script doesn’t even have a line of code that says it’ll be gone after 5 seconds, so try this.

local Part = script.Parent

Part.Touched:connect(function(HIT)
local H = HIT.Parent:FindFirstChild("Humanoid") 
if H then 
local Player = game.Players:GetPlayerFromCharacter(HIT.Parent) Player.PlayerGui.TitleSequence.Frame.Visible = true 
end 
wait(5)
Player:WaitForChild(“PlayerGui”).TitleSequence.Frame:Destroy()
end)
end)

Answer this question