feat: apply captured API configuration for Blue Splash event
Publish GitHub Pages output / publish (push) Successful in 37s
Publish GitHub Pages output / publish (push) Successful in 37s
This commit is contained in:
@@ -25,7 +25,7 @@
|
||||
| --- | --- |
|
||||
| 카드·스킬·보드·메모리·업적·한국어 문자열·악곡 메타데이터 | 현재 게임 DB. 영어·일본어 외부 번역을 가져오지 않음 |
|
||||
| 채보 본문·레인·노트 시각·점수 분모 | 게임 SUS 파일. DB의 난이도·노트 수·계수와 교차 검증. 외부 계산기 채보나 점수 참고표를 생성 입력으로 사용하지 않음 |
|
||||
| 과거 이벤트 기간·배율 | `src/lib/data/events.ts`의 기존 수동 기록. 당시 외부 출처 주석을 유지. 현재 DB에서 이벤트별 설정을 찾지 못함. 앱의 EventListEventInfoResponse에 일정·특효 필드가 존재하나 실제 응답은 아직 미수집 |
|
||||
| 과거 이벤트 기간·배율 | `src/lib/data/events.ts`의 기존 수동 기록. 당시 외부 출처 주석을 유지. 현재 DB에서 이벤트별 설정을 찾지 못함. 기존 기록의 기간·배율은 그대로 보존 |
|
||||
| 카드 별칭·표시명 | `data/card-overrides.csv`의 사용자 편집 설정 |
|
||||
|
||||
이번 전환에서 기존 200곡/800채보를 로컬 게임 파일로 다시 생성하고, 공식 게임 CDN의 Octo revision 93에서 신규·누락 9곡의 SUS 36개를 확보했습니다. 현재 공개된 209곡/836채보를 생성했습니다. 아직 공개되지 않은 2곡은 DB 스냅샷에만 보관합니다.
|
||||
@@ -36,3 +36,11 @@
|
||||
기존 외부 점수 참고표와 달랐던 m0337(Pretty Guardian Matsulimit Zero)의 분모는 공식 게임 CDN revision 93에서 재확인했습니다. Hard는 544300 → 539500, Expert는 874750 → 884700이며, 같은 노트 수라도 비가시·제어점 가중치가 포함되는 분모는 별도로 검증해야 합니다. 검증용 게임 SUS는 scripts/fixtures/game-sus/에 보관합니다.
|
||||
|
||||
이벤트 설정의 DB·CDN 조사 범위와 서버 API 스키마 확인 결과는 [이벤트 설정 원본 조사](research/event-config-source-2026-09-29.md)를 참고합니다. CDN 목록은 조사했지만 모든 번들 내부를 검사한 것은 아닙니다.
|
||||
|
||||
## 게임 API 이벤트 반영
|
||||
|
||||
신규 이벤트의 직접 원본은 `data/game-events/2026-09-29.json`이다. 실제 앱이 받은 이벤트 응답을 메모리에서 추출·검증하고 계정별 필드를 제외했다. 마스터 DB 및 과거 수동 이벤트 기록과 출처를 구분한다.
|
||||
|
||||
`data/game-events/current.json`에서 적용할 이벤트 ID와 원본 파일의 SHA-256을 지정한 뒤 `npm run data:collect-events`를 실행한다. 검증한 일정·라이브 Pt·과제곡 스코어 보너스를 `src/lib/data/events-api.json`으로 생성하며 이벤트명은 DB의 포스터 이름으로 확인한다. 기존 PT·스코어 화면은 이 파일을 읽는다. 지원하지 않는 배율 조건이나 여러 챕터가 있으면 변환을 중단한다.
|
||||
|
||||
현재 적용 대상은 `marathon_event-normal-005`이다. 직전 릴레이 이벤트는 수동 기록을 유지하고, 미니게임 환산 계수와 보너스는 API 원본에 보관한다. 이 명령은 네트워크 수집이나 마스터 DB 갱신을 실행하지 않는다.
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
# 게임 API 이벤트 일정·배율 확보 (2026-09-29)
|
||||
|
||||
앱 1.2.0이 받은 `rpc.api.Event/ListEventInfo` 응답의 디코딩된 객체를 LDPlayer의 실행 중인 테스트 계정 프로세스에서 읽었다. 네트워크 패킷 원본이 아니라, 실제 응답을 담은 protobuf 객체를 필드별로 재구성한 자료다. DB·CDN 파일이나 외부 위키에서 추정한 값이 아니다.
|
||||
|
||||
보관한 설정: [data/game-events/2026-09-29.json](../../data/game-events/2026-09-29.json). 신규 스코어 챌린지의 일정·라이브 Pt·과제곡 스코어 보너스를 계산기에 적용했다. 미니게임 설정은 원본에 보관하며 기존 라이브 계산 화면의 범위를 확장하지 않는다.
|
||||
|
||||
## 확보 범위와 검증
|
||||
|
||||
- 이벤트 설정 5개: 신규 스코어 챌린지, 직전 스포트라이트, 신규 지역 미션, 복귀 미션, 초보자 미션.
|
||||
- 마라톤 2개·챕터 5개의 일정, 라이브 Pt 보너스, 악곡 스코어 보너스, 미니게임 Pt 보너스·환산 계수 및 랭킹 보상 설정을 확보했다.
|
||||
- 보너스 행 131개, 미니게임 계수 행 26개를 보관했다. 보너스의 카드·멤버·악곡 참조 64개를 해시 검증된 게임 DB와 대조해 모두 확인했다.
|
||||
- 앱의 protobuf 정의 12종과 모든 추출 필드의 이름·타입·구조를 대조했다. 누락·추가 필드는 없고 직렬화/역직렬화 왕복 검증을 통과했다.
|
||||
- 별도의 메모리 재읽기에서 이벤트 5개의 전체 내용이 동일했다. 표시용 캐시에 있던 4개의 기본 정보도 원래 응답 객체와 모두 일치했다. 복귀 미션은 표시 조건 `cd-comeback_user`가 있으며 이 계정의 표시용 목록에는 없었다.
|
||||
- 이벤트 탭의 신규 이벤트 종료 표시 `2026/10/05 19:59`도 추출값과 일치한다. 이 계정에서는 메인 퀘스트 1장 4화 클리어 전 이벤트 상세가 잠겨 있었지만 서버 응답의 설정 객체는 이미 수신되어 있었다.
|
||||
- 계정별 `isNew`, `isNoti`, 챕터의 현재 `score`를 공개 설정에서 제외했다. 토큰·인증키·계정 식별자·메모리 주소는 포함하지 않는다. 랭킹 보상은 플레이어 목록이 아닌 공통 보상 규칙이다.
|
||||
- 공개 JSON SHA-256: `dbb57a74aa28f1c5684c5dc6f2d45788e8e608011e72aef65db238b148788407`.
|
||||
|
||||
원본 메모리 추출, 재읽기 및 검증 스크립트는 Git에서 제외된 `data/inspection/android-event-2026-09-29/`에 보관했다. 원본 응답 타입·앱 바이너리·descriptor 해시는 공개 JSON의 `source`에 기록했다. 이 목록은 수신 시점의 설정이며, 과거 모든 이벤트나 향후 서버 변경을 포함한다는 뜻은 아니다.
|
||||
|
||||
## 신규 스코어 챌린지
|
||||
|
||||
ID: `marathon_event-normal-005`. 아래 시각은 모두 한국 시간(UTC+9)이다.
|
||||
|
||||
| 구분 | 서버 값 |
|
||||
|---|---|
|
||||
| 시작 | 2026-09-29 12:00:00 |
|
||||
| 종료 | 2026-10-05 19:59:59 |
|
||||
| 교환소 종료 | 2026-10-11 19:59:59 |
|
||||
| 집계 시작 | 2026-10-06 00:00:00 |
|
||||
| 집계 랭킹 공개 | 2026-10-06 12:00:00 |
|
||||
|
||||
챕터는 1개다. `isMarathonScoreRankingDisable`은 `true`이며, 악곡별 최고점과 합산 최고점 랭킹 보상은 별도로 존재한다.
|
||||
|
||||
### 라이브 Pt
|
||||
|
||||
원본 단위는 퍼밀(‰)이다. `300`은 `+30%`, `100`은 `+10%`다.
|
||||
|
||||
- 마린·코요리·코보·벨즈의 카드: 멤버 보너스 각 +30%.
|
||||
- 이번 신규 수영복 카드 4종: 신규 카드 보너스 각 +30% 추가.
|
||||
- 따라서 해당 신규 카드 한 장은 미개화 기준 +60%, 5회 개화 기준 +90%다.
|
||||
- 속성만을 조건으로 하는 추가 보너스는 이번 응답에 없다.
|
||||
|
||||
| 등급 | 개화 0 | 개화 1 | 개화 2 | 개화 3 | 개화 4 | 개화 5 |
|
||||
|---|---:|---:|---:|---:|---:|---:|
|
||||
| ★3 | 0% | 1% | 1% | 2% | 2% | 3% |
|
||||
| ★4 | 0% | 6% | 7% | 8% | 9% | 10% |
|
||||
| ★5 | 0% | 15% | 18% | 22% | 26% | 30% |
|
||||
|
||||
개화 보너스는 해당 단계의 값 하나만 적용한다. 앱의 `CardMarathonLiveEventBonusRatioCache.IsBonusApplicable`에서 희귀도와 양수인 개화 횟수를 동등 비교하고, `CalculateBonusRatioPermil`에서 적용되는 규칙을 합산하는 것을 확인했다. 예를 들어 5회 개화에 1~5단계 값을 누적하지 않는다.
|
||||
|
||||
### 과제곡 스코어
|
||||
|
||||
아래 대응 카드에 각 곡의 스코어 +10% 규칙이 있다. 곡명은 확보된 DB의 `Music.titleLangId → LangMusic_Kor`로 확인했다.
|
||||
|
||||
| 악곡 | ID | 대응 신규 카드 |
|
||||
|---|---|---|
|
||||
| Kyapi | `m0548` | 마린 `card-00023-5-uniq-0085-00` |
|
||||
| BAKU LOVE CHEMISTRY | `m0413` | 코요리 `card-00037-5-uniq-0086-00` |
|
||||
| PROPOSE | `m0358` | 코보 `card-03009-5-uniq-0088-00` |
|
||||
| Play Dice! | `m0357` | 벨즈 `card-04012-5-uniq-0087-00` |
|
||||
|
||||
`PARADISE!`(`m0354`)에 대한 스코어 보너스 규칙은 이 응답에 없다.
|
||||
|
||||
### 미니게임
|
||||
|
||||
신규 카드 4종 각각에 미니게임 Pt +20% 규칙이 있다. 개화·등급에 따른 미니게임 보너스 행은 없다.
|
||||
|
||||
| 미니게임 | `marathonScorePermilMultiply` 원본 | 계수 ÷ 1000 | `bonusPermilUp` |
|
||||
|---|---:|---:|---:|
|
||||
| 줄넘기 | 1300 | 1.3 | 0 |
|
||||
| 메가 서킷 | 600 | 0.6 | 0 |
|
||||
| 모아 쿠킹 | 44 | 0.044 | 0 |
|
||||
| 포카장! | 600 | 0.6 | 0 |
|
||||
| 어둠 속 추격 | 300 | 0.3 | 0 |
|
||||
| 스플래시 볼 | 2700 | 2.7 | 500 (+50%) |
|
||||
|
||||
이 표는 서버가 제공한 환산 계수와 보너스다. 미니게임별 점수/시간의 변환·반올림까지 모두 재현한 최종 Pt 공식이라는 의미는 아니다.
|
||||
|
||||
## 직전 스포트라이트 및 기타 일정
|
||||
|
||||
`marathon_event-relay-002`는 2026-09-19 20:00:00~09-27 19:59:59, 교환소 종료는 10-03 19:59:59다. 챕터별 대상 멤버는 아키로제·시오리·라플라스·아냐 순서이고 종료 시각은 각각 09-21·23·25·27의 19:59:59다.
|
||||
|
||||
챕터 대상 멤버 +50%, 해당 이벤트 신규 카드 4종 각 +50%, 대응 과제곡 +10%, 개화 보너스는 위 표와 동일하다. 미니게임 신규 카드 보너스는 각 +20%이고, 미니게임 추가 +50% 대상은 줄넘기다. 이 이벤트는 스플래시 볼 계수 행이 없다.
|
||||
|
||||
| 미션 | 시작 (한국 시간) | 종료 (한국 시간) |
|
||||
|---|---|---|
|
||||
| 신규 지역 미션 `area03-release-260929` | 2026-09-29 06:00:00 | 2026-10-26 04:59:59 |
|
||||
| 복귀 미션 `comeback-260929` | 2026-09-29 11:00:00 | 2026-10-19 04:59:59 |
|
||||
| 초보자 미션 | 원본의 기본 시작값 2000-01-01 00:00:00 | 미설정 (`0`) |
|
||||
|
||||
원본은 Unix 밀리초를 사용한다. 종료값은 초 단위 `...59.000`이며 기존 수동 기록의 `...59.999`로 보정하지 않았다. 표시·개방 조건이 있는 미션은 기간에 들어왔다는 사실만으로 모든 계정에서 사용할 수 있다고 판단하면 안 된다.
|
||||
@@ -8,6 +8,6 @@
|
||||
- MarathonInfo.MarathonChapter: end_time, marathon_music_score_bonuses, marathon_mini_game_marathon_score_bonuses, marathon_live_marathon_score_bonuses
|
||||
- MarathonMusicScoreBonus: music_id, character_id, card_id, card_attribute_type, card_rarity, card_potential_upgrade_count, score_up_permil_up
|
||||
- MarathonLiveMarathonScoreBonus: character_id, card_id, card_attribute_type, card_rarity, card_potential_upgrade_count, marathon_score_quantity_up_permil_up
|
||||
- 따라서 앱이 이벤트별 일정과 보너스를 서버 API 응답으로 전달받을 수 있는 구조는 확인했다. 실제 응답의 현재 값은 아직 수집하지 않았다. CDN/DB 부재를 이유로 외부 위키가 필수라고 볼 근거는 없다.
|
||||
- 이후 실행 중인 앱의 실제 응답 객체에서 이벤트 설정 5개와 마라톤 챕터 5개의 일정·배율을 확보했다. protobuf 필드 대조 및 별도 메모리 재읽기로 검증했다. [확보 결과와 배율](event-api-capture-2026-09-29.md), [공개 설정 JSON](../../data/game-events/2026-09-29.json)을 참조한다. 이벤트 일정·배율의 직접 원본은 게임 API 응답이며, 마스터 DB와 구분한다.
|
||||
|
||||
로컬 검증 기록: data/inspection/android-master-2026-09-29/cdn-event-catalog.json 및 event-proto-schema.json. 계정 인증 정보는 사용하지 않았다.
|
||||
DB/CDN 조사 기록: data/inspection/android-master-2026-09-29/cdn-event-catalog.json 및 event-proto-schema.json. API 메모리 추출·검증 기록: data/inspection/android-event-2026-09-29/. 사용자가 허용한 테스트 계정의 실행 상태에서 읽었으며 인증 정보를 공개 파일에 포함하지 않았다.
|
||||
|
||||
Reference in New Issue
Block a user