void() player_frag1 = [$shotatt1, player_frag2] {self.frame=70;};
is functionally equivelent to:
void() player_frag1 =
{
self.frame = $shotatt1;
self.think = player_frag2;
self.nextthink = time + 0.1;
self.frame=70;
};
(except it uses 3 vm instructions instead of 9)
Notice that you're setting frame twice.
If you put in self.weaponframe=4; instead, you'll animate the viewmodel too, as well as the player model.