fix: improve endgame clock and gameplay stability

This commit is contained in:
CAtlas0784 committed 2026-11-04 15:59:48 +07:00
1 parent ce6aabfc55
commit 658298ee86
46 files changed
+1915 -99

No files matched your search

+7 -2
View File
@@ -30,7 +30,7 @@ Gateway รองรับการค้นหา metadata ตามเวอ
เริ่มพอร์ต CW จาก [Currency-War-SR ของ xaodev](https://gaytea.cod-algieba.ts.net/xaodev/Currency-War-SR) แล้ว: เพิ่ม factory ของ Encounter หลัง Supply, ตารางตัวเลือก/ความยากที่ revision ตรงกัน และ EXP ตามโหมด/บท/Boss โดยยังรักษาเส้นทาง Battle ที่จับไว้เดิม งานนี้ยังเป็นการพอร์ตบางส่วนและยังไม่ได้ยืนยันเส้นทางใหม่ใน Client อ่านสถานะ ผลทดสอบ และงานส่งต่อใน [CW xaodev handoff](docs/CW-XAODEV-CLAUDE-HANDOFF.md)
คำสั่งเวลาใน GaCy-Srtool: `/faketime status` ดูเวลาเกม, `/faketime <Unix seconds>` หรือ `/faketime <วันที่ RFC3339 พร้อม timezone>` ตั้งเวลาจำลอง และ `/faketime off` คืนเวลาจริง เวลาจำลองเดินต่อและบันทึกใน `game_clock.state_file` จาก config (override ด้วย `GAC_GAME_CLOCK_STATE_FILE`) ใช้กับ Login/heartbeat; ไม่เปลี่ยนนาฬิกา Windows, network timeout หรือเวลา log หลังเปลี่ยนให้เปิดสมุดใหม่ หรือเข้าเกมใหม่หากหน้าจอเก็บตารางเวลาไว้
คำสั่งเวลาใน GaCy-Srtool: `/faketime status` ดูเวลาเกม, `/faketime <Unix seconds>` หรือ `/faketime <วันที่ RFC3339 พร้อม timezone>` ตั้งเวลาจำลอง และ `/faketime off` คืนเวลาจริง สำหรับ Endgame ใช้ `/faketime window <เวลาเริ่ม Unix> <เวลาจบ Unix>` เพื่อวนเวลาภายในช่วงที่ตรวจจาก Client แล้ว โดยเริ่มที่กลางช่วง เวลาจะย้อนกลับเมื่อถึงปลายช่วงและส่งผลต่อกิจกรรมอื่นที่ใช้เวลาเกมด้วย ต้องตรวจช่วงใหม่เมื่อเปลี่ยน Client เวลาบันทึกใน `game_clock.state_file` จาก config (override ด้วย `GAC_GAME_CLOCK_STATE_FILE`) ใช้กับ Login/heartbeat; ไม่เปลี่ยนนาฬิกา Windows, network timeout หรือเวลา log หลังเปลี่ยนให้เปิดสมุดใหม่ หรือเข้าเกมใหม่หากหน้าจอเก็บตารางเวลาไว้
ฉาก Login รถไฟ Cyrene ใช้งานได้แล้ว โดยใช้ `LoginShow_UP` เปิด manifest ชุดเต็มตั้งแต่เริ่มเกม และผูก event จบกับคลิปแอนิเมชัน UP ผู้ใช้ยืนยันทั้งภาพรถไฟสีขาว ฉากชมพูม่วง กลีบดอกไม้ และการ Logout แล้วกลับเข้าใหม่แล้ว เครื่องมือสร้างชุดสำเนาและคืนค่าต้นฉบับ รวมถึงผลตรวจในเกมอยู่ใน [บันทึกฉาก Login](docs/login-cyrene-investigation.md)
@@ -461,6 +461,7 @@ Client ยืนยันแล้วว่าเริ่มรอบ เปิ
พิมพ์ใน GM Console ของ GaCy srtool เมื่อเชื่อมต่อเซิร์ฟเวอร์:
- `/cw status` อ่านรอบ เงิน HP และเลเวลที่เซฟอยู่
- `/cw end` ส่งคำขอจบรอบ CW ปัจจุบันแบบ **Quit** รวมถึงตอนค้างหน้าเลือก คำสั่งรอ heartbeat และจะไม่แทรกกลาง Battle; ให้เกมเชื่อมต่อไว้จนกว่าจะจบ Battle และตรวจ `/cw status` หรือ log `CW_GM applied end` ข้อความ queued หมายถึงรับเข้าคิวแล้วเท่านั้น การจบรอบใช้ settlement แบบ Quit เดิม ไม่ถือว่าชนะ
- `/cw gold <จำนวนรวม>` ตั้งเงิน CW เช่น `/cw gold 1000`
- `/cw hp <จำนวนรวม>` ตั้ง HP ภายในค่าสูงสุดของรอบ
- `/cw exp <gain>` เพิ่ม EXP และคำนวณเลเวล/ความจุ/น้ำหนักร้านค้าตามกฎที่ดึงมา
@@ -470,6 +471,8 @@ Client ยืนยันแล้วว่าเริ่มรอบ เปิ
- `/cw equip <ItemID> [count]` เพิ่มอุปกรณ์ลงในกระเป๋า CW
- `/cw help` แสดงรูปแบบคำสั่งทั้งหมด
การสุ่มห้องยังไม่ครบ: การเริ่มรอบและผลเลือกประตูยังอาศัย capture ของโหมด/Division ที่มีอยู่ จึงเห็นเส้นทางเดิมซ้ำได้ ห้องที่สร้างภายหลังมีการสุ่มศัตรูบางส่วน แต่ยังไม่ได้ยืนยันกฎสุ่มชนิดห้องและ PetPal กับ Client การใช้ `/cw end` ไม่ได้ทำให้รอบถัดไปสุ่มห้องครบ
การมอบของและการตอบรับคิวคำสั่งจะคอมมิตพร้อมกับการทำ snapshot CAS และการแทนที่ไฟล์แบบ atomic เพื่อป้องกันการมอบของซ้ำซ้อนหลังหลุดการเชื่อมต่อ หากคำสั่งถูกปฏิเสธจะบันทึก log `CW_GM rejected` โดยไม่บันทึกการมอบของบางส่วน รายการเหล่านี้ครอบคลุมเฉพาะข้อมูลที่ดึงมา ไม่ใช่ไอเทมทุกชิ้นใน Client
- `/cw list orb|consumable|forge` แสดงรหัสรางวัลที่ดึงมา
@@ -489,7 +492,7 @@ Client ยืนยันแล้วว่าเริ่มรอบ เปิ
ไฟล์ `resources/ActivityPreviewPolicy.json` ใช้เลือกพรีแฟบหน้าต่างอีเวนต์จาก `PreviewGameplayCatalog.json` สำหรับพรีวิวอื่น ๆ ขณะนี้ถูกระงับไว้ก่อน เนื่องจากบันทึกจาก Client พบปัญหา asset รางวัลสูญหายและการค้นหาไอเทมผิดพลาดใน ActiveActivity จึงควรเปิดใช้งานแต่ละหน้าต่างใหม่เมื่อตรวจสอบ asset ที่ติดตั้ง, identity ของโมดูล และความเกี่ยวโยงของรางวัลเรียบร้อยแล้วเท่านั้น ส่วนการต่อสู้เฉพาะอีเวนต์และการกดรับรางวัลยังทำไม่เสร็จสมบูรณ์
หน้า Warp ส่งเฉพาะตู้ที่มีข้อมูลจาก Client และตรวจพบ prefab ใน `resources/GachaSandboxPolicy.json` เท่านั้น บันทึก Client พบว่า ID 2120 จากชุด handoff ไม่มีใน `GachaBasicInfo` ของ Client นี้ และ prefab ตู้จำกัดที่ตรวจสอบก็ไม่พบ การส่งตู้เหล่านั้นทำให้เปิดหน้าไม่ได้ จึงยังไม่สามารถปลดตู้ย้อนหลังจากชุด handoff ได้ การสุ่มถูกระงับไว้จนกว่าจะตรวจสอบ pool, การให้ไอเทม และ protocol กับ Client ได้ คำสั่ง `/unlockall warp` และ `/reload banner` ยังไม่ทำให้ตู้ที่ไม่ได้ตรวจสอบปรากฏใน Client
หน้า Warp ใช้ตู้จำลองจากรายชื่อตัวละครที่นำเข้าและภาพจาก Client โดย adapter สร้างแท็บจากตู้มาตรฐานที่ตรวจพบ asset แล้ว การสุ่มตู้ตัวละครใช้กติกา sandbox ใน `resources/GachaSandboxPolicy.json` และให้วัตถุดิบตัวละครซ้ำตาม resource ของเกม ไม่ใช่ตู้หรือเรททางการ ตู้มาตรฐานและมือใหม่สุ่มจากตัวละครที่มีในรายชื่อที่นำเข้า ตู้จาก handoff ที่ไม่มีในตาราง Client จะไม่ถูกส่งโดยตรง เพราะทำให้ Client เปิดหน้าไม่ได้ การแสดงหลายแท็บ การสุ่ม และการออกจากหน้าใน Client ยังต้องตรวจยืนยันอีกครั้ง
ข้อมูลตารางที่ดึงมาระหว่างรันและข้อจำกัดการตรวจสอบในปัจจุบันถูกบันทึกไว้ใน [docs/offline-gameplay-continuation.md](docs/offline-gameplay-continuation.md) การคอมไพล์ handler เหล่านี้ผ่านไม่ได้ยืนยันว่าหน้าจอหรือระบบการเล่นใน Client จะทำงานได้สมบูรณ์
@@ -586,3 +589,5 @@ CW ล่าสุด: ผู้ใช้ยืนยัน Battle ห้อง
3. **ข้อจำกัดการใช้งานและการค้า (Non-Commercial / Educational Use):**
- โปรเจกต์นี้จัดทำขึ้นเพื่อการวิจัย, การศึกษาโครงสร้างโปรโตคอลเครือข่าย และการใช้งานส่วนบุคคลเท่านั้น **ห้ามนำไปจำหน่าย แสวงหาผลกำไร หรือใช้ในเชิงพาณิชย์โดยไม่ได้รับอนุญาต**
Relic catalog: `resources/RelicClientCapture.json` records the four planar relic rows for sets 329 and 330 and their matching main/sub-affix groups read from the connected Client. `resources/InventoryItemConfig.json` includes the four templates; restart the game server to reload its cached catalog. A successful test or catalog reload does not establish that the Client has displayed or equipped the items.