Modern progress2 forks don't loop through all 1000 player slots. They use YSI's foreach to only iterate over connected players who have an active progress bar, saving CPU.
The magic happens via PlayerTextDrawTextSize . If you want a 100px wide bar at 0% progress, the size is 0.0 . At 100%, it is 100.0 . samp progress2
new PlayerBar:healthBar[MAX_PLAYERS];