From eb58b2e4643ef03679dc9798c01a482e5c6ae275 Mon Sep 17 00:00:00 2001 From: CAtlas0784 Date: Wed, 7 Oct 2026 02:22:52 +0700 Subject: [PATCH] docs(skill): record round-2/3 client-test lessons in AI TOOLBOX --- tools/AI TOOLBOX/memory/2026-10-07.md | 16 ++++++++++++++++ tools/AI TOOLBOX/skills/SKILL.md | 20 ++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/tools/AI TOOLBOX/memory/2026-10-07.md b/tools/AI TOOLBOX/memory/2026-10-07.md index 6b880dd..6890e56 100644 --- a/tools/AI TOOLBOX/memory/2026-10-07.md +++ b/tools/AI TOOLBOX/memory/2026-10-07.md @@ -63,3 +63,19 @@ - loadScene: ใช้ตำแหน่ง teleport จาก teleports.json ตรงๆ ถ้า res ไม่มี id นั้น **บทเรียน:** data index บางตัวใน res.json ไม่ครอบคลุมทุกแมพ — ต้องมี fallback ค้นจากชื่อ config / teleports.json เสมอ + +## รอบ 3 (จากการทดสอบ 10 ข้อของ user — commits 876f20d, 5cc1722) + +1. **StartChallengeCsReq (1731) decode ได้ challenge_id=0** (MoC/PF/AS โหมดธรรมดากดไม่เจออะไร) + → เพิ่ม `detectChallengeID` (สแกน varint ทุก field หา id ที่เข้า range/มีใน challenge_data) + + 1787 เพิ่ม `stage_info` (tag 13, boss node buff echo) ตาม proto 4.6.51 +2. **GetSwitchHandDataScRsp = 8108** — บันทึกของ Rust บอก 8104 ผิด! (8104 = SwitchHandStartCsReq) +3. **GetSceneMapInfo (1461) decode FAIL บาง payload** (layout drift) → ย้ายเป็น raw handler + lenient + wire-walk fallback (map UI ค้าง "Navigation กำลังโหลด" / ไม่เห็นเสา อาจมาจากจุดนี้) +4. **บัควาปผิดจังหวัด (AA→AP)**: teleport id (1001, 1002...) ซ้ำกันทุกแมพ และโค้ดค้น teleports.json + ทั่วโลกแบบสุ่มลำดับ → แก้เป็น resolve จาก floor ใน scene_identifier ก่อนเสมอ ห้าม scan ทั่วโลก +5. **Tierce arena 3014101 → 3000101** (client 4.6.51 ไม่มี MapEntrance 3014101 ตามบทเรียน Rust) +6. **Event/Travel Log**: เจอ `tools/march7_dump/Config/Custom/ActivityConfig.json` — activity จริง + 147 รายการจาก client 4.6.51 → แทน synthetic ranges เดิม (content packages ตรงกัน 51=51) +7. ค้างอี้อื่น (Herta ตัวลอย, ห้อง Trailblazer ค้าง, MapRotation) — รอ log หลัง retest (hexdump + + decode-error log ครบแล้ว) diff --git a/tools/AI TOOLBOX/skills/SKILL.md b/tools/AI TOOLBOX/skills/SKILL.md index 40d5264..e4aeaed 100644 --- a/tools/AI TOOLBOX/skills/SKILL.md +++ b/tools/AI TOOLBOX/skills/SKILL.md @@ -129,3 +129,23 @@ commit สุดท้ายของ Rust (`ebc27a1`) อ้างชื่อ - **ใช้ data files Rust PS ได้ทันที** (freesr-data.json / persistent / res.json / teleports.json / challenge_data.json / mission_unlocks.json / versions.json) — ฟอร์แมต JSON ตรงกัน รวม enum string อย่าง `main_character: "FemaleHarmony"` - **Build**: `go build -o gameserver-go.exe ./cmd/gameserver` + `./cmd/sdkserver`; ทดสอบ: `go test ./...`; เปิดด้วย `run_go.bat` (UDP 23301 + HTTP 21000 เหมือนเดิม) - **ที่ตั้ง skill library**: `tools/AI TOOLBOX/` (ทั้งสองโปรเจกต์มี copy — อัปเดตต้นฉบับที่เดียวแล้วก็อป) + +## 13. บทเรียนรอบทดสอบ client จริง (2026-10-07 01:00-01:53) + +- **Req id ≠ ScRsp id — เช็ค reply จาก Cmd enum เสมอ**: บันทึกเดิมบอกตอบ + `GetSwitchHandDataScRsp = 8104` แต่ 8104 คือ `SwitchHandStartCsReq` (Req!) + ของจริงคือ **8108** — ส่ง id ผิดฝั่งไปหา client = client มองไม่เห็นคำตอบ +- **teleport id ซ้ำกันทุกแมพ** (1001, 1002, ...): ห้ามค้น teleports.json ทั่วโลกด้วย id เดียว — + วาปแล้วอาจไปผิดภูมิภาค (AA → AP) — ใช้ floor จาก `scene_identifier` กำหนดขอบเขตเสมอ + (`findEntryByTeleportInFloor`) +- **client layout drift**: payload ของ cmd เดียวกันอาจ parse ไม่ผ่าน proto ที่ถืออยู่ + (GetSceneMapInfo 1461) → raw handler + lenient wire-walk fallback + log hexdump + เพื่อแกะ layout จริงจาก log +- **challenge_id=0**: เมื่อ decoder ตาม tag ไม่เจอ ให้สแกน varint ทุก field หาค่าที่ + "หน้าตาเป็น challenge id" (`detectChallengeID` — range ต่อโหมด + เช็ค challenge_data) +- **StartChallengeScRsp 4.6.51 ต้องมี stage_info (tag 13)** — boss node buff echo +- **arena 3014101 client ไม่มี** แม้ res.json จะมี — fallback 3000101 ทั้ง StartChallenge และ Tierce +- **GetUnreleasedBlockInfo 4.6.51 = CsReq 4190 → ScRsp 4112** (retcode tag 14) — + Endgame entry รอ response นี้ก่อนเปิด UI (บันทึก Rust บอก 4130 ผิด) +- **Activity schedule จริง**: `tools/march7_dump/Config/Custom/ActivityConfig.json` + (147 activities จาก client 4.6.51) — อย่าส่ง synthetic id เพราะ Travel Log จะว่าง