using Vanguard.Rules.Engine; namespace Vanguard.Rules.Replay; /// FNV-1a по тексту событий. Не криптография, а быстрая проверка расхождений. public static class EventHasher { private const ulong Offset = 14695981039346656037UL; private const ulong Prime = 1099511628211UL; public static string Hash(IEnumerable events) { unchecked { var hash = Offset; foreach (var gameEvent in events) { foreach (var ch in gameEvent.ToString() ?? string.Empty) { hash ^= ch; hash *= Prime; } hash ^= '\n'; hash *= Prime; } return hash.ToString("x16"); } } }