diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/StageResultHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/StageResultHandler.java index 5a6ab672..625d3935 100644 --- a/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/StageResultHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/StageResultHandler.java @@ -61,8 +61,6 @@ public class StageResultHandler extends BaseHandler { int[] pvIds = request.getStg_ply_pv_id(); int stageIndex = session.getStageIndex(); - // Only save to database when stage index is larger than stage result index to prevent duplicate request. - if(stageIndex > session.getStageResultIndex()) { // Convert to play log object PlayLog log = getLog(request, profile, stageIndex); @@ -98,13 +96,12 @@ public class StageResultHandler extends BaseHandler { session.setLevelNumber(levelInfo.getLevelNumber()); session.setLevelExp(levelInfo.getLevelExp()); - session.setStageResultIndex(session.getStageResultIndex() + 1); + session.setStageResultIndex(stageIndex); pvRecordRepository.save(record); playLogRepository.save(log); gameSessionRepository.save(session); - } response = new StageResultResponse( request.getCmd(), diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/StageStartHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/StageStartHandler.java index 02b3293f..d42546d2 100644 --- a/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/StageStartHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/ingame/StageStartHandler.java @@ -36,12 +36,22 @@ public class StageStartHandler extends BaseHandler { PlayerProfile profile = profileRepository.findByPdId(request.getPd_id()).orElseThrow(ProfileNotFoundException::new); GameSession session = gameSessionRepository.findByPdId(profile).orElseThrow(SessionNotFoundException::new); - if(session.getStageResultIndex() <= session.getStageIndex()) { - session.setStageIndex(session.getStageIndex() + 1); - gameSessionRepository.save(session); - } else { - logger.warn("Stage index is greater than stage result index. Maybe due to duplicated request."); + int[] stageArr = request.getStg_ply_pv_id(); + int stageIndex = 0; + if(stageArr[0] != -1) { + stageIndex = 0; } + if(stageArr[1] != -1) { + stageIndex = 1; + } + if(stageArr[2] != -1) { + stageIndex = 2; + } + if(stageArr[3] != -1) { + stageIndex = 3; + } + session.setStageIndex(stageIndex); + gameSessionRepository.save(session); } BaseResponse response = new BaseResponse( diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/user/EndHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/user/EndHandler.java index a3c0c22d..f6f824f2 100644 --- a/src/main/java/icu/samnyan/aqua/sega/diva/handler/user/EndHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/user/EndHandler.java @@ -94,6 +94,25 @@ public class EndHandler extends BaseHandler { } } + int savedIndex = session.getStageResultIndex(); + int[] stageArr = request.getStg_ply_pv_id(); + int stageIndex = 0; + if(stageArr[0] != -1) { + stageIndex = 0; + } + if(stageArr[1] != -1) { + stageIndex = 1; + } + if(stageArr[2] != -1) { + stageIndex = 2; + } + if(stageArr[3] != -1) { + stageIndex = 3; + } + if(stageIndex != savedIndex) { + logger.error("Some stage not saved"); + } + playerProfileService.save(profile); gameSessionRepository.delete(session);