feat: release version 1.0.8
This commit is contained in:
@@ -11,3 +11,7 @@ card-00028-5-uniq-0070-00,수영복,
|
|||||||
card-03004-5-uniq-0073-00,수영복,
|
card-03004-5-uniq-0073-00,수영복,
|
||||||
card-04001-5-uniq-0071-00,수영복,
|
card-04001-5-uniq-0071-00,수영복,
|
||||||
card-04003-5-uniq-0072-00,수영복,
|
card-04003-5-uniq-0072-00,수영복,
|
||||||
|
card-00006-5-uniq-0074-00,수영복,
|
||||||
|
card-00014-5-uniq-0075-00,수영복,
|
||||||
|
card-00016-5-uniq-0076-00,수영복,
|
||||||
|
card-00017-5-uniq-0077-00,수영복,
|
||||||
|
|||||||
|
+1774
-10
File diff suppressed because it is too large
Load Diff
+5105
-10
File diff suppressed because it is too large
Load Diff
+102
-102
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"generatedAt": "2026-08-18T01:01:34.166Z",
|
"generatedAt": "2026-08-29T14:35:34.947Z",
|
||||||
"source": "HolodoriDB community master-data diff repositories",
|
"source": "HolodoriDB community master-data diff repositories",
|
||||||
"sourceLicense": null,
|
"sourceLicense": null,
|
||||||
"sourceLicenseNote": "No LICENSE file was present in the three source repositories at collection time.",
|
"sourceLicenseNote": "No LICENSE file was present in the three source repositories at collection time.",
|
||||||
@@ -8,46 +8,46 @@
|
|||||||
"sources": {
|
"sources": {
|
||||||
"eng": {
|
"eng": {
|
||||||
"repository": "https://github.com/HolodoriDB/holodori-db-eng-diff",
|
"repository": "https://github.com/HolodoriDB/holodori-db-eng-diff",
|
||||||
"commit": "a15150a8b7413f035f28f8f85d63ab9df122c380",
|
"commit": "95e08ebe8f5b0bec83af036230f10291726b7130",
|
||||||
"commitDate": "2026-08-16T12:45:55Z",
|
"commitDate": "2026-08-28T15:11:43Z",
|
||||||
"masterDataVersion": "71e11fbd082eec83d10cff35da7179cbaf319097f0021aa5747fe5a5392b549c"
|
"masterDataVersion": "fbca8c670e074558b24708bf163fff446a614f709afa9d1784395a15444121b0"
|
||||||
},
|
},
|
||||||
"kor": {
|
"kor": {
|
||||||
"repository": "https://github.com/HolodoriDB/holodori-db-kor-diff",
|
"repository": "https://github.com/HolodoriDB/holodori-db-kor-diff",
|
||||||
"commit": "f5e3c9513edbeec7007e02c0002786291fe1d119",
|
"commit": "1d7c7850bf2df34239c440b5b0cc53bbd72e5d5d",
|
||||||
"commitDate": "2026-08-16T12:18:18Z",
|
"commitDate": "2026-08-28T14:42:22Z",
|
||||||
"masterDataVersion": "71e11fbd082eec83d10cff35da7179cbaf319097f0021aa5747fe5a5392b549c"
|
"masterDataVersion": "fbca8c670e074558b24708bf163fff446a614f709afa9d1784395a15444121b0"
|
||||||
},
|
},
|
||||||
"jpn": {
|
"jpn": {
|
||||||
"repository": "https://github.com/HolodoriDB/holodori-db-jpn-diff",
|
"repository": "https://github.com/HolodoriDB/holodori-db-jpn-diff",
|
||||||
"commit": "84cb500d8ebf19e306be20faba696123018e49a8",
|
"commit": "09fd4e4abbee2a640a49e7f3f023ad23f43eaa89",
|
||||||
"commitDate": "2026-08-16T12:55:53Z",
|
"commitDate": "2026-08-28T15:16:40Z",
|
||||||
"masterDataVersion": "71e11fbd082eec83d10cff35da7179cbaf319097f0021aa5747fe5a5392b549c"
|
"masterDataVersion": "fbca8c670e074558b24708bf163fff446a614f709afa9d1784395a15444121b0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"counts": {
|
"counts": {
|
||||||
"cards": 174,
|
"cards": 178,
|
||||||
"rarities": {
|
"rarities": {
|
||||||
"3": 54,
|
"3": 54,
|
||||||
"4": 54,
|
"4": 54,
|
||||||
"5": 66
|
"5": 70
|
||||||
},
|
},
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"1": 57,
|
"1": 58,
|
||||||
"2": 57,
|
"2": 59,
|
||||||
"3": 60
|
"3": 61
|
||||||
},
|
},
|
||||||
"localizedCardNames": {
|
"localizedCardNames": {
|
||||||
"eng": 174,
|
"eng": 178,
|
||||||
"kor": 174,
|
"kor": 178,
|
||||||
"jpn": 174
|
"jpn": 178
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tables": {
|
"tables": {
|
||||||
"Card": {
|
"Card": {
|
||||||
"filename": "Card.json",
|
"filename": "Card.json",
|
||||||
"count": 174,
|
"count": 178,
|
||||||
"sha256": "bde4e409ce4c184d7a2d4cd34a264e3356a1d0628c3cfdaee881b6f119f6a4a9"
|
"sha256": "89412d36bc3c7875f056f81dcb2d23b8cfb871d2cd2a522dd79762b899f1343c"
|
||||||
},
|
},
|
||||||
"CardLevel": {
|
"CardLevel": {
|
||||||
"filename": "CardLevel.json",
|
"filename": "CardLevel.json",
|
||||||
@@ -86,43 +86,43 @@
|
|||||||
},
|
},
|
||||||
"Costume": {
|
"Costume": {
|
||||||
"filename": "Costume.json",
|
"filename": "Costume.json",
|
||||||
"count": 182,
|
"count": 186,
|
||||||
"sha256": "a45926292833e1927aa8cf2c4427d6937743ed044bc395331734cc6b40182539"
|
"sha256": "a2f33481edaf769a99a13261d2d688885b62134b79c317cffd446ffaf2f1d9b6"
|
||||||
},
|
},
|
||||||
"SdCostume": {
|
"SdCostume": {
|
||||||
"filename": "SdCostume.json",
|
"filename": "SdCostume.json",
|
||||||
"count": 290,
|
"count": 294,
|
||||||
"sha256": "2fcf6448638df807915f2bba60188657374cbeb230ec251e44cc84a7c56e65d0"
|
"sha256": "a91f4fee5769620ace9ebe98a32894561048e3a386810499cde520cf08f0d18d"
|
||||||
},
|
},
|
||||||
"LiveLeaderSkill": {
|
"LiveLeaderSkill": {
|
||||||
"filename": "LiveLeaderSkill.json",
|
"filename": "LiveLeaderSkill.json",
|
||||||
"count": 174,
|
"count": 178,
|
||||||
"sha256": "e58b9e6671ea10c3220422b0da9335ce23659793bf77ada2489b8c48be822a3a"
|
"sha256": "9c6c2729e18f5d6c839dffe67c0b1e2a5e5182061c7447b804fb3650e50d8db1"
|
||||||
},
|
},
|
||||||
"LivePassiveSkill": {
|
"LivePassiveSkill": {
|
||||||
"filename": "LivePassiveSkill.json",
|
"filename": "LivePassiveSkill.json",
|
||||||
"count": 174,
|
"count": 178,
|
||||||
"sha256": "d4b40eb960f6314b3ea1c02d5724520bf21bffe99d40dda27f592d903ce05345"
|
"sha256": "2a3ed4d50a9145e6da5fc87d24b521dffd4c8ccb16bb3b380dbae11634747ca3"
|
||||||
},
|
},
|
||||||
"LivePassiveSkillLevel": {
|
"LivePassiveSkillLevel": {
|
||||||
"filename": "LivePassiveSkillLevel.json",
|
"filename": "LivePassiveSkillLevel.json",
|
||||||
"count": 348,
|
"count": 356,
|
||||||
"sha256": "c1103ef24a22d62e0fe375460e1d247073e21b155f1f296b3d46728b4284235e"
|
"sha256": "4e4244eeb4a86b857efe6f7f1957aaf3b480366c89b6db5a0960c5da37263a56"
|
||||||
},
|
},
|
||||||
"LivePassiveSkillEffect": {
|
"LivePassiveSkillEffect": {
|
||||||
"filename": "LivePassiveSkillEffect.json",
|
"filename": "LivePassiveSkillEffect.json",
|
||||||
"count": 178,
|
"count": 182,
|
||||||
"sha256": "52f4f6bfae8a2f12494b553fe272920dcc0b1014787ca89d85f919b4a248ec6b"
|
"sha256": "52e6529df13641eac635cc770d58411e4b7b52d64672a3d681bd6099048e7cc2"
|
||||||
},
|
},
|
||||||
"LiveActiveSkill": {
|
"LiveActiveSkill": {
|
||||||
"filename": "LiveActiveSkill.json",
|
"filename": "LiveActiveSkill.json",
|
||||||
"count": 176,
|
"count": 180,
|
||||||
"sha256": "2828267edb9a2f9395070a2c12cbc3f0991937644dd606722a969c980a9585d3"
|
"sha256": "ccb82158aae0c2dd6aa636f583ffb460837393591a17face70b631065b03cdc0"
|
||||||
},
|
},
|
||||||
"LiveActiveSkillLevel": {
|
"LiveActiveSkillLevel": {
|
||||||
"filename": "LiveActiveSkillLevel.json",
|
"filename": "LiveActiveSkillLevel.json",
|
||||||
"count": 351,
|
"count": 359,
|
||||||
"sha256": "82970f85b34ac632eef08de873e6cbd826e1e6271efaf8f7ea48235f083dff32"
|
"sha256": "e19ca76a52551bf6e971b33d6edaede4f503996b2548014dffd2813f1a9765a3"
|
||||||
},
|
},
|
||||||
"LiveActiveSkillEffect": {
|
"LiveActiveSkillEffect": {
|
||||||
"filename": "LiveActiveSkillEffect.json",
|
"filename": "LiveActiveSkillEffect.json",
|
||||||
@@ -131,13 +131,13 @@
|
|||||||
},
|
},
|
||||||
"LiveSpecialSkill": {
|
"LiveSpecialSkill": {
|
||||||
"filename": "LiveSpecialSkill.json",
|
"filename": "LiveSpecialSkill.json",
|
||||||
"count": 174,
|
"count": 178,
|
||||||
"sha256": "5eed11dfb765627028aaf143f53c3363385a35a3ee884f3bbe190f8d10b3992b"
|
"sha256": "99d3bfe0efd3872c61d2f531ad505495ecaf9cfac7a07940b663022feb9defc0"
|
||||||
},
|
},
|
||||||
"LiveSpecialSkillLevel": {
|
"LiveSpecialSkillLevel": {
|
||||||
"filename": "LiveSpecialSkillLevel.json",
|
"filename": "LiveSpecialSkillLevel.json",
|
||||||
"count": 348,
|
"count": 356,
|
||||||
"sha256": "25c7bebf7027097ac21505bd2aa625384ceaed6ff2ba077ca6d471b22fd09584"
|
"sha256": "58444ef911e3cc0573edbfd439fc3f0de646cf0845f50bd62a808f3d2681ccd8"
|
||||||
},
|
},
|
||||||
"LiveSkillTrigger": {
|
"LiveSkillTrigger": {
|
||||||
"filename": "LiveSkillTrigger.json",
|
"filename": "LiveSkillTrigger.json",
|
||||||
@@ -156,8 +156,8 @@
|
|||||||
},
|
},
|
||||||
"Poster": {
|
"Poster": {
|
||||||
"filename": "Poster.json",
|
"filename": "Poster.json",
|
||||||
"count": 28,
|
"count": 29,
|
||||||
"sha256": "a75e14e4a75091c41d6d0790d30a96d743eedad50806fc7f85697ca86a56b664"
|
"sha256": "ddd93ddeb83482e675fba2b6964e9df4ae729b5185b4773faa99e565b901d6b9"
|
||||||
},
|
},
|
||||||
"PosterCollectEffect": {
|
"PosterCollectEffect": {
|
||||||
"filename": "PosterCollectEffect.json",
|
"filename": "PosterCollectEffect.json",
|
||||||
@@ -176,8 +176,8 @@
|
|||||||
},
|
},
|
||||||
"SkillTreeEffect": {
|
"SkillTreeEffect": {
|
||||||
"filename": "SkillTreeEffect.json",
|
"filename": "SkillTreeEffect.json",
|
||||||
"count": 120,
|
"count": 121,
|
||||||
"sha256": "36277a6b971331c0c2ea430f384a425b8670516e3ddb4f95d3dde667bdc45011"
|
"sha256": "b95f3b11a106f50a5edfe8ee875593f608dd2c55c9430e22d0b3476f2934bb3b"
|
||||||
},
|
},
|
||||||
"SkillTreeEffectPassiveTrigger": {
|
"SkillTreeEffectPassiveTrigger": {
|
||||||
"filename": "SkillTreeEffectPassiveTrigger.json",
|
"filename": "SkillTreeEffectPassiveTrigger.json",
|
||||||
@@ -196,8 +196,8 @@
|
|||||||
},
|
},
|
||||||
"SkillTreeNode": {
|
"SkillTreeNode": {
|
||||||
"filename": "SkillTreeNode.json",
|
"filename": "SkillTreeNode.json",
|
||||||
"count": 323,
|
"count": 324,
|
||||||
"sha256": "30d2479d6516c96c214caec98380454963733b1ef5f3ab75a171f4f461924605"
|
"sha256": "c47e047d0ccfeaa9be961fd6ef7ca9b989ce9841fdfa85b016c939920931c25d"
|
||||||
},
|
},
|
||||||
"SkillTreeNodeAutoSelection": {
|
"SkillTreeNodeAutoSelection": {
|
||||||
"filename": "SkillTreeNodeAutoSelection.json",
|
"filename": "SkillTreeNodeAutoSelection.json",
|
||||||
@@ -206,8 +206,8 @@
|
|||||||
},
|
},
|
||||||
"SkillTreeNodePosition": {
|
"SkillTreeNodePosition": {
|
||||||
"filename": "SkillTreeNodePosition.json",
|
"filename": "SkillTreeNodePosition.json",
|
||||||
"count": 608,
|
"count": 612,
|
||||||
"sha256": "973e1efd5a35a291ddbc0c963b15068ba6df3e504ed18d4cf9246b831c94dffa"
|
"sha256": "94fdbb6386ec5cd8b3fcf8125584cacb69ddb079d206aa58889dda5bd2aa722e"
|
||||||
},
|
},
|
||||||
"SkillTreePoint": {
|
"SkillTreePoint": {
|
||||||
"filename": "SkillTreePoint.json",
|
"filename": "SkillTreePoint.json",
|
||||||
@@ -219,8 +219,8 @@
|
|||||||
"eng": {
|
"eng": {
|
||||||
"Card": {
|
"Card": {
|
||||||
"filename": "LangCard_Eng.json",
|
"filename": "LangCard_Eng.json",
|
||||||
"count": 174,
|
"count": 178,
|
||||||
"sha256": "f9722ef9d6fb3817989f83db9a5c332a17497e7f3952639677e2f9e1fa0abc06"
|
"sha256": "7a273560a1da8f35abba04625b96c0aa323adab44f0472690687d227fde701b2"
|
||||||
},
|
},
|
||||||
"Character": {
|
"Character": {
|
||||||
"filename": "LangCharacter_Eng.json",
|
"filename": "LangCharacter_Eng.json",
|
||||||
@@ -239,13 +239,13 @@
|
|||||||
},
|
},
|
||||||
"Costume": {
|
"Costume": {
|
||||||
"filename": "LangCostume_Eng.json",
|
"filename": "LangCostume_Eng.json",
|
||||||
"count": 182,
|
"count": 186,
|
||||||
"sha256": "db86a28a6b929f0d9f1094f1b1ea39a5aa6dfd298dd050b48cf9147c50b34d67"
|
"sha256": "de570bcdb456626bed7aa09ad1573646097e9f227c2b8c7511fd9b646e92e7eb"
|
||||||
},
|
},
|
||||||
"SdCostume": {
|
"SdCostume": {
|
||||||
"filename": "LangSdCostume_Eng.json",
|
"filename": "LangSdCostume_Eng.json",
|
||||||
"count": 290,
|
"count": 294,
|
||||||
"sha256": "5dd66fa7fd0b819ad098b0b7909a4b7ecd1cd4d27ee2cc304b477638526ebabc"
|
"sha256": "8b377f79331459ed29a928914294ad338541132eabe2e53387a1e1ef4765d99c"
|
||||||
},
|
},
|
||||||
"GeneratedLiveActiveSkillEffect": {
|
"GeneratedLiveActiveSkillEffect": {
|
||||||
"filename": "LangGeneratedLiveActiveSkillEffect_Eng.json",
|
"filename": "LangGeneratedLiveActiveSkillEffect_Eng.json",
|
||||||
@@ -254,23 +254,23 @@
|
|||||||
},
|
},
|
||||||
"GeneratedLiveActiveSkillLevel": {
|
"GeneratedLiveActiveSkillLevel": {
|
||||||
"filename": "LangGeneratedLiveActiveSkillLevel_Eng.json",
|
"filename": "LangGeneratedLiveActiveSkillLevel_Eng.json",
|
||||||
"count": 351,
|
"count": 359,
|
||||||
"sha256": "3a3d0d2d7e6b7f1f9e98a8d7f4e0dad406422b6cb4fbd720ccae68b4ded5c487"
|
"sha256": "9d561634e3f1ac790c1f0834b69b53a44ab27086c350ebc866a0ed95dd43f3a3"
|
||||||
},
|
},
|
||||||
"GeneratedLiveLeaderSkill": {
|
"GeneratedLiveLeaderSkill": {
|
||||||
"filename": "LangGeneratedLiveLeaderSkill_Eng.json",
|
"filename": "LangGeneratedLiveLeaderSkill_Eng.json",
|
||||||
"count": 174,
|
"count": 178,
|
||||||
"sha256": "1ae291b27f6d99eb2fb25c5ce27aa56ecea77a1e73ec57f06659ddcf51522009"
|
"sha256": "5072999b71f3067aef56b17f6f9f0b4b115f026d007914086209dc8659a667ac"
|
||||||
},
|
},
|
||||||
"GeneratedLivePassiveSkillEffect": {
|
"GeneratedLivePassiveSkillEffect": {
|
||||||
"filename": "LangGeneratedLivePassiveSkillEffect_Eng.json",
|
"filename": "LangGeneratedLivePassiveSkillEffect_Eng.json",
|
||||||
"count": 178,
|
"count": 182,
|
||||||
"sha256": "6583ea64ed64d6a2c24fd0b96731c11eb46b0ee2bd27f7febab84cec6b0e76e7"
|
"sha256": "b56adac2cb5863d54c004525224cbd0c2dab2672813b158cfdfa3b6a1d42c22c"
|
||||||
},
|
},
|
||||||
"GeneratedLivePassiveSkillLevel": {
|
"GeneratedLivePassiveSkillLevel": {
|
||||||
"filename": "LangGeneratedLivePassiveSkillLevel_Eng.json",
|
"filename": "LangGeneratedLivePassiveSkillLevel_Eng.json",
|
||||||
"count": 348,
|
"count": 356,
|
||||||
"sha256": "1da7ff4d2b0bd99281aeb0394e799b761088c0066d00bcfa7aaa092bbb361687"
|
"sha256": "2d8132656058ae7ef63b06fd106e17eb9ed0aabc42c027548d93f88c8a22dd93"
|
||||||
},
|
},
|
||||||
"GeneratedLiveSkillEffectTarget": {
|
"GeneratedLiveSkillEffectTarget": {
|
||||||
"filename": "LangGeneratedLiveSkillEffectTarget_Eng.json",
|
"filename": "LangGeneratedLiveSkillEffectTarget_Eng.json",
|
||||||
@@ -284,8 +284,8 @@
|
|||||||
},
|
},
|
||||||
"GeneratedLiveSpecialSkillLevel": {
|
"GeneratedLiveSpecialSkillLevel": {
|
||||||
"filename": "LangGeneratedLiveSpecialSkillLevel_Eng.json",
|
"filename": "LangGeneratedLiveSpecialSkillLevel_Eng.json",
|
||||||
"count": 348,
|
"count": 356,
|
||||||
"sha256": "04dc888915eed7b5fc01572cee0dc480249f4dd54b508eb9e4e6a3bfe6a84e05"
|
"sha256": "a8cfb9391c42a42116574893399fb7be6d02de05c4e73b75706ab902c569e2e4"
|
||||||
},
|
},
|
||||||
"GeneratedSkillTreeConnectEffect": {
|
"GeneratedSkillTreeConnectEffect": {
|
||||||
"filename": "LangGeneratedSkillTreeConnectEffect_Eng.json",
|
"filename": "LangGeneratedSkillTreeConnectEffect_Eng.json",
|
||||||
@@ -294,8 +294,8 @@
|
|||||||
},
|
},
|
||||||
"GeneratedSkillTreeEffect": {
|
"GeneratedSkillTreeEffect": {
|
||||||
"filename": "LangGeneratedSkillTreeEffect_Eng.json",
|
"filename": "LangGeneratedSkillTreeEffect_Eng.json",
|
||||||
"count": 120,
|
"count": 121,
|
||||||
"sha256": "590e393c867912d60fcd2f24b87f1f3b1cba80327019f38bdfa041acfe157433"
|
"sha256": "6d45f0e0d493d1ec3a8ce26eb4d1f310468f3e5b4848df3933d3c6f2275bd697"
|
||||||
},
|
},
|
||||||
"GeneratedSkillTreeEffectPassiveTrigger": {
|
"GeneratedSkillTreeEffectPassiveTrigger": {
|
||||||
"filename": "LangGeneratedSkillTreeEffectPassiveTrigger_Eng.json",
|
"filename": "LangGeneratedSkillTreeEffectPassiveTrigger_Eng.json",
|
||||||
@@ -326,8 +326,8 @@
|
|||||||
"kor": {
|
"kor": {
|
||||||
"Card": {
|
"Card": {
|
||||||
"filename": "LangCard_Kor.json",
|
"filename": "LangCard_Kor.json",
|
||||||
"count": 174,
|
"count": 178,
|
||||||
"sha256": "448ae14796cecd434666618aa5d63ff8348fe94780f9a7c975c2dcb7298a13fd"
|
"sha256": "7de9f21e5e4eb602be499b32e20a3d82d2e4dc5ab2961fc0f604bc83c7245693"
|
||||||
},
|
},
|
||||||
"Character": {
|
"Character": {
|
||||||
"filename": "LangCharacter_Kor.json",
|
"filename": "LangCharacter_Kor.json",
|
||||||
@@ -346,13 +346,13 @@
|
|||||||
},
|
},
|
||||||
"Costume": {
|
"Costume": {
|
||||||
"filename": "LangCostume_Kor.json",
|
"filename": "LangCostume_Kor.json",
|
||||||
"count": 182,
|
"count": 186,
|
||||||
"sha256": "8eab70215043422bdb2d79e0ed04f831fcfc7b752010968ee559348119bfe3d3"
|
"sha256": "e2942b92e1fcbf94fbed88cae4fa17864cfbc57ad6214f3ebb926c6bf14f71be"
|
||||||
},
|
},
|
||||||
"SdCostume": {
|
"SdCostume": {
|
||||||
"filename": "LangSdCostume_Kor.json",
|
"filename": "LangSdCostume_Kor.json",
|
||||||
"count": 290,
|
"count": 294,
|
||||||
"sha256": "ebedae476122acb831a2c16ce5866c9baba24fc2826cc98a9116b18d2ff47712"
|
"sha256": "465d369c6df4c969e904d8260c2477bb68207c0af70af3de36725cf51c4a1cea"
|
||||||
},
|
},
|
||||||
"GeneratedLiveActiveSkillEffect": {
|
"GeneratedLiveActiveSkillEffect": {
|
||||||
"filename": "LangGeneratedLiveActiveSkillEffect_Kor.json",
|
"filename": "LangGeneratedLiveActiveSkillEffect_Kor.json",
|
||||||
@@ -361,23 +361,23 @@
|
|||||||
},
|
},
|
||||||
"GeneratedLiveActiveSkillLevel": {
|
"GeneratedLiveActiveSkillLevel": {
|
||||||
"filename": "LangGeneratedLiveActiveSkillLevel_Kor.json",
|
"filename": "LangGeneratedLiveActiveSkillLevel_Kor.json",
|
||||||
"count": 351,
|
"count": 359,
|
||||||
"sha256": "8320427b5fbafc7e53f65c3a9d04737dba0af74b01b1757681a7c69babd6c596"
|
"sha256": "907f43bade06ada7f5f3a00c24869526eb0612a034baa1bc7167d65ea084f1a2"
|
||||||
},
|
},
|
||||||
"GeneratedLiveLeaderSkill": {
|
"GeneratedLiveLeaderSkill": {
|
||||||
"filename": "LangGeneratedLiveLeaderSkill_Kor.json",
|
"filename": "LangGeneratedLiveLeaderSkill_Kor.json",
|
||||||
"count": 174,
|
"count": 178,
|
||||||
"sha256": "b1b4f54738fb6e28a12ca11ebfcf3f74645a3134cbc893519df8ca67b5ee28d7"
|
"sha256": "977d41dd08465944688bf322ff8e6d1b5d9f64c3b30a3e55198c46d02103430d"
|
||||||
},
|
},
|
||||||
"GeneratedLivePassiveSkillEffect": {
|
"GeneratedLivePassiveSkillEffect": {
|
||||||
"filename": "LangGeneratedLivePassiveSkillEffect_Kor.json",
|
"filename": "LangGeneratedLivePassiveSkillEffect_Kor.json",
|
||||||
"count": 178,
|
"count": 182,
|
||||||
"sha256": "5d1ada4bef3a0c3cc3e890489b39d2bfaeda999081908c0b657f29a748ae915b"
|
"sha256": "9eadbcb826569a40ed871e9894d75faf0ae4ab30c87d21fddc0791091e3ef7ec"
|
||||||
},
|
},
|
||||||
"GeneratedLivePassiveSkillLevel": {
|
"GeneratedLivePassiveSkillLevel": {
|
||||||
"filename": "LangGeneratedLivePassiveSkillLevel_Kor.json",
|
"filename": "LangGeneratedLivePassiveSkillLevel_Kor.json",
|
||||||
"count": 348,
|
"count": 356,
|
||||||
"sha256": "2afe4179bafb998c2d6ddf1deec90302f66d60cd966a471d6b375c205e4eec0b"
|
"sha256": "2794789db54429c7e415d9fb78759f0c553a1da540f5138504f4c1e41a551e12"
|
||||||
},
|
},
|
||||||
"GeneratedLiveSkillEffectTarget": {
|
"GeneratedLiveSkillEffectTarget": {
|
||||||
"filename": "LangGeneratedLiveSkillEffectTarget_Kor.json",
|
"filename": "LangGeneratedLiveSkillEffectTarget_Kor.json",
|
||||||
@@ -391,8 +391,8 @@
|
|||||||
},
|
},
|
||||||
"GeneratedLiveSpecialSkillLevel": {
|
"GeneratedLiveSpecialSkillLevel": {
|
||||||
"filename": "LangGeneratedLiveSpecialSkillLevel_Kor.json",
|
"filename": "LangGeneratedLiveSpecialSkillLevel_Kor.json",
|
||||||
"count": 348,
|
"count": 356,
|
||||||
"sha256": "e1d2972614f6d60b54924db9b440c3ce377a6344f537b8313058aa6d3322c72e"
|
"sha256": "f2b1839e9a4c8c8c62a077e9620602f1a2bf8be485f0eeb75ebf360c6051f7d8"
|
||||||
},
|
},
|
||||||
"GeneratedSkillTreeConnectEffect": {
|
"GeneratedSkillTreeConnectEffect": {
|
||||||
"filename": "LangGeneratedSkillTreeConnectEffect_Kor.json",
|
"filename": "LangGeneratedSkillTreeConnectEffect_Kor.json",
|
||||||
@@ -401,8 +401,8 @@
|
|||||||
},
|
},
|
||||||
"GeneratedSkillTreeEffect": {
|
"GeneratedSkillTreeEffect": {
|
||||||
"filename": "LangGeneratedSkillTreeEffect_Kor.json",
|
"filename": "LangGeneratedSkillTreeEffect_Kor.json",
|
||||||
"count": 120,
|
"count": 121,
|
||||||
"sha256": "753b94f2df410cf8e259bcd29f3b9705c3441d976506f128cb1af8c7af8d2f6b"
|
"sha256": "dbb2eba6c1def08b47338e0270c6de86b7e7ddc1c4cb2d81c91c0f76ecd8f1a7"
|
||||||
},
|
},
|
||||||
"GeneratedSkillTreeEffectPassiveTrigger": {
|
"GeneratedSkillTreeEffectPassiveTrigger": {
|
||||||
"filename": "LangGeneratedSkillTreeEffectPassiveTrigger_Kor.json",
|
"filename": "LangGeneratedSkillTreeEffectPassiveTrigger_Kor.json",
|
||||||
@@ -433,8 +433,8 @@
|
|||||||
"jpn": {
|
"jpn": {
|
||||||
"Card": {
|
"Card": {
|
||||||
"filename": "LangCard_Jpn.json",
|
"filename": "LangCard_Jpn.json",
|
||||||
"count": 174,
|
"count": 178,
|
||||||
"sha256": "5334af207d35a342dcb2e24df7e0ae6c47f0e41fd1f1ac9b0a93b9238485b46d"
|
"sha256": "c22b7cad065601082d44a30ec9ba6f8ac1109a3323f6315fe6db3bb292da29c1"
|
||||||
},
|
},
|
||||||
"Character": {
|
"Character": {
|
||||||
"filename": "LangCharacter_Jpn.json",
|
"filename": "LangCharacter_Jpn.json",
|
||||||
@@ -453,13 +453,13 @@
|
|||||||
},
|
},
|
||||||
"Costume": {
|
"Costume": {
|
||||||
"filename": "LangCostume_Jpn.json",
|
"filename": "LangCostume_Jpn.json",
|
||||||
"count": 182,
|
"count": 186,
|
||||||
"sha256": "dc376c668b8d299c05bd3f8ab302d57475a9ee1455991b462c3dd5168fc1768f"
|
"sha256": "897b7140e9eb8d7371d87ea015e04c084e8bb2b69c8140e8079f5f2af57aa431"
|
||||||
},
|
},
|
||||||
"SdCostume": {
|
"SdCostume": {
|
||||||
"filename": "LangSdCostume_Jpn.json",
|
"filename": "LangSdCostume_Jpn.json",
|
||||||
"count": 290,
|
"count": 294,
|
||||||
"sha256": "bce32f3326432c3426dee38abba709bf91aeb04207a9d058156a2e3afca0b83a"
|
"sha256": "53599937d206a494ba80bbb354b808ec0498aa6342164756fa1db7da32e96aeb"
|
||||||
},
|
},
|
||||||
"GeneratedLiveActiveSkillEffect": {
|
"GeneratedLiveActiveSkillEffect": {
|
||||||
"filename": "LangGeneratedLiveActiveSkillEffect_Jpn.json",
|
"filename": "LangGeneratedLiveActiveSkillEffect_Jpn.json",
|
||||||
@@ -468,23 +468,23 @@
|
|||||||
},
|
},
|
||||||
"GeneratedLiveActiveSkillLevel": {
|
"GeneratedLiveActiveSkillLevel": {
|
||||||
"filename": "LangGeneratedLiveActiveSkillLevel_Jpn.json",
|
"filename": "LangGeneratedLiveActiveSkillLevel_Jpn.json",
|
||||||
"count": 351,
|
"count": 359,
|
||||||
"sha256": "ee55ac4522fc5b0f641b38203e4fcdcc4ea340f011553e9b1cf1be5a5c212293"
|
"sha256": "085b4e28eb98f76eed8f418863ccffc2edc6cbdadadd4d1c778f29d449b335cd"
|
||||||
},
|
},
|
||||||
"GeneratedLiveLeaderSkill": {
|
"GeneratedLiveLeaderSkill": {
|
||||||
"filename": "LangGeneratedLiveLeaderSkill_Jpn.json",
|
"filename": "LangGeneratedLiveLeaderSkill_Jpn.json",
|
||||||
"count": 174,
|
"count": 178,
|
||||||
"sha256": "c83e4436db04305094e527d6130390ff3c195fe495277b636f6a21c53986ab83"
|
"sha256": "40ef8f1a03131f0753edcf96a4fbeb6004fd44c24f674b39713f3e0d95157c5a"
|
||||||
},
|
},
|
||||||
"GeneratedLivePassiveSkillEffect": {
|
"GeneratedLivePassiveSkillEffect": {
|
||||||
"filename": "LangGeneratedLivePassiveSkillEffect_Jpn.json",
|
"filename": "LangGeneratedLivePassiveSkillEffect_Jpn.json",
|
||||||
"count": 178,
|
"count": 182,
|
||||||
"sha256": "a197afd9d1b752c2eec24c65558f1d398b44527a8d5f5f5a2f4220afcb381c3d"
|
"sha256": "ed7224cd3edd4a46c5b2d0ab32c65d23f71a16435d5279db296b2b17e2b1c4e5"
|
||||||
},
|
},
|
||||||
"GeneratedLivePassiveSkillLevel": {
|
"GeneratedLivePassiveSkillLevel": {
|
||||||
"filename": "LangGeneratedLivePassiveSkillLevel_Jpn.json",
|
"filename": "LangGeneratedLivePassiveSkillLevel_Jpn.json",
|
||||||
"count": 348,
|
"count": 356,
|
||||||
"sha256": "5e2b927e997aa438359e98b94f065d9650517ea81b173305fd706779c9a5ed9d"
|
"sha256": "ddad142cc49f4cf53ce5bf5e66d046fc414022e43cbb150e1213409ab6029086"
|
||||||
},
|
},
|
||||||
"GeneratedLiveSkillEffectTarget": {
|
"GeneratedLiveSkillEffectTarget": {
|
||||||
"filename": "LangGeneratedLiveSkillEffectTarget_Jpn.json",
|
"filename": "LangGeneratedLiveSkillEffectTarget_Jpn.json",
|
||||||
@@ -498,8 +498,8 @@
|
|||||||
},
|
},
|
||||||
"GeneratedLiveSpecialSkillLevel": {
|
"GeneratedLiveSpecialSkillLevel": {
|
||||||
"filename": "LangGeneratedLiveSpecialSkillLevel_Jpn.json",
|
"filename": "LangGeneratedLiveSpecialSkillLevel_Jpn.json",
|
||||||
"count": 348,
|
"count": 356,
|
||||||
"sha256": "f20e52a776256504c2bf82f00ebd039b9afd94ae665ceaf79117b3756212cc6b"
|
"sha256": "a19a04e6bac45766017916e815a730a52c6dd66dc01a7795e1b442e1413f4ae1"
|
||||||
},
|
},
|
||||||
"GeneratedSkillTreeConnectEffect": {
|
"GeneratedSkillTreeConnectEffect": {
|
||||||
"filename": "LangGeneratedSkillTreeConnectEffect_Jpn.json",
|
"filename": "LangGeneratedSkillTreeConnectEffect_Jpn.json",
|
||||||
@@ -508,8 +508,8 @@
|
|||||||
},
|
},
|
||||||
"GeneratedSkillTreeEffect": {
|
"GeneratedSkillTreeEffect": {
|
||||||
"filename": "LangGeneratedSkillTreeEffect_Jpn.json",
|
"filename": "LangGeneratedSkillTreeEffect_Jpn.json",
|
||||||
"count": 120,
|
"count": 121,
|
||||||
"sha256": "4f7fe5cd22633bea68c83f26ceb4cca1e2546d258a4bbd747f224997a5701067"
|
"sha256": "980c5656e5ebc90546ef1cdda543158323b2acec7dc088eee8303296e073ca2b"
|
||||||
},
|
},
|
||||||
"GeneratedSkillTreeEffectPassiveTrigger": {
|
"GeneratedSkillTreeEffectPassiveTrigger": {
|
||||||
"filename": "LangGeneratedSkillTreeEffectPassiveTrigger_Jpn.json",
|
"filename": "LangGeneratedSkillTreeEffectPassiveTrigger_Jpn.json",
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "holodream-tools",
|
"name": "holodream-tools",
|
||||||
"version": "1.0.7",
|
"version": "1.0.8",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "holodream-tools",
|
"name": "holodream-tools",
|
||||||
"version": "1.0.7",
|
"version": "1.0.8",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"better-sqlite3": "^13.0.3",
|
"better-sqlite3": "^13.0.3",
|
||||||
"drizzle-orm": "^0.45.2",
|
"drizzle-orm": "^0.45.2",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "holodream-tools",
|
"name": "holodream-tools",
|
||||||
"version": "1.0.7",
|
"version": "1.0.8",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# 홀로도리 계산기 v1.0.8
|
||||||
|
|
||||||
|
최신 HolodoriDB 데이터와 신규 악곡 채보를 반영하고, 악곡 공개 시각에 맞춰 선택 목록을 갱신하도록 개선한 업데이트입니다.
|
||||||
|
|
||||||
|
## 주요 변경 사항
|
||||||
|
|
||||||
|
- 시라카미 후부키, 오오카미 미오, 네코마타 오카유, 이누가미 코로네의 수영복 5성 카드를 추가했습니다.
|
||||||
|
- `Say!Fanfare!`, `Yakou Tsuushinn`, `KAMISAMA・NEKOSAMA`, `SAIKYO TENSAI WANDERFUL WORLD of KORONE`, `We are GAMERS !!!!`, `Backseat`의 Hard/Expert 채보를 추가했습니다.
|
||||||
|
- HolodoriDB의 악곡 공개 시각을 채보 카탈로그에 포함하고, 공개 전인 악곡은 해당 시각이 지난 뒤 선택 목록에 표시하도록 개선했습니다.
|
||||||
|
- 최신 카드, 보드, 메모리 데이터를 반영해 카드 수를 178장으로, 메모리 최대 수를 29개로 갱신했습니다.
|
||||||
|
- 기존 채보를 최신 원본 기준으로 다시 수집하고 일부 악곡의 재생 시간과 원본 메타데이터를 바로잡았습니다.
|
||||||
|
- 보드 데이터 검증이 특정 노드 수에 의존하지 않고 모든 보드 모델의 구조적 일관성을 확인하도록 개선했습니다.
|
||||||
|
|
||||||
|
## 참고 사항
|
||||||
|
|
||||||
|
- `Backseat`은 게임 내 공개 시각인 2026년 8월 30일 00:00(KST)부터 선택할 수 있습니다.
|
||||||
|
- 현재 실측 점수 계수가 등록된 채보는 일부입니다. 계산 정확도 향상을 위해 대부분의 악곡에서 실측값 제보가 필요합니다.
|
||||||
|
- 실측값 제보: [제보 링크를 여기에 추가해 주세요]
|
||||||
|
- 신규 채보의 점수 계수는 실측 자료가 확보되기 전까지 추정값으로 표시됩니다.
|
||||||
|
|
||||||
|
## 다운로드
|
||||||
|
|
||||||
|
Release의 Assets에서 `HolodoriCalc-offline-v1.0.8.zip`을 내려받아 완전히 압축 해제한 뒤 `index.html`을 실행해 주세요. GitHub가 자동으로 제공하는 Source code 압축파일은 실행용 배포본이 아닙니다.
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
||||||
|
import { execFileSync } from 'node:child_process';
|
||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
|
|
||||||
const sourceOrigin = process.argv[2] ?? 'https://dreams.wf-calc.net';
|
const sourceOrigin = process.argv[2] ?? 'https://dreams.wf-calc.net';
|
||||||
@@ -11,11 +12,20 @@ const scoreCalibrationByKey = new Map(scoreCalibrations.charts.map((row) => [
|
|||||||
`${row.songId}::${row.difficulty}`,
|
`${row.songId}::${row.difficulty}`,
|
||||||
row
|
row
|
||||||
]));
|
]));
|
||||||
const musicMaster = JSON.parse(await readFile(path.resolve('data/raw/holodoridb/kor/Music.json'), 'utf8'));
|
function readHolodoriDbSource(locale, filename) {
|
||||||
|
const repositoryPath = path.resolve(`data/raw/holodoridb/${locale}`);
|
||||||
|
return JSON.parse(execFileSync('git', [
|
||||||
|
'-c', `safe.directory=${repositoryPath.replaceAll('\\', '/')}`,
|
||||||
|
'-C', repositoryPath,
|
||||||
|
'show', `origin/main:${filename}`
|
||||||
|
], { encoding: 'utf8', maxBuffer: 32 * 1024 * 1024 }));
|
||||||
|
}
|
||||||
|
|
||||||
|
const musicMaster = readHolodoriDbSource('kor', 'Music.json');
|
||||||
const musicById = new Map(musicMaster.map((row) => [row.data?.id ?? row.id, row.data ?? row]));
|
const musicById = new Map(musicMaster.map((row) => [row.data?.id ?? row.id, row.data ?? row]));
|
||||||
const englishMusicText = JSON.parse(await readFile(path.resolve('data/raw/holodoridb/eng/LangMusic_Eng.json'), 'utf8'));
|
const englishMusicText = readHolodoriDbSource('eng', 'LangMusic_Eng.json');
|
||||||
const englishTextById = new Map(englishMusicText.map((row) => [row.data?.id ?? row.id, row.data?.text ?? row.text]));
|
const englishTextById = new Map(englishMusicText.map((row) => [row.data?.id ?? row.id, row.data?.text ?? row.text]));
|
||||||
const musicDifficultyMaster = JSON.parse(await readFile(path.resolve('data/raw/holodoridb/kor/MusicDifficulty.json'), 'utf8'));
|
const musicDifficultyMaster = readHolodoriDbSource('kor', 'MusicDifficulty.json');
|
||||||
const difficultyLevelByKey = new Map(musicDifficultyMaster.map((row) => {
|
const difficultyLevelByKey = new Map(musicDifficultyMaster.map((row) => {
|
||||||
const data = row.data ?? row;
|
const data = row.data ?? row;
|
||||||
return [`${data.musicId}::${data.difficultyType.split('_').at(-1)?.toLowerCase()}`, data.difficultyLevel];
|
return [`${data.musicId}::${data.difficultyType.split('_').at(-1)?.toLowerCase()}`, data.difficultyLevel];
|
||||||
@@ -224,6 +234,7 @@ async function worker() {
|
|||||||
const sourceEntry = catalogByKey.get(`${item.songId}::${item.difficulty}`);
|
const sourceEntry = catalogByKey.get(`${item.songId}::${item.difficulty}`);
|
||||||
const music = musicById.get(item.songId);
|
const music = musicById.get(item.songId);
|
||||||
const singerOverride = singerMetadataOverrides[item.songId];
|
const singerOverride = singerMetadataOverrides[item.songId];
|
||||||
|
const releaseTime = Number(music?.startTime);
|
||||||
const notes = flattenEvents(chartData);
|
const notes = flattenEvents(chartData);
|
||||||
const measuredCalibration = scoreCalibrationByKey.get(`${item.songId}::${item.difficulty.toLowerCase()}`);
|
const measuredCalibration = scoreCalibrationByKey.get(`${item.songId}::${item.difficulty.toLowerCase()}`);
|
||||||
const output = {
|
const output = {
|
||||||
@@ -260,6 +271,7 @@ async function worker() {
|
|||||||
totalNotes: notes.length,
|
totalNotes: notes.length,
|
||||||
singerType: output.singerType,
|
singerType: output.singerType,
|
||||||
singerCharacterIds: output.singerCharacterIds,
|
singerCharacterIds: output.singerCharacterIds,
|
||||||
|
releaseTime: Number.isFinite(releaseTime) ? releaseTime : null,
|
||||||
path: `/data/charts/${fileName}`
|
path: `/data/charts/${fileName}`
|
||||||
});
|
});
|
||||||
completed += 1;
|
completed += 1;
|
||||||
@@ -273,7 +285,7 @@ await Promise.all(Array.from({ length: 6 }, () => worker()));
|
|||||||
normalizedCharts.sort((left, right) => left.songId.localeCompare(right.songId) || left.difficulty.localeCompare(right.difficulty));
|
normalizedCharts.sort((left, right) => left.songId.localeCompare(right.songId) || left.difficulty.localeCompare(right.difficulty));
|
||||||
await writeFile(catalogPath, `${JSON.stringify({
|
await writeFile(catalogPath, `${JSON.stringify({
|
||||||
schemaVersion: 1,
|
schemaVersion: 1,
|
||||||
source: sourceOrigin,
|
source: `${sourceOrigin}; hololive Dreams CDN via https://github.com/HolodoriDB/holodori-asset-tools`,
|
||||||
charts: normalizedCharts
|
charts: normalizedCharts
|
||||||
}, null, 2)}\n`, 'utf8');
|
}, null, 2)}\n`, 'utf8');
|
||||||
console.log(`${normalizedCharts.length}개 정확 채보를 저장했습니다.`);
|
console.log(`${normalizedCharts.length}개 정확 채보를 저장했습니다.`);
|
||||||
|
|||||||
@@ -735,7 +735,9 @@ const memorySummary = {
|
|||||||
|
|
||||||
assert(boardSummary.members.length > 0, 'no member boards were collected');
|
assert(boardSummary.members.length > 0, 'no member boards were collected');
|
||||||
assert(Object.keys(boardSummary.models).length > 0, 'no board position models were collected');
|
assert(Object.keys(boardSummary.models).length > 0, 'no board position models were collected');
|
||||||
assert(boardSummary.members.every((member) => boardSummary.models[member.positionGroupId]?.length === 152), 'one or more members have incomplete board positions');
|
const boardPositionCounts = Object.values(boardSummary.models).map((positions) => positions.length);
|
||||||
|
assert(boardPositionCounts.every((count) => count > 0), 'one or more board position models are empty');
|
||||||
|
assert(new Set(boardPositionCounts).size === 1, 'board position models have inconsistent position counts');
|
||||||
assert(boardSummary.members.every((member) => boardSummary.models[member.positionGroupId].every((position) => skillTreeNodeForCharacter(member.id, position.groupId))), 'one or more members have unresolved board nodes');
|
assert(boardSummary.members.every((member) => boardSummary.models[member.positionGroupId].every((position) => skillTreeNodeForCharacter(member.id, position.groupId))), 'one or more members have unresolved board nodes');
|
||||||
assert(memorySummary.maxCount > 0, 'no memory posters were collected');
|
assert(memorySummary.maxCount > 0, 'no memory posters were collected');
|
||||||
assert(memorySummary.effects.length > 0, 'no memory collection effects were collected');
|
assert(memorySummary.effects.length > 0, 'no memory collection effects were collected');
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"masterDataVersion": "71e11fbd082eec83d10cff35da7179cbaf319097f0021aa5747fe5a5392b549c",
|
"masterDataVersion": "fbca8c670e074558b24708bf163fff446a614f709afa9d1784395a15444121b0",
|
||||||
"members": [
|
"members": [
|
||||||
{
|
{
|
||||||
"id": "chr-00001",
|
"id": "chr-00001",
|
||||||
@@ -329,6 +329,11 @@
|
|||||||
],
|
],
|
||||||
"models": {
|
"models": {
|
||||||
"tree-model-001": [
|
"tree-model-001": [
|
||||||
|
{
|
||||||
|
"groupId": "G-024",
|
||||||
|
"x": -1,
|
||||||
|
"y": -10
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"groupId": "G-022",
|
"groupId": "G-022",
|
||||||
"x": -1,
|
"x": -1,
|
||||||
@@ -1091,6 +1096,11 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"tree-model-002": [
|
"tree-model-002": [
|
||||||
|
{
|
||||||
|
"groupId": "G-024",
|
||||||
|
"x": -1,
|
||||||
|
"y": -10
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"groupId": "G-022",
|
"groupId": "G-022",
|
||||||
"x": -1,
|
"x": -1,
|
||||||
@@ -1853,6 +1863,11 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"tree-model-003": [
|
"tree-model-003": [
|
||||||
|
{
|
||||||
|
"groupId": "G-024",
|
||||||
|
"x": -1,
|
||||||
|
"y": -10
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"groupId": "G-022",
|
"groupId": "G-022",
|
||||||
"x": -1,
|
"x": -1,
|
||||||
@@ -2615,6 +2630,11 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"tree-model-004": [
|
"tree-model-004": [
|
||||||
|
{
|
||||||
|
"groupId": "G-024",
|
||||||
|
"x": -1,
|
||||||
|
"y": -10
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"groupId": "G-022",
|
"groupId": "G-022",
|
||||||
"x": -1,
|
"x": -1,
|
||||||
@@ -9024,6 +9044,31 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"G-024": [
|
||||||
|
{
|
||||||
|
"number": 1,
|
||||||
|
"characterIds": [],
|
||||||
|
"grade": 1,
|
||||||
|
"type": "all_member",
|
||||||
|
"skillTreePointCost": 3,
|
||||||
|
"consumptions": [
|
||||||
|
{
|
||||||
|
"resourceType": "ResourceType_RESOURCE_TYPE_ITEM",
|
||||||
|
"resourceId": "item-skill_tree_allmember-1",
|
||||||
|
"quantity": "160"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"viewConditionGroupId": "cd-player_level-30",
|
||||||
|
"effect": {
|
||||||
|
"id": "skill_tree_effect-mini_game_reward_quantity_up_permil_up-5-skill_tree_effect_target-all-chase",
|
||||||
|
"type": "mini_game_reward_quantity_up_permil_up",
|
||||||
|
"value": 5,
|
||||||
|
"targetId": "skill_tree_effect_target-all",
|
||||||
|
"trigger": "always",
|
||||||
|
"description": " 어둠 속 추격의 획득 보상량이 [value/10]% UP"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
"R-001": [
|
"R-001": [
|
||||||
{
|
{
|
||||||
"number": 1,
|
"number": 1,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"masterDataVersion": "71e11fbd082eec83d10cff35da7179cbaf319097f0021aa5747fe5a5392b549c",
|
"masterDataVersion": "fbca8c670e074558b24708bf163fff446a614f709afa9d1784395a15444121b0",
|
||||||
"cards": [
|
"cards": [
|
||||||
{
|
{
|
||||||
"id": "card-00001-5-uniq-0000-00",
|
"id": "card-00001-5-uniq-0000-00",
|
||||||
@@ -1316,6 +1316,167 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "card-00006-5-uniq-0074-00",
|
||||||
|
"characterId": "chr-00006",
|
||||||
|
"rarity": 5,
|
||||||
|
"type": "큐트",
|
||||||
|
"name": "시라카미 후부키",
|
||||||
|
"versionName": "수영복",
|
||||||
|
"generation": "hololive 1기생 / GAMERS",
|
||||||
|
"highestStat": "센스",
|
||||||
|
"power": {
|
||||||
|
"maxLevel": 80,
|
||||||
|
"statsAtMaxLevel": {
|
||||||
|
"performance": 6184,
|
||||||
|
"technique": 6983,
|
||||||
|
"sense": 10345
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"details": {
|
||||||
|
"title": "물가에서 매료하는 twinkle",
|
||||||
|
"passive": [
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"description": "[attribute=cute]큐트 타입[/attribute] 2명의 스코어 서포트 효과 8% ",
|
||||||
|
"coolTimeSeconds": null,
|
||||||
|
"probabilityPercent": null,
|
||||||
|
"durationSeconds": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"description": "[attribute=cute]큐트 타입[/attribute] 2명의 스코어 서포트 효과 [highlight]11[/highlight]% ",
|
||||||
|
"coolTimeSeconds": null,
|
||||||
|
"probabilityPercent": null,
|
||||||
|
"durationSeconds": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"active": [
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"description": "35초마다 중간 확률로 13초 동안 스코어가 95% UP ",
|
||||||
|
"coolTimeSeconds": 35,
|
||||||
|
"probabilityPercent": 46,
|
||||||
|
"durationSeconds": 13,
|
||||||
|
"condition": "",
|
||||||
|
"effect": "스코어가 95% UP"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"description": "35초마다 중간 확률로 13초 동안 스코어가 [highlight]115[/highlight]% UP ",
|
||||||
|
"coolTimeSeconds": 35,
|
||||||
|
"probabilityPercent": 46,
|
||||||
|
"durationSeconds": 13,
|
||||||
|
"condition": "",
|
||||||
|
"effect": "스코어가 115% UP"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"special": [
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"description": "12초 동안 스코어 서포트 효과 110% ",
|
||||||
|
"coolTimeSeconds": null,
|
||||||
|
"probabilityPercent": null,
|
||||||
|
"durationSeconds": 12,
|
||||||
|
"condition": "",
|
||||||
|
"effect": "스코어 서포트 효과 110%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"description": "12초 동안 스코어 서포트 효과 [highlight]135[/highlight]% ",
|
||||||
|
"coolTimeSeconds": null,
|
||||||
|
"probabilityPercent": null,
|
||||||
|
"durationSeconds": 12,
|
||||||
|
"condition": "",
|
||||||
|
"effect": "스코어 서포트 효과 135%"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"connect": [
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"description": "범위 내의 holo멤버 보드 효과를 85% UP",
|
||||||
|
"effectPermilUp": 850,
|
||||||
|
"extent": [
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": -2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -1,
|
||||||
|
"y": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -1,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -2,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -1,
|
||||||
|
"y": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": 2
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"description": "범위 내의 holo멤버 보드 효과를 [highlight]135[/highlight]% UP",
|
||||||
|
"effectPermilUp": 1350,
|
||||||
|
"extent": [
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": -2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -1,
|
||||||
|
"y": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -1,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -2,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -1,
|
||||||
|
"y": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": 2
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"costume": {
|
||||||
|
"name": "1UP 스포티",
|
||||||
|
"description": "[attribute=cute]큐트 타입[/attribute] 2명 이상이면 전원의 센스가 130% UP "
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "card-00007-5-uniq-0008-00",
|
"id": "card-00007-5-uniq-0008-00",
|
||||||
"characterId": "chr-00007",
|
"characterId": "chr-00007",
|
||||||
@@ -2275,6 +2436,151 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "card-00014-5-uniq-0075-00",
|
||||||
|
"characterId": "chr-00014",
|
||||||
|
"rarity": 5,
|
||||||
|
"type": "퓨어",
|
||||||
|
"name": "오오카미 미오",
|
||||||
|
"versionName": "수영복",
|
||||||
|
"generation": "hololive 게이머즈",
|
||||||
|
"highestStat": "테크닉",
|
||||||
|
"power": {
|
||||||
|
"maxLevel": 80,
|
||||||
|
"statsAtMaxLevel": {
|
||||||
|
"performance": 6184,
|
||||||
|
"technique": 10345,
|
||||||
|
"sense": 6983
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"details": {
|
||||||
|
"title": "나른한 여름날의 Wolf Heart",
|
||||||
|
"passive": [
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"description": "[attribute=pure]퓨어 타입[/attribute] 2명 이상이면 [attribute=pure]퓨어 타입[/attribute] 2명의 테크닉이 32% UP ",
|
||||||
|
"coolTimeSeconds": null,
|
||||||
|
"probabilityPercent": null,
|
||||||
|
"durationSeconds": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"description": "[attribute=pure]퓨어 타입[/attribute] 2명 이상이면 [attribute=pure]퓨어 타입[/attribute] 2명의 테크닉이 [highlight]43[/highlight]% UP ",
|
||||||
|
"coolTimeSeconds": null,
|
||||||
|
"probabilityPercent": null,
|
||||||
|
"durationSeconds": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"active": [
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"description": "23초마다 중간 확률로 8초 동안 스코어가 100% UP ",
|
||||||
|
"coolTimeSeconds": 23,
|
||||||
|
"probabilityPercent": 46,
|
||||||
|
"durationSeconds": 8,
|
||||||
|
"condition": "",
|
||||||
|
"effect": "스코어가 100% UP"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"description": "23초마다 중간 확률로 8초 동안 스코어가 [highlight]120[/highlight]% UP ",
|
||||||
|
"coolTimeSeconds": 23,
|
||||||
|
"probabilityPercent": 46,
|
||||||
|
"durationSeconds": 8,
|
||||||
|
"condition": "",
|
||||||
|
"effect": "스코어가 120% UP"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"special": [
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"description": "12초 동안 스코어 서포트 효과 110% ",
|
||||||
|
"coolTimeSeconds": null,
|
||||||
|
"probabilityPercent": null,
|
||||||
|
"durationSeconds": 12,
|
||||||
|
"condition": "",
|
||||||
|
"effect": "스코어 서포트 효과 110%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"description": "12초 동안 스코어 서포트 효과 [highlight]135[/highlight]% ",
|
||||||
|
"coolTimeSeconds": null,
|
||||||
|
"probabilityPercent": null,
|
||||||
|
"durationSeconds": 12,
|
||||||
|
"condition": "",
|
||||||
|
"effect": "스코어 서포트 효과 135%"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"connect": [
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"description": "범위 내의 holo멤버 보드 효과를 110% UP",
|
||||||
|
"effectPermilUp": 1100,
|
||||||
|
"extent": [
|
||||||
|
{
|
||||||
|
"x": -1,
|
||||||
|
"y": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -1,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -1,
|
||||||
|
"y": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"description": "범위 내의 holo멤버 보드 효과를 [highlight]160[/highlight]% UP",
|
||||||
|
"effectPermilUp": 1600,
|
||||||
|
"extent": [
|
||||||
|
{
|
||||||
|
"x": -1,
|
||||||
|
"y": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -1,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -1,
|
||||||
|
"y": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"costume": {
|
||||||
|
"name": "물가의 HIGH SCORE",
|
||||||
|
"description": "[attribute=pure]퓨어 타입[/attribute] 2명 이상이면 전원의 테크닉이 130% UP "
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "card-00016-5-uniq-0014-00",
|
"id": "card-00016-5-uniq-0014-00",
|
||||||
"characterId": "chr-00016",
|
"characterId": "chr-00016",
|
||||||
@@ -2404,6 +2710,167 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "card-00016-5-uniq-0076-00",
|
||||||
|
"characterId": "chr-00016",
|
||||||
|
"rarity": 5,
|
||||||
|
"type": "해피",
|
||||||
|
"name": "네코마타 오카유",
|
||||||
|
"versionName": "수영복",
|
||||||
|
"generation": "hololive 게이머즈",
|
||||||
|
"highestStat": "퍼포먼스",
|
||||||
|
"power": {
|
||||||
|
"maxLevel": 80,
|
||||||
|
"statsAtMaxLevel": {
|
||||||
|
"performance": 10132,
|
||||||
|
"technique": 7116,
|
||||||
|
"sense": 6315
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"details": {
|
||||||
|
"title": "파라솔 아래 리버티 캣",
|
||||||
|
"passive": [
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"description": "GAMERS2명의 퍼포먼스가 32% UP ",
|
||||||
|
"coolTimeSeconds": null,
|
||||||
|
"probabilityPercent": null,
|
||||||
|
"durationSeconds": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"description": "GAMERS2명의 퍼포먼스가 [highlight]43[/highlight]% UP ",
|
||||||
|
"coolTimeSeconds": null,
|
||||||
|
"probabilityPercent": null,
|
||||||
|
"durationSeconds": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"active": [
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"description": "28초마다 높은 확률로 10초 동안 스코어가 95% UP ",
|
||||||
|
"coolTimeSeconds": 28,
|
||||||
|
"probabilityPercent": 55,
|
||||||
|
"durationSeconds": 10,
|
||||||
|
"condition": "",
|
||||||
|
"effect": "스코어가 95% UP"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"description": "28초마다 높은 확률로 10초 동안 스코어가 [highlight]110[/highlight]% UP ",
|
||||||
|
"coolTimeSeconds": 28,
|
||||||
|
"probabilityPercent": 55,
|
||||||
|
"durationSeconds": 10,
|
||||||
|
"condition": "",
|
||||||
|
"effect": "스코어가 110% UP"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"special": [
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"description": "11초 동안 스코어 서포트 효과 110% GAMERS(이)가 2명 이상이면 스킬 발동률이 40% UP",
|
||||||
|
"coolTimeSeconds": null,
|
||||||
|
"probabilityPercent": null,
|
||||||
|
"durationSeconds": 11,
|
||||||
|
"condition": "GAMERS(이)가 2명 이상이면",
|
||||||
|
"effect": "스코어 서포트 효과 110% 스킬 발동률이 40% UP"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"description": "11초 동안 스코어 서포트 효과 [highlight]130[/highlight]% GAMERS(이)가 2명 이상이면 스킬 발동률이 [highlight]50[/highlight]% UP",
|
||||||
|
"coolTimeSeconds": null,
|
||||||
|
"probabilityPercent": null,
|
||||||
|
"durationSeconds": 11,
|
||||||
|
"condition": "GAMERS(이)가 2명 이상이면",
|
||||||
|
"effect": "스코어 서포트 효과 130% 스킬 발동률이 50% UP"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"connect": [
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"description": "범위 내의 holo멤버 보드 효과를 85% UP",
|
||||||
|
"effectPermilUp": 850,
|
||||||
|
"extent": [
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": -2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"y": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 2,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"y": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": 2
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"description": "범위 내의 holo멤버 보드 효과를 [highlight]135[/highlight]% UP",
|
||||||
|
"effectPermilUp": 1350,
|
||||||
|
"extent": [
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": -2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"y": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 2,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"y": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": 2
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"costume": {
|
||||||
|
"name": "바닷바람의 캣워크",
|
||||||
|
"description": "GAMERS(이)가 2명 이상이면 전원의 퍼포먼스가 135% UP "
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "card-00017-5-uniq-0015-00",
|
"id": "card-00017-5-uniq-0015-00",
|
||||||
"characterId": "chr-00017",
|
"characterId": "chr-00017",
|
||||||
@@ -2541,6 +3008,151 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "card-00017-5-uniq-0077-00",
|
||||||
|
"characterId": "chr-00017",
|
||||||
|
"rarity": 5,
|
||||||
|
"type": "퓨어",
|
||||||
|
"name": "이누가미 코로네",
|
||||||
|
"versionName": "수영복",
|
||||||
|
"generation": "hololive 게이머즈",
|
||||||
|
"highestStat": "테크닉",
|
||||||
|
"power": {
|
||||||
|
"maxLevel": 80,
|
||||||
|
"statsAtMaxLevel": {
|
||||||
|
"performance": 6315,
|
||||||
|
"technique": 10132,
|
||||||
|
"sense": 7116
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"details": {
|
||||||
|
"title": "밀림을 누비는 와일드 서머!",
|
||||||
|
"passive": [
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"description": "[attribute=pure]퓨어 타입[/attribute] 2명의 스코어 서포트 효과 8% ",
|
||||||
|
"coolTimeSeconds": null,
|
||||||
|
"probabilityPercent": null,
|
||||||
|
"durationSeconds": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"description": "[attribute=pure]퓨어 타입[/attribute] 2명의 스코어 서포트 효과 [highlight]11[/highlight]% ",
|
||||||
|
"coolTimeSeconds": null,
|
||||||
|
"probabilityPercent": null,
|
||||||
|
"durationSeconds": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"active": [
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"description": "32초마다 높은 확률로 11초 동안 스코어가 50% UP [attribute=pure]퓨어 타입[/attribute] 2명 이상이면 스코어가 100% UP ",
|
||||||
|
"coolTimeSeconds": 32,
|
||||||
|
"probabilityPercent": 55,
|
||||||
|
"durationSeconds": 11,
|
||||||
|
"condition": "[attribute=pure]퓨어 타입[/attribute] 2명 이상이면",
|
||||||
|
"effect": "스코어가 100% UP"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"description": "32초마다 높은 확률로 11초 동안 스코어가 [highlight]60[/highlight]% UP [attribute=pure]퓨어 타입[/attribute] 2명 이상이면 스코어가 [highlight]120[/highlight]% UP ",
|
||||||
|
"coolTimeSeconds": 32,
|
||||||
|
"probabilityPercent": 55,
|
||||||
|
"durationSeconds": 11,
|
||||||
|
"condition": "[attribute=pure]퓨어 타입[/attribute] 2명 이상이면",
|
||||||
|
"effect": "스코어가 120% UP"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"special": [
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"description": "12초 동안 스코어 서포트 효과 100% 스킬 발동률이 35% UP",
|
||||||
|
"coolTimeSeconds": null,
|
||||||
|
"probabilityPercent": null,
|
||||||
|
"durationSeconds": 12,
|
||||||
|
"condition": "",
|
||||||
|
"effect": "스코어 서포트 효과 100% 스킬 발동률이 35% UP"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"description": "12초 동안 스코어 서포트 효과 [highlight]120[/highlight]% 스킬 발동률이 [highlight]40[/highlight]% UP",
|
||||||
|
"coolTimeSeconds": null,
|
||||||
|
"probabilityPercent": null,
|
||||||
|
"durationSeconds": 12,
|
||||||
|
"condition": "",
|
||||||
|
"effect": "스코어 서포트 효과 120% 스킬 발동률이 40% UP"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"connect": [
|
||||||
|
{
|
||||||
|
"level": 1,
|
||||||
|
"description": "범위 내의 holo멤버 보드 효과를 110% UP",
|
||||||
|
"effectPermilUp": 1100,
|
||||||
|
"extent": [
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"y": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -1,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"y": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": 2,
|
||||||
|
"description": "범위 내의 holo멤버 보드 효과를 [highlight]160[/highlight]% UP",
|
||||||
|
"effectPermilUp": 1600,
|
||||||
|
"extent": [
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"y": -1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -1,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 0,
|
||||||
|
"y": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"y": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"costume": {
|
||||||
|
"name": "줄무늬 임팩트",
|
||||||
|
"description": "[attribute=pure]퓨어 타입[/attribute] 2명 이상이면 전원의 테크닉이 80% UP [attribute=pure]퓨어 타입[/attribute] 2명 이상이면 전원의 스코어 서포트 효과 25%"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "card-00019-5-uniq-0016-00",
|
"id": "card-00019-5-uniq-0016-00",
|
||||||
"characterId": "chr-00019",
|
"characterId": "chr-00019",
|
||||||
|
|||||||
+1338
-764
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"schemaVersion": 1,
|
"schemaVersion": 1,
|
||||||
"masterDataVersion": "71e11fbd082eec83d10cff35da7179cbaf319097f0021aa5747fe5a5392b549c",
|
"masterDataVersion": "fbca8c670e074558b24708bf163fff446a614f709afa9d1784395a15444121b0",
|
||||||
"maxCount": 28,
|
"maxCount": 29,
|
||||||
"effects": [
|
"effects": [
|
||||||
{
|
{
|
||||||
"count": 1,
|
"count": 1,
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ export type SongChartSummary = {
|
|||||||
difficulty: string;
|
difficulty: string;
|
||||||
difficultyLevel?: number | null;
|
difficultyLevel?: number | null;
|
||||||
scoreCalibrationSource?: 'measured' | 'local-estimated-v1' | string;
|
scoreCalibrationSource?: 'measured' | 'local-estimated-v1' | string;
|
||||||
|
releaseTime?: number | null;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type SongOption = {
|
export type SongOption = {
|
||||||
|
|||||||
@@ -6,11 +6,13 @@ export const SONG_RELEASE_TIMES: Readonly<Record<string, number>> = {
|
|||||||
m0336: 1_787_655_600_000
|
m0336: 1_787_655_600_000
|
||||||
};
|
};
|
||||||
|
|
||||||
export function isSongReleased(songId: string, now = Date.now()): boolean {
|
export function isSongReleased(songId: string, now = Date.now(), catalogReleaseTime?: number | null): boolean {
|
||||||
const releaseTime = SONG_RELEASE_TIMES[songId];
|
const releaseTime = typeof catalogReleaseTime === 'number' && Number.isFinite(catalogReleaseTime)
|
||||||
|
? catalogReleaseTime
|
||||||
|
: SONG_RELEASE_TIMES[songId];
|
||||||
return releaseTime === undefined || now >= releaseTime;
|
return releaseTime === undefined || now >= releaseTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function releasedSongCharts<T extends { songId: string }>(charts: readonly T[], now = Date.now()): T[] {
|
export function releasedSongCharts<T extends { songId: string; releaseTime?: number | null }>(charts: readonly T[], now = Date.now()): T[] {
|
||||||
return charts.filter((chart) => isSongReleased(chart.songId, now));
|
return charts.filter((chart) => isSongReleased(chart.songId, now, chart.releaseTime));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,3 +30,14 @@ test('채보 목록에서 공개되지 않은 악곡의 모든 난이도를 제
|
|||||||
assert.deepEqual(releasedSongCharts(charts, SONG_RELEASE_TIMES.m0332 - 1), [charts[0]]);
|
assert.deepEqual(releasedSongCharts(charts, SONG_RELEASE_TIMES.m0332 - 1), [charts[0]]);
|
||||||
assert.deepEqual(releasedSongCharts(charts, SONG_RELEASE_TIMES.m0332), charts);
|
assert.deepEqual(releasedSongCharts(charts, SONG_RELEASE_TIMES.m0332), charts);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('채보 카탈로그의 HolodoriDB 공개 시각을 수동 목록보다 우선한다', () => {
|
||||||
|
const releaseTime = Date.parse('2026-08-30T00:00:00+09:00');
|
||||||
|
const charts = [
|
||||||
|
{ songId: 'm0359', difficulty: 'expert', releaseTime },
|
||||||
|
{ songId: 'm0359', difficulty: 'hard', releaseTime }
|
||||||
|
];
|
||||||
|
|
||||||
|
assert.deepEqual(releasedSongCharts(charts, releaseTime - 1), []);
|
||||||
|
assert.deepEqual(releasedSongCharts(charts, releaseTime), charts);
|
||||||
|
});
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user