Files
GaCy-GO/docs/ungrouped-proto-guide.md
2026-10-28 18:54:43 +07:00

291 lines
33 KiB
Markdown

# Ungrouped.proto — คู่มือจัดกลุ่ม message
## อ่านไฟล์นี้อย่างไร
นี่คือ schema ของ Protobuf ที่ใช้กำหนดรูปแบบข้อมูลระหว่าง Client กับ Server ไม่ใช่ไฟล์ config และไม่ได้บอกวิธีทำงานของ handler เอง
- `CsReq` คือคำขอจาก Client, `ScRsp` คือคำตอบจาก Server, `ScNotify` คือข้อความแจ้งจาก Server; `Rsp` คือ response เช่นกัน
- เลขหลัง `=` คือ Protobuf field tag; คอมเมนต์ `offset:` เป็น metadata จาก dump ไม่ใช่ CmdID
- `Ungrouped.proto` ไม่มี CmdID และไม่มีป้าย protocol revision จึงห้ามใช้ไฟล์นี้เดาเลข route/handler
## ผลเทียบกับ GaC
- ไฟล์ต้นทางมี 203 top-level messages และ 5 enums
- ชื่อ message 141 รายการมีอยู่แล้วใน `StarRail.proto`; เพิ่ม schema ที่ขาด 62 รายการกับ enum ที่ขาด 1 รายการไว้ใน `protocol/proto/ungrouped.proto`
- เพิ่ม `KVP` (uint32 value (tag 3), uint32 key (tag 9)) ซึ่งไฟล์ต้นทางอ้างผ่าน `Common.proto` แต่ dependency นั้นไม่ได้แนบมา
- schema ที่เพิ่มไม่มี CmdID comment และยังไม่ได้ผูก packet handler; การเทียบกับ source อื่นพบว่า body/field tags ใช้ตรวจโครงสร้างได้ แต่ CmdID ต่างกันได้
ตรวจ signature ของ 203 message กับ `AstralOS/crates/morax/src/StarRail.proto` ที่ checkout revision `abf2fd8fc07711432bac878d44f151f041311f24` แล้ว field types/tags ตรงกันทั้งหมด อย่างไรก็ตาม revision ของไฟล์ต้นทางที่แนบมาไม่ระบุ จึงใช้ reference นี้ยืนยันรูปร่าง schema เท่านั้น ไม่ใช้ย้าย CmdID
ตัวอย่างความต่างของ CmdID: `B51RacingGetDataCsReq` ในตาราง GaC ปัจจุบันเป็น 9995 แต่ source AstralOS revision ข้างต้นระบุ 9990 จึงไม่คัดลอก ID ข้ามตาราง
## กลุ่มที่อ่านความหมายได้จากชื่อ
### B51 Racing (37 messages)
ชุดข้อมูลและคำสั่งของกิจกรรมแข่งรถ: รถ/ลายรถ/คนขับ/ชิ้นส่วน/การพัฒนา/รอบแข่ง.
- `B51RacingAgendaInfo` — เพิ่ม schema แล้ว
- `B51RacingCarDisplay` — เพิ่ม schema แล้ว
- `B51RacingCarLivery` — เพิ่ม schema แล้ว
- `B51RacingCarLiveryCsReq` — เพิ่ม schema แล้ว
- `B51RacingCarLiveryScRsp` — เพิ่ม schema แล้ว
- `B51RacingChallengeCarData` — เพิ่ม schema แล้ว
- `B51RacingChallengeData` — เพิ่ม schema แล้ว
- `B51RacingChallengeEndMatchCsReq` — เพิ่ม schema แล้ว
- `B51RacingChallengeEndMatchScRsp` — เพิ่ม schema แล้ว
- `B51RacingChallengeStartMatchCsReq` — เพิ่ม schema แล้ว
- `B51RacingChallengeStartMatchScRsp` — เพิ่ม schema แล้ว
- `B51RacingChallengeUpdateCarCsReq` — เพิ่ม schema แล้ว
- `B51RacingChallengeUpdateCarScRsp` — เพิ่ม schema แล้ว
- `B51RacingCycleData` — เพิ่ม schema แล้ว
- `B51RacingDevelopmentInfo` — เพิ่ม schema แล้ว
- `B51RacingDriverUnlockScNotify` — เพิ่ม schema แล้ว
- `B51RacingEndMatchCsReq` — เพิ่ม schema แล้ว
- `B51RacingEndMatchScRsp` — เพิ่ม schema แล้ว
- `B51RacingGetDataCsReq` — มี schema เดิมใน `StarRail.proto`
- `B51RacingGetDataScRsp` — มี schema เดิมใน `StarRail.proto`
- `B51RacingMatchInfo` — เพิ่ม schema แล้ว
- `B51RacingMatchStats` — เพิ่ม schema แล้ว
- `B51RacingMissionChangeAgendaScNotify` — เพิ่ม schema แล้ว
- `B51RacingPartInfo` — เพิ่ม schema แล้ว
- `B51RacingPreMatchTrackInfo` — เพิ่ม schema แล้ว
- `B51RacingReplacePartScRsp` — เพิ่ม schema แล้ว
- `B51RacingSelectDevelopActionCsReq` — เพิ่ม schema แล้ว
- `B51RacingSelectDevelopActionScRsp` — เพิ่ม schema แล้ว
- `B51RacingSelectDevelopPartCsReq` — เพิ่ม schema แล้ว
- `B51RacingSelectDevelopPartScRsp` — เพิ่ม schema แล้ว
- `B51RacingSetDriverCsReq` — เพิ่ม schema แล้ว
- `B51RacingSetDriverScRsp` — เพิ่ม schema แล้ว
- `B51RacingStartCycleCsReq` — เพิ่ม schema แล้ว
- `B51RacingStartCycleScRsp` — เพิ่ม schema แล้ว
- `B51RacingStartMatchCsReq` — เพิ่ม schema แล้ว
- `B51RacingStartMatchScRsp` — เพิ่ม schema แล้ว
- `B51RacingStatInfo` — เพิ่ม schema แล้ว
### Expedition Battle (16 messages)
ข้อมูลแผนที่ เส้นทาง ทีม เริ่มต่อสู้ และสรุปผลของ Expedition Battle.
- `ExpeditionBattleAvatarDamage` — เพิ่ม schema แล้ว
- `ExpeditionBattleAvatarInfo` — เพิ่ม schema แล้ว
- `ExpeditionBattleEndScNotify` — เพิ่ม schema แล้ว
- `ExpeditionBattleFunRecord` — เพิ่ม schema แล้ว
- `ExpeditionBattleLevelRecord` — เพิ่ม schema แล้ว
- `ExpeditionBattleLineup` — เพิ่ม schema แล้ว
- `ExpeditionBattleMapData` — เพิ่ม schema แล้ว
- `ExpeditionBattleRouteRecord` — เพิ่ม schema แล้ว
- `ExpeditionBattleRouteSettleInfo` — เพิ่ม schema แล้ว
- `ExpeditionBattleSetLineupCsReq` — เพิ่ม schema แล้ว
- `ExpeditionBattleSetLineupScRsp` — เพิ่ม schema แล้ว
- `ExpeditionBattleSettleScNotify` — เพิ่ม schema แล้ว
- `ExpeditionBattleStartCsReq` — เพิ่ม schema แล้ว
- `ExpeditionBattleStartScRsp` — เพิ่ม schema แล้ว
- `GetExpeditionBattleDataCsReq` — เพิ่ม schema แล้ว
- `GetExpeditionBattleDataScRsp` — เพิ่ม schema แล้ว
### Blind Box (7 messages)
อ่าน/เปิด/รีเซ็ตตำแหน่งกล่อง และการแจ้งการแลกเปลี่ยน.
- `BlindBoxGetDataCsReq` — มี schema เดิมใน `StarRail.proto`
- `BlindBoxGetDataScRsp` — มี schema เดิมใน `StarRail.proto`
- `BlindBoxOpenBoxCsReq` — มี schema เดิมใน `StarRail.proto`
- `BlindBoxOpenBoxScRsp` — มี schema เดิมใน `StarRail.proto`
- `BlindBoxResetPoolPositionCsReq` — เพิ่ม schema แล้ว
- `BlindBoxResetPoolPositionScRsp` — เพิ่ม schema แล้ว
- `BlindBoxTradeChangeScNotify` — มี schema เดิมใน `StarRail.proto`
### Badge (2 messages)
ข้อมูลและการแจ้งเปลี่ยน Badge.
- `BadgeInfoScNotify` — มี schema เดิมใน `StarRail.proto`
- `GetBadgeInfoScRsp` — มี schema เดิมใน `StarRail.proto`
### Social Play (15 messages)
ข้อมูลห้อง เจ้าของห้อง ผู้เยี่ยมชม แชต การเคลื่อนไหว และ operation ในห้อง.
- `SocialPlayGameplayOperationScNotify` — มี schema เดิมใน `StarRail.proto`
- `SocialPlayGetDataCsReq` — มี schema เดิมใน `StarRail.proto`
- `SocialPlayGetDataScRsp` — มี schema เดิมใน `StarRail.proto`
- `SocialPlayGetOnlineRoomDataCsReq` — มี schema เดิมใน `StarRail.proto`
- `SocialPlayGetOnlineRoomDataScRsp` — มี schema เดิมใน `StarRail.proto`
- `SocialPlayGetOwnerRoomDataCsReq` — มี schema เดิมใน `StarRail.proto`
- `SocialPlayGetOwnerRoomDataScRsp` — มี schema เดิมใน `StarRail.proto`
- `SocialPlayPreCheckEnterRoomCsReq` — เพิ่ม schema แล้ว
- `SocialPlayPreCheckEnterRoomScRsp` — มี schema เดิมใน `StarRail.proto`
- `SocialPlayQueryRecentVisitorsCsReq` — มี schema เดิมใน `StarRail.proto`
- `SocialPlayQueryRecentVisitorsScRsp` — มี schema เดิมใน `StarRail.proto`
- `SocialPlayRoomPlayerMoveScNotify` — มี schema เดิมใน `StarRail.proto`
- `SocialPlaySettingInfoScNotify` — มี schema เดิมใน `StarRail.proto`
- `SocialPlayTalkCsReq` — มี schema เดิมใน `StarRail.proto`
- `SocialPlayTalkScRsp` — มี schema เดิมใน `StarRail.proto`
### Pet Marble (6 messages)
ข้อมูลเกม Pet Marble, trial และเริ่ม/ซิงก์ด่าน.
- `PetMarbleGetCycleTrialPetsCsReq` — มี schema เดิมใน `StarRail.proto`
- `PetMarbleGetCycleTrialPetsScRsp` — มี schema เดิมใน `StarRail.proto`
- `PetMarbleGetDataCsReq` — มี schema เดิมใน `StarRail.proto`
- `PetMarbleGetDataScRsp` — มี schema เดิมใน `StarRail.proto`
- `PetMarbleLevelBeginScRsp` — มี schema เดิมใน `StarRail.proto`
- `PetMarbleSyncDataScNotify` — มี schema เดิมใน `StarRail.proto`
### Pet Park (2 messages)
คำขอปรับแต่ง Pet Park.
- `PetParkDiyCsReq` — มี schema เดิมใน `StarRail.proto`
- `PetParkDiyScRsp` — มี schema เดิมใน `StarRail.proto`
### Finality Battle (2 messages)
คำขอเริ่มด่านต่อสู้ Finality และผลตอบกลับ.
- `StartFinalityBattleLevelCsReq` — มี schema เดิมใน `StarRail.proto`
- `StartFinalityBattleLevelScRsp` — มี schema เดิมใน `StarRail.proto`
### Voracity Invasion (3 messages)
อ่านข้อมูลและรับ notification ของ Voracity Invasion.
- `GetVoracityInvasionDataScRsp` — มี schema เดิมใน `StarRail.proto`
- `VoracityInvasionChangeScNotify` — มี schema เดิมใน `StarRail.proto`
- `VoracityInvasionGetDataCsReq` — เพิ่ม schema แล้ว
### Private Order (2 messages)
คำขอประกาศ private order และผลตอบกลับ.
- `PublishPrivateOrderCsReq` — มี schema เดิมใน `StarRail.proto`
- `PublishPrivateOrderRsp` — มี schema เดิมใน `StarRail.proto`
### Enum ที่เพิ่ม
- `GGLMGBPOCOP`: ค่า `GGLMGBPOCOP_BMKFIMEJPOM=0`, `GGLMGBPOCOP_MLOGJAKGHHD=1`, `GGLMGBPOCOP_ILMKHLENPNI=2`; ชื่อสมาชิกยัง obfuscated จึงยังบอกความหมายเชิงเกมไม่ได้
## ข้อความที่ยัง obfuscated
เหลือ 111 message ที่ชื่อเป็นรหัส ไม่มีชื่อ feature ที่ยืนยันได้ใน schema จึงไม่ตั้งชื่อความหมายเอง รายการด้านล่างบอกเฉพาะโครงสร้างและชนิดที่ message อื่นอ้างถึง:
- `AAOAEMOHCEP` — fields: OHMBEPHEBDJ:uint32#2, progress:uint32#8; ถูกอ้างจาก: `FOEPMKFEJMK`
- `ABGMGHNOONM` — fields: ไม่มี field; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `ADDMKOIFOEF` — fields: ไม่มี field; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `AFAIGBNOCJB` — fields: info:FOEPMKFEJMK#12; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `AFKFJCPELEM` — fields: NGPBPFKGNLI:uint32#4, retcode:uint32#11; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `AHBLKPAJDPI` — fields: CHILKFNAINA:uint32#13, LBMGKCMHKLN:uint32#14, HEMOHFJJMJG:uint32#15; ถูกอ้างจาก: `BlindBoxOpenBoxCsReq`
- `ALAMOHABJIP` — fields: ILBFMJKABFO:uint32#4, JPPMEKJGJFD:uint32#10, LLNNOPDLLED:uint32#11, GNFDFIIKJHI:uint32#14; ถูกอ้างจาก: `HPJONNDENCB`, `PPFAMGCOOFP`
- `AOBDHCFGGBH` — fields: design_level:uint32#3, DLDELBKOMDK:uint32#4, retcode:uint32#7, AFMDPIAFPNF:uint32#8, EIFICNFGGHI:uint32#9, LAOPAGMAAHD:uint32#11, OOIMHIJFHDI:uint32#12, PDNHGNDAHBA:uint32#14, FDGKBOIEHBD:uint32#15; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `BACPIBIJPPH` — fields: retcode:uint32#13; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `BDOBLDOOICE` — fields: EPENKGKBOAP:uint32#7, end_time:int64#8; ถูกอ้างจาก: `PetMarbleGetCycleTrialPetsScRsp`
- `BHJEBMOOJED` — fields: KJPFENPNFBP:ItemList#12; ถูกอ้างจาก: `BlindBoxOpenBoxScRsp`
- `BMJHNDBOPLC` — fields: ไม่มี field; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `BNKDEHGIJMH` — fields: LLCHGCNFOJJ:JCAHAPMBCOC#15, IKMADODLNJD:PACMGHKKGKN#2, EPLGOGFAHDM:ONJIANLPDBE#9, PPNNPIGCHOL:FJEMMEGKKHE#11; ถูกอ้างจาก: `HMLFGDFLIBP`
- `BODEMOLDHAA` — fields: teleport_id:uint32#10; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `BPMFHIHNEHH` — fields: ENGHMIAMPLG:ItemList#9, retcode:uint32#12, info:FOEPMKFEJMK#13; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `CCLIGKFAHJI` — fields: ไม่มี field; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `CDLFFHOHAIH` — fields: FIEOPKNBHKJ:uint64#15; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `CEAPCHBBOFN` — fields: MBIAIMKHNDB:bool#2, uid:uint32#11; ถูกอ้างจาก: `MIECIEKKIMJ`
- `CHNMJPLALEC` — fields: retcode:uint32#3, MJNENEAAOAE:uint64#5; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `CJIFMPGCOOC` — fields: AALLJKILLKM:DLDPJEILCDB#13; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `COPLCPBANMD` — fields: FODBOPBEALE:PDFEPMMIKDF#13; ถูกอ้างจาก: `PetMarbleGetDataScRsp`, `PetMarbleSyncDataScNotify`
- `CPCHHBHCGOO` — fields: ไม่มี field; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `DCNIDBKPPCK` — fields: IKJOGIDIBPK:uint64#1, retcode:uint32#6, order_list:NMEGIPHFFDA#9; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `DJIHNCHDFED` — fields: retcode:uint32#5; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `DLDPJEILCDB` — fields: HJAMPKPCKEB:string#1, KMGONPNDONA:string#2, DHPIFLNBLNM:string#3, ACLHGDDNNLK:string#4, CAGPHEEGOAC:string#5, DNDHBFOKAEA:string#6, ACMLHNNMBBN:string#7, FFCDKLBFKJM:string#8, DALMLLPIFNP:string#9, EFGMHCEIJGO:string#10, PFDNBIDFDMH:string#11, BLBAIBEBIAL:string#12, KNAKEKLCFDH:string#13, GECJPIMLHIM:string#14, JHKJKKGLAHE:string#15, GOOLPABLPBF:string#1297, LOKOLODKAAM:string#1369; ถูกอ้างจาก: `CJIFMPGCOOC`
- `DNHFLGJJKHN` — fields: order_list:NMEGIPHFFDA#10, IKJOGIDIBPK:uint64#11; ถูกอ้างจาก: `OIJOHMLIEII`
- `DPOGMNFCMNN` — fields: order_list:NMEGIPHFFDA#5, retcode:uint32#7; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `EBGAMBKHDBO` — fields: IAJHCHOJHNN:uint32#14, type:uint32#3, NLIHHAKFEDB:bool#607, GGBGEJIIKFN:BEGIDCPIPBG.MDNMHBPMJFD#155; ถูกอ้างจาก: `GetVoracityInvasionDataScRsp`
- `ELNAIJEFGMK` — fields: NMELIDCDKAK:uint32#5; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `FAKNKCAOHON` — fields: FIEOPKNBHKJ:uint64#14; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `FDCJIIKHHHB` — fields: retcode:uint32#10; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `FGLAJHMCJLL` — fields: expire_time:int64#10, EIKLMFPMJJD:uint32#12; ถูกอ้างจาก: `JEGMGPOFHGG`
- `FIJJHJADLLM` — fields: retcode:uint32#5, DODHMIDBNHC:NPLMMCGAJDF#10; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `FJEMMEGKKHE` — fields: KIEBAPFGCCN:uint32#7; ถูกอ้างจาก: `BNKDEHGIJMH`
- `FJKEGMEPLDI` — fields: CPPBNJLABGE:HKHKEMHCHEB#8; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `FKPKLHICPFO` — fields: LENMCGCGBOA:uint32#7, retcode:uint32#14; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `FMOEINGLFGG` — fields: FLKIEILIBJA:PGLBKDELHJK#4, OGOCOFPHIIK:FODAGGODIJM#1; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `FODAGGODIJM` — fields: FLBOPEJIGJF:uint32#5, DGONPFLCOMO:uint32#7; ถูกอ้างจาก: `FMOEINGLFGG`
- `FOEPMKFEJMK` — fields: LNLDJDODOIL:uint32#5, available_count:uint32#7, CLGMOPPOGGC:uint32#8, OMNDNGDEEGL:AAOAEMOHCEP#11; ถูกอ้างจาก: `AFAIGBNOCJB`, `BPMFHIHNEHH`, `OMEAEOLPGGM`
- `GNBOBLNFEHI` — fields: FIEOPKNBHKJ:uint64#9; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `HAHEOGIBNHL` — fields: MJNENEAAOAE:uint64#10, retcode:uint32#11; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `HAIFIDAHGJG` — fields: JIPPNPILKDJ:HHCNMGNAIBG#14; ถูกอ้างจาก: `SocialPlayGetDataScRsp`
- `HFHGPMCHDGL` — fields: BHBJFFMACFD:uint32#1, OLGCOBHGDCD:HIMPJFMPEPA#2; ถูกอ้างจาก: `HHCNMGNAIBG`
- `HHCNMGNAIBG` — fields: DANNIDIPFAL:HFHGPMCHDGL#1; ถูกอ้างจาก: `HAIFIDAHGJG`, `LLKIFBFCMLK`, `PetParkDiyScRsp`, `SocialPlayGameplayOperationScNotify`
- `HHJLCGGEHPB` — fields: PLPPPCEPBDO:uint32#1, KFACPOBAAGM:int64#7, CILGIDDHODG:PlayerSimpleInfo#14; ถูกอ้างจาก: `SocialPlayQueryRecentVisitorsScRsp`
- `HKHKEMHCHEB` — fields: NECCJMBJNEN:uint32#4, HECCOBFBJFI:uint32#5; ถูกอ้างจาก: `FJKEGMEPLDI`
- `HLJINHODOPP` — fields: order_list:NMEGIPHFFDA#3, retcode:uint32#6; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `HMACEHDGGHB` — fields: BJPHDKEBOBK:IKAHKMNCFDN#1, HBKEPFKDAMI:uint32#2, CMHKFNFKGOI:int64#3; ถูกอ้างจาก: `SocialPlayGameplayOperationScNotify`
- `HMLFGDFLIBP` — fields: DGNGMJMPFGK:BNKDEHGIJMH#8; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `HPJONNDENCB` — fields: EEFLBHGIAAN:ALAMOHABJIP#4, OFNDFACDNOC:uint32#11; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `IAKKHBENIOL` — fields: retcode:uint32#9; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `IFEEMEAJMEJ` — fields: ODNGMIJLKKA:uint32#1, ENGJIMIHCHJ:PFNJCDINMLA#2, EGECDHIHFHF:OELLEKNNEMK#3; ถูกอ้างจาก: `JBJNJPAOCDA`
- `IKBDJLNEPBH` — fields: HFLOPHNBKGN:PEEEEGAPCOK#1; ถูกอ้างจาก: `SocialPlayGameplayOperationScNotify`
- `ILBLJAFMBBK` — fields: FIEOPKNBHKJ:uint64#6; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `IMDEBPDKCAJ` — fields: MJNENEAAOAE:uint64#5, retcode:uint32#8; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `IOPNJIOPAFI` — fields: filter:MMBIBKFEFNG#13, ADPEKIOPFKG:GGLMGBPOCOP#15; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `JBJNJPAOCDA` — fields: uid:uint32#1, OJPDDAOJJKC:bool#2, NJDCPMENIFG:JOLAHHGIFHA#3, AIMNJIMDIKM:int64#4, AJIPBLCIONL:PlayerSimpleInfo#5, DCFKJCMODKJ:IFEEMEAJMEJ#6, LHLKJIDFLIN:CBPDACMBHGL#7; ถูกอ้างจาก: `POBLGKIGINE`, `SocialPlayGameplayOperationScNotify`, `SocialPlayGetDataScRsp`
- `JCAHAPMBCOC` — fields: EJHKAHEGCDC:uint32#8; ถูกอ้างจาก: `BNKDEHGIJMH`
- `JCIPKHCJLBM` — fields: retcode:uint32#11; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `JDNHIMDLIHH` — fields: ไม่มี field; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `JEGMGPOFHGG` — fields: CPMCCCODGAB:FGLAJHMCJLL#3; ถูกอ้างจาก: `BadgeInfoScNotify`, `GetBadgeInfoScRsp`
- `JGAMELLGLGE` — fields: NJDCPMENIFG:JOLAHHGIFHA#7; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `JKILAALMFIB` — fields: retcode:uint32#7; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `JLMKPMCDOKC` — fields: CLGMOPPOGGC:uint32#13; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `JNDBILOGFAF` — fields: FBDIGGDLDCP:MNGADDFICJF#1, FLBOPEJIGJF:uint32#10; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `JOLAHHGIFHA` — fields: pos:Vector#1, rot:Vector#2, ICNANKMDJIC:float#3, GHMKFMBDKNE:Vector#4, GHEMGLKGKLC:float#5, FPHBEHJJBIA:uint32#6, MGIOLDGHPMA:bool#7, time_stamp:int64#8; ถูกอ้างจาก: `JBJNJPAOCDA`, `JGAMELLGLGE`, `MHNNEFBOPIE`
- `JPAOIPLDKHB` — fields: BJPHDKEBOBK:IKAHKMNCFDN#1, NLJBJMDPBGN:BFAKMCIJFCB#2, DBIKJPDBMOE:int64#3, CMHKFNFKGOI:int64#4, HBKEPFKDAMI:uint32#5, GAEKEFEKCBD:uint32#6; ถูกอ้างจาก: `PBMDEBCGNMD`
- `JPPCNOGIMFD` — fields: DHAKONBPFMC:uint32#7; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `KKACLNNMMAM` — fields: EIHOECKBDOH:uint32#7, BPAOGJPLENJ:uint32#14, JMAODNEONPF:bool#15; ถูกอ้างจาก: `KPBCIIFIAGI`
- `KPBCIIFIAGI` — fields: CMHKFNFKGOI:int64#1, KABGCGENKLK:CGLJLBDFNBK#2, NIELDCLPOLA:JOFHMCJPBCE#4, BJPHDKEBOBK:IKAHKMNCFDN#5, NLJBJMDPBGN:BFAKMCIJFCB#6, CEMFBJPOLNP:PJFIMFJPMCN#7, NAIFOMCLGLN:ONAADAJBLEB#8, JIELLGELABA:KKACLNNMMAM#9, KBEGMPBAJIL:uint32#11; ถูกอ้างจาก: `SocialPlayGetDataScRsp`
- `LLKIFBFCMLK` — fields: JIPPNPILKDJ:HHCNMGNAIBG#1; ถูกอ้างจาก: `POBLGKIGINE`
- `LMOILOPJKCB` — fields: retcode:uint32#2; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `LNAAACICHPG` — fields: pet_id:uint32#1, NDMHOKEGOAP:uint32#11, ONMDDKGCEHK:uint64#13; ถูกอ้างจาก: `NMEGIPHFFDA`
- `LPJFNJAJIGM` — fields: FIEOPKNBHKJ:uint64#13, ONMDDKGCEHK:uint64#15; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `MENCBJMOEML` — fields: FIEOPKNBHKJ:uint64#12; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `MFCCCIMGMFL` — fields: pool_id:uint32#1, POONFMJAFDH:uint32#3, end_time:int64#7, GOJBGCEEEHK:string#11, JPLIJJFCAOO:int64#14; ถูกอ้างจาก: `BlindBoxGetDataScRsp`
- `MGFJDLIBABO` — fields: JPPKLEIPKAN:BattleEndStatus#6, PLAPNCJJAOP:NPLMMCGAJDF#11, ELHJAMKKKLH:bool#12; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `MHNNEFBOPIE` — fields: op_uid:uint32#1, JENKGODEIOM:JOLAHHGIFHA#2; ถูกอ้างจาก: `SocialPlayRoomPlayerMoveScNotify`
- `MIECIEKKIMJ` — fields: retcode:uint32#2, CAFBDEDFBOL:CEAPCHBBOFN#3; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `MIKGMGBHLEN` — fields: message_text:string#1, extra_id:uint32#2; ถูกอ้างจาก: `SocialPlayGameplayOperationScNotify`, `SocialPlayTalkCsReq`, `SocialPlayTalkScRsp`
- `MKGODFLGEAM` — fields: level:uint32#2, LLKGDLAFODJ:string#5, head_icon:uint32#6, AGABADPIGGK:bool#8, uid:uint32#15; ถูกอ้างจาก: `NMEGIPHFFDA`
- `MLNNHJKKMNC` — fields: ไม่มี field; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `MMBIBKFEFNG` — fields: FMHBALCGMFF:bool#3, PODLFMBEKEG:uint32#9; ถูกอ้างจาก: `IOPNJIOPAFI`
- `MNGADDFICJF` — fields: ENPNDBIBPLE:uint32#1, PANMEBACIBF:bool#2, rotation:uint32#3, x:uint32#8, y:uint32#11; ถูกอ้างจาก: `JNDBILOGFAF`, `NPMOBJOCIAF`, `PGLBKDELHJK`
- `MNGELOJBJGC` — fields: retcode:uint32#7, FMACGJBHLPF:uint32#10, order_list:NMEGIPHFFDA#15; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `MNLLCNFNKKP` — fields: IMGDMDDKHDL:uint32#1, LALKFADHJJL:uint32#5, FMCCHBBIJKF:ODLEEMAALIP#6, GBJEALNCMJC:uint32#7, HCMKEFPFEDH:bool#8, IIIAGPNGPJM:ODLEEMAALIP#9, mode:uint32#12, OFNINJLHHDE:ODLEEMAALIP#15; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `NLBAOLFBEGB` — fields: retcode:uint32#3, LLLOIIKOCEN:PPELMHMMCHP#8; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `NMEGIPHFFDA` — fields: AMGLECMANAH:LNAAACICHPG#1, LFOIKMFLNKJ:PEHEBABHPBH#2, EFKJFADLLIA:MKGODFLGEAM#6, FIEOPKNBHKJ:uint64#7, expire_time:uint64#8, NDHBAFMMFBC:OHAPBJANBDE#10, KDBMGCMEOFL:uint64#11, DCKKGALHFNO:uint64#12, DAMCKNHKDOA:LNAAACICHPG#13, DFAACJDIFBL:MKGODFLGEAM#15; ถูกอ้างจาก: `DCNIDBKPPCK`, `DNHFLGJJKHN`, `DPOGMNFCMNN`, `HLJINHODOPP`, `MNGELOJBJGC`
- `NPLMMCGAJDF` — fields: DFFPHJJIHFJ:uint32#2, LAPLGJOBGAN:uint32#4, remaining_round:uint32#12, level_id:uint32#14; ถูกอ้างจาก: `FIJJHJADLLM`, `MGFJDLIBABO`
- `NPMOBJOCIAF` — fields: DGONPFLCOMO:uint32#11, FBDIGGDLDCP:MNGADDFICJF#15; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `OAOONIMHKLA` — fields: retcode:uint32#1; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `ODHFCEALPFN` — fields: IIIAGPNGPJM:ODLEEMAALIP#1, JJPLIMAENEB:uint32#3, JNBIALMKFCL:uint32#5, FMCCHBBIJKF:ODLEEMAALIP#7, OFNINJLHHDE:ODLEEMAALIP#9, LLMLOGNFFCD:bool#10, mode:uint32#13; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `ODLEEMAALIP` — fields: AOLIEDBCNBN:uint32#1, hp:sint32#4, KNDIIBJEIDG:uint32#6, NDMHOKEGOAP:uint32#7, OLANKLPCBEG:uint32#9, atk:uint32#10, AGKNBANFLIB:KVP#11, MDKFLGDEJCN:uint32#12; ถูกอ้างจาก: `MNLLCNFNKKP`, `ODHFCEALPFN`
- `OELLEKNNEMK` — fields: OLGCOBHGDCD:HIMPJFMPEPA#1, CGBJOAJEMKN:uint32#2; ถูกอ้างจาก: `IFEEMEAJMEJ`
- `OIJOHMLIEII` — fields: EPHIIBNCCJG:DNHFLGJJKHN#15; ถูกอ้างจาก: `BlindBoxTradeChangeScNotify`
- `OKCAJHKCJDE` — fields: JDFJJOKDIKC:uint32#2, OBLOEMJOFEE:uint32#4, AFFLDMFBGEH:uint64#13; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `OMEAEOLPGGM` — fields: HNFFFDEGOEB:FOEPMKFEJMK#8, retcode:uint32#13; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `ONAADAJBLEB` — fields: DBIKJPDBMOE:int64#11, ONOHPMDGNNH:uint32#14; ถูกอ้างจาก: `KPBCIIFIAGI`
- `ONJIANLPDBE` — fields: LEJEBBCKPCI:uint32#9; ถูกอ้างจาก: `BNKDEHGIJMH`
- `PACMGHKKGKN` — fields: IEOAHLNBBBB:uint32#13; ถูกอ้างจาก: `BNKDEHGIJMH`
- `PBMDEBCGNMD` — fields: IKJNIKIGFLF:MNCBEDBDDHL#1, PKHFMJDNKOE:JPAOIPLDKHB#2, KABGCGENKLK:CGLJLBDFNBK#4; ถูกอ้างจาก: `POBLGKIGINE`
- `PDFEPMMIKDF` — fields: KOMOGINENAC:uint32#1, AIJPKJICFDJ:uint32#6, mode:uint32#8; ถูกอ้างจาก: `COPLCPBANMD`
- `PEEEEGAPCOK` — fields: PLPPPCEPBDO:uint32#1, op_uid:uint32#2, OOCPKIGPEHP:uint32#3, CMIEOOODDIA:int64#4, AALDPOAKJBK:string#5; ถูกอ้างจาก: `IKBDJLNEPBH`
- `PEMMJHDFOLM` — fields: ไม่มี field; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `PGLBKDELHJK` — fields: FLBOPEJIGJF:uint32#1, status:uint32#5, DGONPFLCOMO:uint32#7, FBDIGGDLDCP:MNGADDFICJF#9; ถูกอ้างจาก: `FMOEINGLFGG`
- `PHIMNIFMBMI` — fields: MJNENEAAOAE:uint64#2, retcode:uint32#14; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `PMBMFHMKBNC` — fields: retcode:uint32#4; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `POBLGKIGINE` — fields: room_owner_uid:uint32#1, player_info:JBJNJPAOCDA#2, DLKOEIANIMK:uint32#3, LNMGOFCOMED:PBMDEBCGNMD#100, MAGDHGMLLKG:LLKIFBFCMLK#101; ถูกอ้างจาก: `SocialPlayGameplayOperationScNotify`, `SocialPlayGetOnlineRoomDataScRsp`, `SocialPlayGetOwnerRoomDataScRsp`
- `PPELMHMMCHP` — fields: KLOJONBEJKJ:uint32#1, ONMDDKGCEHK:uint64#4; ถูกอ้างจาก: `NLBAOLFBEGB`
- `PPFAMGCOOFP` — fields: GALBOLNODBB:uint32#1, LENMCGCGBOA:uint32#2, EEFLBHGIAAN:ALAMOHABJIP#3, NGPBPFKGNLI:uint32#4, IEOAHLNBBBB:uint32#5, EJHKAHEGCDC:uint32#6, LEJEBBCKPCI:uint32#8, design_level:uint32#9, OOIMHIJFHDI:uint32#10, DEJOLCEPDCF:uint32#11, retcode:uint32#12, OFNDFACDNOC:uint32#13, KIEBAPFGCCN:uint32#14, LAOPAGMAAHD:uint32#15; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
- `PPOPABLIHNI` — fields: count:uint32#10, offset:uint32#14; ถูกอ้างจาก: ไม่มีการอ้างถึงจาก message ในไฟล์นี้
## ข้อจำกัดก่อนใช้ทำ handler
- การมี Go message type ไม่ได้แปลว่ามี CmdID, request/response pairing หรือ handler แล้ว
- ใช้ `protocol/proto/cmdid.go`/ตารางที่อ้าง revision ตรงกันเท่านั้น; ถ้าชื่อยัง obfuscated ให้บันทึกความไม่แน่นอนแทนการเดา
- schema ที่เพิ่มครั้งนี้เป็นการเติม definitions ที่ไม่มีใน `StarRail.proto` เท่านั้น ไม่ได้ยืนยันว่า Client รุ่นใดส่ง message เหล่านี้หรือว่า feature เล่นได้ครบ