fix issue with duplicate key on top stats page
This commit is contained in:
parent
507688a175
commit
b27ae1517e
@ -117,7 +117,8 @@ namespace IW4MAdmin.Plugins.Stats.Helpers
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Expression<Func<EFClientRankingHistory, bool>> GetNewRankingFunc(int? clientId = null, long? serverId = null)
|
public Expression<Func<EFClientRankingHistory, bool>> GetNewRankingFunc(int? clientId = null,
|
||||||
|
long? serverId = null)
|
||||||
{
|
{
|
||||||
return (ranking) => ranking.ServerId == serverId
|
return (ranking) => ranking.ServerId == serverId
|
||||||
&& ranking.Client.Level != Data.Models.Client.EFClient.Permission.Banned
|
&& ranking.Client.Level != Data.Models.Client.EFClient.Permission.Banned
|
||||||
@ -181,8 +182,17 @@ namespace IW4MAdmin.Plugins.Stats.Helpers
|
|||||||
})
|
})
|
||||||
.Take(60)
|
.Take(60)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
|
if (rankingsDict.ContainsKey(clientId))
|
||||||
|
{
|
||||||
|
rankingsDict[clientId] = rankingsDict[clientId].Concat(eachRank).Distinct()
|
||||||
|
.OrderByDescending(ranking => ranking.CreatedDateTime).ToList();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
rankingsDict.Add(clientId, eachRank);
|
rankingsDict.Add(clientId, eachRank);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var statsInfo = await context.Set<EFClientStatistics>()
|
var statsInfo = await context.Set<EFClientStatistics>()
|
||||||
.Where(stat => clientIdsList.Contains(stat.ClientId))
|
.Where(stat => clientIdsList.Contains(stat.ClientId))
|
||||||
@ -690,11 +700,11 @@ namespace IW4MAdmin.Plugins.Stats.Helpers
|
|||||||
TimeSinceLastAttack = long.Parse(lastAttackTime),
|
TimeSinceLastAttack = long.Parse(lastAttackTime),
|
||||||
GameName = (int)attacker.CurrentServer.GameName
|
GameName = (int)attacker.CurrentServer.GameName
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_log.LogError(ex, "Could not parse script hit data. Damage={Damage}, TimeOffset={Offset}, TimeSinceLastAttack={LastAttackTime}",
|
_log.LogError(ex,
|
||||||
|
"Could not parse script hit data. Damage={Damage}, TimeOffset={Offset}, TimeSinceLastAttack={LastAttackTime}",
|
||||||
damage, offset, lastAttackTime);
|
damage, offset, lastAttackTime);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -1282,7 +1292,8 @@ namespace IW4MAdmin.Plugins.Stats.Helpers
|
|||||||
|
|
||||||
if (performances.Any(performance => performance.TimePlayed >= minPlayTime))
|
if (performances.Any(performance => performance.TimePlayed >= minPlayTime))
|
||||||
{
|
{
|
||||||
var aggregateZScore = performances.WeightValueByPlaytime(nameof(EFClientStatistics.ZScore), minPlayTime);
|
var aggregateZScore =
|
||||||
|
performances.WeightValueByPlaytime(nameof(EFClientStatistics.ZScore), minPlayTime);
|
||||||
|
|
||||||
int? aggregateRanking = await context.Set<EFClientStatistics>()
|
int? aggregateRanking = await context.Set<EFClientStatistics>()
|
||||||
.Where(stat => stat.ClientId != clientId)
|
.Where(stat => stat.ClientId != clientId)
|
||||||
@ -1476,7 +1487,10 @@ namespace IW4MAdmin.Plugins.Stats.Helpers
|
|||||||
if (double.IsNaN(clientStats.SPM) || double.IsNaN(clientStats.Skill))
|
if (double.IsNaN(clientStats.SPM) || double.IsNaN(clientStats.Skill))
|
||||||
{
|
{
|
||||||
_log.LogWarning("clientStats SPM/Skill NaN {@killInfo}",
|
_log.LogWarning("clientStats SPM/Skill NaN {@killInfo}",
|
||||||
new {killSPM = killSpm, KDRWeight, totalPlayTime, SPMAgainstPlayWeight, clientStats, scoreDifference});
|
new
|
||||||
|
{
|
||||||
|
killSPM = killSpm, KDRWeight, totalPlayTime, SPMAgainstPlayWeight, clientStats, scoreDifference
|
||||||
|
});
|
||||||
clientStats.SPM = 0;
|
clientStats.SPM = 0;
|
||||||
clientStats.Skill = 0;
|
clientStats.Skill = 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user