mirror of
https://github.com/MewoLab/AquaDX.git
synced 2026-10-07 22:28:09 +03:00
[-] Reduce LoC
This commit is contained in:
@@ -3,18 +3,13 @@ package test
|
||||
import com.fasterxml.jackson.databind.JsonNode
|
||||
import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import ext.JACKSON
|
||||
import icu.samnyan.aqua.net.games.chu3.Chu3DataExport
|
||||
import icu.samnyan.aqua.net.games.mai2.Maimai2DataExport
|
||||
import icu.samnyan.aqua.net.games.ongeki.OngekiDataExport
|
||||
import icu.samnyan.aqua.sega.chusan.model.userdata.Chu3UserData
|
||||
import icu.samnyan.aqua.sega.chusan.model.userdata.UserPlaylog as Chu3UserPlaylog
|
||||
import icu.samnyan.aqua.sega.maimai2.model.userdata.Mai2UserDetail
|
||||
import icu.samnyan.aqua.sega.maimai2.model.userdata.Mai2UserMap
|
||||
import icu.samnyan.aqua.sega.maimai2.model.userdata.Mai2UserPlaylog
|
||||
import icu.samnyan.aqua.sega.ongeki.model.UserData as OngekiUserData
|
||||
import icu.samnyan.aqua.sega.ongeki.model.UserPlaylog as OngekiUserPlaylog
|
||||
import icu.samnyan.aqua.sega.util.BASIC_MAPPER
|
||||
import icu.samnyan.aqua.sega.util.STRING_MAPPER
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Assertions.assertFalse
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
import org.junit.jupiter.api.Test
|
||||
@@ -28,7 +23,28 @@ class ReproduceIssueTest {
|
||||
?: error("Test resource $path not found")
|
||||
}
|
||||
|
||||
private fun checkFieldNamesMatchRecursive(baselineNode: JsonNode, currentNode: JsonNode, path: String = "$") {
|
||||
private fun samplePlaylog() = Mai2UserPlaylog().apply {
|
||||
musicId = 11479
|
||||
level = 2
|
||||
achievement = 1000000
|
||||
isClear = true
|
||||
}
|
||||
|
||||
private fun sampleMap() = Mai2UserMap().apply {
|
||||
mapId = 1
|
||||
distance = 100
|
||||
isClear = true
|
||||
}
|
||||
|
||||
private fun sampleExport() = Maimai2DataExport().apply {
|
||||
userData = Mai2UserDetail().apply { userName = "TestUser" }
|
||||
userPlaylogList = listOf(samplePlaylog())
|
||||
userMapList = listOf(sampleMap())
|
||||
}
|
||||
|
||||
private fun checkFieldNamesAndValuesMatchRecursive(baselineNode: JsonNode, currentNode: JsonNode, path: String = "$") {
|
||||
assertEquals(baselineNode.nodeType, currentNode.nodeType, "Node type mismatch at path '$path'")
|
||||
|
||||
if (baselineNode.isObject && currentNode.isObject) {
|
||||
val baselineKeys = baselineNode.fieldNames().asSequence().toSet()
|
||||
val currentKeys = currentNode.fieldNames().asSequence().toSet()
|
||||
@@ -37,57 +53,30 @@ class ReproduceIssueTest {
|
||||
assertTrue(missingKeys.isEmpty(), "Missing keys at path '$path': $missingKeys. Current keys present: $currentKeys")
|
||||
|
||||
for (key in baselineKeys) {
|
||||
checkFieldNamesMatchRecursive(baselineNode.get(key), currentNode.get(key), "$path.$key")
|
||||
checkFieldNamesAndValuesMatchRecursive(baselineNode.get(key), currentNode.get(key), "$path.$key")
|
||||
}
|
||||
} else if (baselineNode.isArray && currentNode.isArray) {
|
||||
for (i in 0 until baselineNode.size()) {
|
||||
if (i < currentNode.size()) {
|
||||
checkFieldNamesMatchRecursive(baselineNode.get(i), currentNode.get(i), "$path[$i]")
|
||||
checkFieldNamesAndValuesMatchRecursive(baselineNode.get(i), currentNode.get(i), "$path[$i]")
|
||||
}
|
||||
}
|
||||
} else if (baselineNode.isBoolean && currentNode.isBoolean) {
|
||||
assertEquals(baselineNode.asBoolean(), currentNode.asBoolean(), "Boolean value mismatch at path '$path'")
|
||||
} else if (baselineNode.isNumber && currentNode.isNumber) {
|
||||
assertEquals(baselineNode.asText(), currentNode.asText(), "Number value mismatch at path '$path'")
|
||||
} else if (baselineNode.isTextual && currentNode.isTextual) {
|
||||
assertEquals(baselineNode.asText(), currentNode.asText(), "Textual value mismatch at path '$path'")
|
||||
} else {
|
||||
assertEquals(baselineNode, currentNode, "Value mismatch at path '$path'")
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testObjectMapperWithoutKotlinModule() {
|
||||
val mai2Playlog = Mai2UserPlaylog().apply {
|
||||
musicId = 11479
|
||||
level = 2
|
||||
achievement = 1000000
|
||||
deluxscore = 2000
|
||||
isClear = true
|
||||
isTap = true
|
||||
isHold = true
|
||||
isSlide = true
|
||||
isTouch = true
|
||||
isBreak = true
|
||||
isCriticalDisp = true
|
||||
isFastLateDisp = true
|
||||
isAchieveNewRecord = true
|
||||
isDeluxscoreNewRecord = true
|
||||
isPlayTutorial = true
|
||||
isEventMode = false
|
||||
isFreedomMode = false
|
||||
isNewFree = true
|
||||
}
|
||||
|
||||
val mai2Map = Mai2UserMap().apply {
|
||||
mapId = 1
|
||||
distance = 100
|
||||
isLock = false
|
||||
isClear = true
|
||||
isComplete = true
|
||||
}
|
||||
|
||||
val mai2Export = Maimai2DataExport().apply {
|
||||
userData = Mai2UserDetail().apply { userName = "TestUser" }
|
||||
userPlaylogList = listOf(mai2Playlog)
|
||||
userMapList = listOf(mai2Map)
|
||||
}
|
||||
|
||||
// Standard Jackson 2 ObjectMapper() without KotlinModule strips 'is' getters:
|
||||
val plainObjectMapper = ObjectMapper()
|
||||
val plainJson = plainObjectMapper.writeValueAsString(mai2Export)
|
||||
val plainJson = plainObjectMapper.writeValueAsString(sampleExport())
|
||||
val plainTree = plainObjectMapper.readTree(plainJson)
|
||||
val plainPlaylogNode = plainTree.at("/userPlaylogList/0")
|
||||
|
||||
@@ -98,144 +87,33 @@ class ReproduceIssueTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testMai2ExportEntityFieldNamesMatchBaselineRecursively() {
|
||||
val mai2Playlog = Mai2UserPlaylog().apply {
|
||||
musicId = 11479
|
||||
level = 2
|
||||
achievement = 1000000
|
||||
deluxscore = 2000
|
||||
isClear = true
|
||||
isTap = true
|
||||
isHold = true
|
||||
isSlide = true
|
||||
isTouch = true
|
||||
isBreak = true
|
||||
isCriticalDisp = true
|
||||
isFastLateDisp = true
|
||||
isAchieveNewRecord = true
|
||||
isDeluxscoreNewRecord = true
|
||||
isPlayTutorial = true
|
||||
isEventMode = false
|
||||
isFreedomMode = false
|
||||
isNewFree = true
|
||||
}
|
||||
|
||||
val mai2Map = Mai2UserMap().apply {
|
||||
mapId = 1
|
||||
distance = 100
|
||||
isLock = false
|
||||
isClear = true
|
||||
isComplete = true
|
||||
}
|
||||
|
||||
val mai2Export = Maimai2DataExport().apply {
|
||||
userData = Mai2UserDetail().apply { userName = "TestUser" }
|
||||
userPlaylogList = listOf(mai2Playlog)
|
||||
userMapList = listOf(mai2Map)
|
||||
}
|
||||
|
||||
val currentTree = JACKSON.readTree(JACKSON.writeValueAsString(mai2Export))
|
||||
fun testMai2ExportEntityFieldNamesAndValuesMatchBaselineRecursively() {
|
||||
val currentTree = JACKSON.readTree(JACKSON.writeValueAsString(sampleExport()))
|
||||
val baselineTree = JACKSON.readTree(loadResourceJson("/json/mai2_export_web.json"))
|
||||
|
||||
checkFieldNamesMatchRecursive(baselineTree, currentTree)
|
||||
checkFieldNamesAndValuesMatchRecursive(baselineTree, currentTree)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testChu3ExportEntityFieldNamesMatchBaselineRecursively() {
|
||||
val chu3Playlog = Chu3UserPlaylog().apply {
|
||||
musicId = 100
|
||||
level = 1
|
||||
score = 1000000
|
||||
isClear = true
|
||||
isFullCombo = true
|
||||
isAllJustice = true
|
||||
}
|
||||
|
||||
val chu3Export = Chu3DataExport().apply {
|
||||
userData = Chu3UserData().apply { userName = "ChuUser" }
|
||||
userPlaylogList = listOf(chu3Playlog)
|
||||
}
|
||||
|
||||
val currentTree = JACKSON.readTree(JACKSON.writeValueAsString(chu3Export))
|
||||
val baselineTree = JACKSON.readTree(loadResourceJson("/json/chu3_export_web.json"))
|
||||
|
||||
checkFieldNamesMatchRecursive(baselineTree, currentTree)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testOngekiExportEntityFieldNamesMatchBaselineRecursively() {
|
||||
val ongekiPlaylog = OngekiUserPlaylog().apply {
|
||||
musicId = 200
|
||||
level = 1
|
||||
techScore = 1000000
|
||||
isFullBell = true
|
||||
isFullCombo = true
|
||||
isAllBreak = true
|
||||
}
|
||||
|
||||
val ongekiExport = OngekiDataExport().apply {
|
||||
userData = OngekiUserData().apply { userName = "OngekiUser" }
|
||||
userPlaylogList = listOf(ongekiPlaylog)
|
||||
}
|
||||
|
||||
val currentTree = JACKSON.readTree(JACKSON.writeValueAsString(ongekiExport))
|
||||
val baselineTree = JACKSON.readTree(loadResourceJson("/json/ongeki_export_web.json"))
|
||||
|
||||
checkFieldNamesMatchRecursive(baselineTree, currentTree)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testGameFacingMaimai2PlaylogFieldNamesMatchBaselineRecursively() {
|
||||
val mai2Playlog = Mai2UserPlaylog().apply {
|
||||
musicId = 11479
|
||||
level = 2
|
||||
achievement = 1000000
|
||||
deluxscore = 2000
|
||||
isClear = true
|
||||
isTap = true
|
||||
isHold = true
|
||||
isSlide = true
|
||||
isTouch = true
|
||||
isBreak = true
|
||||
isCriticalDisp = true
|
||||
isFastLateDisp = true
|
||||
isAchieveNewRecord = true
|
||||
isDeluxscoreNewRecord = true
|
||||
isPlayTutorial = true
|
||||
isEventMode = false
|
||||
isFreedomMode = false
|
||||
isNewFree = true
|
||||
}
|
||||
fun testGameFacingMaimai2PlaylogFieldNamesAndValuesMatchBaselineRecursively() {
|
||||
val mai2Playlog = samplePlaylog()
|
||||
|
||||
val currentBasicTree = BASIC_MAPPER.readTree(BASIC_MAPPER.writeValueAsString(mai2Playlog))
|
||||
val baselineBasicTree = BASIC_MAPPER.readTree(loadResourceJson("/json/mai2_playlog_basic.json"))
|
||||
checkFieldNamesMatchRecursive(baselineBasicTree, currentBasicTree, "Mai2UserPlaylog (BASIC_MAPPER)")
|
||||
checkFieldNamesAndValuesMatchRecursive(baselineBasicTree, currentBasicTree, "Mai2UserPlaylog (BASIC_MAPPER)")
|
||||
|
||||
val currentStringTree = STRING_MAPPER.readTree(STRING_MAPPER.writeValueAsString(mai2Playlog))
|
||||
val baselineStringTree = STRING_MAPPER.readTree(loadResourceJson("/json/mai2_playlog_string.json"))
|
||||
checkFieldNamesMatchRecursive(baselineStringTree, currentStringTree, "Mai2UserPlaylog (STRING_MAPPER)")
|
||||
checkFieldNamesAndValuesMatchRecursive(baselineStringTree, currentStringTree, "Mai2UserPlaylog (STRING_MAPPER)")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testJackson3JsonMapperWithKotlinModule() {
|
||||
val mai2Playlog = Mai2UserPlaylog().apply {
|
||||
musicId = 11479
|
||||
level = 2
|
||||
achievement = 1000000
|
||||
deluxscore = 2000
|
||||
isClear = true
|
||||
}
|
||||
|
||||
val mai2Export = Maimai2DataExport().apply {
|
||||
userData = Mai2UserDetail().apply { userName = "TestUser" }
|
||||
userPlaylogList = listOf(mai2Playlog)
|
||||
}
|
||||
|
||||
val j3Mapper = JsonMapper.builder()
|
||||
.addModule(KotlinModule.Builder().build())
|
||||
.build()
|
||||
|
||||
val j3Json = j3Mapper.writeValueAsString(mai2Export)
|
||||
val j3Json = j3Mapper.writeValueAsString(sampleExport())
|
||||
val j3Tree = j3Mapper.readTree(j3Json)
|
||||
val j3PlaylogNode = j3Tree.at("/userPlaylogList/0")
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
{"orderId":0,"playlogId":0,"version":0,"placeId":0,"placeName":"","loginDate":0,"playDate":"","userPlayDate":"","type":0,"musicId":11479,"level":2,"trackNo":0,"vsMode":0,"vsUserName":"","vsStatus":0,"vsUserRating":0,"vsUserAchievement":0,"vsUserGradeRank":0,"vsRank":0,"playerNum":0,"playedUserId1":0,"playedUserName1":"","playedMusicLevel1":0,"playedUserId2":0,"playedUserName2":"","playedMusicLevel2":0,"playedUserId3":0,"playedUserName3":"","playedMusicLevel3":0,"characterId1":0,"characterLevel1":0,"characterAwakening1":0,"characterId2":0,"characterLevel2":0,"characterAwakening2":0,"characterId3":0,"characterLevel3":0,"characterAwakening3":0,"characterId4":0,"characterLevel4":0,"characterAwakening4":0,"characterId5":0,"characterLevel5":0,"characterAwakening5":0,"achievement":1000000,"deluxscore":2000,"scoreRank":0,"maxCombo":0,"totalCombo":0,"maxSync":0,"totalSync":0,"tapCriticalPerfect":0,"tapPerfect":0,"tapGreat":0,"tapGood":0,"tapMiss":0,"holdCriticalPerfect":0,"holdPerfect":0,"holdGreat":0,"holdGood":0,"holdMiss":0,"slideCriticalPerfect":0,"slidePerfect":0,"slideGreat":0,"slideGood":0,"slideMiss":0,"touchCriticalPerfect":0,"touchPerfect":0,"touchGreat":0,"touchGood":0,"touchMiss":0,"breakCriticalPerfect":0,"breakPerfect":0,"breakGreat":0,"breakGood":0,"breakMiss":0,"isTap":true,"isHold":true,"isSlide":true,"isTouch":true,"isBreak":true,"isCriticalDisp":true,"isFastLateDisp":true,"fastCount":0,"lateCount":0,"isAchieveNewRecord":true,"isDeluxscoreNewRecord":true,"comboStatus":0,"syncStatus":0,"isClear":true,"beforeRating":0,"afterRating":0,"beforeGrade":0,"afterGrade":0,"afterGradeRank":0,"beforeDeluxRating":0,"afterDeluxRating":0,"isPlayTutorial":true,"isEventMode":false,"isFreedomMode":false,"playMode":0,"isNewFree":true,"trialPlayAchievement":0,"extNum1":0,"extNum2":0,"extNum4":0,"extBool1":false,"extBool2":false,"extBool3":false,"isFullCombo":true,"isAllPerfect":true}
|
||||
{"orderId":0,"playlogId":0,"version":0,"placeId":0,"placeName":"","loginDate":0,"playDate":"","userPlayDate":"","type":0,"musicId":11479,"level":2,"trackNo":0,"vsMode":0,"vsUserName":"","vsStatus":0,"vsUserRating":0,"vsUserAchievement":0,"vsUserGradeRank":0,"vsRank":0,"playerNum":0,"playedUserId1":0,"playedUserName1":"","playedMusicLevel1":0,"playedUserId2":0,"playedUserName2":"","playedMusicLevel2":0,"playedUserId3":0,"playedUserName3":"","playedMusicLevel3":0,"characterId1":0,"characterLevel1":0,"characterAwakening1":0,"characterId2":0,"characterLevel2":0,"characterAwakening2":0,"characterId3":0,"characterLevel3":0,"characterAwakening3":0,"characterId4":0,"characterLevel4":0,"characterAwakening4":0,"characterId5":0,"characterLevel5":0,"characterAwakening5":0,"achievement":1000000,"deluxscore":0,"scoreRank":0,"maxCombo":0,"totalCombo":0,"maxSync":0,"totalSync":0,"tapCriticalPerfect":0,"tapPerfect":0,"tapGreat":0,"tapGood":0,"tapMiss":0,"holdCriticalPerfect":0,"holdPerfect":0,"holdGreat":0,"holdGood":0,"holdMiss":0,"slideCriticalPerfect":0,"slidePerfect":0,"slideGreat":0,"slideGood":0,"slideMiss":0,"touchCriticalPerfect":0,"touchPerfect":0,"touchGreat":0,"touchGood":0,"touchMiss":0,"breakCriticalPerfect":0,"breakPerfect":0,"breakGreat":0,"breakGood":0,"breakMiss":0,"isTap":false,"isHold":false,"isSlide":false,"isTouch":false,"isBreak":false,"isCriticalDisp":false,"isFastLateDisp":false,"fastCount":0,"lateCount":0,"isAchieveNewRecord":false,"isDeluxscoreNewRecord":false,"comboStatus":0,"syncStatus":0,"isClear":true,"beforeRating":0,"afterRating":0,"beforeGrade":0,"afterGrade":0,"afterGradeRank":0,"beforeDeluxRating":0,"afterDeluxRating":0,"isPlayTutorial":false,"isEventMode":false,"isFreedomMode":false,"playMode":0,"isNewFree":false,"trialPlayAchievement":0,"extNum1":0,"extNum2":0,"extNum4":0,"extBool1":false,"extBool2":false,"extBool3":false,"isFullCombo":true,"isAllPerfect":true}
|
||||
@@ -1 +1 @@
|
||||
{"orderId":0,"playlogId":0,"version":0,"placeId":0,"placeName":"","loginDate":0,"playDate":"","userPlayDate":"","type":0,"musicId":11479,"level":2,"trackNo":0,"vsMode":0,"vsUserName":"","vsStatus":0,"vsUserRating":0,"vsUserAchievement":0,"vsUserGradeRank":0,"vsRank":0,"playerNum":0,"playedUserId1":0,"playedUserName1":"","playedMusicLevel1":0,"playedUserId2":0,"playedUserName2":"","playedMusicLevel2":0,"playedUserId3":0,"playedUserName3":"","playedMusicLevel3":0,"characterId1":0,"characterLevel1":0,"characterAwakening1":0,"characterId2":0,"characterLevel2":0,"characterAwakening2":0,"characterId3":0,"characterLevel3":0,"characterAwakening3":0,"characterId4":0,"characterLevel4":0,"characterAwakening4":0,"characterId5":0,"characterLevel5":0,"characterAwakening5":0,"achievement":1000000,"deluxscore":2000,"scoreRank":0,"maxCombo":0,"totalCombo":0,"maxSync":0,"totalSync":0,"tapCriticalPerfect":0,"tapPerfect":0,"tapGreat":0,"tapGood":0,"tapMiss":0,"holdCriticalPerfect":0,"holdPerfect":0,"holdGreat":0,"holdGood":0,"holdMiss":0,"slideCriticalPerfect":0,"slidePerfect":0,"slideGreat":0,"slideGood":0,"slideMiss":0,"touchCriticalPerfect":0,"touchPerfect":0,"touchGreat":0,"touchGood":0,"touchMiss":0,"breakCriticalPerfect":0,"breakPerfect":0,"breakGreat":0,"breakGood":0,"breakMiss":0,"isTap":true,"isHold":true,"isSlide":true,"isTouch":true,"isBreak":true,"isCriticalDisp":true,"isFastLateDisp":true,"fastCount":0,"lateCount":0,"isAchieveNewRecord":true,"isDeluxscoreNewRecord":true,"comboStatus":0,"syncStatus":0,"isClear":true,"beforeRating":0,"afterRating":0,"beforeGrade":0,"afterGrade":0,"afterGradeRank":0,"beforeDeluxRating":0,"afterDeluxRating":0,"isPlayTutorial":true,"isEventMode":false,"isFreedomMode":false,"playMode":0,"isNewFree":true,"trialPlayAchievement":0,"extNum1":0,"extNum2":0,"extNum4":0,"extBool1":false,"extBool2":false,"extBool3":false,"isFullCombo":true,"isAllPerfect":true}
|
||||
{"orderId":0,"playlogId":0,"version":0,"placeId":0,"placeName":"","loginDate":0,"playDate":"","userPlayDate":"","type":0,"musicId":11479,"level":2,"trackNo":0,"vsMode":0,"vsUserName":"","vsStatus":0,"vsUserRating":0,"vsUserAchievement":0,"vsUserGradeRank":0,"vsRank":0,"playerNum":0,"playedUserId1":0,"playedUserName1":"","playedMusicLevel1":0,"playedUserId2":0,"playedUserName2":"","playedMusicLevel2":0,"playedUserId3":0,"playedUserName3":"","playedMusicLevel3":0,"characterId1":0,"characterLevel1":0,"characterAwakening1":0,"characterId2":0,"characterLevel2":0,"characterAwakening2":0,"characterId3":0,"characterLevel3":0,"characterAwakening3":0,"characterId4":0,"characterLevel4":0,"characterAwakening4":0,"characterId5":0,"characterLevel5":0,"characterAwakening5":0,"achievement":1000000,"deluxscore":0,"scoreRank":0,"maxCombo":0,"totalCombo":0,"maxSync":0,"totalSync":0,"tapCriticalPerfect":0,"tapPerfect":0,"tapGreat":0,"tapGood":0,"tapMiss":0,"holdCriticalPerfect":0,"holdPerfect":0,"holdGreat":0,"holdGood":0,"holdMiss":0,"slideCriticalPerfect":0,"slidePerfect":0,"slideGreat":0,"slideGood":0,"slideMiss":0,"touchCriticalPerfect":0,"touchPerfect":0,"touchGreat":0,"touchGood":0,"touchMiss":0,"breakCriticalPerfect":0,"breakPerfect":0,"breakGreat":0,"breakGood":0,"breakMiss":0,"isTap":false,"isHold":false,"isSlide":false,"isTouch":false,"isBreak":false,"isCriticalDisp":false,"isFastLateDisp":false,"fastCount":0,"lateCount":0,"isAchieveNewRecord":false,"isDeluxscoreNewRecord":false,"comboStatus":0,"syncStatus":0,"isClear":true,"beforeRating":0,"afterRating":0,"beforeGrade":0,"afterGrade":0,"afterGradeRank":0,"beforeDeluxRating":0,"afterDeluxRating":0,"isPlayTutorial":false,"isEventMode":false,"isFreedomMode":false,"playMode":0,"isNewFree":false,"trialPlayAchievement":0,"extNum1":0,"extNum2":0,"extNum4":0,"extBool1":false,"extBool2":false,"extBool3":false,"isFullCombo":true,"isAllPerfect":true}
|
||||
@@ -1 +1 @@
|
||||
{"orderId":"0","playlogId":"0","version":"0","placeId":"0","placeName":"","loginDate":"0","playDate":"","userPlayDate":"","type":"0","musicId":"11479","level":"2","trackNo":"0","vsMode":"0","vsUserName":"","vsStatus":"0","vsUserRating":"0","vsUserAchievement":"0","vsUserGradeRank":"0","vsRank":"0","playerNum":"0","playedUserId1":"0","playedUserName1":"","playedMusicLevel1":"0","playedUserId2":"0","playedUserName2":"","playedMusicLevel2":"0","playedUserId3":"0","playedUserName3":"","playedMusicLevel3":"0","characterId1":"0","characterLevel1":"0","characterAwakening1":"0","characterId2":"0","characterLevel2":"0","characterAwakening2":"0","characterId3":"0","characterLevel3":"0","characterAwakening3":"0","characterId4":"0","characterLevel4":"0","characterAwakening4":"0","characterId5":"0","characterLevel5":"0","characterAwakening5":"0","achievement":"1000000","deluxscore":"2000","scoreRank":"0","maxCombo":"0","totalCombo":"0","maxSync":"0","totalSync":"0","tapCriticalPerfect":"0","tapPerfect":"0","tapGreat":"0","tapGood":"0","tapMiss":"0","holdCriticalPerfect":"0","holdPerfect":"0","holdGreat":"0","holdGood":"0","holdMiss":"0","slideCriticalPerfect":"0","slidePerfect":"0","slideGreat":"0","slideGood":"0","slideMiss":"0","touchCriticalPerfect":"0","touchPerfect":"0","touchGreat":"0","touchGood":"0","touchMiss":"0","breakCriticalPerfect":"0","breakPerfect":"0","breakGreat":"0","breakGood":"0","breakMiss":"0","isTap":"true","isHold":"true","isSlide":"true","isTouch":"true","isBreak":"true","isCriticalDisp":"true","isFastLateDisp":"true","fastCount":"0","lateCount":"0","isAchieveNewRecord":"true","isDeluxscoreNewRecord":"true","comboStatus":"0","syncStatus":"0","isClear":"true","beforeRating":"0","afterRating":"0","beforeGrade":"0","afterGrade":"0","afterGradeRank":"0","beforeDeluxRating":"0","afterDeluxRating":"0","isPlayTutorial":"true","isEventMode":"false","isFreedomMode":"false","playMode":"0","isNewFree":"true","trialPlayAchievement":"0","extNum1":"0","extNum2":"0","extNum4":"0","extBool1":"false","extBool2":"false","extBool3":"false","isFullCombo":"true","isAllPerfect":"true"}
|
||||
{"orderId":"0","playlogId":"0","version":"0","placeId":"0","placeName":"","loginDate":"0","playDate":"","userPlayDate":"","type":"0","musicId":"11479","level":"2","trackNo":"0","vsMode":"0","vsUserName":"","vsStatus":"0","vsUserRating":"0","vsUserAchievement":"0","vsUserGradeRank":"0","vsRank":"0","playerNum":"0","playedUserId1":"0","playedUserName1":"","playedMusicLevel1":"0","playedUserId2":"0","playedUserName2":"","playedMusicLevel2":"0","playedUserId3":"0","playedUserName3":"","playedMusicLevel3":"0","characterId1":"0","characterLevel1":"0","characterAwakening1":"0","characterId2":"0","characterLevel2":"0","characterAwakening2":"0","characterId3":"0","characterLevel3":"0","characterAwakening3":"0","characterId4":"0","characterLevel4":"0","characterAwakening4":"0","characterId5":"0","characterLevel5":"0","characterAwakening5":"0","achievement":"1000000","deluxscore":"0","scoreRank":"0","maxCombo":"0","totalCombo":"0","maxSync":"0","totalSync":"0","tapCriticalPerfect":"0","tapPerfect":"0","tapGreat":"0","tapGood":"0","tapMiss":"0","holdCriticalPerfect":"0","holdPerfect":"0","holdGreat":"0","holdGood":"0","holdMiss":"0","slideCriticalPerfect":"0","slidePerfect":"0","slideGreat":"0","slideGood":"0","slideMiss":"0","touchCriticalPerfect":"0","touchPerfect":"0","touchGreat":"0","touchGood":"0","touchMiss":"0","breakCriticalPerfect":"0","breakPerfect":"0","breakGreat":"0","breakGood":"0","breakMiss":"0","isTap":"false","isHold":"false","isSlide":"false","isTouch":"false","isBreak":"false","isCriticalDisp":"false","isFastLateDisp":"false","fastCount":"0","lateCount":"0","isAchieveNewRecord":"false","isDeluxscoreNewRecord":"false","comboStatus":"0","syncStatus":"0","isClear":"true","beforeRating":"0","afterRating":"0","beforeGrade":"0","afterGrade":"0","afterGradeRank":"0","beforeDeluxRating":"0","afterDeluxRating":"0","isPlayTutorial":"false","isEventMode":"false","isFreedomMode":"false","playMode":"0","isNewFree":"false","trialPlayAchievement":"0","extNum1":"0","extNum2":"0","extNum4":"0","extBool1":"false","extBool2":"false","extBool3":"false","isFullCombo":"true","isAllPerfect":"true"}
|
||||
Reference in New Issue
Block a user