How would I make someone have text over their head on pressing a button?

I’m trying to achieve a quote system where if you press N, text would appear over your head and a quote would play.
The issue is, I don’t know what to use to achieve that.

My current code:

local player = game.Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait() 
local Humanoid = character:WaitForChild("Humanoid")
game:GetService("Players")
local run = Instance.new("Animation")
run.AnimationId = "rbxassetid://5458518027"
local runtrack = Humanoid:LoadAnimation(run)
local remoteevent = game.ReplicatedStorage.Event
game:GetService("UserInputService").InputBegan:Connect(function(Input,gameProcessed)
    if not gameProcessed then
		        if Input.KeyCode == Enum.KeyCode.N then
-- What do I do next?

you fire a remote event, on the server you create a new billboardgui instance parent it to the head, add a textlabel, parent textlabel to billboardgui. after that set TextScaled to true, and you can set the text of the textlabel to whatever you want. oh and to play a noise you just do

local sound = path_to_sound:Clone() 
sound.Parent = path_to_head 
sound:Play()

That’s pretty exploitable, I hope you know. I could easily just spam :FireServer() and get text made several times, and crash the game.

A simple solution to this is to add a player to the table, preventing creation of the “sound” and “text” again. This will prevent the game from being crashed, and it’s a lot cleaner. Think of it like a cooldown. Then , once the player leaves , remove them from that table.

he’s asking how to do it… not how to get a secured remote event; your not even being relevant

Could you show me how to do it (making billboardgui, parenting it to the head, etc.) But I do know how to fire a remoteevent and how they work.

that’s not very hard… do you know how to code?

local bill = Instance.new("BillboardGui")
bill.Parent = path_to_head
local tex = Instance.new("TextLabel")
tex.Parent = bill
tex.Text = "oh? your approaching me?!"
local sound = path_to_sound:Clone() 
sound.Parent = path_to_head 
sound:Play()

sound.Stopped:Connect(function()
   bill:Destroy()
end)

this should be done on the server. also you should make sure your remotes are secured, learn about remote security here: Search results for 'secure remote events' - Developer Forum | Roblox

You can just destroy the billboard gui and it will destroy it’s children too. You don’t need to destroy them both.