RunPlayerMove() again.
With flags for secondary attack. There is no problem to run this function on human edict. Or in case that there is no sniper rifle but the zoom is still on just try to switch some weapons, like knife and then again pistol, this should work. For that try to use the FakeClientCommand() on the human edict. Other way is with client command, I believe that there is such function in the HL engine, in this way you can trigger command from the player console, like the bind for key 1("slot1"). Execute it in this order if slot1 is knife and slot2 is pistol - "slot1;wait;slot2" this should do the trick.