I used:
Every x seconds, ammo != 0, reloadtime = 0 | fire bullet, subtract 1 from ammo
Else if ammo = 0 | increment reloadtime by 60*dt
When reloadtime > x | set ammo to clipsize, reloadtime to 0
This was for player controlled firing though, where it is possible to stop in the middle of the clip. Using wait actions in a function would indeed be the simplest.