public void CompleteAchievement(int achievementId) { var achievement = _accessor.Static.Achievements[achievementId]; var value = _scorersLogic.GetScorer(achievement.ScorerId, 0); var maxValue = _formula.Calculate(achievement.Value); if (value < maxValue) { throw new Exception($"error update achievement. value = {value} maxValue = {maxValue}"); } _impacts.ExecuteImpact(achievement.Impact); foreach (var temp in achievement.Items) { _dropLogic.Drop(temp.Value); } _accessor.State.Achievements[achievementId].Complete = true; LogicLog.CompleteAchievement(achievementId); }