Code found in ShadowsfeaR's Halo 3: Silenced SMGpackage HaloSMGMelee
{
function Armor::onTrigger(%this, %player, %slot, %val)
{
if(%player.getMountedImage(0) $= HaloSMGImage.getID() && %slot $= 4 && %val)
{
%projectile = HaloMeleeProjectile;
%vector = %player.getMuzzleVector(0);
%objectVelocity = %player.getVelocity();
%vector1 = VectorScale(%vector, %projectile.muzzleVelocity);
%vector2 = VectorScale(%objectVelocity, %projectile.velInheritFactor);
%velocity = VectorAdd(%vector1,%vector2);
%p = new Projectile()
{
dataBlock = %projectile;
initialVelocity = %velocity;
initialPosition = %player.getMuzzlePoint(0);
sourceObject = %player;
sourceSlot = 0;
client = %player.client;
};
serverPlay3D(HaloMeleeSound,%player.getPosition());
%player.playthread("3","Activate");
MissionCleanup.add(%p);
return %p;
}
Parent::onTrigger(%this, %player, %slot, %val);
}
};
ActivatePackage(HaloSMGMelee);
Code found in Amade/Pandan's G36C- has a delay so you can't just spit out 8 grenades in one second
package G36C
{
function Armor::onTrigger(%this, %player, %slot, %val)
{
if(%player.getMountedImage(0) $= G36CImage.getID() && %slot $= 4 && %val)
{
if(%player.lastGrenade !$= "" && getSimTime() - %player.lastGrenade < 30000)
{
return;
}
%projectile = GlrenadeProjectile;
%vector = %player.getMuzzleVector(0);
%objectVelocity = %player.getVelocity();
%vector1 = VectorScale(%vector, %projectile.muzzleVelocity);
%vector2 = VectorScale(%objectVelocity, %projectile.velInheritFactor);
%velocity = VectorAdd(%vector1,%vector2);
%p = new Projectile()
{
dataBlock = %projectile;
initialVelocity = %velocity;
initialPosition = %player.getMuzzlePoint(0);
sourceObject = %player;
sourceSlot = 0;
client = %player.client;
};
%player.lastGrenade = getSimTime();
serverPlay3D(rocketFireSound,%player.getPosition());
MissionCleanup.add(%p);
return %p;
}
Parent::onTrigger(%this, %player, %slot, %val);
}
};
ActivatePackage(G36C);
I think the TF2 flamethrower has code like these but more simple