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

How do i make a key respawn your Character?

Asked by
Zripple 18
5 years ago
Edited 5 years ago

Hi, I've been searching up everywhere for a script that allows a certain key on your keyboard that makes you respawn/load your character. I'd prefer the key be held down for a specific amount of time to respawn but still no luck. I'm sorry if this seems very simple but it would be amazing if you could help. :)

game.Players.LocalPlayer:GetResetButton().KeyDown:connect(function(k)
    if k == "r" then
        -- is this where the player/humanoid health = 0?
        -- and where do i create a specific time for the key to be held?
    end
end)

I'm still learning.

0
Player:GetResetButton()? BenSBk 781 — 5y
0
instead of GetResetButton(), do :GetMouse(), even though this method of input is deprecated, i highly recommend you use UseInputService InputBegan RubenKan 3615 — 5y
0
KeyDown sucks and as ruben said it's deprecated, and here's the link https://www.robloxdev.com/api-reference/class/UserInputService This is a much better way of handling user input as not only can you do computers but also console and mobile players. It'll help make games cross platform compatible. User#19524 175 — 5y

1 answer

Log in to vote
0
Answered by
ee0w 458 Moderation Voter
5 years ago
Edited 5 years ago

I would firstly like to thank you for being so patient, as most learning developers tend to rush and miss out on important stuff. Scripting takes great patience, especially in Roblox since the API can seem quite menacing. I'll be showing you step-by-step how to solve this seemingly simple problem. The answer is simple, but requires explaining.


Services

Services in Roblox are top-class objects that can be obtained using the GetService method of game (game:GetService()). They make things much easier on the developer by coming packed with an array of useful functions and events.

UserInputService

Usually shortened to UIS, this service comes in handy when detecting user input (the name says it all). This can be obtained by doing game:GetService("UserInputService"), as with any other service. Please note that this service can only be used in LocalScripts.

InputBegan

UIS.InputBegan is like any other event, as it can be Connected to a function. It fires whenever a user input is detected (typically a key press).


This is a lot to take in, so let's see where we are so far.

local uis = game:GetService("UserInputService") -- Get the service and store it in the "uis" variable
uis.InputBegan:Connect(function(key) -- Connects the function
    print(key.KeyCode) -- This will print the KeyCode in the event of a key being pressed
end)

Loops

Loops are essential in Lua: Loops allow portions of code to be repeated until a condition is met (or indefinitely, commonly referred to as an infinite loop). We can use loops to constantly check whether the key is pressed or not, using variable isPressed:

local uis = game:GetService("UserInputService") -- Same as before
local isPressed = false -- This is our main variable

uis.InputBegan:Connect(function(key)
    if key.KeyCode == Enum.KeyCode.F then -- This will detect if the keycode is equal to keycode F
        isPressed = true -- If so, set the variable to true
    end
end)

uis.InputEnded:Connect(function(key)
    if key.KeyCode == Enum.KeyCode.F then
        isPressed = true -- Set to false to indicate the key is no longer pressed
    end
end)

while true do -- This will repeat endlessly, as true is *always* equal to true
    print(isPressed)
    wait() -- This is required in an infinite loop to avoid a game-breaking hang
end

InputEnded fires when a key is becomes unpressed. We're very close; try it out. If you hold F, it will print true, elsewise it will print false.


What we can do now is use a holdTime variable to see how long we've been holding the key. This determines whether we've held the key long enough once we release the key.

local uis = game:GetService("UserInputService")
local isPressed = false
local holdTime = 0

uis.InputBegan:Connect(function(key)
    if key.KeyCode == Enum.KeyCode.F then
        isPressed = true
    end
end)

uis.InputEnded:Connect(function(key)
    if key.KeyCode == Enum.KeyCode.F then
        isPressed = true
    end
end)

while true do
    while isPressed or holdTime < 2 do -- While the key is pressed and holdTime is less than 2, repeat the following:
        wait(0.1)
        holdTime = holdTime + 0.1 -- This increases holdTime by 0.1 every 0.1 seconds (1 per second)
    end -- Loops inside of loops are completely valid
    print(holdTime) -- This will print how long we've held the key down to 1/10th of a second
    holdTime = 0
    wait()
end

Our input mechanic is almost complete! Now, we just need to send a message to the Server saying we need to reset. We can do so using RemoteEvents. Don't worry, we won't be doing anything too complicated:

Insert a RemoteEvent into ReplicatedStorage, and a (regular) Script into ServerScriptService:

-- Local script
local uis = game:GetService("UserInputService")
local isPressed = false
local holdTime = 0

uis.InputBegan:Connect(function(key)
    if key.KeyCode == Enum.KeyCode.F then
        isPressed = true
    end
end)

uis.InputEnded:Connect(function(key)
    if key.KeyCode == Enum.KeyCode.F then
        isPressed = true
    end
end)

while true do
    while isPressed or holdTime < 2 do
        wait(0.1)
        holdTime = holdTime + 0.1
    end
    if holdTime >= 2 then
        game.ReplicatedStorage.RemoteEvent:FireServer()
    end
    repeat wait() until isPressed == false -- Continues once you release the key
    holdTime = 0
    wait()
end

-- Server script in ServerScriptService
game.ReplicatedStorage.RemoteEvent.OnServerEvent:Connect(function(plr)
    if plr.Character then
        plr.Character.Humanoid.Health = 0
    end
end)

Hope I helped! Remember: the Wiki is your goto if you don't know how something works.

0
Woah! I can't thank you enough! Zripple 18 — 5y
Ad

Answer this question