AchievementWatcher.cs
public class AchievementWatcher : GameObjectSystem, ICheatEvents, IBulletEnemyEvents, IGameOverEvents, IPlayerReplicatorEvents
{
public bool Enabled { get; set; } = true;
public AchievementWatcher(Scene scene) : base( scene )
{ }
void ICheatEvents.CheatsEnabled()
{
Enabled = false;
Log.Warning( "Turning off achievements and stat tracking" );
}
void IBulletEnemyEvents.OnDeath( GameObject enemy )
{
if ( !Enabled ) return;
// increase statistics
Sandbox.Services.Stats.Increment( "bullet-enemies-killed", 1 );
}
void IGameOverEvents.OnGameOver( int wavesSurvived )
{
if ( !Enabled ) return;
// report statistics
Sandbox.Services.Stats.SetValue( "waves-survived", wavesSurvived );
}
void IPlayerReplicatorEvents.PlayersReplicated( int newNumberOfPlayers )
{
if ( !Enabled ) return;
if ( newNumberOfPlayers == 2 ) Sandbox.Services.Achievements.Unlock( "replicate" );
if ( newNumberOfPlayers == 4 ) Sandbox.Services.Achievements.Unlock( "replicate_4" );
}
}