Need Help with TTT Spriting / Stamina Bar

Found a script for sprinting/stamina bar here: http://forum.facepunch.com/showthread.php?t=1124545

Have added together the top part and the bottom part, but removed anything relating to jumping.
The bar is there and is works fine depleting/regenerating. However when the bar is empty nothing changes, you can still sprint.

Anyone have any idea how to fix this? I dont know any lua myself unfortunately. Also any help with making the sprint bar deplete faster would be great as well.
It seems to take a very long time to go all the way down.

Code for lua/autorun/stamina.lua:


if CLIENT then
    if not FStaminaToggled then
        function FStamina_Draw()
            if LocalPlayer():GetNWInt( "FStamina" ) then
                if LocalPlayer():Alive() then
                    local Fx = ( ScrH()/23.272727272727272727272727272727 )
                    local Fy = ( ScrH()/1.0385395537525354969574036511156 )
                    local Fx = ( ScrW()/6.7368421052631578947368421052632 )
                    local Fy = ( ScrH()/146.28571428571428571428571428571 )
                    draw.RoundedBox( 4, Fx, Fy, Fx, Fy, Color( 90, 90, 90, 255 ) )
                    if LocalPlayer():GetNWInt( "FStamina" ) > 1 then
                        draw.RoundedBox( 4, Fx, Fy, Fx*( LocalPlayer():GetNWInt( "FStamina" )/100 ), Fy, Color( 255, 242, 0, 255 ) )
                    end
                end
            end
        end
        hook.Add( "HUDPaint", "FStamina_Draw", FStamina_Draw )
    end
end
 
if SERVER then
    if not FStaminaToggled then
        function FStamina_Spawn( ply )
            ply:SetNWInt( "FStamina", 100 )
        end
        hook.Add( "PlayerSpawn", "FStamina_Spawn", FStamina_Spawn )
 
        function FStamina_MainThink()
            for k, ply in pairs( player.GetAll() ) do
                if ply:GetNWInt( "FStamina" ) < 0 then ply:SetNWInt( "FStamina", 0 ) end
                if ply:GetNWInt( "FStamina" ) > 100 then ply:SetNWInt( "FStamina", 100 ) end
 
                if ply.LastHealth and ply.LastHealth > ply:Health() then
                    local damage = ( ply.LastHealth - ply:Health() )*2
                    ply.LastHealth = ply:Health()
                    ply:SetNWInt( "FStamina", ply:GetNWInt( "FStamina" ) - damage )
                elseif not ply.LastHealth then
                    ply.LastHealth = ply:Health()
                end
 
                if ply:GetMoveType() ~= MOVETYPE_NOCLIP then
                    if ( ply:KeyDown( IN_SPEED ) or ply:KeyPressed( IN_SPEED ) ) and ply:GetNWInt( "FStamina" ) > 0 then
                        ply:SetNWInt( "FStamina", ply:GetNWInt( "FStamina" )-( ( ply:GetRunSpeed()/12000 ) ) )
                        ply.LastFStamina = CurTime() + 3
 
 
                        if ply:WaterLevel() == 3 then
                            ply:SetNWInt( "FStamina", ply:GetNWInt( "FStamina" )-( ( ( ply:GetRunSpeed()/12000 )*1.6 ) ) )
                        end
 
               
 
                        if ply:WaterLevel() == 3 then
                            ply:SetNWInt( "FStamina", ply:GetNWInt( "FStamina" )-( ( ( ply:GetRunSpeed()/12000 )*1.6 ) ) )
                        end
 
                    elseif ( ply:KeyDown( IN_FORWARD ) or ply:KeyDown( IN_BACK ) or ply:KeyDown( IN_MOVELEFT ) or ply:KeyDown( IN_MOVERIGHT ) ) and ply:GetNWInt( "MStamina" ) > 0 then
                        if ply:GetMoveType() == MOVETYPE_LADDER or ply:WaterLevel() == 1 then
                            ply:SetNWInt( "FStamina", ply:GetNWInt( "FStamina" )-( ( ( ply:GetRunSpeed()/12000 )*1.2 ) ) )
                        elseif ply:WaterLevel() == 3 then
                            ply:SetNWInt( "FStamina", ply:GetNWInt( "FStamina" )-( ( ( ply:GetRunSpeed()/12000 )*1.6 ) ) )
                        end
 
                    elseif ply.LastMStamina and ply.LastMStamina < CurTime() then
                        if ply:IsOnGround() and ply:WaterLevel() == 0 then
                            ply:SetNWInt( "FStamina", ply:GetNWInt( "MStamina" )+2 )
                        elseif ply:WaterLevel() == 1 then
                            ply:SetNWInt( "FStamina", ply:GetNWInt( "MStamina" )+3 )
                        end
 
                        ply:SetRunSpeed( ply.FRunSPeed )
                        ply.FRunSPeed = nil

 
                    elseif ply:GetNWInt( "FStamina" ) <= 0 and ( ply:GetRunSpeed() > 0  ) then
                        ply.FRunSpeed = ply:GetRunSpeed()
                        ply:SetWalkSpeed( 250 )
                        ply:SetRunSpeed( ply:GetWalkSpeed() )
                    end
 
                    if ply:KeyDown( IN_SPEED ) and ply:GetNWInt( "FStamina" ) <= 0 then
                        ply:SetRunSpeed( ply:GetWalkSpeed() )
                    end
                end
            end
        end
        hook.Add( "Think", "FStamina_MainThink", FStamina_MainThink )
    end
