The three virtues of a programmer: Laziness, Impatience, and Hubris. – Larry Wall

Legacy:ArrowSpawner

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search
Actor >> Effects (UT) >> ArrowSpawner

This subclass of the ArrowSpawner enables you to use a trigger to set it off. The original ArrowSpawner could be set off using a trigger but it would go on forever, the following script (scripted by Tarquin) gives you the ability to tell the ArrowSpawner how many arrows to shoot before it turns off. To use the CountingArrowSpawner, go in the actor class / Effects / ArrowSpawner and choose CountingArrowSpawner. Put it in your map at the desired location, then set up a Trigger so that the CountingArrowSpawner is activated when triggered. Then, right-click the CountingArrowSpawner, then click CountingArrowSpawner Properties, now, click the '+' beside CountingArrowSpawner and finally, input the number of arrows desired to be shot before deactivation, that's it.

Extending[edit]

For an arrow spawner which fires a set number of arrows then stops, use this script. See Create A Subclass for instructions.

The ArrowSpawner still goes on forever when activated with a trigger.
Will look into it tomorrow. →Tarquin
Fixed and tested. →Tarquin
//=============================================================================
// CountingArrowSpawner.
//=============================================================================
class CountingArrowSpawner extends ArrowSpawner;
 
var() int ArrowCount ;
var int ArrowsToFire ;
 
state Active
{
	Ignores Trigger, UnTrigger ;
	function Timer()
	{
		local Arrow a;
		//Instigator.ClientMessage( "ArrowCount =" @ ArrowsToFire );
 
		if ( ArrowsToFire > 0) {
			if ( ArrowsToFire == 1) {
				SetTimer(0.0, False);
 
				GoToState('');
			}
			a = Spawn(class'Arrow',, '', Location+Vector(Rotation)*20);			
			a.Speed = ArrowSpeed;
			ArrowsToFire--;
			SetTimer(RepeatDelay, True);
		}
		else {
			a = Spawn(class'Arrow',,, Location+Vector(Rotation)*20);
			a.Speed = ArrowSpeed;
			SetTimer(RepeatDelay, True);
		}
	}
 
Begin:
	ArrowsToFire = ArrowCount ;
	SetTimer(TriggerDelay, True);
}

Notes[edit]

The property ArrowsToShootAfterDeactivated no longer has any effect. Some jiggery-pokery with a PreBeginPlay would fix this; add it to ArrowCount, for example – but not terribly logical.