Files
GaCy-GO/docs/GLM-BETA-DATA.md
2026-10-28 18:54:43 +07:00

137 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ชุดข้อมูล Client Beta สำหรับ GLM
อัปเดต 24 ตุลาคม 2026 (Asia/Bangkok)
## เริ่มอ่านตรงนี้
ผู้ใช้ขอให้ช่วยหา event ของ Beta ที่ใช้จริง และส่งข้อมูลที่มีพร้อมวิธีเพิ่มตู้กาชาให้ GLM งานนี้จึงจัดทำ **ดัชนีและชุดส่งต่อข้อมูล** ไม่ได้เปิด event เพิ่ม เปลี่ยน backend หรือรีสตาร์ตเซิร์ฟเวอร์
- [ข้อมูลกิจกรรมและวิธีเชื่อม schedule](GLM-BETA-EVENTS.md)
- [ข้อมูลและวิธีเพิ่มตู้กาชา](GLM-GACHA-GUIDE.md)
- [งานค้าง/ข้อกำหนดเดิม](ZCODE-HANDOFF.md)
### ไฟล์ชุดส่งต่อ
- โฟลเดอร์: [glm-beta-handoff-20261024](../.runtime/glm-beta-handoff-20261024/)
- ZIP: [glm-beta-handoff-20261024.zip](../.runtime/glm-beta-handoff-20261024.zip)
- [manifest.json](../.runtime/glm-beta-handoff-20261024/manifest.json): รายการทุกไฟล์ในชุด พร้อม SHA-256 ขนาด ที่มา และขอบเขตการยืนยัน
- [event-index.json](../.runtime/glm-beta-handoff-20261024/derived/event-index.json) / [CSV](../.runtime/glm-beta-handoff-20261024/derived/event-index.csv)
- [preview-schedules.json](../.runtime/glm-beta-handoff-20261024/derived/preview-schedules.json)
- [gacha-index.json](../.runtime/glm-beta-handoff-20261024/derived/gacha-index.json)
`.runtime/` ถูก ignore ถ้า GLM อยู่คนละเครื่องต้องส่ง ZIP ให้ด้วย การส่งเฉพาะ Git diff จะไม่มีชุดข้อมูลและ evidence เหล่านี้
## 1. รุ่นและขอบเขต
ตรวจโปรเซสที่รันจริงและ hash `GameAssembly.dll` ซ้ำในรอบนี้แล้ว Client ปัจจุบันเป็น Beta .54:
```text
4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6
```
ข้อมูล CW เดิมหลายชุดมาจาก Beta .53:
```text
c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144
```
**ชุดนี้รวมข้อมูลที่มีอยู่ในโปรเจกต์และ capture ที่ระบุที่มาได้ ไม่ใช่การ dump ทุกตาราง/ทุก asset/ทุก script จาก Beta ทั้งเกมครบแล้ว** ไฟล์ที่ไม่มี provenance ไม่ถูกเปลี่ยนชื่อหรือรับรองเป็น .54 เนื่องจากวางอยู่ในโปรเจกต์เดียวกัน
ข้อมูลดิบถูกคัดลอกเป็น bytes เดิม Python ใช้ integer ที่ไม่เสียความละเอียดในการสร้างดัชนี จึงเก็บ `hash64` ได้ตรง ห้าม parse/re-serialize TextID hash64 ผ่าน JavaScript `Number` โดยไม่ใช้วิธีรักษาเลข 64-bit
## 2. ข้อมูลที่ตรงกับ capture ของ Client .54
| ชุด | จำนวน/ขอบเขต | ไฟล์ต้นทาง |
| --- | --- | --- |
| ActivityPanelRow | 181 หน้า รวม condition, prefab, icon, TextID และ display items | `resources/PreviewGameplayCatalog.json` → `tables.panels` |
| ActivityConfigRow | 361 รายการ รวม module/resident/panel/early-access mapping | ไฟล์เดียวกัน → `tables.activities` |
| GachaBasicInfoConfigRow | 6 แถวของตารางปัจจุบัน | ไฟล์เดียวกัน → `tables.gacha` |
| ParkourLevelConfigRow | 13 แถว; ไม่ใช่ Stella Jump ด้านข้าง | ไฟล์เดียวกัน → `tables.parkour` |
| ChenLingGameBoyCaseRow | 16 cases | `resources/StellaJumpConfig.json` |
| CW role flat config | 140 rows; ไม่ใช่ทุกตารางของ CW | `resources/CurrencyWarsCurrentRoles.json` |
| Event asset observations | 290 prefab/icon paths; 146/181 panels มีทั้งสอง path | `resources/PreviewAssetAvailability.json` |
| GachaGroupDataRow | ดึง flat GetAll จบครบ **0 แถว** ในรอบนี้ | `battle_diagnostics/glm-gacha-groups-current.json` |
| Group presentation asset observations | 3 path จาก Lua จริง ตรวจแล้วไม่มีทั้ง 3 | `battle_diagnostics/glm-gacha-group-assets.json` |
CW role compatibility .53→.54 แยกอยู่ใน `resources/CurrencyWarsRoleCompatibility.json` เป็น overlay หนึ่ง family/สาม star variants ไม่ใช่การ recapture CW ทั้งหมด
### ระวัง ActivityConfig ชื่อคล้ายกัน
`resources/ActivityConfig.json` เดิมมี 360 รายการและไม่มี provenance .54 ของตัวเอง ส่วน `PreviewGameplayCatalog.json.tables.activities` มี 361 รายการที่ capture ตรงรุ่น
เปรียบเทียบ key ได้ว่าใน capture ปัจจุบันมี ActivityID `10196`, `50157` เพิ่ม และไม่มี `50136` ที่อยู่ในไฟล์เดิม ใน ID ร่วมกัน main/resident module lists ตรงกันจากการเทียบครั้งนี้ แต่ไม่ได้ทำให้ไฟล์เก่ากลายเป็น current native dump
ให้เริ่มหา event ใหม่จาก **PreviewGameplayCatalog** อย่ายึดเฉพาะ ActivityConfig เดิมหรือค้น type ที่เดาชื่อแล้วสรุปว่าไม่มีข้อมูล
## 3. Event ที่หาเจอแล้ว
ตัวอย่างด้านล่างใช้ **ชื่อเทคนิคจาก prefab** ยังไม่ใช่ localized title ที่ถอดแล้ว และไม่ได้พิสูจน์ว่าเป็น official active schedule ของวันนี้
| Panel | ระบบ/Prefab | Main modules | Resident modules | Prefab + icon |
| ---: | --- | --- | --- | --- |
| 50132 | QuestMechCraftPanel | 5013201 | 5013202 | มี |
| 50142 | QuestComicDessertPanel | 5014201 | 5014202 | มี |
| 50143 | QuestRealityShowPanel | 5014301–5014305 | 5014311–5014315 | มี |
| 50125 | QuestFinalityBattlePanel | 5012501–5012505 | — | มี |
| 50114 | QuestTeamTowerPanel | 5011401 | 5011402 | มี |
| 50112 | QuestPixAirPanel | 5011201 | 5011202 | มี |
| 50111 | QuestB51RacingPanel | 5011101 | 5011102 | มี |
| 50107 | QuestChenLingFesPanel | 5010701 | — | มี |
| 50092 | QuestChenLingBattlePanel | 5009201 | 5009202 | มี |
| 50134 | QuestBlindBoxPanel | ดู raw mapping | ดู raw mapping | prefab ไม่มี |
Source ปัจจุบันเปิดเพียง policy-selected families และตัดหน้าที่มี dependencies/handler ยังไม่ครบ จึงต่างจาก “Beta ไม่มี event” รายละเอียดและแนวทางต่อ callback อยู่ใน `GLM-BETA-EVENTS.md`
จุดเชื่อมสำคัญ: ใน wire `ActivityScheduleData.ActivityId` ใช้ **moduleID** ส่วน `PanelId` ใช้ **panelID** ห้ามนำ ActivityConfig.ActivityID ใส่แทน moduleID โดยไม่ตรวจ
## 4. ข้อมูลเก่าและข้อมูลที่ยังไม่ยืนยัน revision
ชุด ZIP รวม resources ทั้งหมดที่มีและไฟล์ข้อมูล root ที่เกี่ยวข้อง โดยแยก provenance ไว้ใน manifest:
- CW .53/reference: divisions/routes/role defaults/variants/camps/levels/equipment/spotlights/monster recipes/rewards/craft/initial runs/node transitions/trials
- .53-identified scene, navigation, cosmetics, technique/world-battle resources
- External data: Eidolon/Inventory จาก Dimbreath, BattleRules/Profile จาก PearlSR, ทีม Prydwen, AhaHelp จากภาพที่ผู้ใช้ให้ ไม่ใช่ native .54 dump
- Unversioned/server data: Avatar/SkillTree/Quest/MainMission/Stage/Map/Tutorial ฯลฯ ซึ่งห้ามรับรองว่าทุก ID ใช้ได้กับ .54
- Root `res.json` กับ `resources/res.json` เป็นคนละ schema และคนละชุด ห้ามทับหรือย้ายแทนกันเพราะชื่อเหมือนกัน
- `mission_unlocks.json` เป็นรายการที่ server เปิดให้ ไม่ใช่หลักฐานว่า Client มี config ทุก ID; ดู MissionCompatibility และ missing-config evidence ประกอบ
## 5. Protocol และเครื่องมือ
รวม `.proto`, named command maps/pairs และ source revision ไว้ใน bundle โดยไม่รวม `.pb.go` ซ้ำทั้งชุด
Command source revision ที่ใช้อยู่:
```text
005d2c12db4781071f4b5b68e8f364587886a710
```
นี่ไม่ใช่ full native protocol dump ของ .54 ทุก packet บางคำสั่งถูกตรวจซ้ำกับ Client แล้ว แต่ส่วนที่ยัง obfuscated/ไม่ตรวจต้องเก็บข้อจำกัดไว้ ใช้ name resolver ของ repository อย่าฝัง CmdID หรือส่งหลาย aliases เพื่อเดา callback
เครื่องมือที่รวมเป็น source สำหรับอ่านต่อ **ไม่ได้ถูกรันโดย packaging helper**:
- `preview_flat_tables.js`: สี่ named flat tables; ตรวจ prologue/ขอบเขต; 16 rows ต่อ managed marker
- `preview_gameboy_tables.js`: ChenLing GameBoy flat table
- `glm_beta_gacha_groups.js`: named gacha group GetAll; 8 rows ต่อ marker; เก็บกรณีตารางว่างอย่างชัดเจน
- named metadata probes และ bounded trigger ที่พักเมื่ออยู่ Battle
- `inspect_luau_v4.py` และ GachaMainPage bytecode/parsed prototypes
- static PE range/call-reference readers และ protocol tooling ที่เกี่ยวข้อง
ก่อนใช้ native tools ต้องตรวจ **process path/hash ใหม่** เพราะ PID, MethodHandle และ base address เปลี่ยนหลัง restart การอ่าน metadata ครั้งนี้พบว่า `RPG.Client.TextID` อยู่ใน assembly **RPG.GameCore.Foundation** ไม่ใช่ Assembly-CSharp; lookup ใน assembly ผิดแล้วได้ nil ไม่ได้แปลว่า type หาย
## 6. ส่งต่อให้ GLM ทำต่อ
ข้อความพร้อมใช้:
> อ่าน `docs/GLM-BETA-DATA.md`, `docs/GLM-BETA-EVENTS.md` และ `docs/GLM-GACHA-GUIDE.md` ก่อน ข้อมูล event ของ Beta มีแล้ว 181 panels/361 activities ใน PreviewGameplayCatalog ไม่ใช่ไม่มี event ให้ใช้ event-index เชื่อม panel/module/conditions/assets และต่อ named data handlers ตามแต่ละระบบ กาชามีตารางจริง 6 แถว แต่ limited 4 prefab และ generic group 3 prefab ไม่มีใน manifest; flat GachaGroupDataRow ดึงครบได้ 0 แถว จึงยังไม่มี GroupIDs ให้ใช้ อย่าเดาตัวเลขหรือเปิด path ที่ไม่มีเพื่อกลบอาการ ต้องสร้าง compatible custom presentation จาก asset ที่มีจริงและให้ผลสุ่มตรงภาพตู้ รักษาเซฟ/rank/EX/Traces และอย่ารบกวน Battle ที่กำลังเล่น อ่าน manifest เพื่อแยก .54, .53/reference, external policy และ unversioned ห้ามอ้างว่าชุดนี้เป็น dump ทุกอย่างของ Beta ครบแล้ว
สิ่งที่ยังต้องหาเพิ่ม: localized title text, config/asset dependencies และ data/proxy callbacks ของ event ใหม่, ตารางอื่นของ Client ที่ยังไม่ได้ capture, gacha presentation/binding และ semantics ของ grouping fields ที่ยัง obfuscated
## 7. ขอบเขตการทำงานรอบนี้
- อ่าน source/resource และวิเคราะห์ config/capture เพื่อส่งต่อ
- ตรวจ hash ของ module จริง และอ่าน named gacha group table/metadata กับ asset existence เฉพาะ path ที่มีหลักฐานจาก Lua
- ถอด probe ที่เพิ่มในรอบนี้แล้ว และปิด Frida sessions ของรอบนี้
- ไม่แตะ probes ของ GLM ที่มีอยู่ ไม่แก้ gameplay backend ไม่เปลี่ยนเซฟ ไม่ build/deploy/restart และไม่รัน tests
- ชุดข้อมูลไม่รวม `persistent`, `freesr-data.json`, `server.local.json`, บัญชี/token logs หรือ game binaries ของผู้ใช้
- Snapshot เป็นการอ่านไฟล์ทีละไฟล์ขณะที่มีงานอื่นทำอยู่ ไม่ใช่ atomic snapshot ของ repository ทุกไฟล์ ณ nanosecond เดียว ค่า SHA ใน manifest อ้างอิง bytes ที่คัดลอกเข้าชุดจริง