stageEvents/StageEventWerewolf.cs

A game stage event named StageEventWerewolf. It starts a short timed event that plays a sound and chat message, periodically spawns Runner enemies near random players while the game host updates, and removes itself after its lifetime.

Networking
using System;
using System.Reflection;
using Sandbox;

public class StageEventWerewolf : StageEvent
{
	private TimeSince _timeSinceWerewolf;

	public override void Start( int randSeed )
	{
		base.Start( randSeed );

		Manager.Instance.PlaySfxUIRpc( "wolf_event", pitch: Game.Random.Float( 0.975f, 1.025f ), volume: 0.75f );

		Manager.Instance.Chat.AddLocalChatMessage( "It's a full moon...", from: "" );

		var random = new Random( randSeed );

		Lifetime = 5f + (float)random.Next( 0, Manager.Instance.Difficulty == 2 ? 7 : 4 );

		_timeSinceWerewolf = 0f;
	}

	public override void Update()
	{
		base.Update();

		if( TimeSinceStart > Lifetime )
		{
			Manager.Instance.RemoveEvent( EventType );
		}

		if ( !Networking.IsHost )
			return;

		if ( _timeSinceWerewolf > 1f )
		{
			var player = Manager.Instance.Players[Game.Random.Int( 0, Manager.Instance.Players.Count - 1 )];
			var runnerPos = player.Position2D + Utils.GetRandomVector() * Game.Random.Float( 100f, 400f );
			Manager.Instance.SpawnEnemy( EnemyType.Runner, runnerPos, rotAngle: -90f + Game.Random.Float( -30f, 30f ) );

			_timeSinceWerewolf = 0f;
		}
	}

	public override void Remove()
	{
		base.Remove();

	}
}