they state the amount of time into the framegroup, and default to 0 (which is an annoyance, I admit). You should typically set them to curtime - starttime. If you're doing it on a run animation, you can do self.frame1time += distancetraveled/distanceanimationappearstomovepersecond; to get the sequence to progress relative to the speed/direction of the player.
$frame stuff in qc is _just_ a glorified enum. Thus you want one entry per framegroup (.frame is precise only to framegroups, not to individual frames within framegroups).
The actual names are not seen by the engine, so their ordering and values is all that is important.
fteqcc allows c-style enums too if you feel those make more sense to you.
I'm unfamiliar with dp's .framegroup files. You need one $frame entry per valid self.frame value if its to be correct. looks to me like your shoot animation is split across multiple separate framegroups which may or may not pose a problem. the skeletal objects extension gives you a way to query an animation's total duration, which may be a more versatile alternative to having your attack frames all separate (I personally find it simpler to use frameXtime to advance an animation than to interpolate between multiple separate frames, but don't forget to tell the csqc if an animation restarted).
The way you implement it is entirely up to you.