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