--by pavetr.top/ds local reloadStartTime = 0 local isReloading = false local reloadCircleRadius = 50 local player = LocalPlayer() local firstLine = Color(0, 0, 0, 100) local secondLine = Color(255, 245, 78, 255) local thirdLine = Color(0, 0, 0, 100) local function DrawProgressCircle(radius, lineWidth, progressAngle, color) local screenCenterX = ScrW() / 2 local screenCenterY = ScrH() / 2 surface.SetDrawColor(color) for angle = 0, progressAngle, 1 do local startX = screenCenterX + math.cos(math.rad(angle)) * (radius + lineWidth) local startY = screenCenterY + math.sin(math.rad(angle)) * (radius + lineWidth) local endX = screenCenterX + math.cos(math.rad(angle + 1)) * (radius + lineWidth) local endY = screenCenterY + math.sin(math.rad(angle + 1)) * (radius + lineWidth) surface.DrawLine(startX, startY, endX, endY) end end hook.Add("PlayerBindPress", "ReloadStart", function(player, bind, pressed) if bind == "+reload" and pressed and not isReloading then reloadStartTime = CurTime() isReloading = true end end) hook.Add("HUDPaint", "ReloadProgress", function() if player:Health() <= 0 then return end local viewModel = player:GetViewModel() if viewModel:IsValid() then local animationDuration = viewModel:SequenceDuration() local timeRemaining = animationDuration - (CurTime() - reloadStartTime) if timeRemaining > 0 then DrawProgressCircle(reloadCircleRadius , 1, timeRemaining / animationDuration * 360, firstLine) DrawProgressCircle(reloadCircleRadius, 0, timeRemaining / animationDuration * 360, secondLine) DrawProgressCircle(reloadCircleRadius, -1, timeRemaining / animationDuration * 360, thirdLine) else isReloading = false reloadStartTime = 0 end end end)