If you do create a special onFire function make sure you create timeouts using getSimTime() (or something like that) and then subtract the time based on how long you want it to be. (Prevents people from doing rapid fire switching)
Example:
function ShotgunImage::onFire(%image, %obj, %slot)
{
if(getSimTime() - %obj.lastFire[%image] < 3000) //less than 3 seconds
return; //Prevent them from firing
%obj.lastFire[%image] = getSimTime();
//Spreadshell code
}