public void LevelUp(IUnitOfWork unitOfWork, IStatApplier statApplier, Player player, AssignmentType completedAssignment) { var currentLevel = player.Level; var nextLevel = unitOfWork.LevelRepository.Get((level => level.LevelNumber == currentLevel + 1), null, "").FirstOrDefault(); // TODO: Make several games on one API ? Check if right game fds if (nextLevel == null) return; // Max level reached // Check if experience reached if (player.Experience < nextLevel.ExperienceReq) return; // Not enough experience // Check general stats foreach (var generalStatAmountReq in nextLevel.GeneralStatsReq) { var playerGeneralStatAmount = player.GeneralStats.FirstOrDefault( u => u.StatEffect.AffectedStatBonus == generalStatAmountReq.StatEffect.AffectedStatBonus); if (playerGeneralStatAmount == null) throw new Exception("Database error, player has no such general stat entry"); var res = generalStatAmountReq.CompareTo(playerGeneralStatAmount); if (res == 1) return; // No level up } // Level up reached! DING DING DING player.Level += 1; player.JobPoints += nextLevel.JobPointReward; statApplier.ApplyGeneralStats(player, nextLevel.GeneralStatRewards); }
public List<Achievement> CompleteTask(Player player, AssignmentType assignmentTypeCompleted) { // Apply general stats - bonuses from here included henceforth _statApplier.ApplyGeneralStats(player, assignmentTypeCompleted.GeneralStatRewards); // Apply experience TODO: ExperienceApplier, JobPointApplier - Combine to StatApplier _statApplier.ApplyExperience(player, assignmentTypeCompleted.ExpReward); // Check level up _levelUpChecker.LevelUp(_unitOfWork, _statApplier, player, assignmentTypeCompleted); // Levels up, assigns rewards if achieved // Add assignment to assignment list player.AssignmentsCompleted.Add(new Assignment{Type = assignmentTypeCompleted}); // Check for achievements TODO: (Return achievementGet ??? fds) var achievements = _achievementChecker.CheckAchievements(_statApplier, _unitOfWork, player); return achievements; }