7.4 KiB
7.4 KiB
บันทึกความจำ 2026-10-11: แก้ไขปัญหา Endgame 5 ข้อ (AS Starward ตกแมพ / Node 2 ค้าง / AS Normal / ตัวละครหาย / รีล็อกค้าง)
ปัญหาที่พบและวิธีแก้ไขครบทั้ง 5 ข้อ
1. AS Starward (challenge 30225) เข้าแล้วตัวละครอยู่ใต้แมพ (ตก Void)
- สาเหตุ:
- ใน
res.jsonของฉาก3012602(P30126_F30126001) มอนสเตอร์บอสใน Group 7 มีพิกัดY = -193081(-193.08 เมตร) แต่วัตถุพื้นเวทีอารีน่า (Prop102259ใน Group 2) อยู่ที่Y = -170770(-170.77 เมตร) ซึ่งพื้นเวทีอยู่สูงกว่ามอนสเตอร์ถึง 22.3 เมตร - โค้ดเดิมใน
loadChallengeSceneกำหนดspawnY = monsPos.Y(-193081) ส่งผลให้ตัวละครเกิดใต้พื้นเวทีกระเด็นตก Void - นอกจากนี้มีเงื่อนไข
if gid != 1 && gid != targetGroupID && gid != 7 && gid != 8 { continue }ทำให้ Group 2 (แผ่นพื้นเวที) ไม่ถูกโหลดส่งให้ Client เลย
- ใน
- การแก้ไข:
- ใน
loadChallengeScene(internal/gameserver/handlers_challenge_scene.go) เพิ่มระบบตรวจหาความสูงพื้นเวทีจาก Props ในฉาก (hasFloorProp && floorY > monsPos.Y) เพื่อปรับความสูงของทั้งผู้เล่นและมอนสเตอร์ให้ยืนบนพื้นเวทีจริง (Y = -170770) - ยกเลิกการกรอง Group เพื่อให้ Props ของทุก Group (รวมถึงแผ่นพื้นเวที Group 2 และ Prop อารีน่า Group 3) ถูกส่งให้ Client ครบถ้วน
- ใน
1.1 AS Starward เข้าห้องที่ 2 (Node 2) แล้วค้างหน้าโหลด
- สาเหตุ:
- เมื่อผู้เล่นผ่านห้อง 1 และเข้าห้อง 2 (
req.stageIndex == 1) โค้ดเดิมดึงข้อมูลจากcd.Tierce[baseID]ซ้ำ ซึ่งในไฟล์challenge_data.jsonก้อนtierce[30225]มีเฉพาะข้อมูลห้อง 1 ทำให้เซิร์ฟเวอร์พยายามโหลดห้อง 1 ซ้ำที่เพิ่งจบไป - ใน
handleStartChallengeTierceมีการส่ง CmdID8973ซึ่งเป็น Packet โบราณที่ไม่มีใน Protobuf 4.6.51 ตามหลัง CmdID 8998 ทันที ทำให้ Network stream desync และ Coroutine โหลดฉากของ Client ค้าง
- เมื่อผู้เล่นผ่านห้อง 1 และเข้าห้อง 2 (
- การแก้ไข:
- ใน
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 - ตัดการส่ง CmdID
8973ทิ้งทั้งหมด เหลือเฉพาะStartChallengeTierceScRsp(CmdID 8998) ตามมาตรฐาน 4.6.51
- ใน
2. AS แบบปกติ (challenge 30214) ยังเข้าไม่ได้
- สาเหตุ:
- ใน
handleStartChallengeมีการแนบฟิลด์stage_info(Tag 13) ไปในStartChallengeScRsp(CmdID 1787) ซึ่งมีเฉพาะBuffIdแต่ขาดข้อมูล Lineup / Relics ที่BossChallengeModuleของ Client คาดหวัง ส่งผลให้ Client ปฏิเสธการเข้าฉาก - ในฉาก
3000205มี Prop เพียงตัวเดียวอยู่ใน Group 3 ซึ่งถูกตัวกรองเดิมข้ามไป ทำให้ฉากไม่มี Prop ส่งไปเลย
- ใน
- การแก้ไข:
- ตัด
stage_infoออกจากStartChallengeScRspให้ส่งเฉพาะretcode,cur_challenge,lineup_list, และsceneเหมือน MoC/PF ที่ทำงานได้ปกติ - ปลดล็อกการโหลด Prop ทุก Group ทำให้ Prop 300002 ใน Group 3 ถูกโหลดสมบูรณ์
- ตัด
3, 4, 5. ออกจาก Endgame ตัวละครหาย, ไม่มีจุดวาปขึ้น, รีล็อกแล้วค้างหน้าโหลด
- สาเหตุ:
- ในไฟล์
persistentมีการบันทึกฉากไว้ที่entry_id: 1030402(Xianzhou Luofu Chapter 04) พิกัดx: 780, y: -153008, z: -621450ซึ่งเป็นพิกัดตก Void ลึก -153 เมตร - เมื่อกดออกจาก Endgame ฟังก์ชัน
handleLeaveChallengeและhandleLeaveChallengeTierceตรวจพบว่าฉากไม่ใช่ 3000000..4000000 จึงพาผู้เล่นกลับไปที่1030402พิกัด Void เดิม ทำให้ตัวละครตกแมพและมองไม่เห็น (ตัวละครหาย) - Client 4.6.51 มีปัญหาไฟล์ Terrain LOD ของ Chapter 04 ขาดหาย (
TerrainStageLodConfig Stages/Outputs/Chapter04/... 没找到) ทำให้ Coroutine ของฉากค้าง ส่งผลให้ UI แผนที่ไม่แสดงจุดวาป และเมื่อปิดเปิดเกมใหม่GetCurSceneInfoก็พยายามโหลด1030402ซ้ำจนค้างหน้าโหลด 100%
- ในไฟล์
- การแก้ไข:
- ใน
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เพื่อแสดงโมเดลตัวละครและรีเฟรชจุดวาปทั้งหมด - ใน
GetCurSceneInfo(handlers_scene.go) เพิ่มเงื่อนไขตรวจสอบentryID == 1030402 || player.Position.Y < -50000หากพบฉากเสียหรือพิกัด Void ให้กู้คืนกลับมา Belobog102020107ทันทีและเซฟ persistent อัตโนมัติ ป้องกันการค้างตอนล็อกอิน - รีเซ็ตไฟล์
persistentกลับมายัง Belobog102020107
- ใน