1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-06 09:42:55 +08:00

Fix imported replays having excess statistics

This commit is contained in:
Dean Herbert 2019-01-03 13:57:56 +09:00
parent 975fc47a2b
commit aec3753863
6 changed files with 25 additions and 17 deletions

View File

@ -43,6 +43,6 @@ namespace osu.Game.Rulesets.Catch.Scoring
Health.Value += Math.Max(result.Judgement.HealthIncreaseFor(result) - hpDrainRate, 0) * harshness; Health.Value += Math.Max(result.Judgement.HealthIncreaseFor(result) - hpDrainRate, 0) * harshness;
} }
protected override HitWindows CreateHitWindows() => new CatchHitWindows(); public override HitWindows CreateHitWindows() => new CatchHitWindows();
} }
} }

View File

@ -159,6 +159,6 @@ namespace osu.Game.Rulesets.Mania.Scoring
} }
} }
protected override HitWindows CreateHitWindows() => new ManiaHitWindows(); public override HitWindows CreateHitWindows() => new ManiaHitWindows();
} }
} }

View File

@ -74,6 +74,6 @@ namespace osu.Game.Rulesets.Osu.Scoring
protected override JudgementResult CreateResult(Judgement judgement) => new OsuJudgementResult(judgement); protected override JudgementResult CreateResult(Judgement judgement) => new OsuJudgementResult(judgement);
protected override HitWindows CreateHitWindows() => new OsuHitWindows(); public override HitWindows CreateHitWindows() => new OsuHitWindows();
} }
} }

View File

@ -67,6 +67,6 @@ namespace osu.Game.Rulesets.Taiko.Scoring
Health.Value = 0; Health.Value = 0;
} }
protected override HitWindows CreateHitWindows() => new TaikoHitWindows(); public override HitWindows CreateHitWindows() => new TaikoHitWindows();
} }
} }

View File

@ -63,7 +63,7 @@ namespace osu.Game.Rulesets.Scoring
/// <summary> /// <summary>
/// Create a <see cref="HitWindows"/> for this processor. /// Create a <see cref="HitWindows"/> for this processor.
/// </summary> /// </summary>
protected virtual HitWindows CreateHitWindows() => new HitWindows(); public virtual HitWindows CreateHitWindows() => new HitWindows();
/// <summary> /// <summary>
/// The current rank. /// The current rank.

View File

@ -57,12 +57,20 @@ namespace osu.Game.Scoring.Legacy
var countKatu = (int)sr.ReadUInt16(); var countKatu = (int)sr.ReadUInt16();
var countMiss = (int)sr.ReadUInt16(); var countMiss = (int)sr.ReadUInt16();
score.ScoreInfo.Statistics[HitResult.Great] = count300; var windows = currentRuleset.CreateRulesetContainerWith(workingBeatmap).CreateScoreProcessor().CreateHitWindows();
score.ScoreInfo.Statistics[HitResult.Good] = count100;
score.ScoreInfo.Statistics[HitResult.Meh] = count50; if (windows.IsHitResultAllowed(HitResult.Great))
score.ScoreInfo.Statistics[HitResult.Perfect] = countGeki; score.ScoreInfo.Statistics[HitResult.Great] = count300;
score.ScoreInfo.Statistics[HitResult.Ok] = countKatu; if (windows.IsHitResultAllowed(HitResult.Good))
score.ScoreInfo.Statistics[HitResult.Miss] = countMiss; score.ScoreInfo.Statistics[HitResult.Good] = count100;
if (windows.IsHitResultAllowed(HitResult.Meh))
score.ScoreInfo.Statistics[HitResult.Meh] = count50;
if (windows.IsHitResultAllowed(HitResult.Perfect))
score.ScoreInfo.Statistics[HitResult.Perfect] = countGeki;
if (windows.IsHitResultAllowed(HitResult.Ok))
score.ScoreInfo.Statistics[HitResult.Ok] = countKatu;
if (windows.IsHitResultAllowed(HitResult.Miss))
score.ScoreInfo.Statistics[HitResult.Miss] = countMiss;
score.ScoreInfo.TotalScore = sr.ReadInt32(); score.ScoreInfo.TotalScore = sr.ReadInt32();
score.ScoreInfo.MaxCombo = sr.ReadUInt16(); score.ScoreInfo.MaxCombo = sr.ReadUInt16();
@ -116,12 +124,12 @@ namespace osu.Game.Scoring.Legacy
private void calculateAccuracy(ScoreInfo score) private void calculateAccuracy(ScoreInfo score)
{ {
int countMiss = score.Statistics[HitResult.Miss]; score.Statistics.TryGetValue(HitResult.Miss, out int countMiss);
int count50 = score.Statistics[HitResult.Meh]; score.Statistics.TryGetValue(HitResult.Meh, out int count50);
int count100 = score.Statistics[HitResult.Good]; score.Statistics.TryGetValue(HitResult.Good, out int count100);
int count300 = score.Statistics[HitResult.Great]; score.Statistics.TryGetValue(HitResult.Great, out int count300);
int countGeki = score.Statistics[HitResult.Perfect]; score.Statistics.TryGetValue(HitResult.Perfect, out int countGeki);
int countKatu = score.Statistics[HitResult.Ok]; score.Statistics.TryGetValue(HitResult.Ok, out int countKatu);
switch (score.Ruleset.ID) switch (score.Ruleset.ID)
{ {