I want to make it so when the stamina is low, mining is disabled
robloxapp-20231108-1655521.wmv (1.1 MB)
I already made the stamina and mining system, here’s the scripts :
local pickaxe = script.Parent
local canmine = pickaxe.CanMine
local anim = pickaxe.Animation
local players = game:GetService("Players")
local player = players:GetPlayerFromCharacter(pickaxe.Parent) -- get player if tool is equipped
local character
local animtrack
local humanoid
local ismining = false
local isactive = false
local animplaying = false
local pickaxehitbox = pickaxe.Pickaxepart.PickaxeHitbox
local mining = game:GetService("ReplicatedStorage").Mining
local sc = game:GetService("ReplicatedStorage").ServerConnector
local pickvalue = game:GetService("ReplicatedStorage").Tool.CurrentPickaxe
local playermod = require(game:GetService("Players").LocalPlayer.PlayerScripts:WaitForChild("PlayerModule"))
local controls = playermod:GetControls()
local dc2 = game:GetService("ReplicatedStorage").dc2
local cs = game:GetService("ReplicatedStorage").ChangeStrength
local sb = game:GetService("ReplicatedStorage").StaminaBar
local zerostamina = game:GetService("ReplicatedStorage").zerostamina
local stamina = true
if pickaxe.Parent:IsA("Backpack") then -- checks if tool is in backpack
player = pickaxe.Parent.Parent -- since backpack is always a child of a player, we get player from the backpack's parent
end
local function CharAdded(char)
character = char
humanoid = character:WaitForChild("Humanoid")
animtrack = humanoid:LoadAnimation(anim)
end
if player.Character then CharAdded(player.Character) end
player.CharacterAdded:Connect(CharAdded)
canmine.Value = true
pickaxe.Activated:Connect(function()
if canmine.Value == true and animplaying == false then
dc2:FireServer()
print("activated")
isactive = true
animtrack:Play()
canmine.Value = false
animplaying = true
wait(3)
animplaying = false
pickaxehitbox.Touched:Connect(function(hit)
if ismining == false then
if hit.Name == "Hitbox" or hit.Parent == "Rock" then
print("mining")
sb:FireServer()
sc:FireServer()
mining:FireServer()
ismining = true
local particle = hit:WaitForChild("ParticleEmitter")
particle.Enabled = true
if ismining == true then
wait(1)
ismining = false
particle.Enabled = false
end
end
end
end)
task.wait(1)
canmine.Value = true
end
end)
if isactive == true then
wait(1)
isactive = false
end
local rs = game:GetService("ReplicatedStorage")
local canmine = rs.Tool.Pickaxe.CanMine or rs.Tool.UpgradedPickaxe.CanMine
local mining = rs.Mining
local UIS = game:GetService("UserInputService")
local currentStamina = 250
local maxStamina = 250
local isRunning = false
local reqstamina = 50
local canmine = rs.Tool.Pickaxe.CanMine
local canminevalue = canmine.Value
currentStamina = math.clamp(currentStamina, 0, maxStamina)
local function updateStamina(player)
if currentStamina > 0 then
currentStamina = currentStamina - reqstamina
script.Parent:TweenSize(UDim2.new(0, 20, currentStamina / maxStamina, 0), "Out", "Linear", 0.5)
end
task.wait(0.5)
while true do
if currentStamina <= 250 then
currentStamina = currentStamina + 0.02
script.Parent:TweenSize(UDim2.new(0, 20, currentStamina / maxStamina, 0), "Out", "Linear", 0)
elseif currentStamina == 250 then
print("User's Stamina is Full")
elseif currentStamina < 50 then
print("not enough stamina")
elseif currentStamina > 50 then
return
end
task.wait()
end
end
mining.OnServerEvent:Connect(function(player)
updateStamina()
end)
You can just check if stamina is lower than requirement stamina
if currentStamina - reqstamina >= 0 then -- stop if stamina after mining is below 0
currentStamina = currentStamina - reqstamina
script.Parent:TweenSize(UDim2.new(0, 20, currentStamina / maxStamina, 0), "Out", "Linear", 0.5)
end
Where you have the elseif statement in the second script for checking how much stamina the player has send a remote event to the other script with a variable that say if the player can or can’t mine. In the other script you receive this and as said in the code check if it’s true or false.
local rs = game:GetService("ReplicatedStorage")
local canmine = rs.Tool.Pickaxe.CanMine or rs.Tool.UpgradedPickaxe.CanMine
local mining = rs.Mining
local disablemining = rs.DisableMining
local UIS = game:GetService("UserInputService")
local currentStamina = 250
local maxStamina = 250
local isRunning = false
local reqstamina = 50
local canmine = rs.Tool.Pickaxe.CanMine
local canminevalue = canmine.Value
currentStamina = math.clamp(currentStamina, 0, maxStamina)
local function updateStamina(player)
if currentStamina > 0 then
currentStamina = currentStamina - reqstamina
script.Parent:TweenSize(UDim2.new(0, 20, currentStamina / maxStamina, 0), "Out", "Linear", 0.5)
end
task.wait(0.5)
while true do
if currentStamina <= 250 then
currentStamina = currentStamina + 0.02
script.Parent:TweenSize(UDim2.new(0, 20, currentStamina / maxStamina, 0), "Out", "Linear", 0)
elseif currentStamina == 250 then
print("User's Stamina is Full")
elseif currentStamina - reqstamina >= 0 then -- stop if stamina after mining is below 0
currentStamina = currentStamina - reqstamina
script.Parent:TweenSize(UDim2.new(0, 20, currentStamina / maxStamina, 0), "Out", "Linear", 0.5)
disablemining:FireClient(player)
elseif currentStamina > 50 then
return
end
task.wait()
end
end
mining.OnServerEvent:Connect(function(player)
updateStamina()
end)
local pickaxe = script.Parent
local canmine = pickaxe.CanMine
local anim = pickaxe.Animation
local players = game:GetService("Players")
local player = players:GetPlayerFromCharacter(pickaxe.Parent) -- get player if tool is equipped
local character
local animtrack
local humanoid
local ismining = false
local isactive = false
local animplaying = false
local pickaxehitbox = pickaxe.Pickaxepart.PickaxeHitbox
local mining = game:GetService("ReplicatedStorage").Mining
local sc = game:GetService("ReplicatedStorage").ServerConnector
local pickvalue = game:GetService("ReplicatedStorage").Tool.CurrentPickaxe
local playermod = require(game:GetService("Players").LocalPlayer.PlayerScripts:WaitForChild("PlayerModule"))
local controls = playermod:GetControls()
local dc2 = game:GetService("ReplicatedStorage").dc2
local cs = game:GetService("ReplicatedStorage").ChangeStrength
local sb = game:GetService("ReplicatedStorage").StaminaBar
local zerostamina = game:GetService("ReplicatedStorage").zerostamina
local stamina = true
local disablemining = game:GetService("ReplicatedStorage").DisableMining
local enoughstamina = true
disablemining.OnClientEvent:Connect(function()
enoughstamina = false
end)
if pickaxe.Parent:IsA("Backpack") then -- checks if tool is in backpack
player = pickaxe.Parent.Parent -- since backpack is always a child of a player, we get player from the backpack's parent
end
local function CharAdded(char)
character = char
humanoid = character:WaitForChild("Humanoid")
animtrack = humanoid:LoadAnimation(anim)
end
if player.Character then CharAdded(player.Character) end
player.CharacterAdded:Connect(CharAdded)
canmine.Value = true
pickaxe.Activated:Connect(function()
if canmine.Value == true and animplaying == false and enoughstamina then
dc2:FireServer()
print("activated")
isactive = true
animtrack:Play()
canmine.Value = false
animplaying = true
wait(3)
animplaying = false
pickaxehitbox.Touched:Connect(function(hit)
if ismining == false then
if hit.Name == "Hitbox" or hit.Parent == "Rock" then
print("mining")
sb:FireServer()
sc:FireServer()
mining:FireServer()
ismining = true
local particle = hit:WaitForChild("ParticleEmitter")
particle.Enabled = true
if ismining == true then
wait(1)
ismining = false
particle.Enabled = false
end
end
end
end)
task.wait(1)
canmine.Value = true
end
end)
if isactive == true then
wait(1)
isactive = false
end
i added a remote event when the stamina is low but it doesn’t seem to work
robloxapp-20231108-1944567.wmv (2.2 MB)
Change the enoughstamina variable to canmine as you already are checking if the player can mine using that variable.
i made all these changes :
local rs = game:GetService("ReplicatedStorage")
local canmine = rs.Tool.Pickaxe.CanMine or rs.Tool.UpgradedPickaxe.CanMine
local mining = rs.Mining
local disablemining = rs.DisableMining
local UIS = game:GetService("UserInputService")
local currentStamina = 250
local maxStamina = 250
local isRunning = false
local reqstamina = 50
local canmine = rs.Tool.Pickaxe.CanMine
local canminevalue = canmine.Value
currentStamina = math.clamp(currentStamina, 0, maxStamina)
local function updateStamina(player)
if currentStamina > 0 then
currentStamina = currentStamina - reqstamina
script.Parent:TweenSize(UDim2.new(0, 20, currentStamina / maxStamina, 0), "Out", "Linear", 0.5)
end
task.wait(0.5)
while true do
if currentStamina <= 250 then
currentStamina = currentStamina + 0.02
script.Parent:TweenSize(UDim2.new(0, 20, currentStamina / maxStamina, 0), "Out", "Linear", 0)
elseif currentStamina == 250 then
print("User's Stamina is Full")
elseif currentStamina - reqstamina >= 0 or currentStamina <= reqstamina then -- stop if stamina after mining is below 0
currentStamina = currentStamina - reqstamina
script.Parent:TweenSize(UDim2.new(0, 20, currentStamina / maxStamina, 0), "Out", "Linear", 0.5)
print("low stamina")
disablemining:FireClient(player)
elseif currentStamina > 50 then
return
end
task.wait()
end
end
mining.OnServerEvent:Connect(function(player)
updateStamina()
end)
and
local pickaxe = script.Parent
local canmine = pickaxe.CanMine
local anim = pickaxe.Animation
local players = game:GetService("Players")
local player = players:GetPlayerFromCharacter(pickaxe.Parent) -- get player if tool is equipped
local character
local animtrack
local humanoid
local ismining = false
local isactive = false
local animplaying = false
local pickaxehitbox = pickaxe.Pickaxepart.PickaxeHitbox
local mining = game:GetService("ReplicatedStorage").Mining
local sc = game:GetService("ReplicatedStorage").ServerConnector
local pickvalue = game:GetService("ReplicatedStorage").Tool.CurrentPickaxe
local playermod = require(game:GetService("Players").LocalPlayer.PlayerScripts:WaitForChild("PlayerModule"))
local controls = playermod:GetControls()
local dc2 = game:GetService("ReplicatedStorage").dc2
local cs = game:GetService("ReplicatedStorage").ChangeStrength
local sb = game:GetService("ReplicatedStorage").StaminaBar
local zerostamina = game:GetService("ReplicatedStorage").zerostamina
local stamina = true
local disablemining = game:GetService("ReplicatedStorage").DisableMining
local cd = false
disablemining.OnClientEvent:Connect(function()
canmine.Value = false
cd = true
print("wut de hell")
end)
if pickaxe.Parent:IsA("Backpack") then -- checks if tool is in backpack
player = pickaxe.Parent.Parent -- since backpack is always a child of a player, we get player from the backpack's parent
end
local function CharAdded(char)
character = char
humanoid = character:WaitForChild("Humanoid")
animtrack = humanoid:LoadAnimation(anim)
end
if player.Character then CharAdded(player.Character) end
player.CharacterAdded:Connect(CharAdded)
pickaxe.Activated:Connect(function()
if canmine.Value == true and animplaying == false then
dc2:FireServer()
print("activated")
isactive = true
animtrack:Play()
canmine.Value = false
animplaying = true
wait(3)
animplaying = false
pickaxehitbox.Touched:Connect(function(hit)
if ismining == false then
if hit.Name == "Hitbox" or hit.Parent == "Rock" then
print("mining")
sb:FireServer()
sc:FireServer()
mining:FireServer()
ismining = true
local particle = hit:WaitForChild("ParticleEmitter")
particle.Enabled = true
if ismining == true then
wait(1)
ismining = false
particle.Enabled = false
end
end
end
task.wait(1)
if cd == false then
print("no cd")
canmine.Value = true
end
end)
end
end)
if isactive == true then
wait(1)
isactive = false
end
but it still wont work