// Copyright (c) 2026 Reignance Studios. MIT License, see LICENSE. #pragma once #include "CoreMinimal.h" enum class ERSAuditSeverity : uint8 { Info, Warning, Error }; /** One problem found by one check. */ struct RSNETAUDIT_API FRSAuditFinding { /** Stable id, e.g. GA-03. Listed in the README. */ FString CheckId; ERSAuditSeverity Severity = ERSAuditSeverity::Info; /** Class or asset path the finding is about. */ FString Subject; FString Message; FString Fix; /** Tutorial slug on reignancestudios.com that explains the fix. */ FString Tutorial; }; struct RSNETAUDIT_API FRSAuditOptions { /** Also scan engine and marketplace classes. Off by default: you cannot fix those. */ bool bIncludeEngineClasses = false; /** PlayerStates that hold an ASC below this rate get a warning. Lyra uses 100. */ float MinPlayerStateNetUpdateFrequency = 30.f; /** Empty = /Saved/RSNetAudit. */ FString OutputDir; }; struct RSNETAUDIT_API FRSAuditResult { TArray Findings; int32 AbilitiesScanned = 0; int32 AbilityBlueprintsScanned = 0; int32 PlayerStatesScanned = 0; int32 AttributeSetsScanned = 0; FString MarkdownPath; FString HtmlPath; int32 Count(ERSAuditSeverity Severity) const; }; /** * Runs every check and writes the report. Editor only: it loads Blueprint * classes and reads their graphs. Safe to run from the commandlet, the * Tools menu or the RSNetAudit.Run console command. */ class RSNETAUDIT_API FRSNetAuditRunner { public: static FRSAuditResult Run(const FRSAuditOptions& Options); };