137 lines
14 KiB
Markdown
137 lines
14 KiB
Markdown
# ชุดข้อมูล 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 ที่คัดลอกเข้าชุดจริง
|