From e29e5bae19bfd84da847179a51ec4cbb259401f8 Mon Sep 17 00:00:00 2001 From: ElzaCS Date: Sun, 6 Feb 2022 14:17:18 +0530 Subject: [PATCH 1/3] Modify formula in glicko rating --- .../codecharacter/server/util/Glicko/RatingCalculator.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/delta/codecharacter/server/util/Glicko/RatingCalculator.java b/src/main/java/delta/codecharacter/server/util/Glicko/RatingCalculator.java index a05237ec..e1432575 100644 --- a/src/main/java/delta/codecharacter/server/util/Glicko/RatingCalculator.java +++ b/src/main/java/delta/codecharacter/server/util/Glicko/RatingCalculator.java @@ -10,7 +10,7 @@ public class RatingCalculator { // Constants private Double q = (Math.log(10) / 400); - private Double minRatingDeviation = 50d; + private Double minRatingDeviation = 30d; // Amount which decides how much a player's rating deviation changes every time period private Double c = 416d; @@ -25,10 +25,10 @@ public class RatingCalculator { * @return g(rd) */ private Double calculateGRD(Double rd) { - Double numerator = 1d + 3d * (q * q) * (rd * rd); + Double numerator = 3d * (q * q) * (rd * rd); Double pi = Math.PI; Double denominator = pi * pi; - return (1d / Math.sqrt(numerator / denominator)); + return (1d / Math.sqrt(1d + (numerator / denominator))); } /** From 537f76785de75520b1772837e1e68695ed72b46f Mon Sep 17 00:00:00 2001 From: ElzaCS Date: Fri, 11 Feb 2022 14:28:29 +0530 Subject: [PATCH 2/3] Preserve levelStatus of user on Oauth login --- .../delta/codecharacter/server/service/LevelStatusService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/delta/codecharacter/server/service/LevelStatusService.java b/src/main/java/delta/codecharacter/server/service/LevelStatusService.java index 8c93c787..10fc3e2c 100644 --- a/src/main/java/delta/codecharacter/server/service/LevelStatusService.java +++ b/src/main/java/delta/codecharacter/server/service/LevelStatusService.java @@ -33,6 +33,8 @@ public class LevelStatusService { */ @Transactional public void initializeLevelStatus(@NotNull Integer userId) { + if (levelStatusRepository.findByUserId(userId) != null) + return; List initialStars = Arrays.asList(0); LevelStatus levelStatus = LevelStatus.builder() .userId(userId) From 03ff48b3ef33ba8ade1ddf51db38e79503d47165 Mon Sep 17 00:00:00 2001 From: ElzaCS Date: Mon, 21 Feb 2022 14:02:27 +0530 Subject: [PATCH 3/3] Minor fixes in glicko rating and notifications --- .../codecharacter/server/service/MatchService.java | 13 +++++++++---- .../server/service/UserRatingService.java | 4 ++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/java/delta/codecharacter/server/service/MatchService.java b/src/main/java/delta/codecharacter/server/service/MatchService.java index aca12382..c1d996c5 100644 --- a/src/main/java/delta/codecharacter/server/service/MatchService.java +++ b/src/main/java/delta/codecharacter/server/service/MatchService.java @@ -417,6 +417,7 @@ public void updateMatch(UpdateMatchRequest updateMatchRequest) { return; } Verdict matchVerdict = deduceMatchVerdict(updateMatchRequest.getGameResults()); + SubmitStatus submitStatus = submitStatusRepository.findByUserId(match.getPlayerId1()); List gameLogsList = new ArrayList<>(); var gameResults = updateMatchRequest.getGameResults(); @@ -434,7 +435,11 @@ public void updateMatch(UpdateMatchRequest updateMatchRequest) { Integer playerId = match.getPlayerId1(); socketService.sendMessage(socketMatchResultDest + playerId, gameLogsList.toString()); String matchMessage = getMatchResultByVerdict(matchId, matchVerdict, playerId); - socketService.sendMessage(socketAlertMessageDest + playerId, matchMessage); + + // If this is a test match for submitting code, there is no need to display match result + if (!(submitStatus !=null && submitStatus.getIsPending())) + socketService.sendMessage(socketAlertMessageDest + playerId, matchMessage); + createMatchNotification(playerId, matchMessage); } @@ -497,10 +502,10 @@ public void updateMatch(UpdateMatchRequest updateMatchRequest) { if (starCount > 0) levelStatusService.updateLevelStatus(playerId, currentLevel, starCount); - SubmitStatus submitStatus = submitStatusRepository.findByUserId(playerId); - if (submitStatus !=null && submitStatus.getIsPending()) + if (submitStatus !=null && submitStatus.getIsPending()) { versionControlService.confirmLockedCode(playerId); - socketService.sendMessage(socketAlertMessageDest + match.getPlayerId1(), "Code Locked"); + socketService.sendMessage(socketAlertMessageDest + match.getPlayerId1(), "Code Locked"); + } } matchRepository.save(match); diff --git a/src/main/java/delta/codecharacter/server/service/UserRatingService.java b/src/main/java/delta/codecharacter/server/service/UserRatingService.java index 571f563d..eea31b6f 100644 --- a/src/main/java/delta/codecharacter/server/service/UserRatingService.java +++ b/src/main/java/delta/codecharacter/server/service/UserRatingService.java @@ -104,9 +104,9 @@ public void calculateMatchRatings(Integer userId1, Integer userId2, Verdict verd // Calculate weighted rating deviations for both players Double weightedRatingDeviation1 = ratingCalculator.calculateWeightedRatingDeviation( - rating1.getRating(), matchService.getRecentMatchTime(userId1)); + rating1.getRatingDeviation(), matchService.getRecentMatchTime(userId1)); Double weightedRatingDeviation2 = ratingCalculator.calculateWeightedRatingDeviation( - rating2.getRating(), matchService.getRecentMatchTime(userId2)); + rating2.getRatingDeviation(), matchService.getRecentMatchTime(userId2)); rating1.setRatingDeviation(weightedRatingDeviation1);