4295 lines
134 KiB
Python
4295 lines
134 KiB
Python
# vim: set fileencoding=utf-8
|
|
from typing import Any, Dict, List, Tuple
|
|
|
|
from bemani.backend.sdvx.gravitywars import SoundVoltexGravityWars
|
|
from bemani.common import ID, Profile
|
|
from bemani.data import Score, UserID
|
|
from bemani.protocol import Node
|
|
|
|
|
|
class SoundVoltexGravityWarsSeason2(
|
|
SoundVoltexGravityWars,
|
|
):
|
|
def _get_skill_analyzer_seasons(self) -> Dict[int, str]:
|
|
return {
|
|
1: "SKILL ANALYZER 第1回 Aコース",
|
|
2: "SKILL ANALYZER 第1回 Bコース",
|
|
3: "SKILL ANALYZER 第1回 Cコース",
|
|
4: "The 4th KAC コース",
|
|
5: "SKILL ANALYZER 第2回 Aコース",
|
|
6: "SKILL ANALYZER 第2回 Bコース",
|
|
7: "SKILL ANALYZER 第2回 Cコース",
|
|
8: "SKILL ANALYZER 第3回 Aコース",
|
|
9: "SKILL ANALYZER 第3回 Bコース",
|
|
10: "SKILL ANALYZER 第3回 Cコース",
|
|
11: "SKILL ANALYZER 第4回",
|
|
12: "SKILL ANALYZER 第5回 Aコース",
|
|
13: "SKILL ANALYZER 第5回 Bコース",
|
|
14: "SKILL ANALYZER 第5回 Cコース",
|
|
15: "SKILL ANALYZER 第6回 Aコース",
|
|
16: "SKILL ANALYZER 第6回 Bコース",
|
|
17: "天下一コース",
|
|
18: "The 5th KAC コース",
|
|
19: "VOLTEXES コース",
|
|
20: "SKILL ANALYZER 第7回",
|
|
21: "SKILL ANALYZER 第8回",
|
|
}
|
|
|
|
def _get_skill_analyzer_courses(self) -> List[Dict[str, Any]]:
|
|
return [
|
|
{
|
|
"level": 0,
|
|
"season_id": 1,
|
|
"tracks": [
|
|
{
|
|
"id": 109,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 283,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 279,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 1,
|
|
"season_id": 1,
|
|
"tracks": [
|
|
{
|
|
"id": 76,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 196,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 8,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 2,
|
|
"season_id": 1,
|
|
"tracks": [
|
|
{
|
|
"id": 90,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 228,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 80,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 3,
|
|
"season_id": 1,
|
|
"tracks": [
|
|
{
|
|
"id": 125,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 201,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 237,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 4,
|
|
"season_id": 1,
|
|
"tracks": [
|
|
{
|
|
"id": 393,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 352,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 66,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 5,
|
|
"season_id": 1,
|
|
"tracks": [
|
|
{
|
|
"id": 383,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 511,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 331,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 6,
|
|
"season_id": 1,
|
|
"tracks": [
|
|
{
|
|
"id": 422,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 445,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 71,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 7,
|
|
"season_id": 1,
|
|
"tracks": [
|
|
{
|
|
"id": 454,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 158,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 173,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 8,
|
|
"season_id": 1,
|
|
"tracks": [
|
|
{
|
|
"id": 322,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 63,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 124,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 9,
|
|
"season_id": 1,
|
|
"tracks": [
|
|
{
|
|
"id": 348,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 73,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 259,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 0,
|
|
"season_id": 2,
|
|
"tracks": [
|
|
{
|
|
"id": 374,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 84,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 303,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 1,
|
|
"season_id": 2,
|
|
"tracks": [
|
|
{
|
|
"id": 22,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 274,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 183,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 2,
|
|
"season_id": 2,
|
|
"tracks": [
|
|
{
|
|
"id": 56,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 244,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 4,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 3,
|
|
"season_id": 2,
|
|
"tracks": [
|
|
{
|
|
"id": 414,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 209,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 334,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 4,
|
|
"season_id": 2,
|
|
"tracks": [
|
|
{
|
|
"id": 123,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 403,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 23,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 5,
|
|
"season_id": 2,
|
|
"tracks": [
|
|
{
|
|
"id": 391,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 239,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 426,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 6,
|
|
"season_id": 2,
|
|
"tracks": [
|
|
{
|
|
"id": 389,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 89,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 246,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 7,
|
|
"season_id": 2,
|
|
"tracks": [
|
|
{
|
|
"id": 419,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 299,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 341,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 8,
|
|
"season_id": 2,
|
|
"tracks": [
|
|
{
|
|
"id": 394,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 466,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 47,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 9,
|
|
"season_id": 2,
|
|
"tracks": [
|
|
{
|
|
"id": 500,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 247,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 229,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 0,
|
|
"season_id": 3,
|
|
"tracks": [
|
|
{
|
|
"id": 36,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 189,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 171,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 1,
|
|
"season_id": 3,
|
|
"tracks": [
|
|
{
|
|
"id": 182,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 3,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 105,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 2,
|
|
"season_id": 3,
|
|
"tracks": [
|
|
{
|
|
"id": 14,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 120,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 86,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 3,
|
|
"season_id": 3,
|
|
"tracks": [
|
|
{
|
|
"id": 390,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 243,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 186,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 4,
|
|
"season_id": 3,
|
|
"tracks": [
|
|
{
|
|
"id": 36,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 423,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 59,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 5,
|
|
"season_id": 3,
|
|
"tracks": [
|
|
{
|
|
"id": 452,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 262,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 480,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 6,
|
|
"season_id": 3,
|
|
"tracks": [
|
|
{
|
|
"id": 411,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 70,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 211,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 7,
|
|
"season_id": 3,
|
|
"tracks": [
|
|
{
|
|
"id": 30,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 72,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 293,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 8,
|
|
"season_id": 3,
|
|
"tracks": [
|
|
{
|
|
"id": 87,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 117,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 269,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 9,
|
|
"season_id": 3,
|
|
"tracks": [
|
|
{
|
|
"id": 498,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 437,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 126,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 0,
|
|
"level": -1,
|
|
"skill_name": "エンジョイ♪ごりらコースA",
|
|
"skill_name_id": 12,
|
|
"season_id": 4,
|
|
"tracks": [
|
|
{
|
|
"id": 466,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 273,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 470,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 1,
|
|
"level": -1,
|
|
"skill_name": "エンジョイ♪ごりらコースB",
|
|
"skill_name_id": 12,
|
|
"season_id": 4,
|
|
"tracks": [
|
|
{
|
|
"id": 194,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 343,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 501,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 2,
|
|
"level": -1,
|
|
"skill_name": "エンジョイ♪ごりらコースC",
|
|
"skill_name_id": 12,
|
|
"season_id": 4,
|
|
"tracks": [
|
|
{
|
|
"id": 356,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 7,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 472,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 3,
|
|
"level": -1,
|
|
"skill_name": "エンジョイ♪ごりらコースD",
|
|
"skill_name_id": 12,
|
|
"season_id": 4,
|
|
"tracks": [
|
|
{
|
|
"id": 299,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 333,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 583,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 4,
|
|
"level": -1,
|
|
"skill_name": "チャレンジ★ごりらコースA",
|
|
"skill_name_id": 12,
|
|
"season_id": 4,
|
|
"tracks": [
|
|
{
|
|
"id": 466,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 273,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 470,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 5,
|
|
"level": -1,
|
|
"skill_name": "チャレンジ★ごりらコースB",
|
|
"skill_name_id": 12,
|
|
"season_id": 4,
|
|
"tracks": [
|
|
{
|
|
"id": 194,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 343,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 501,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 6,
|
|
"level": -1,
|
|
"skill_name": "チャレンジ★ごりらコースC",
|
|
"skill_name_id": 12,
|
|
"season_id": 4,
|
|
"tracks": [
|
|
{
|
|
"id": 356,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 7,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 472,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 7,
|
|
"level": -1,
|
|
"skill_name": "チャレンジ★ごりらコースD",
|
|
"skill_name_id": 12,
|
|
"season_id": 4,
|
|
"tracks": [
|
|
{
|
|
"id": 299,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 333,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 583,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 0,
|
|
"season_id": 5,
|
|
"tracks": [
|
|
{
|
|
"id": 47,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 334,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 10,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 1,
|
|
"season_id": 5,
|
|
"tracks": [
|
|
{
|
|
"id": 11,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 224,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 132,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 2,
|
|
"season_id": 5,
|
|
"tracks": [
|
|
{
|
|
"id": 137,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 336,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 380,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 3,
|
|
"season_id": 5,
|
|
"tracks": [
|
|
{
|
|
"id": 109,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 308,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 113,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 4,
|
|
"season_id": 5,
|
|
"tracks": [
|
|
{
|
|
"id": 101,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 200,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 478,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 5,
|
|
"season_id": 5,
|
|
"tracks": [
|
|
{
|
|
"id": 487,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 254,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 410,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 6,
|
|
"season_id": 5,
|
|
"tracks": [
|
|
{
|
|
"id": 196,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 170,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 218,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 7,
|
|
"season_id": 5,
|
|
"tracks": [
|
|
{
|
|
"id": 489,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 519,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 373,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 8,
|
|
"season_id": 5,
|
|
"tracks": [
|
|
{
|
|
"id": 456,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 263,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 390,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 9,
|
|
"season_id": 5,
|
|
"tracks": [
|
|
{
|
|
"id": 19,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 116,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 508,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 0,
|
|
"season_id": 6,
|
|
"tracks": [
|
|
{
|
|
"id": 123,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 231,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 185,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 1,
|
|
"season_id": 6,
|
|
"tracks": [
|
|
{
|
|
"id": 65,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 386,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 92,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 2,
|
|
"season_id": 6,
|
|
"tracks": [
|
|
{
|
|
"id": 379,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 225,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 427,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 3,
|
|
"season_id": 6,
|
|
"tracks": [
|
|
{
|
|
"id": 122,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 249,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 185,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 4,
|
|
"season_id": 6,
|
|
"tracks": [
|
|
{
|
|
"id": 413,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 157,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 402,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 5,
|
|
"season_id": 6,
|
|
"tracks": [
|
|
{
|
|
"id": 412,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 323,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 256,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 6,
|
|
"season_id": 6,
|
|
"tracks": [
|
|
{
|
|
"id": 400,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 368,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 241,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 7,
|
|
"season_id": 6,
|
|
"tracks": [
|
|
{
|
|
"id": 453,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 442,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 216,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 8,
|
|
"season_id": 6,
|
|
"tracks": [
|
|
{
|
|
"id": 370,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 244,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 252,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 9,
|
|
"season_id": 6,
|
|
"tracks": [
|
|
{
|
|
"id": 359,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 214,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 506,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 0,
|
|
"season_id": 7,
|
|
"tracks": [
|
|
{
|
|
"id": 124,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 446,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 34,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 1,
|
|
"season_id": 7,
|
|
"tracks": [
|
|
{
|
|
"id": 113,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 309,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 42,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 2,
|
|
"season_id": 7,
|
|
"tracks": [
|
|
{
|
|
"id": 353,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 246,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 130,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 3,
|
|
"season_id": 7,
|
|
"tracks": [
|
|
{
|
|
"id": 63,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 219,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 153,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 4,
|
|
"season_id": 7,
|
|
"tracks": [
|
|
{
|
|
"id": 418,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 369,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 385,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 5,
|
|
"season_id": 7,
|
|
"tracks": [
|
|
{
|
|
"id": 226,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 301,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 159,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 6,
|
|
"season_id": 7,
|
|
"tracks": [
|
|
{
|
|
"id": 311,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 255,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 213,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 7,
|
|
"season_id": 7,
|
|
"tracks": [
|
|
{
|
|
"id": 357,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 268,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 304,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 8,
|
|
"season_id": 7,
|
|
"tracks": [
|
|
{
|
|
"id": 295,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 36,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 302,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 9,
|
|
"season_id": 7,
|
|
"tracks": [
|
|
{
|
|
"id": 7,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 208,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 376,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 0,
|
|
"season_id": 8,
|
|
"tracks": [
|
|
{
|
|
"id": 101,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 219,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 159,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 1,
|
|
"season_id": 8,
|
|
"tracks": [
|
|
{
|
|
"id": 87,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 337,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 403,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 2,
|
|
"season_id": 8,
|
|
"tracks": [
|
|
{
|
|
"id": 30,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 596,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 39,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 3,
|
|
"season_id": 8,
|
|
"tracks": [
|
|
{
|
|
"id": 430,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 561,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 328,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 4,
|
|
"season_id": 8,
|
|
"tracks": [
|
|
{
|
|
"id": 444,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 618,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 100,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 5,
|
|
"season_id": 8,
|
|
"tracks": [
|
|
{
|
|
"id": 447,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 545,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 94,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 6,
|
|
"season_id": 8,
|
|
"tracks": [
|
|
{
|
|
"id": 291,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 2,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 475,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 7,
|
|
"season_id": 8,
|
|
"tracks": [
|
|
{
|
|
"id": 627,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 624,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 427,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 8,
|
|
"season_id": 8,
|
|
"tracks": [
|
|
{
|
|
"id": 464,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 122,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 591,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 9,
|
|
"season_id": 8,
|
|
"tracks": [
|
|
{
|
|
"id": 381,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 463,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 507,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 0,
|
|
"season_id": 9,
|
|
"tracks": [
|
|
{
|
|
"id": 468,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 243,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 388,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 1,
|
|
"season_id": 9,
|
|
"tracks": [
|
|
{
|
|
"id": 167,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 486,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 75,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 2,
|
|
"season_id": 9,
|
|
"tracks": [
|
|
{
|
|
"id": 96,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 557,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 55,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 3,
|
|
"season_id": 9,
|
|
"tracks": [
|
|
{
|
|
"id": 116,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 520,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 314,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 4,
|
|
"season_id": 9,
|
|
"tracks": [
|
|
{
|
|
"id": 507,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 567,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 205,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 5,
|
|
"season_id": 9,
|
|
"tracks": [
|
|
{
|
|
"id": 86,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 488,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 80,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 6,
|
|
"season_id": 9,
|
|
"tracks": [
|
|
{
|
|
"id": 184,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 130,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 524,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 7,
|
|
"season_id": 9,
|
|
"tracks": [
|
|
{
|
|
"id": 521,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 576,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 503,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 8,
|
|
"season_id": 9,
|
|
"tracks": [
|
|
{
|
|
"id": 473,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 125,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 538,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 9,
|
|
"season_id": 9,
|
|
"tracks": [
|
|
{
|
|
"id": 407,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 472,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 363,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 0,
|
|
"season_id": 10,
|
|
"tracks": [
|
|
{
|
|
"id": 122,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 209,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 24,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 1,
|
|
"season_id": 10,
|
|
"tracks": [
|
|
{
|
|
"id": 405,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 554,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 77,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 2,
|
|
"season_id": 10,
|
|
"tracks": [
|
|
{
|
|
"id": 426,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 262,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 194,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 3,
|
|
"season_id": 10,
|
|
"tracks": [
|
|
{
|
|
"id": 343,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 564,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 248,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 4,
|
|
"season_id": 10,
|
|
"tracks": [
|
|
{
|
|
"id": 126,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 471,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 276,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 5,
|
|
"season_id": 10,
|
|
"tracks": [
|
|
{
|
|
"id": 476,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 120,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 57,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 6,
|
|
"season_id": 10,
|
|
"tracks": [
|
|
{
|
|
"id": 146,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 622,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 152,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 7,
|
|
"season_id": 10,
|
|
"tracks": [
|
|
{
|
|
"id": 562,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 531,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 449,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 8,
|
|
"season_id": 10,
|
|
"tracks": [
|
|
{
|
|
"id": 404,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 123,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 607,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 9,
|
|
"season_id": 10,
|
|
"tracks": [
|
|
{
|
|
"id": 469,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 496,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 289,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
# Manually specify IDs here since this has more than one level 11.
|
|
{
|
|
"id": 0,
|
|
"level": 0,
|
|
"season_id": 11,
|
|
"tracks": [
|
|
{
|
|
"id": 190,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 568,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 191,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 1,
|
|
"level": 1,
|
|
"season_id": 11,
|
|
"tracks": [
|
|
{
|
|
"id": 278,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 41,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 18,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 2,
|
|
"level": 2,
|
|
"season_id": 11,
|
|
"tracks": [
|
|
{
|
|
"id": 15,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 483,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 467,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 3,
|
|
"level": 3,
|
|
"season_id": 11,
|
|
"tracks": [
|
|
{
|
|
"id": 585,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 486,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 48,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 4,
|
|
"level": 4,
|
|
"season_id": 11,
|
|
"tracks": [
|
|
{
|
|
"id": 103,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 335,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 224,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 5,
|
|
"level": 5,
|
|
"season_id": 11,
|
|
"tracks": [
|
|
{
|
|
"id": 275,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 438,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 67,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 6,
|
|
"level": 6,
|
|
"season_id": 11,
|
|
"tracks": [
|
|
{
|
|
"id": 202,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 264,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 526,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 7,
|
|
"level": 7,
|
|
"season_id": 11,
|
|
"tracks": [
|
|
{
|
|
"id": 131,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 155,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 394,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 8,
|
|
"level": 8,
|
|
"season_id": 11,
|
|
"tracks": [
|
|
{
|
|
"id": 396,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 346,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 510,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 9,
|
|
"level": 9,
|
|
"season_id": 11,
|
|
"tracks": [
|
|
{
|
|
"id": 326,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 470,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 362,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 10,
|
|
"level": 10,
|
|
"season_id": 11,
|
|
"tracks": [
|
|
{
|
|
"id": 339,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 418,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 525,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 11,
|
|
"level": 10,
|
|
"season_id": 11,
|
|
"tracks": [
|
|
{
|
|
"id": 36,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 47,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 73,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 12,
|
|
"level": 11,
|
|
"season_id": 11,
|
|
"tracks": [
|
|
{
|
|
"id": 126,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 367,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 636,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 0,
|
|
"season_id": 12,
|
|
"tracks": [
|
|
{
|
|
"id": 507,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 671,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 176,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 1,
|
|
"season_id": 12,
|
|
"tracks": [
|
|
{
|
|
"id": 27,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 520,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 103,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 2,
|
|
"season_id": 12,
|
|
"tracks": [
|
|
{
|
|
"id": 478,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 264,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 322,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 3,
|
|
"season_id": 12,
|
|
"tracks": [
|
|
{
|
|
"id": 107,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 520,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 163,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 4,
|
|
"season_id": 12,
|
|
"tracks": [
|
|
{
|
|
"id": 408,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 34,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 678,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 5,
|
|
"season_id": 12,
|
|
"tracks": [
|
|
{
|
|
"id": 481,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 436,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 104,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 6,
|
|
"season_id": 12,
|
|
"tracks": [
|
|
{
|
|
"id": 55,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 415,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 512,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 7,
|
|
"season_id": 12,
|
|
"tracks": [
|
|
{
|
|
"id": 483,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 509,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 557,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 8,
|
|
"season_id": 12,
|
|
"tracks": [
|
|
{
|
|
"id": 497,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 58,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 166,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 9,
|
|
"season_id": 12,
|
|
"tracks": [
|
|
{
|
|
"id": 581,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 439,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 443,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 0,
|
|
"season_id": 13,
|
|
"tracks": [
|
|
{
|
|
"id": 250,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 245,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 186,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 1,
|
|
"season_id": 13,
|
|
"tracks": [
|
|
{
|
|
"id": 13,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 618,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 31,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 2,
|
|
"season_id": 13,
|
|
"tracks": [
|
|
{
|
|
"id": 436,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 144,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 79,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 3,
|
|
"season_id": 13,
|
|
"tracks": [
|
|
{
|
|
"id": 489,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 245,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 222,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 4,
|
|
"season_id": 13,
|
|
"tracks": [
|
|
{
|
|
"id": 556,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 233,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 565,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 5,
|
|
"season_id": 13,
|
|
"tracks": [
|
|
{
|
|
"id": 354,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 281,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 2,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 6,
|
|
"season_id": 13,
|
|
"tracks": [
|
|
{
|
|
"id": 14,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 267,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 490,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 7,
|
|
"season_id": 13,
|
|
"tracks": [
|
|
{
|
|
"id": 467,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 585,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 560,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 8,
|
|
"season_id": 13,
|
|
"tracks": [
|
|
{
|
|
"id": 599,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 101,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 109,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 9,
|
|
"season_id": 13,
|
|
"tracks": [
|
|
{
|
|
"id": 630,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 408,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 393,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 0,
|
|
"season_id": 14,
|
|
"tracks": [
|
|
{
|
|
"id": 63,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 328,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 266,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 1,
|
|
"season_id": 14,
|
|
"tracks": [
|
|
{
|
|
"id": 23,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 453,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 153,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 2,
|
|
"season_id": 14,
|
|
"tracks": [
|
|
{
|
|
"id": 458,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 514,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 71,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 3,
|
|
"season_id": 14,
|
|
"tracks": [
|
|
{
|
|
"id": 392,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 388,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 569,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 4,
|
|
"season_id": 14,
|
|
"tracks": [
|
|
{
|
|
"id": 508,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 405,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 266,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 5,
|
|
"season_id": 14,
|
|
"tracks": [
|
|
{
|
|
"id": 50,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 172,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 33,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 6,
|
|
"season_id": 14,
|
|
"tracks": [
|
|
{
|
|
"id": 210,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 232,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 485,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 7,
|
|
"season_id": 14,
|
|
"tracks": [
|
|
{
|
|
"id": 457,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 514,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 556,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 8,
|
|
"season_id": 14,
|
|
"tracks": [
|
|
{
|
|
"id": 534,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 273,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 220,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 9,
|
|
"season_id": 14,
|
|
"tracks": [
|
|
{
|
|
"id": 420,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 444,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 151,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 0,
|
|
"season_id": 15,
|
|
"tracks": [
|
|
{
|
|
"id": 117,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 564,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 318,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 1,
|
|
"season_id": 15,
|
|
"tracks": [
|
|
{
|
|
"id": 93,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 308,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 49,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 2,
|
|
"season_id": 15,
|
|
"tracks": [
|
|
{
|
|
"id": 317,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 335,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 239,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 3,
|
|
"season_id": 15,
|
|
"tracks": [
|
|
{
|
|
"id": 439,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 44,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 243,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 4,
|
|
"season_id": 15,
|
|
"tracks": [
|
|
{
|
|
"id": 158,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 175,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 150,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 5,
|
|
"season_id": 15,
|
|
"tracks": [
|
|
{
|
|
"id": 162,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 79,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 386,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 6,
|
|
"season_id": 15,
|
|
"tracks": [
|
|
{
|
|
"id": 99,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 22,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 164,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 7,
|
|
"season_id": 15,
|
|
"tracks": [
|
|
{
|
|
"id": 406,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 344,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 6,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 8,
|
|
"season_id": 15,
|
|
"tracks": [
|
|
{
|
|
"id": 660,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 378,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 465,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 9,
|
|
"season_id": 15,
|
|
"tracks": [
|
|
{
|
|
"id": 413,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 221,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 342,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 10,
|
|
"season_id": 15,
|
|
"tracks": [
|
|
{
|
|
"id": 125,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 123,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 124,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 11,
|
|
"season_id": 15,
|
|
"tracks": [
|
|
{
|
|
"id": 366,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 695,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 692,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 0,
|
|
"season_id": 16,
|
|
"tracks": [
|
|
{
|
|
"id": 343,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 144,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 569,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 1,
|
|
"season_id": 16,
|
|
"tracks": [
|
|
{
|
|
"id": 515,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 254,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 354,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 2,
|
|
"season_id": 16,
|
|
"tracks": [
|
|
{
|
|
"id": 441,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 524,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 187,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 3,
|
|
"season_id": 16,
|
|
"tracks": [
|
|
{
|
|
"id": 117,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 446,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 435,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 4,
|
|
"season_id": 16,
|
|
"tracks": [
|
|
{
|
|
"id": 180,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 260,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 451,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
# The level 6 course for this version is intentionally missing,
|
|
# as a song that it included was removed and thus the course was
|
|
# as well.
|
|
{
|
|
"level": 6,
|
|
"season_id": 16,
|
|
"tracks": [
|
|
{
|
|
"id": 440,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 112,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 401,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 7,
|
|
"season_id": 16,
|
|
"tracks": [
|
|
{
|
|
"id": 325,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 387,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 42,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 8,
|
|
"season_id": 16,
|
|
"tracks": [
|
|
{
|
|
"id": 676,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 494,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 234,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 9,
|
|
"season_id": 16,
|
|
"tracks": [
|
|
{
|
|
"id": 155,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 623,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 329,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 10,
|
|
"season_id": 16,
|
|
"tracks": [
|
|
{
|
|
"id": 450,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 634,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 360,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"level": 11,
|
|
"season_id": 16,
|
|
"tracks": [
|
|
{
|
|
"id": 116,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 693,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 694,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 0,
|
|
"level": -1,
|
|
"skill_name": "天下一 (梅)コース",
|
|
"skill_name_id": 13,
|
|
"season_id": 17,
|
|
"tracks": [
|
|
{
|
|
"id": 625,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 697,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 708,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 1,
|
|
"level": -1,
|
|
"skill_name": "天下一 (竹)コース",
|
|
"skill_name_id": 13,
|
|
"season_id": 17,
|
|
"tracks": [
|
|
{
|
|
"id": 625,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 697,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 708,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 2,
|
|
"level": -1,
|
|
"skill_name": "天下一 (松)コース",
|
|
"skill_name_id": 13,
|
|
"season_id": 17,
|
|
"tracks": [
|
|
{
|
|
"id": 625,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 697,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 708,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 0,
|
|
"level": -1,
|
|
"skill_name": "青龍の戯れ",
|
|
"skill_name_id": 14,
|
|
"season_id": 18,
|
|
"tracks": [
|
|
{
|
|
"id": 439,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 675,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 692,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 1,
|
|
"level": -1,
|
|
"skill_name": "朱雀の戯れ",
|
|
"skill_name_id": 16,
|
|
"season_id": 18,
|
|
"tracks": [
|
|
{
|
|
"id": 587,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 543,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 693,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 2,
|
|
"level": -1,
|
|
"skill_name": "玄武の戯れ",
|
|
"skill_name_id": 17,
|
|
"season_id": 18,
|
|
"tracks": [
|
|
{
|
|
"id": 696,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 697,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 695,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 3,
|
|
"level": -1,
|
|
"skill_name": "白虎の戯れ",
|
|
"skill_name_id": 15,
|
|
"season_id": 18,
|
|
"tracks": [
|
|
{
|
|
"id": 606,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 593,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 694,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 4,
|
|
"level": -1,
|
|
"skill_name": "青龍の戯れ",
|
|
"skill_name_id": 14,
|
|
"season_id": 18,
|
|
"tracks": [
|
|
{
|
|
"id": 439,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 675,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 692,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 5,
|
|
"level": -1,
|
|
"skill_name": "朱雀の戯れ",
|
|
"skill_name_id": 16,
|
|
"season_id": 18,
|
|
"tracks": [
|
|
{
|
|
"id": 587,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 543,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 693,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 6,
|
|
"level": -1,
|
|
"skill_name": "玄武の戯れ",
|
|
"skill_name_id": 17,
|
|
"season_id": 18,
|
|
"tracks": [
|
|
{
|
|
"id": 696,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 697,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 695,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 7,
|
|
"level": -1,
|
|
"skill_name": "白虎の戯れ",
|
|
"skill_name_id": 15,
|
|
"season_id": 18,
|
|
"tracks": [
|
|
{
|
|
"id": 606,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 593,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 694,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 0,
|
|
"level": -1,
|
|
"skill_name": "RANK 名も無き草",
|
|
"skill_name_id": 18,
|
|
"season_id": 19,
|
|
"tracks": [
|
|
{
|
|
"id": 783,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 784,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 785,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 1,
|
|
"level": -1,
|
|
"skill_name": "RANK 雪月花",
|
|
"skill_name_id": 18,
|
|
"season_id": 19,
|
|
"tracks": [
|
|
{
|
|
"id": 783,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 784,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 785,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 2,
|
|
"level": -1,
|
|
"skill_name": "RANK 金剛雲",
|
|
"skill_name_id": 18,
|
|
"season_id": 19,
|
|
"tracks": [
|
|
{
|
|
"id": 783,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 784,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 785,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
# Manually specify IDs here since this has more than one level 11.
|
|
{
|
|
"id": 0,
|
|
"level": 0,
|
|
"season_id": 20,
|
|
"tracks": [
|
|
{
|
|
"id": 657,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 285,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 491,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 1,
|
|
"level": 1,
|
|
"season_id": 20,
|
|
"tracks": [
|
|
{
|
|
"id": 446,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 588,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 21,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 2,
|
|
"level": 2,
|
|
"season_id": 20,
|
|
"tracks": [
|
|
{
|
|
"id": 560,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 602,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 88,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 3,
|
|
"level": 3,
|
|
"season_id": 20,
|
|
"tracks": [
|
|
{
|
|
"id": 470,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 515,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 65,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 4,
|
|
"level": 4,
|
|
"season_id": 20,
|
|
"tracks": [
|
|
{
|
|
"id": 499,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 358,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 72,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 5,
|
|
"level": 5,
|
|
"season_id": 20,
|
|
"tracks": [
|
|
{
|
|
"id": 573,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 559,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 602,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 6,
|
|
"level": 6,
|
|
"season_id": 20,
|
|
"tracks": [
|
|
{
|
|
"id": 255,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 164,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 783,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 7,
|
|
"level": 7,
|
|
"season_id": 20,
|
|
"tracks": [
|
|
{
|
|
"id": 425,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 54,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 771,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 8,
|
|
"level": 8,
|
|
"season_id": 20,
|
|
"tracks": [
|
|
{
|
|
"id": 589,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 592,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 776,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 9,
|
|
"level": 9,
|
|
"season_id": 20,
|
|
"tracks": [
|
|
{
|
|
"id": 779,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 611,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 670,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 10,
|
|
"level": 10,
|
|
"season_id": 20,
|
|
"tracks": [
|
|
{
|
|
"id": 522,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 543,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 610,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 11,
|
|
"level": 10,
|
|
"season_id": 20,
|
|
"tracks": [
|
|
{
|
|
"id": 122,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 180,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 214,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 12,
|
|
"level": 11,
|
|
"season_id": 20,
|
|
"tracks": [
|
|
{
|
|
"id": 661,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 258,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 791,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
],
|
|
},
|
|
# Manually specify IDs here since this has more than one level 11.
|
|
{
|
|
"id": 0,
|
|
"level": 0,
|
|
"season_id": 21,
|
|
"tracks": [
|
|
{
|
|
"id": 697,
|
|
"type": self.CHART_TYPE_NOVICE,
|
|
},
|
|
{
|
|
"id": 314,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 768,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 1,
|
|
"level": 1,
|
|
"season_id": 21,
|
|
"tracks": [
|
|
{
|
|
"id": 16,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 528,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 118,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 2,
|
|
"level": 2,
|
|
"season_id": 21,
|
|
"tracks": [
|
|
{
|
|
"id": 330,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 644,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 74,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 3,
|
|
"level": 3,
|
|
"season_id": 21,
|
|
"tracks": [
|
|
{
|
|
"id": 494,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 294,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 61,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 4,
|
|
"level": 4,
|
|
"season_id": 21,
|
|
"tracks": [
|
|
{
|
|
"id": 498,
|
|
"type": self.CHART_TYPE_ADVANCED,
|
|
},
|
|
{
|
|
"id": 177,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 212,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 5,
|
|
"level": 5,
|
|
"season_id": 21,
|
|
"tracks": [
|
|
{
|
|
"id": 319,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 53,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 603,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 6,
|
|
"level": 6,
|
|
"season_id": 21,
|
|
"tracks": [
|
|
{
|
|
"id": 688,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 261,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 784,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 7,
|
|
"level": 7,
|
|
"season_id": 21,
|
|
"tracks": [
|
|
{
|
|
"id": 777,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 387,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 659,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 8,
|
|
"level": 8,
|
|
"season_id": 21,
|
|
"tracks": [
|
|
{
|
|
"id": 518,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 714,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 681,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 9,
|
|
"level": 9,
|
|
"season_id": 21,
|
|
"tracks": [
|
|
{
|
|
"id": 529,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 682,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 597,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 10,
|
|
"level": 10,
|
|
"season_id": 21,
|
|
"tracks": [
|
|
{
|
|
"id": 600,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 758,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
{
|
|
"id": 816,
|
|
"type": self.CHART_TYPE_EXHAUST,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 11,
|
|
"level": 10,
|
|
"season_id": 21,
|
|
"tracks": [
|
|
{
|
|
"id": 829,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 830,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 831,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"id": 12,
|
|
"level": 11,
|
|
"season_id": 21,
|
|
"tracks": [
|
|
{
|
|
"id": 914,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 913,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
{
|
|
"id": 915,
|
|
"type": self.CHART_TYPE_INFINITE,
|
|
},
|
|
],
|
|
},
|
|
]
|
|
|
|
def _get_extra_events(self) -> List[int]:
|
|
return [
|
|
62, # Navigator select (empty by itself)
|
|
65, # Navigator crew recruitments bottom half
|
|
66, # Enable Tenkaichi Mode
|
|
69, # Season 2 differences
|
|
]
|
|
|
|
def handle_game_3_hiscore_request(self, request: Node) -> Node:
|
|
# Grab location for local scores
|
|
locid = ID.parse_machine_id(request.child_value("locid"))
|
|
|
|
# Start the response packet
|
|
game = Node.void("game_3")
|
|
|
|
# First, grab hit chart
|
|
playcounts = self.data.local.music.get_hit_chart(self.game, self.version, 1024)
|
|
|
|
hitchart = Node.void("hit")
|
|
game.add_child(hitchart)
|
|
for songid, count in playcounts:
|
|
info = Node.void("d")
|
|
hitchart.add_child(info)
|
|
info.add_child(Node.u32("id", songid))
|
|
info.add_child(Node.u32("cnt", count))
|
|
|
|
# Now, grab global and local scores as well as clear rates
|
|
global_records = self.data.remote.music.get_all_records(self.game, self.version)
|
|
users = {
|
|
uid: prof
|
|
for (uid, prof) in self.data.local.user.get_all_profiles(
|
|
self.game, self.version
|
|
)
|
|
}
|
|
area_users = [uid for uid in users if users[uid].get_int("loc", -1) == locid]
|
|
area_records = self.data.local.music.get_all_records(
|
|
self.game, self.version, userlist=area_users
|
|
)
|
|
clears = self.get_clear_rates()
|
|
records: Dict[int, Dict[int, Dict[str, Tuple[UserID, Score]]]] = {}
|
|
|
|
missing_users = [
|
|
userid for (userid, _) in global_records if userid not in users
|
|
] + [userid for (userid, _) in area_records if userid not in users]
|
|
for userid, profile in self.get_any_profiles(missing_users):
|
|
users[userid] = profile
|
|
|
|
for userid, score in global_records:
|
|
if userid not in users:
|
|
raise Exception("Logic error, missing profile for user!")
|
|
if score.id not in records:
|
|
records[score.id] = {}
|
|
if score.chart not in records[score.id]:
|
|
records[score.id][score.chart] = {}
|
|
records[score.id][score.chart]["global"] = (userid, score)
|
|
|
|
for userid, score in area_records:
|
|
if userid not in users:
|
|
raise Exception("Logic error, missing profile for user!")
|
|
if score.id not in records:
|
|
records[score.id] = {}
|
|
if score.chart not in records[score.id]:
|
|
records[score.id][score.chart] = {}
|
|
records[score.id][score.chart]["area"] = (userid, score)
|
|
|
|
# Output it to the game
|
|
highscores = Node.void("sc")
|
|
game.add_child(highscores)
|
|
for musicid in records:
|
|
for chart in records[musicid]:
|
|
(globaluserid, globalscore) = records[musicid][chart]["global"]
|
|
|
|
global_profile = users[globaluserid]
|
|
if clears[musicid][chart]["total"] > 0:
|
|
clear_rate = float(clears[musicid][chart]["clears"]) / float(
|
|
clears[musicid][chart]["total"]
|
|
)
|
|
else:
|
|
clear_rate = 0.0
|
|
|
|
info = Node.void("d")
|
|
highscores.add_child(info)
|
|
info.add_child(Node.u32("id", musicid))
|
|
info.add_child(Node.u32("ty", chart))
|
|
info.add_child(
|
|
Node.string("a_sq", ID.format_extid(global_profile.extid))
|
|
)
|
|
info.add_child(Node.string("a_nm", global_profile.get_str("name")))
|
|
info.add_child(Node.u32("a_sc", globalscore.points))
|
|
info.add_child(Node.s32("cr", int(clear_rate * 10000)))
|
|
|
|
if "area" in records[musicid][chart]:
|
|
(localuserid, localscore) = records[musicid][chart]["area"]
|
|
local_profile = users[localuserid]
|
|
info.add_child(
|
|
Node.string("l_sq", ID.format_extid(local_profile.extid))
|
|
)
|
|
info.add_child(Node.string("l_nm", local_profile.get_str("name")))
|
|
info.add_child(Node.u32("l_sc", localscore.points))
|
|
|
|
return game
|
|
|
|
def handle_game_3_load_r_request(self, request: Node) -> Node:
|
|
refid = request.child_value("dataid")
|
|
game = Node.void("game_3")
|
|
|
|
if refid is not None:
|
|
userid = self.data.remote.user.from_refid(self.game, self.version, refid)
|
|
else:
|
|
userid = None
|
|
|
|
if userid is not None:
|
|
links = self.data.local.user.get_links(self.game, self.version, userid)
|
|
for index, link in enumerate(links):
|
|
if link.type != "rival":
|
|
continue
|
|
other_profile = self.get_profile(link.other_userid)
|
|
if other_profile is None:
|
|
continue
|
|
|
|
# Base information about rival
|
|
rival = Node.void("rival")
|
|
game.add_child(rival)
|
|
rival.add_child(Node.s16("no", index))
|
|
rival.add_child(
|
|
Node.string("seq", ID.format_extid(other_profile.extid))
|
|
)
|
|
rival.add_child(Node.string("name", other_profile.get_str("name")))
|
|
|
|
# Return scores for this user on random charts
|
|
scores = self.data.remote.music.get_scores(
|
|
self.game, self.version, link.other_userid
|
|
)
|
|
for score in scores:
|
|
music = Node.void("music")
|
|
rival.add_child(music)
|
|
music.set_attribute("id", str(score.id))
|
|
music.set_attribute("type", str(score.chart))
|
|
music.set_attribute("sc", str(score.points))
|
|
|
|
return game
|
|
|
|
def format_profile(self, userid: UserID, profile: Profile) -> Node:
|
|
game = Node.void("game_3")
|
|
|
|
# Generic profile stuff
|
|
game.add_child(Node.string("name", profile.get_str("name")))
|
|
game.add_child(Node.string("code", ID.format_extid(profile.extid)))
|
|
game.add_child(Node.u32("gamecoin_packet", profile.get_int("packet")))
|
|
game.add_child(Node.u32("gamecoin_block", profile.get_int("block")))
|
|
game.add_child(
|
|
Node.s16(
|
|
"skill_name_id",
|
|
profile.get_int(
|
|
"chosen_skill_id", profile.get_int("skill_name_id", -1)
|
|
),
|
|
)
|
|
)
|
|
game.add_child(
|
|
Node.s32_array("hidden_param", profile.get_int_array("hidden_param", 20))
|
|
)
|
|
game.add_child(Node.u32("blaster_energy", profile.get_int("blaster_energy")))
|
|
game.add_child(Node.u32("blaster_count", profile.get_int("blaster_count")))
|
|
|
|
# Play statistics
|
|
statistics = self.get_play_statistics(userid)
|
|
game.add_child(Node.u32("play_count", statistics.total_plays))
|
|
game.add_child(Node.u32("daily_count", statistics.today_plays))
|
|
game.add_child(Node.u32("play_chain", statistics.consecutive_days))
|
|
|
|
# Last played stuff
|
|
if "last" in profile:
|
|
lastdict = profile.get_dict("last")
|
|
last = Node.void("last")
|
|
game.add_child(last)
|
|
last.add_child(Node.s32("music_id", lastdict.get_int("music_id", -1)))
|
|
last.add_child(Node.u8("music_type", lastdict.get_int("music_type")))
|
|
last.add_child(Node.u8("sort_type", lastdict.get_int("sort_type")))
|
|
last.add_child(Node.u8("narrow_down", lastdict.get_int("narrow_down")))
|
|
last.add_child(Node.u8("headphone", lastdict.get_int("headphone")))
|
|
last.add_child(Node.u16("appeal_id", lastdict.get_int("appeal_id", 1001)))
|
|
last.add_child(Node.u16("comment_id", lastdict.get_int("comment_id")))
|
|
last.add_child(Node.u8("gauge_option", lastdict.get_int("gauge_option")))
|
|
|
|
# Item unlocks
|
|
itemnode = Node.void("item")
|
|
game.add_child(itemnode)
|
|
|
|
game_config = self.get_game_config()
|
|
achievements = self.data.local.user.get_achievements(
|
|
self.game, self.version, userid
|
|
)
|
|
|
|
for item in achievements:
|
|
if item.type[:5] != "item_":
|
|
continue
|
|
itemtype = int(item.type[5:])
|
|
|
|
if (
|
|
game_config.get_bool("force_unlock_songs")
|
|
and itemtype == self.GAME_CATALOG_TYPE_SONG
|
|
):
|
|
# Don't echo unlocked songs, we will add all of them later
|
|
continue
|
|
if (
|
|
game_config.get_bool("force_unlock_cards")
|
|
and itemtype == self.GAME_CATALOG_TYPE_APPEAL_CARD
|
|
):
|
|
# Don't echo unlocked appeal cards, we will add all of them later
|
|
continue
|
|
if (
|
|
game_config.get_bool("force_unlock_crew")
|
|
and itemtype == self.GAME_CATALOG_TYPE_CREW
|
|
):
|
|
# Don't echo unlocked crew, we will add all of them later
|
|
continue
|
|
|
|
info = Node.void("info")
|
|
itemnode.add_child(info)
|
|
info.add_child(Node.u8("type", itemtype))
|
|
info.add_child(Node.u32("id", item.id))
|
|
info.add_child(Node.u32("param", item.data.get_int("param")))
|
|
|
|
if game_config.get_bool("force_unlock_songs"):
|
|
ids: Dict[int, int] = {}
|
|
songs = self.data.local.music.get_all_songs(self.game, self.version)
|
|
for song in songs:
|
|
if song.id not in ids:
|
|
ids[song.id] = 0
|
|
|
|
if song.data.get_int("difficulty") > 0:
|
|
ids[song.id] = ids[song.id] | (1 << song.chart)
|
|
|
|
for itemid in ids:
|
|
if ids[itemid] == 0:
|
|
continue
|
|
|
|
info = Node.void("info")
|
|
itemnode.add_child(info)
|
|
info.add_child(Node.u8("type", self.GAME_CATALOG_TYPE_SONG))
|
|
info.add_child(Node.u32("id", itemid))
|
|
info.add_child(Node.u32("param", ids[itemid]))
|
|
|
|
if game_config.get_bool("force_unlock_cards"):
|
|
catalog = self.data.local.game.get_items(self.game, self.version)
|
|
for unlock in catalog:
|
|
if unlock.type != "appealcard":
|
|
continue
|
|
|
|
info = Node.void("info")
|
|
itemnode.add_child(info)
|
|
info.add_child(Node.u8("type", self.GAME_CATALOG_TYPE_APPEAL_CARD))
|
|
info.add_child(Node.u32("id", unlock.id))
|
|
info.add_child(Node.u32("param", 1))
|
|
|
|
if game_config.get_bool("force_unlock_crew"):
|
|
for crewid in range(1, 781):
|
|
info = Node.void("info")
|
|
itemnode.add_child(info)
|
|
info.add_child(Node.u8("type", self.GAME_CATALOG_TYPE_CREW))
|
|
info.add_child(Node.u32("id", crewid))
|
|
info.add_child(Node.u32("param", 1))
|
|
|
|
# Skill courses
|
|
skill = Node.void("skill")
|
|
game.add_child(skill)
|
|
course_all = Node.void("course_all")
|
|
skill.add_child(course_all)
|
|
skill_level = -1
|
|
|
|
for course in achievements:
|
|
if course.type != "course":
|
|
continue
|
|
|
|
course_id = course.id % 100
|
|
season_id = int(course.id / 100)
|
|
|
|
if course.data.get_int("clear_type") >= 2:
|
|
# The user cleared this, lets take the highest level clear for this
|
|
courselist = [
|
|
c
|
|
for c in self._get_skill_analyzer_courses()
|
|
if c.get("id", c["level"]) == course_id
|
|
and c["season_id"] == season_id
|
|
]
|
|
if len(courselist) > 0:
|
|
skill_level = max(skill_level, courselist[0]["level"])
|
|
|
|
info = Node.void("d")
|
|
course_all.add_child(info)
|
|
info.add_child(Node.s16("crsid", course_id))
|
|
info.add_child(Node.s16("ct", course.data.get_int("clear_type")))
|
|
info.add_child(Node.s16("ar", course.data.get_int("achievement_rate")))
|
|
info.add_child(Node.s32("ssnid", season_id))
|
|
|
|
# Calculated skill level
|
|
game.add_child(Node.s16("skill_level", skill_level))
|
|
|
|
# Story mode unlocks
|
|
storynode = Node.void("story")
|
|
game.add_child(storynode)
|
|
|
|
for story in achievements:
|
|
if story.type != "story":
|
|
continue
|
|
|
|
info = Node.void("info")
|
|
storynode.add_child(info)
|
|
info.add_child(Node.s32("story_id", story.id))
|
|
info.add_child(Node.s32("progress_id", story.data.get_int("progress_id")))
|
|
info.add_child(
|
|
Node.s32("progress_param", story.data.get_int("progress_param"))
|
|
)
|
|
info.add_child(Node.s32("clear_cnt", story.data.get_int("clear_cnt")))
|
|
info.add_child(Node.u32("route_flg", story.data.get_int("route_flg")))
|
|
|
|
# Game parameters
|
|
paramnode = Node.void("param")
|
|
game.add_child(paramnode)
|
|
|
|
for param in achievements:
|
|
if param.type[:6] != "param_":
|
|
continue
|
|
paramtype = int(param.type[6:])
|
|
|
|
info = Node.void("info")
|
|
paramnode.add_child(info)
|
|
info.add_child(Node.s32("id", param.id))
|
|
info.add_child(Node.s32("type", paramtype))
|
|
info.add_child(
|
|
Node.s32_array("param", param.data["param"])
|
|
) # This looks to be variable, so no validation on length
|
|
|
|
return game
|
|
|
|
def unformat_profile(
|
|
self, userid: UserID, request: Node, oldprofile: Profile
|
|
) -> Profile:
|
|
newprofile = oldprofile.clone()
|
|
|
|
# Update blaster energy and in-game currencies
|
|
earned_gamecoin_packet = request.child_value("earned_gamecoin_packet")
|
|
if earned_gamecoin_packet is not None:
|
|
newprofile.replace_int(
|
|
"packet", newprofile.get_int("packet") + earned_gamecoin_packet
|
|
)
|
|
earned_gamecoin_block = request.child_value("earned_gamecoin_block")
|
|
if earned_gamecoin_block is not None:
|
|
newprofile.replace_int(
|
|
"block", newprofile.get_int("block") + earned_gamecoin_block
|
|
)
|
|
earned_blaster_energy = request.child_value("earned_blaster_energy")
|
|
if earned_blaster_energy is not None:
|
|
newprofile.replace_int(
|
|
"blaster_energy",
|
|
newprofile.get_int("blaster_energy") + earned_blaster_energy,
|
|
)
|
|
|
|
# Miscelaneous stuff
|
|
newprofile.replace_int("blaster_count", request.child_value("blaster_count"))
|
|
newprofile.replace_int("chosen_skill_id", request.child_value("skill_name_id"))
|
|
newprofile.replace_int_array(
|
|
"hidden_param", 20, request.child_value("hidden_param")
|
|
)
|
|
|
|
# Update user's unlock status if we aren't force unlocked
|
|
game_config = self.get_game_config()
|
|
|
|
if request.child("item") is not None:
|
|
for child in request.child("item").children:
|
|
if child.name != "info":
|
|
continue
|
|
|
|
item_id = child.child_value("id")
|
|
item_type = child.child_value("type")
|
|
param = child.child_value("param")
|
|
|
|
if (
|
|
game_config.get_bool("force_unlock_cards")
|
|
and item_type == self.GAME_CATALOG_TYPE_APPEAL_CARD
|
|
):
|
|
# Don't save back appeal cards because they were force unlocked
|
|
continue
|
|
if (
|
|
game_config.get_bool("force_unlock_songs")
|
|
and item_type == self.GAME_CATALOG_TYPE_SONG
|
|
):
|
|
# Don't save back songs, because they were force unlocked
|
|
continue
|
|
if (
|
|
game_config.get_bool("force_unlock_crew")
|
|
and item_type == self.GAME_CATALOG_TYPE_CREW
|
|
):
|
|
# Don't save back crew, because they were force unlocked
|
|
continue
|
|
|
|
self.data.local.user.put_achievement(
|
|
self.game,
|
|
self.version,
|
|
userid,
|
|
item_id,
|
|
f"item_{item_type}",
|
|
{
|
|
"param": param,
|
|
},
|
|
)
|
|
|
|
# Update story progress
|
|
if request.child("story") is not None:
|
|
for child in request.child("story").children:
|
|
if child.name != "info":
|
|
continue
|
|
|
|
story_id = child.child_value("story_id")
|
|
progress_id = child.child_value("progress_id")
|
|
progress_param = child.child_value("progress_param")
|
|
clear_cnt = child.child_value("clear_cnt")
|
|
route_flg = child.child_value("route_flg")
|
|
self.data.local.user.put_achievement(
|
|
self.game,
|
|
self.version,
|
|
userid,
|
|
story_id,
|
|
"story",
|
|
{
|
|
"progress_id": progress_id,
|
|
"progress_param": progress_param,
|
|
"clear_cnt": clear_cnt,
|
|
"route_flg": route_flg,
|
|
},
|
|
)
|
|
|
|
# Update params
|
|
if request.child("param") is not None:
|
|
for child in request.child("param").children:
|
|
if child.name != "info":
|
|
continue
|
|
|
|
param_id = child.child_value("id")
|
|
param_type = child.child_value("type")
|
|
param_param = child.child_value("param")
|
|
self.data.local.user.put_achievement(
|
|
self.game,
|
|
self.version,
|
|
userid,
|
|
param_id,
|
|
f"param_{param_type}",
|
|
{
|
|
"param": param_param,
|
|
},
|
|
)
|
|
|
|
# Grab last information.
|
|
lastdict = newprofile.get_dict("last")
|
|
lastdict.replace_int("headphone", request.child_value("headphone"))
|
|
lastdict.replace_int("appeal_id", request.child_value("appeal_id"))
|
|
lastdict.replace_int("comment_id", request.child_value("comment_id"))
|
|
lastdict.replace_int("music_id", request.child_value("music_id"))
|
|
lastdict.replace_int("music_type", request.child_value("music_type"))
|
|
lastdict.replace_int("sort_type", request.child_value("sort_type"))
|
|
lastdict.replace_int("narrow_down", request.child_value("narrow_down"))
|
|
lastdict.replace_int("gauge_option", request.child_value("gauge_option"))
|
|
|
|
# Save back last information gleaned from results
|
|
newprofile.replace_dict("last", lastdict)
|
|
|
|
# Keep track of play statistics
|
|
self.update_play_statistics(userid)
|
|
|
|
return newprofile
|