end
 
function FStamina_Toggle()
    if FStaminaToggled then
        FStaminaToggled = false
    else
        FStaminaToggled = true
    end
end
concommand.Add( "FanStamina_toggle", FStamina_Toggle )

function FStamina_Regen()
	for k, v in pairs(player.GetAll()) do
		if (v:GetMoveType() ~= MOVETYPE_NOCLIP) and (!v:KeyDown(IN_SPEED))  and (!v:KeyDown(IN_FORWARD)) and (!v:KeyDown(IN_BACK)) and (!v:KeyDown(IN_MOVELEFT)) and (!v:KeyDown(IN_MOVERIGHT)) then
			local Stam = v:GetNWInt("FStamina")
			if v:IsOnGround() and v:WaterLevel() == 0 then
				v:SetNWInt( "FStamina", math.Clamp(Stam+2, 0, 100))
			elseif v:WaterLevel() == 1 then
				v:SetNWInt( "FStamina", math.Clamp(Stam+3, 0, 100))
			end
		end
	end
end
timer.Create("FStamina_Regen", 0.5, 0, FStamina_Regen)

Thanks for you help in advance.

first, excuse me for my english due it is not my native language.
second, I know nothing of this development language, but I do about others.

elseif ply:GetNWInt( “FStamina” ) <= 0 and ( ply:GetRunSpeed() > 0 ) then
ply.FRunSpeed = ply:GetRunSpeed()
ply:SetWalkSpeed( 250 )
ply:SetRunSpeed( ply:GetWalkSpeed() )
end

                if ply:KeyDown( IN_SPEED ) and ply:GetNWInt( "FStamina" ) &lt;= 0 then
                    ply:SetRunSpeed( ply:GetWalkSpeed() )
                end

IN_SPEED meaning what? if it’s about sprinting, then you have a loop.

This should be a separated event, in my opinion, where you restore the player to an original movement

This type of coding… well, should go well in state events. where you pass from one event (nothing) to another (walking) to another (sprinting) and backwards with a corresponding key/action for each event.

best of lucks!

Unfortunately, I have no programming knowledge at all so I dont know how to edit any of the code.
But thanks for your reply, it may very well help if a lua coder comes along and gives it a read.

Bump. I’m sure theres a few people out there that would love a solution as much as myself.

It’s not difficult, you should know how to do some basic coding if you’re hosting a server.

Enable sprint, use messages to relay use of sprint and calculate accordingly at the servers end, reset speeds when sprinting/not sprinting. It will take a few changes to the setting of speed as TTT will reset it all the time.

Top bar, tada.