Added more loose matching options, fixed some race issues

This commit is contained in:
cake
2026-01-03 15:59:10 +01:00
parent e41a7149c5
commit 02d091eefa
5 changed files with 122 additions and 134 deletions

View File

@@ -470,6 +470,8 @@ public class PlayerDataFactory
CancellationToken ct)
{
var mode = _configService.Current.AnimationValidationMode;
var allowBasedShift = _configService.Current.AnimationAllowOneBasedShift;
var allownNightIndex = _configService.Current.AnimationAllowNeighborIndexTolerance;
if (mode == AnimationValidationMode.Unsafe)
return;
@@ -528,12 +530,12 @@ public class PlayerDataFactory
var hash = g.Key;
Dictionary<string, List<ushort>>? papSkeletonIndices = null;
Dictionary<string, List<ushort>>? papIndices = null;
await _papParseLimiter.WaitAsync(ct).ConfigureAwait(false);
try
{
papSkeletonIndices = await Task.Run(() => _modelAnalyzer.GetBoneIndicesFromPap(hash), ct)
papIndices = await Task.Run(() => _modelAnalyzer.GetBoneIndicesFromPap(hash), ct)
.ConfigureAwait(false);
}
finally
@@ -541,15 +543,15 @@ public class PlayerDataFactory
_papParseLimiter.Release();
}
if (papSkeletonIndices == null || papSkeletonIndices.Count == 0)
if (papIndices == null || papIndices.Count == 0)
continue;
if (papSkeletonIndices.All(k => k.Value.DefaultIfEmpty().Max() <= 105))
if (papIndices.All(k => k.Value.DefaultIfEmpty().Max() <= 105))
continue;
if (_logger.IsEnabled(LogLevel.Debug))
{
var papBuckets = papSkeletonIndices
var papBuckets = papIndices
.Select(kvp => new
{
Raw = kvp.Key,
@@ -573,7 +575,7 @@ public class PlayerDataFactory
string.Join(" | ", papBuckets));
}
if (XivDataAnalyzer.IsPapCompatible(localBoneSets, papSkeletonIndices, mode, out var reason))
if (XivDataAnalyzer.IsPapCompatible(localBoneSets, papIndices, mode, allowBasedShift, allownNightIndex, out var reason))
continue;
noValidationFailed++;