PcoWSkbVqDnWTu_dm2ix
We use cookies on this site to enhance your user experience

Powerups with if/then Statements

Powerups with if/then Statements

Prerequisites Students should have completed:
  • Traps with if/then Statements
  • Lesson Time Approx 10-15 minutes
    Optional Handouts Coding with Lua
    Learning Objectives
  • Use the and keyword to check for more than one if/then conditions
  • Use Humanoid Walkspeed to change a player's speed
  • Power-ups give players special abilities like flying or invisibility, or in this case speed! To create a speed boost powerup that temporarily makes players walk extra fast, the if/then statement will check if the object touching the speed boost is a player and if they haven’t already been powered up at the same time.

    speedPowerup_finalExample.gif

    Setting up the Script

    Create a Script and Part

    1. Create a new part named SpeedBoost and insert a script.

    2. Name the script and create a comment describing the script’s purpose.

    3. Create a new variable: local speedBoost = script.Parent

      powersupsUpdated_1.png

    Check for Touched Events

    1. Create a function named onTouch and include a print statement inside.

      epowerupsUpdated_2.png

    Debugging with the Print Function

    Adding print statements in functions is a good way of checking if code is working. If one print statement is missing, you know the code stopped working before that print statement and can better find a potential error.


    1. Outside the function, type speedBoost.Touched:Connect(onTouch)

      powerupsUpdated_3.png

    2. Click Run to check if your print message shows up in the Output window when SpeedBoost is touched.

      speedBoost_test_optimized.gif

    Other Things Touching the Part

    When you run the code, you may notice the print line appears. This is because the part might already be touching something, like another part or terrain. Whenever your player walks on the speed boost part, a new print line should appear.


    Store the Humanoid

    Now that the part knows something is touching it, the script needs to check if it’s a humanoid using the FindFirstChildWhichIsA() function. If a humanoid is touching the part, it’ll be stored in the humanoid variable.

    1. Type local character = otherPart.Parent

    2. Type local humanoid = character:FindFirstChildWichIsA("Humanoid")

      powersupUpdated_4.png

    You code should now be:

    -- Gives temporary speed boost
     
    local speedBoost = script.Parent
     
    local function onTouch(otherPart)
    -- Looks for a humanoid and stores it
    	local character = otherPart.Parent
    	local humanoid = character:FindFirstChildWhichIsA ("Humanoid")
     
    	-- Print statement for debugging
    	print("Something touched speedBoost")
     
    end
     
    speedBoost.Touched:Connect(onTouch)

    Creating a Speed Boost

    Before activating the speed powerup, your code should check if both of these conditions are true:

    • The object touching the speedBoost has a Humanoid.
    • The Humanoid object’s WalkSpeed is 16.

    WalkSpeed controls how fast a player’s character moves in the game. The normal value is 16. To check for both conditions at once, use keyword and.

    1. Create an if/then with the condition humanoid and humanoid.Walkspeed <= 16

      powersupsUpdated_5.png

    2. Create a print statement to test if the statement works.

      powerupsUpdated_6.png

    3. Click Run and check your code.

      speedBlockTest.gif

    Humanoid Properties - WalkSpeed

    If you’re not getting the output you expect, check that you have two ends, one for your if/then statement, and a second end for your function.


    Code Example

    -- Gives a temporary speed boost
     
    local speedBoost = script.Parent
     
    local function onTouch(otherPart)
    -- Looks for a humanoid and stores it
    	local character = otherPart.Parent
    	local humanoid = character:FindFirstChildWhichIsA ("Humanoid")
     
    	-- Print statement for debugging
    	print("Something touched speedBoost")
     
    	-- Checks for Humanoid without speed boost
    	if humanoid and humanoid.WalkSpeed <= 16 then
    		print("Humanoid touched speedBoost")
    	end 
     
    end
     
    speedBoost.Touched:Connect(onTouch)

    Set the WalkSpeed

    Now that the if/then statement works, change the humanoid’s WalkSpeed property.

    In the if/then statement:

    1. Change humanoid.WalkSpeed to a number between 16 and 100.

      powerupsUpdated_7.png

    Difference between = and ==

    1. Use wait() to set how many seconds the speed boost will last.
      [image] – WHAT IMAGE IS THIS SUPPOSED TO BE? JUST SAYS “IMAGE” IN GOOGLE DOC

    2. Change WalkSpeed back to the starting value of 16.

      powerupsUpdated_8.png

    3. Run your code. The player should get a speed boost and go back to their normal walking speed after 2 seconds.

      speedPowerup_finalExample.gif

    Finished Code Example

    -- Gives temporary speed boost
     
    local speedBoost = script.Parent
     
    local function onTouch(otherPart)
    -- Looks for a humanoid and stores it
    	local character = otherPart.Parent
    	local humanoid = character:FindFirstChildWhichIsA ("Humanoid")
     
    	-- Print statement for debugging
    	print("Something touched speedBoost")
     
    	-- Checks for Humanoid without speed boost	
    	if humanoid and humanoid.WalkSpeed <= 16 then
    		print("A humanoid touched speedBoost")
    		-- Change to faster speed, wait, then change to normal
    		humanoid.WalkSpeed = 50
    		print("Player is moving super fast")
    		wait(2)
    		humanoid.WalkSpeed = 16 
    		print("Player is back at normal speed")
    	end 
     
    end
     
    speedBoost.Touched:Connect(onTouch)
    Final Project Example

    You can download an example of this project here.


    Troubleshooting Code

    • Check that Walkspeed is between 10 and 100. If not, you may get unexpected errors.
    • Make sure there is a wait() function in between switching the player’s speed. If not, the two changes will happen instantaneously and it’ll look like nothing happened.

    These documents are licensed by Roblox Corporation under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Roblox, Powering Imagination, and Robux are trademarks of Roblox Corporation, registered in the United States and other countries.