GameLogic/crowd/CrowdConfig.cs
using System.Collections.Generic;
using Sandbox;
[GameResource( "Crowd Ruleset Config", "crowd", "Table de configuration des réactions, scores et sons de la foule.", Icon = "theater_comedy" )]
public sealed class CrowdConfig : GameResource
{
[Property, Group( "Règles d'Anti-Spam (Répétition)" )]
[Description( "Taille de l'historique d'actions analysé pour détecter le spam." )]
public int RepetitionHistorySize { get; set; } = 8;
[Property, Group( "Règles d'Anti-Spam (Répétition)" )]
[Description( "Nombre d'occurrences identiques dans l'historique avant de déclencher la huée." )]
public int MaxRepetitionThreshold { get; set; } = 3;
[Property, Group( "Règles d'Anti-Spam (Répétition)" )]
public float RepetitionAuraPenalty { get; set; } = -8f;
[Property, Group( "Règles d'Anti-Spam (Répétition)" )]
public SoundEvent CrowdRepetitionBooSound { get; set; }
[Property, Group( "Actions de Combat" )]
public List<CrowdActionDefinition> Actions { get; set; } = new();
public CrowdActionDefinition GetDefinition( CrowdAction action )
{
for ( int i = 0; i < Actions.Count; i++ )
{
if ( Actions[i].Action == action )
return Actions[i];
}
return null;
}
}
public sealed class CrowdActionDefinition
{
[Property] public CrowdAction Action { get; set; }
[Property] public float AuraDelta { get; set; } = 5f;
[Property, Group( "Affichage Feed" )] public bool ShowInFeed { get; set; } = true;
[Property, Group( "Affichage Feed" )] public string Title { get; set; } = "ACTION";
[Property, Group( "Affichage Feed" )] public string ModifierText { get; set; } = "+";
[Property, Group( "Affichage Feed" )] public Color DisplayColor { get; set; } = Color.White;
[Property, Group( "Audio Foule" )]
[Description( "Son joué par la foule (hurlement de joie, stupeur, etc.)" )]
public SoundEvent CrowdSound { get; set; }
[Property, Group( "Répétition" )]
[Description( "Si vrai, cette action est prise en compte dans l'algorithme anti-spam." )]
public bool TrackForRepetition { get; set; } = true;
}