Multiple firing modes on a weapon

From Oldunreal-Wiki
Jump to navigation Jump to search

Multiple firing modes on a weapon

Right, I saw this requested on the forum, and being the good guy I am (He lied), I thought I'd help. Subclass the stinger and paste this code in. Hopefully, right-click should change between the projectiles and left-click will shoot them. Of course, if you are using a different weapon, you may need to make slight code adjustments for different animations and such.

var int firingmode; // What firing mode we are in
var float firespeed; // How fast we shoot

function PlayFiring()
{
 local Vector Start;

 Start = Owner.Location + CalcDrawOffset();

 switch (firingmode)
 {
  case(1):
    projectileclass=Class'Dammo2'; // Dispersion ammo level 2
    firespeed=0.15; // Pause time between each shot. A larger firespeed means a larger pause.
    AmmoType.ammoamount-=1;
    break;
  case(2):
    projectileclass=Class'dammo3'; // Dispersion ammo level 3
    firespeed=0.2; // Pause time between each shot. A larger firespeed means a larger pause.
    AmmoType.ammoamount-=1;
    break;
  case(3):
    projectileclass=Class'dammo4'; // Dispersion ammo level 4
    firespeed=0.25; // Pause time between each shot. A larger firespeed means a larger pause.
    AmmoType.ammoamount-=1;
    break;
  case(4):
	projectileclass=Class'dammo5'; // Dispersion ammo level 5
	firespeed=0.3; // Pause time between each shot. A larger firespeed means a larger pause.
	AmmoType.ammoamount-=1;
	break;
	default: //breaks to the default firing mode
    projectileclass=Class'Dispersionammo'; // Dispersion ammo level 1
    firespeed=0.1; // Pause time between each shot. A larger firespeed means a larger pause.
    firingmode=0;
    //AmmoType.ammoamount-=0;
    break;
 }

 if (Ammotype.Ammoamount<=0)Ammotype.Ammoamount=0;
}


function PlayAltFiring() // When we right click...
{
 local pawn p;
 p=PlayerPawn(Owner);
 
 firingmode++; // ...advance the firing mode
 AmmoType.Ammoamount++;
 
 switch (firingmode)
 {
  case(1):
    p.clientmessage("Mode Set: Dammo2"); // Tells the player what projectile mode we are in
    break;
  case(2):
    p.clientmessage("Mode Set: Dammo3"); // Tells the player what projectile mode we are in
    break;
  case(3):
    p.clientmessage("Mode Set: Dammo4"); // Tells the player what projectile mode we are in
    break;
  case(4):
    p.clientmessage("Mode Set: Dammo5!"); // Tells the player what projectile mode we are in
    break;
  default:
    p.clientmessage("Mode Set: DispersionAmmo"); // Tells the player what projectile mode we are in
    firingmode=0;
    break;
 }
}






state AltFiring
{
	function Projectile ProjectileFire(class<projectile> ProjClass, float ProjSpeed, bool bWarn)
	{// Alt-Fire Does Nothing
	}

Begin:
	FinishAnim();	
	PlayAnim('Still'); // Plays a simple still animation
	Sleep(0.4);
	Finish();	
}


state NormalFire
{

	function Tick( float DeltaTime )
	{
	}

	function EndState()
	{
	}

Begin:
	Sleep(firespeed); //The weapon will pause for a set amount of time after each shot. More powerful projectiles tend to have a larger firespeed number, as to avoid an unbalanced weapon. The exact opposite is true for weaker projectiles. the firespeed number is decreased.
	SetLocation(Owner.Location);	
	Finish();
}