Files
GaCy-GO/tools/AI TOOLBOX/memory/2026-10-11.md
T

7.4 KiB

บันทึกความจำ 2026-10-11: แก้ไขปัญหา Endgame 5 ข้อ (AS Starward ตกแมพ / Node 2 ค้าง / AS Normal / ตัวละครหาย / รีล็อกค้าง)

ปัญหาที่พบและวิธีแก้ไขครบทั้ง 5 ข้อ

1. AS Starward (challenge 30225) เข้าแล้วตัวละครอยู่ใต้แมพ (ตก Void)

  • สาเหตุ:
    1. ใน res.json ของฉาก 3012602 (P30126_F30126001) มอนสเตอร์บอสใน Group 7 มีพิกัด Y = -193081 (-193.08 เมตร) แต่วัตถุพื้นเวทีอารีน่า (Prop 102259 ใน Group 2) อยู่ที่ Y = -170770 (-170.77 เมตร) ซึ่งพื้นเวทีอยู่สูงกว่ามอนสเตอร์ถึง 22.3 เมตร
    2. โค้ดเดิมใน loadChallengeScene กำหนด spawnY = monsPos.Y (-193081) ส่งผลให้ตัวละครเกิดใต้พื้นเวทีกระเด็นตก Void
    3. นอกจากนี้มีเงื่อนไข if gid != 1 && gid != targetGroupID && gid != 7 && gid != 8 { continue } ทำให้ Group 2 (แผ่นพื้นเวที) ไม่ถูกโหลดส่งให้ Client เลย
  • การแก้ไข:
    1. ใน loadChallengeScene (internal/gameserver/handlers_challenge_scene.go) เพิ่มระบบตรวจหาความสูงพื้นเวทีจาก Props ในฉาก (hasFloorProp && floorY > monsPos.Y) เพื่อปรับความสูงของทั้งผู้เล่นและมอนสเตอร์ให้ยืนบนพื้นเวทีจริง (Y = -170770)
    2. ยกเลิกการกรอง Group เพื่อให้ Props ของทุก Group (รวมถึงแผ่นพื้นเวที Group 2 และ Prop อารีน่า Group 3) ถูกส่งให้ Client ครบถ้วน

1.1 AS Starward เข้าห้องที่ 2 (Node 2) แล้วค้างหน้าโหลด

  • สาเหตุ:
    1. เมื่อผู้เล่นผ่านห้อง 1 และเข้าห้อง 2 (req.stageIndex == 1) โค้ดเดิมดึงข้อมูลจาก cd.Tierce[baseID] ซ้ำ ซึ่งในไฟล์ challenge_data.json ก้อน tierce[30225] มีเฉพาะข้อมูลห้อง 1 ทำให้เซิร์ฟเวอร์พยายามโหลดห้อง 1 ซ้ำที่เพิ่งจบไป
    2. ใน handleStartChallengeTierce มีการส่ง CmdID 8973 ซึ่งเป็น Packet โบราณที่ไม่มีใน Protobuf 4.6.51 ตามหลัง CmdID 8998 ทันที ทำให้ Network stream desync และ Coroutine โหลดฉากของ Client ค้าง
  • การแก้ไข:
    1. ใน handleStartChallengeTierce (internal/gameserver/handlers_challenge_flow.go) เมื่อ req.stageIndex == 1 ให้ดึงข้อมูลด่านที่สองจาก cd.Challenges[baseID-1] (เช่น 30224 ห้อง 2: entrance2: 3013201, group2: 9, monster2: 4014036, event2: 420574) พร้อมเลือกชุดตัวละคร req.secondAvatars
    2. ตัดการส่ง CmdID 8973 ทิ้งทั้งหมด เหลือเฉพาะ StartChallengeTierceScRsp (CmdID 8998) ตามมาตรฐาน 4.6.51

2. AS แบบปกติ (challenge 30214) ยังเข้าไม่ได้

  • สาเหตุ:
    1. ใน handleStartChallenge มีการแนบฟิลด์ stage_info (Tag 13) ไปใน StartChallengeScRsp (CmdID 1787) ซึ่งมีเฉพาะ BuffId แต่ขาดข้อมูล Lineup / Relics ที่ BossChallengeModule ของ Client คาดหวัง ส่งผลให้ Client ปฏิเสธการเข้าฉาก
    2. ในฉาก 3000205 มี Prop เพียงตัวเดียวอยู่ใน Group 3 ซึ่งถูกตัวกรองเดิมข้ามไป ทำให้ฉากไม่มี Prop ส่งไปเลย
  • การแก้ไข:
    1. ตัด stage_info ออกจาก StartChallengeScRsp ให้ส่งเฉพาะ retcode, cur_challenge, lineup_list, และ scene เหมือน MoC/PF ที่ทำงานได้ปกติ
    2. ปลดล็อกการโหลด Prop ทุก Group ทำให้ Prop 300002 ใน Group 3 ถูกโหลดสมบูรณ์

3, 4, 5. ออกจาก Endgame ตัวละครหาย, ไม่มีจุดวาปขึ้น, รีล็อกแล้วค้างหน้าโหลด

  • สาเหตุ:
    1. ในไฟล์ persistent มีการบันทึกฉากไว้ที่ entry_id: 1030402 (Xianzhou Luofu Chapter 04) พิกัด x: 780, y: -153008, z: -621450 ซึ่งเป็นพิกัดตก Void ลึก -153 เมตร
    2. เมื่อกดออกจาก Endgame ฟังก์ชัน handleLeaveChallenge และ handleLeaveChallengeTierce ตรวจพบว่าฉากไม่ใช่ 3000000..4000000 จึงพาผู้เล่นกลับไปที่ 1030402 พิกัด Void เดิม ทำให้ตัวละครตกแมพและมองไม่เห็น (ตัวละครหาย)
    3. Client 4.6.51 มีปัญหาไฟล์ Terrain LOD ของ Chapter 04 ขาดหาย (TerrainStageLodConfig Stages/Outputs/Chapter04/... 没找到) ทำให้ Coroutine ของฉากค้าง ส่งผลให้ UI แผนที่ไม่แสดงจุดวาป และเมื่อปิดเปิดเกมใหม่ GetCurSceneInfo ก็พยายามโหลด 1030402 ซ้ำจนค้างหน้าโหลด 100%
  • การแก้ไข:
    1. ใน handleLeaveChallenge และ handleLeaveChallengeTierce บังคับให้การออกจาก Endgame ส่งผู้เล่นกลับสู่เขตบริหาร Belobog Administrative District (entry_id: 102020107, plane_id: 10202, floor_id: 10202001, พิกัด x: -92, y: 4278, z: 68083, rot_y: 155566) เสมอ พร้อมเรียก refreshLineup เพื่อแสดงโมเดลตัวละครและรีเฟรชจุดวาปทั้งหมด
    2. ใน GetCurSceneInfo (handlers_scene.go) เพิ่มเงื่อนไขตรวจสอบ entryID == 1030402 || player.Position.Y < -50000 หากพบฉากเสียหรือพิกัด Void ให้กู้คืนกลับมา Belobog 102020107 ทันทีและเซฟ persistent อัตโนมัติ ป้องกันการค้างตอนล็อกอิน
    3. รีเซ็ตไฟล์ persistent กลับมายัง Belobog 102020107