Advertisement
CatalinPog

Stamina System

Mar 26th, 2025
241
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.07 KB | Gaming | 1 0
  1. local playerSettings = {
  2.     SprintSpeed = 21,          
  3.     DefaultSpeed = 10,        
  4.  
  5.     StaminaMax = 100,          
  6.     StaminaDrainRate = 10,    
  7.     StaminaRegenRate = 10,      
  8.     StaminaRegenDelay = 0.5,  
  9.     StaminaPerJump = 20,      
  10.  
  11.     SprintToggle = true,      
  12.     SprintKey = Enum.KeyCode.LeftShift,
  13.  
  14.     EnableSounds = true,      
  15.     EnableStaminaGui = true,  
  16.     PreventJumpWhenNoStamina = true  
  17. }
  18.  
  19. local Players = game:GetService("Players")
  20. local RunService = game:GetService("RunService")
  21. local UserInputService = game:GetService("UserInputService")
  22.  
  23. local localPlayer = Players.LocalPlayer
  24. local character = localPlayer.Character or localPlayer.CharacterAdded:Wait()
  25. local humanoid = character:WaitForChild("Humanoid")
  26. local isSprinting = false
  27. local currentStamina = playerSettings.StaminaMax
  28. local lastStaminaUseTime = 0
  29. local sprintSound
  30. local jumpConnection
  31.  
  32. if playerSettings.EnableSounds then
  33.     sprintSound = Instance.new("Sound")
  34.     sprintSound.Name = "SprintSound"
  35.     sprintSound.SoundId = "rbxassetid://"
  36.     sprintSound.Volume = 0.5
  37.     sprintSound.Looped = true
  38.     sprintSound.Parent = character:WaitForChild("HumanoidRootPart")
  39. end
  40.  
  41. local staminaGui
  42. local staminaBar
  43. if playerSettings.EnableStaminaGui then
  44.     staminaGui = Instance.new("ScreenGui")
  45.     staminaGui.Name = "StaminaGui"
  46.     staminaGui.ResetOnSpawn = false
  47.     staminaGui.Parent = localPlayer.PlayerGui
  48.  
  49.     local frame = Instance.new("Frame")
  50.     frame.Name = "StaminaFrame"
  51.     frame.Size = UDim2.new(0, 200, 0, 20)
  52.     frame.Position = UDim2.new(0.5, -100, 0.9, 0)
  53.     frame.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
  54.     frame.BorderSizePixel = 0
  55.     frame.Parent = staminaGui
  56.  
  57.     staminaBar = Instance.new("Frame")
  58.     staminaBar.Name = "StaminaBar"
  59.     staminaBar.Size = UDim2.new(1, 0, 1, 0)
  60.     staminaBar.BackgroundColor3 = Color3.fromRGB(58, 165, 255)
  61.     staminaBar.BorderSizePixel = 0
  62.     staminaBar.Parent = frame
  63.  
  64.     local staminaText = Instance.new("TextLabel")
  65.     staminaText.Name = "StaminaText"
  66.     staminaText.Size = UDim2.new(1, 0, 1, 0)
  67.     staminaText.BackgroundTransparency = 1
  68.     staminaText.TextColor3 = Color3.fromRGB(255, 255, 255)
  69.     staminaText.Font = Enum.Font.GothamBold
  70.     staminaText.Text = "100/100"
  71.     staminaText.TextSize = 14
  72.     staminaText.Parent = frame
  73.  
  74.     local function updateStaminaText()
  75.         staminaText.Text = math.floor(currentStamina) .. "/" .. playerSettings.StaminaMax
  76.     end
  77.  
  78.     RunService.RenderStepped:Connect(updateStaminaText)
  79. end
  80.  
  81. local function toggleSprint()
  82.     if isSprinting and currentStamina > 0 then
  83.         humanoid.WalkSpeed = playerSettings.SprintSpeed
  84.         if playerSettings.EnableSounds and not sprintSound.IsPlaying then
  85.             sprintSound:Play()
  86.         end
  87.     else
  88.         humanoid.WalkSpeed = playerSettings.DefaultSpeed
  89.         if playerSettings.EnableSounds and sprintSound.IsPlaying then
  90.             sprintSound:Stop()
  91.         end
  92.     end
  93. end
  94.  
  95. local function setupJumpHandler()
  96.     if jumpConnection then
  97.         jumpConnection:Disconnect()
  98.     end
  99.  
  100.     jumpConnection = humanoid.Jumping:Connect(function(isJumping)
  101.         if isJumping then
  102.             if currentStamina >= playerSettings.StaminaPerJump then
  103.                 currentStamina = currentStamina - playerSettings.StaminaPerJump
  104.                 lastStaminaUseTime = tick()
  105.  
  106.                 -- Play jump sound effect if desired
  107.                 -- Add your jump sound code here
  108.             elseif playerSettings.PreventJumpWhenNoStamina then
  109.                 -- Cancel the jump if not enough stamina
  110.                 humanoid:ChangeState(Enum.HumanoidStateType.Landing)
  111.                 local jumpFailedEffect = Instance.new("Sound")
  112.                 jumpFailedEffect.SoundId = "rbxassetid://4612375502"
  113.                 jumpFailedEffect.Volume = 0.5
  114.                 jumpFailedEffect.Parent = character.HumanoidRootPart
  115.                 jumpFailedEffect:Play()
  116.                 game.Debris:AddItem(jumpFailedEffect, 1)
  117.             end
  118.         end
  119.     end)
  120. end
  121.  
  122. setupJumpHandler()
  123.  
  124. UserInputService.InputBegan:Connect(function(input, gameProcessed)
  125.     if gameProcessed then return end
  126.  
  127.     if input.KeyCode == playerSettings.SprintKey then
  128.         if playerSettings.SprintToggle then
  129.             if currentStamina > 0 then
  130.                 isSprinting = not isSprinting
  131.                 toggleSprint()
  132.             end
  133.         else
  134.             if currentStamina > 0 then
  135.                 isSprinting = true
  136.                 toggleSprint()
  137.             end
  138.         end
  139.     end
  140. end)
  141.  
  142. if not playerSettings.SprintToggle then
  143.     UserInputService.InputEnded:Connect(function(input, gameProcessed)
  144.         if gameProcessed then return end
  145.  
  146.         if input.KeyCode == playerSettings.SprintKey then
  147.             isSprinting = false
  148.             toggleSprint()
  149.         end
  150.     end)
  151. end
  152.  
  153. RunService.Heartbeat:Connect(function(deltaTime)
  154.     if isSprinting and currentStamina > 0 then
  155.         currentStamina = math.max(0, currentStamina - (playerSettings.StaminaDrainRate * deltaTime))
  156.         lastStaminaUseTime = tick()
  157.  
  158.         if currentStamina == 0 then
  159.             isSprinting = false
  160.             toggleSprint()
  161.         end
  162.     elseif not isSprinting and currentStamina < playerSettings.StaminaMax and (tick() - lastStaminaUseTime) > playerSettings.StaminaRegenDelay then
  163.         currentStamina = math.min(playerSettings.StaminaMax, currentStamina + (playerSettings.StaminaRegenRate * deltaTime))
  164.     end
  165.  
  166.     if playerSettings.EnableStaminaGui and staminaBar then
  167.         staminaBar.Size = UDim2.new(currentStamina / playerSettings.StaminaMax, 0, 1, 0)
  168.  
  169.         if currentStamina < 25 then
  170.             staminaBar.BackgroundColor3 = Color3.fromRGB(255, 50, 50)
  171.         elseif currentStamina < 50 then
  172.             staminaBar.BackgroundColor3 = Color3.fromRGB(255, 165, 0)
  173.         else
  174.             staminaBar.BackgroundColor3 = Color3.fromRGB(22, 109, 0)
  175.         end
  176.     end
  177. end)
  178.  
  179. localPlayer.CharacterAdded:Connect(function(newCharacter)
  180.     character = newCharacter
  181.     humanoid = character:WaitForChild("Humanoid")
  182.     humanoid.WalkSpeed = playerSettings.DefaultSpeed
  183.  
  184.     if playerSettings.EnableSounds then
  185.         sprintSound = Instance.new("Sound")
  186.         sprintSound.Name = "SprintSound"
  187.         sprintSound.SoundId = "rbxassetid://5426815016" --
  188.         sprintSound.Volume = 0.5
  189.         sprintSound.Looped = true
  190.         sprintSound.Parent = character:WaitForChild("HumanoidRootPart")
  191.     end
  192.  
  193.     isSprinting = false
  194.     currentStamina = playerSettings.StaminaMax
  195.  
  196.     setupJumpHandler()
  197. end)
  198.  
  199. print("Sprinting and Jumping Stamina Script Loaded")
  200. print("Press " .. playerSettings.SprintKey.Name .. " to sprint")
  201. print("Each jump costs " .. playerSettings.StaminaPerJump .. " stamina")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement