[DIVA] Use the old stage counting method to fix continue stage not saving

pull/1/head
samnyan 2020-02-01 16:14:42 +08:00
parent 161f258603
commit 8d3d40f838
3 changed files with 35 additions and 9 deletions

View File

@ -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(),

View File

@ -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(

View File

@ -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);