CitizenRosterReview.cs
using Sandbox;
namespace PaintballBaddies;
public sealed class CitizenRosterReview : Component
{
    [Property] public string CaptureId { get; set; }="";
    private CitizenPlayerPresentation presentation;
    private RosterSelection roster;
    private float elapsed;
    private int index=-1;
    private bool waiting;
    private bool previousCitizen;
    protected override void OnUpdate()
    {
        elapsed+=Time.Delta;
        if(!presentation.IsValid())
        {
            if(elapsed<.3f)return;
            if(!roster.IsValid())
            {
                roster=Scene.GetAllComponents<RosterSelection>().First();
                previousCitizen=roster.UseCitizenCharacters;
                roster.UseCitizenCharacters=true;
            }
            presentation=roster.Components.Get<CitizenPlayerPresentation>();
            if(!presentation.IsValid())return;
        }
        if(elapsed<.5f || index>=6)return;
        elapsed=0;
        if(!waiting)
        {
            index++;
            if(index>=6)return;
            roster.Select(index);waiting=true;
        }
        else
        {
            Log.Info("CITIZEN_ROSTER_REVIEW "+Json.Serialize(new {capture_id=CaptureId,index,
                selected=roster.Selected,expected=CitizenRosterAssets.Suit(index),actual=presentation.EquippedSuit,
                helmet=presentation.EquippedHelmet,expected_helmet=CitizenRosterAssets.Helmet(index),ready=presentation.IsReady}));
            waiting=false;
        }
    }
    protected override void OnDestroy()
    {
        if(roster.IsValid()) { roster.UseCitizenCharacters=previousCitizen;roster.Select(0); }
    }
}