use dowatch in a loop. Have it dowatch(target) at a certain distance, or some other condition. Ya, theres also the invisible targets mentioned by Macguba. Dowatch the H .
The SU25 weapons and the ammo fired from them is as follows:
Missles-----CH29TLauncher--Fires->CH29T
rockets-----Rocket57x64--Fires->rocket57
Gun-----Machinegun30A10--Fires->bullet30
Use this on a player controled vehicle or whatever in its INIT to get the name of the weapon and what it fires.....
this addeventhandler ["fired",{hint format ["Name of shot is: %1,%2", (_this select 2),(_this select 4)]}].........
Then after getting names, use ....nameofvehicle fire ["nameofgun","nameofammo"]
This is the method i use. Never failed