docs: add SKILL.md and AI TOOLBOX (skills + memory) to the Go project
This commit is contained in:
1 parent
59ea97b1a6
commit
580717c3d8
4 files changed
+353
No files matched your search
@@ -0,0 +1,49 @@
|
||||
# 2026-10-07 — พอร์ตเซิร์ฟเวอร์เป็นภาษา Go + แก้บัคกล้องหลุด (SceneCastSkill)
|
||||
|
||||
## สรุปงานวันนี้
|
||||
|
||||
### 1. พบต้นเหตุจริงของบัค "กดตีแล้วกล้องหลุดจากตัวละคร"
|
||||
- `SceneCastSkillCsReq` handler เดิม (Rust battle.rs) ตอบ `battle_info` + `monster_battle_info`
|
||||
ให้ client เข้า battle กับ target ที่ผ่าน filter หลวม `id > 30000 || id < 1000`
|
||||
- filter นี้รวม **avatar entity ของผู้เล่นเอง** (1-4) เข้าไปด้วย → client เริ่ม battle transition
|
||||
กับ "monster" ที่ไม่มีอยู่จริง → กล้อง battle ไม่มี target → หลุดจากตัวละคร
|
||||
- กรณี arena (entry >= 3000000) โค้ดเดิมยังหลอก target เป็น 30001 เสมออีกชั้น
|
||||
|
||||
### 2. พอร์ตทั้งเซิร์ฟเวอร์เป็นภาษา Go → `C:\Users\Phitchayut\Desktop\GaC-hkrpg-go` (commit 59ea97b)
|
||||
- สาเหตุที่เปลี่ยนภาษา: (1) คำแนะนำจากเพื่อนให้ใช้ GO แทน (Firefly Shelter ที่เวิร์กเป็น Go
|
||||
แต่ปิด source) (2) พบว่าโค้ด Rust commit สุดท้าย **แตกตัวกับ proto ใน repo ตัวเอง** —
|
||||
ใช้ชื่อ message เก่า (`PveBattleResultCsReq`, `QuickStartCocoonStageCsReq`, `GateServer`,
|
||||
`GetGachaInfoCsReq`, `GroupRefreshInfo`, `LineupSlot`) ที่ไม่มีใน proto 4.6.51 แล้ว
|
||||
- ตัว Go ผูกทุก handler กับชื่อจริงใน proto (handler ที่ proto ไม่มี → log+skip ไม่ panic)
|
||||
|
||||
### 3. สิ่งที่สร้าง/พอร์ต
|
||||
- `pkg/kcp` — mihoyo KCP (header 28 ไบต์ conv+token) port จาก kcp.rs 1:1 + ใช้นาฬิกา ms
|
||||
(Rust ใช้วินาที ทำ RTT/resend เพี้ยน) + UDP loopback test ผ่าน
|
||||
- `protocol/proto` — generate Go protobuf จาก proto 4.6.51 (4,932 messages) +
|
||||
cmdid map 2,114 ids generate จาก `// CmdID:` comments
|
||||
- gameserver ครบ: handshake 0xFF/0x145/0x194, packet framing 0x9D74C714/0xD7A152C8,
|
||||
login flow, scene load (props/NPCs/monsters + MonsterEntities tracking), lineup,
|
||||
avatar/skin, missions, tutorials (1249+855), bag/equip, challenge ครบ
|
||||
(StartChallenge 1787 / Tierce 8973 / Peak 8948 / raw replies ทุกตัว)
|
||||
- sdkserver: query_dispatch/query_gateway (Gateserver pb + base64), hotfix fetch,
|
||||
auth endpoints, SRTools upload
|
||||
- **FIX SceneCastSkill**: เก็บ monster entity จริงต่อ session (`Session.MonsterEntities`)
|
||||
ตีไม่โดน monster จริง = ตอบ retcode 0 ไม่เข้า battle → กล้องไม่หลุด
|
||||
- smoke test จำลอง client เต็มรูปแบบผ่าน UDP จริง: handshake → PlayerGetToken →
|
||||
SceneCastSkill ทั้งสองกรณี — **PASS ทั้งหมด**
|
||||
- ใช้ data files เดิมทุกไฟล์ (save ไม่พัง) — เปิดด้วย `run_go.bat`
|
||||
|
||||
### 4. เครื่องมือที่ช่วย
|
||||
- `tools/firefly_dump` (ที่ user เตรียมไว้) — symbol dump ของ Firefly binary ใช้ยืนยัน
|
||||
สถาปัตยกรรม + ยืนยันว่า Firefly ปิด source ไม่มี code ให้ก็อป
|
||||
- ติดตั้ง Go 1.27.0 (winget) + protoc-gen-go ใหม่ใน session นี้
|
||||
|
||||
### 5. การจัดการเอกสาร
|
||||
- ลบ `GLM_FIX_PROMPT.md`, `PROMPT.md`, `HANDOFF.md` (หมดอายุ — เนื้อหาจำเป็นย้ายเข้า SKILL.md)
|
||||
- อัพเดต `SKILL.md` (เพิ่มหัวข้อ 10-12: proto desync, บัคกล้อง, สถาปัตยกรรม Go)
|
||||
- ก็อป SKILL.md → `tools/AI TOOLBOX/skills/hkrpg-ps-version-update/SKILL.md` ทั้งสองโปรเจกต์
|
||||
|
||||
## สิ่งที่ต้องทำต่อ
|
||||
1. **ทดสอบกับ client จริง** — เปิด `run_go.bat` (GaC-hkrpg-go) แล้ว login ด้วย hosts/proxy เดิม
|
||||
2. Gacha handlers ถูก skip (proto 4.6.51 เปลี่ยนชื่อ GetGachaInfoCsReq/DoGachaCsReq) — หาชื่อใหม่จาก dump
|
||||
3. ถ้า client ฟ้อง cmd ไหน "Unknown" ให้เช็ค `gameserver.log` แล้วเติม handler ในตัว Go
|
||||
Reference in new issue
Block a user