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.
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();
}
}