1492 lines
80 KiB
JSON
1492 lines
80 KiB
JSON
[
|
||
{
|
||
"n": 2,
|
||
"name": "ตัวละครไม่แสดง",
|
||
"detail": "หน้าเลือกเกม Quiz battle ภาพตัวละครไม่แสดง",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 3,
|
||
"name": "ระบบ join เกมมีปัญหา",
|
||
"detail": "เมื่อเข้ามินิเกม : บางคนเล่นเกมกะบอท บางคนเล่นกะเพื่อน แต่ละคนเข้ามินิเกมแล้วเจอกันบ้าง ไม่เจอกันบ้าง",
|
||
"prio": "วิกฤต",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 5,
|
||
"name": "ระบบ Host มีปัญหา - 2",
|
||
"detail": "เมื่อกดออกจากเกม Host เปลี่ยนจากพี่ต้อมเป็นพี่คิวอัติโนมัติ",
|
||
"prio": "วิกฤต",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 6,
|
||
"name": "ระบบ Host มีปัญหา - 3",
|
||
"detail": "เมื่อเข้ามินิเกม ทุกคนเห็นตัวเองเป็น host หมดเลย แต่กดเริ่มเกมไม่ได้",
|
||
"prio": "วิกฤต",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 7,
|
||
"name": "ระบบสีตัวละคร ยังใช้ไม่ได้",
|
||
"detail": "สีตัวละครเปลี่ยนไปเรื่อย ไม่รุ้ว่าเราสีอะไรแน่ งงไปหมด",
|
||
"prio": "วิกฤต",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 8,
|
||
"name": "หน้าเข้าร่วมเกมส์",
|
||
"detail": "ห้องไหนที่เริ่มเกมส์ไปแล้ว เมื่อกดเข้าร่วมแสดง popup alert error ปรับดีไซต์ให้สวยงามกว่านี้",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 9,
|
||
"name": "เกมวิ่งขึ้นบันได ผิด flow",
|
||
"detail": "ปรับ flow ให้ถูกต้อง คือ ใครตกจอตาย แต่ถ้าขึ้นไปอยู่บนสุดแล้วจะกระโดดไม่ไปต่อเฉยๆ แต่ไม่ตาย",
|
||
"prio": "วิกฤต",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "Minigame 5"
|
||
},
|
||
{
|
||
"n": 10,
|
||
"name": "เกมวิ่งขึ้นบันได",
|
||
"detail": "เวลาหมดแล้ว ให้เล่นรอบ 2 auto / รอบ 3 มี popup ให้กดเล่นต่อ",
|
||
"prio": "",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "Minigame 2"
|
||
},
|
||
{
|
||
"n": 11,
|
||
"name": "เกมยิงลูกโป่ง",
|
||
"detail": "ฉากเกมยิงลูกโป่ง (MG7 Mega Virus) เล็กไป — ต้องการให้ภาพพื้นหลัง (BG) เต็มจอ แต่การเดิน (movement) และพื้นที่เล่น (area) ต่างๆ คงเดิม",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-25",
|
||
"note": "แก้แล้ว (deploy prod play.js?v=0.006250401): BG ของ MG7 เป็นภาพ 16:9 (1920x1080) แต่โค้ดเดิม map ภาพเข้า world rect 4:3 (640x480) ทำให้ภาพถูกบีบ + เหลือขอบดำซ้าย-ขวา = ฉากดูเล็ก. เปลี่ยนการวาด BG ของ balloon_boss เป็นแบบ cover เต็มจอ (รักษาสัดส่วน 16:9, crop ส่วนเกิน, จัดกึ่งกลาง) วาดแยกจาก world layer → กล้อง/movement/area ของเกมคงเดิมทุกอย่าง เปลี่ยนเฉพาะพื้นหลังให้เต็มจอ. ไฟล์: Game/public/js/play.js (draw loop, สาขา isBalloonBoss cover-fill).",
|
||
"cat": "Minigame 7"
|
||
},
|
||
{
|
||
"n": 14,
|
||
"name": "Room ID",
|
||
"detail": "เวลาจอยห้องให้กรอกเเค่ ID กับรหัสที่สร้าง",
|
||
"prio": "ต่ำ",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 16,
|
||
"name": "grid กับ ฉาก ไม่ตรงกัน",
|
||
"detail": "เกม Quiz battle เกมที่ 1 ฉากกับกริดไม่ตรงกัน ทำให้เดินทะลุ หรือเดินติดในจุดที่ไม่ควรติด",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 17,
|
||
"name": "ตัวละครวิ่งเร็วเกินไป",
|
||
"detail": "เกม Quiz battle เกมที่ 1 ตัวละครผู้เล่นเร็วเกินไป",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-06-25",
|
||
"note": "",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 18,
|
||
"name": "Oauth Social log-in error",
|
||
"detail": "ไม่สามารถ log-inด้วย facebook / Google ได้ path: /oauth-public.php",
|
||
"prio": "ต่ำ",
|
||
"status": "เปิด",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 19,
|
||
"name": "หน้า login",
|
||
"detail": "นโยบายความเป็นส่วนตัวกดไม่ได้",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 20,
|
||
"name": "แสดงเลข version ตรงมุมจอ",
|
||
"detail": "แสดงเลข version ตรงมุมจอขวาบนหรือขวาล่างก็ได้",
|
||
"prio": "ต่ำ",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-24",
|
||
"note": "✅ แก้แล้ว 2026-06-24 v0.006242500 (รอเทส) — badge มุมขวาล่าง อ่าน ?v= อัตโนมัติ",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 21,
|
||
"name": "ลดขนาดตัวละคร",
|
||
"detail": "ลดขนาดตัวละครในห้อง lobby ลงอีก 2เท่า",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 22,
|
||
"name": "เปลี่ยน ui popup ตอนพูดบนหัว",
|
||
"detail": "แก้ png seq บนหัวใหม่ เป็นแบบอื่น",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 23,
|
||
"name": "ชื่่อตัวละครทับลำโพง/ทับ bubble",
|
||
"detail": "ใน lobby ขยับชื่อลงมาอย่าให้ทับ",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 25,
|
||
"name": "เพิ่ม ข้อความแจ้งเตือนอัพเดทกลางจอ",
|
||
"detail": "ถ้ามีการอัพเดทซีน อัพเดทสีตัวละครให้มีป็อปอัพเด้งมากลางหน้าจอ ว่ามีการอัพเดทและให้รอโหลด",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 26,
|
||
"name": "เอาเงาตัวละครออก 1 อัน",
|
||
"detail": "ตอนนี้ตัวละครมีเงา 2 ชั้น เอาออกไป 1 ชั้น",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-24",
|
||
"note": "✅ แก้แล้ว 2026-06-24 v0.006242500 (รอเทส) — ปิด default-shadow overlay เหลือเงาในสไปรต์",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 27,
|
||
"name": "optimize ตัวละครให้เล็กลงอีก มันโหลดช้า",
|
||
"detail": "",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 28,
|
||
"name": "ปุ่ม start ใน lobby",
|
||
"detail": "ทำให้ดูโต้ตอบหน่อย เช่นพอเดินเข้าไปใกล้ให้มัน glow ขึ้นมา",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 32,
|
||
"name": "เอา popup ขออนุญาตใช้ไมค์ออกไปเลย น่ารำคาญ",
|
||
"detail": "",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 34,
|
||
"name": "เกม ใช่ หรือไม่ : ตอนจบบั๊ค",
|
||
"detail": "ตอนสรุปคะแนน ยังนับเวลาอยุ่ และขึ้น gameover ทับหน้าสรุปคะแนน",
|
||
"prio": "วิกฤต",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-24",
|
||
"note": "✅ แก้แล้ว 2026-06-24 v0.006242500 (รอเทส) — MG1 ใช่/ไม่: capture mg1AnyScore ก่อนล้าง (gameover) + guard quiz-phase หลังจบ (timer)",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 35,
|
||
"name": "เกมวิ่ง : กดปุ่มไม่กระโดด",
|
||
"detail": "ปุ่ม jump กดแล้วไม่กระโดด",
|
||
"prio": "วิกฤต",
|
||
"status": "เปิด",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "Minigame 5"
|
||
},
|
||
{
|
||
"n": 36,
|
||
"name": "เกมวิ่ง : ตอนจบบั๊ค วิ่งเลยฉาก",
|
||
"detail": "ตอนจบบั๊ค วิ่งเลยฉาก (ในบางรอบ)",
|
||
"prio": "วิกฤต",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-24",
|
||
"note": "✅ แก้แล้ว 2026-06-24 v0.006242500 (รอเทส) — MG2 วิ่งเลยฉาก: walk-to-finish ค่อยๆเดินเข้าเส้น + clamp ไม่เลยเส้น",
|
||
"cat": "Minigame 2"
|
||
},
|
||
{
|
||
"n": 40,
|
||
"name": "จำนวนคน ให้เล่นได้ตั้งแต่ 4-6 คน",
|
||
"detail": "กรณีเลือกผู้เล่นตั้งแต่ 4 คนขึ้นไปไม่ต้องมี bot",
|
||
"prio": "วิกฤต",
|
||
"status": "เปิด",
|
||
"updated": "",
|
||
"note": "",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 41,
|
||
"name": "เกม หยิบแผ่นป้าย",
|
||
"detail": "ต้องเล่นให้ครบ 10 ข้อก่อน ค่อยจบเกม (ตอนนี้เล่นถูก 1 ข้อ จบเกมเลย)",
|
||
"prio": "วิกฤต",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-24",
|
||
"note": "✅ แก้แล้ว 2026-06-24 v0.006242500 (รอเทส) — MG4 หยิบป้าย: ใช้ map จริง (currentPlayMapId) เปิด mission flow + default 10 ข้อ",
|
||
"cat": "Minigame 4"
|
||
},
|
||
{
|
||
"n": 42,
|
||
"name": "เกม กระโดด",
|
||
"detail": "ท่ากระโดดแปลก ยืนซอยเท้าทำไม",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-26",
|
||
"note": "anim ไม่ sync: ยืนบนแท่นที่เลื่อนลง world Y เปลี่ยนทุกเฟรม → ปลายทางเดา isWalking จาก delta = เห็น ซอยเท้า ตลอด. แก้: ส่ง isWalking จริงใน move (jsWalking) + ปลายทางใช้ค่านั้น (play.js ~19162/20501/24930). v0.006260100",
|
||
"cat": "Minigame 5"
|
||
},
|
||
{
|
||
"n": 43,
|
||
"name": "เกม กระโดด",
|
||
"detail": "ขั้นบันไดมันถี่ไป บางทีกระโดดแล้วเบิ้ลขั้นเลย ปรับให้ระยะห่างแต่ละขั้นมันเท่ากัน",
|
||
"prio": "สูง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-26",
|
||
"note": "ขั้นถี่/ไม่เท่า → เบิ้ลขั้น+ติดรอแท่ง. แก้ layout mnptfts2: ระยะเท่ากันทุกขั้น (gap 3 แถว, rows 2/5/8/11/14/17, zigzag กว้าง6) ในโซนปลอดภัย (เลี่ยง hazard แถว 0/18/19). reach apex 4.5 > 3 = ถึงทุกขั้น (ไม่ติดรอ #43b) + ขั้นถัดไป-อีกขั้น 6 แถว > reach = กระโดดข้ามไม่ได้ (ไม่เบิ้ล). seam รอยต่อ wrap ห่าง 5 แถว 1 จุด/รอบ (h=20 หาร 3 ไม่ลง). restart service หลังแก้แมป | รอบ2: (ก) แก้ลายแท่นบิด — เดิม width เท่ากัน(6)ทำให้ภาพถูกบีบ → ตั้ง width = ขนาดจริงของรูป (เล็ก=var3 7ช่อง/212px, กลาง=var2 13ช่อง/389px) วาดได้สัดส่วนจริงไม่บิด. (ข) ติดบนสุด = seam รอยต่อ wrap 5แถว >ระยะกระโดด(apex4.5) → bump jumpSurviveJumpHeightMult 1.5→1.7 (apex 5.1) ให้ข้าม seam ได้ แต่ข้าม2ขั้น(6แถว)ยังไม่ได้. var1(ใหญ่ 46ช่อง)ใหญ่เกินแมป35 ใช้ไม่ได้ไม่บิด → ใช้ เล็ก/กลาง",
|
||
"cat": "Minigame 5"
|
||
},
|
||
{
|
||
"n": 44,
|
||
"name": "เกมกระโดด",
|
||
"detail": "อีเวนท์พิเศษ (ทนาย/เทพความรู้) หายไป",
|
||
"prio": "วิกฤต",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-24",
|
||
"note": "✅ แก้แล้ว 2026-06-24 v0.006242500 (รอเทส) — MG5 อีเวนต์พิเศษ: เพิ่ม branch jump_survive วาง icon บน platform",
|
||
"cat": "Minigame 5"
|
||
},
|
||
{
|
||
"n": 46,
|
||
"name": "เกมยิิงอุกาบาด",
|
||
"detail": "สีตัวละครยังไม่ตรงกับที่เลือกมา",
|
||
"prio": "วิกฤต",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-24",
|
||
"note": "✅ แก้แล้ว 2026-06-24 v0.006242500 (รอเทส) — MG6 สี: ยาน Rocket-1..8 ตาม lobby theme ของผู้เล่น",
|
||
"cat": "Minigame 6"
|
||
},
|
||
{
|
||
"n": 47,
|
||
"name": "เกมยิิงอุกาบาด",
|
||
"detail": "อุกาบาดให้พุ่งเร็วกว่านี้ และลูกเล็กกว่านี้เกมง่ายไป",
|
||
"prio": "สูง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-24",
|
||
"note": "✅ แก้แล้ว 2026-06-24 v0.006242500 (รอเทส) — MG6: อุกาบาตเร็วขึ้น (+~50%) + เล็กลง (48->34/11->8)",
|
||
"cat": "Minigame 6"
|
||
},
|
||
{
|
||
"n": 50,
|
||
"name": "ผู้เล่น 6 คน: บางเกมเล่นได้แค่ 5 (คนที่ 6 หายจากสรุป)",
|
||
"detail": "สรุปคะแนนฝั่ง client slice(0,5) ตัดคนที่ 6 — แก้เป็น slice(0,6) ทุกมินิเกม (MG1/3/4/5/6/7)",
|
||
"prio": "วิกฤต",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-24",
|
||
"note": "✅ แก้แล้ว 2026-06-24 v0.006242500 (รอเทส)",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 51,
|
||
"name": "ผู้เล่น 6 คน: คะแนนตอนจบไม่ตรงกันแต่ละจอ",
|
||
"detail": "MG1 merge คะแนน server / MG6,7 merge คะแนน host -> ครบ 6 ตรงกัน (MG3 ยัง local)",
|
||
"prio": "วิกฤต",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-24",
|
||
"note": "✅ แก้แล้ว 2026-06-24 v0.006242500 (รอเทส)",
|
||
"cat": "Minigame 6"
|
||
},
|
||
{
|
||
"n": 53,
|
||
"name": "เพิ่มหน้าโหลด (loading) ตอนเข้าเกม",
|
||
"detail": "overlay spinner กันเห็นจอเปล่า/asset แว่บ ซ่อนเมื่อ draw เฟรมแรก + safety 8s",
|
||
"prio": "สูง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-25",
|
||
"note": "✅ แก้แล้ว 2026-06-25 v0.006242530 (รอเทส)",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 54,
|
||
"name": "host โหลดนานมากตอนเข้าเกม",
|
||
"detail": "optimize asset/char (เกี่ยว row 28) — loading overlay ช่วยซ่อน แต่ยังโหลดช้าจริง",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-06-25",
|
||
"note": "loading overlay บังอาการแล้ว · root = canvas tint ภาพตัวละครใหญ่ (source ไม่อยู่ใน repo) → ต้อง optimize ภาพแยก",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 56,
|
||
"name": "ตอนกลับ LobbyB โชว์รูปแรกก่อนแล้วค่อยถูก",
|
||
"detail": "เหมือน #1 การ์ด — ต้องใส่ loading state ตอน return LobbyB ด้วย (มี room-loading-overlay อยู่แต่ซ่อนเร็วไป)",
|
||
"prio": "สูง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-25",
|
||
"note": "✅ แก้แล้ว 2026-06-25 v0.0308 — การ์ดมี spinner (#1) + room-loading overlay ใส่ % + รอ char preload เสร็จก่อนซ่อน + safety 12s",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 58,
|
||
"name": "ปุ่ม \"เล่นเกมต่อ\" ไม่รู้ว่าค้างหรือรอคนอื่น",
|
||
"detail": "text \"รอผู้เล่นอื่น (X/Y)\" ถูก set อยู่แล้วแต่ CSS font-size:0 ซ่อน → เพิ่ม .is-waiting CSS โชว์ข้อความ+spinner แทนรูปปุ่ม",
|
||
"prio": "สูง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-25",
|
||
"note": "✅ แก้แล้ว 2026-06-25 v0.0309/server (รอเทส)",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 60,
|
||
"name": "ทำหน้า testcase บนเซิร์ฟเวอร์",
|
||
"detail": "srv1361159.hstgr.cloud/testcase — bug list + filter/search/นับสถานะ generate จาก xlsx",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-25",
|
||
"note": "✅ แก้แล้ว 2026-06-25 v0.0309/server (รอเทส)",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 62,
|
||
"name": "MG1/MG4 user/bot ติดกัน (เดินไม่ผ่าน)",
|
||
"detail": "เพิ่ม anti-stuck: ดันชนเพื่อน → เขย่า (shake) + ปลดล็อกเดินผ่านกันชั่วคราว คงกำแพง/area/quiz-lock; ทั้งผู้เล่นและบอท",
|
||
"prio": "สูง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-25",
|
||
"note": "✅ แก้แล้ว 2026-06-25 v0.006250100 (รอเทส)",
|
||
"cat": "Minigame 4"
|
||
},
|
||
{
|
||
"n": 65,
|
||
"name": "อีเวนต์พิเศษ (ทนาย/เทพ) = 1 ใน 3 (ตามดีไซน์)",
|
||
"detail": "ดีไซน์: 3 เกม/LobbyB เล่นได้เกมละ 3 ครั้ง · อีเวนต์พิเศษ 1/3 ต่อครั้ง (1 ใบ) · Test Mode บังคับ. revert การแก้ \">1 ต่อรอบ\" กลับเป็น 1 ใบ/ครั้งที่ติด",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-25",
|
||
"note": "✅ revert 2026-06-25 — กลับเป็น 1/3 (1 ใบ/ครั้งที่ติด) ตามดีไซน์ · ยืนยันโครงสร้าง 3เกม×3ครั้ง + disruptor toggle (>4คน/Test Mode) ถูกต้อง",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 71,
|
||
"name": "หน้าผลชนะ (โพเดียม) ตัวละครลอย ไม่ยืนบนพื้น",
|
||
"detail": "หน้า \"ยินดีด้วย ทีมนักสืบ ชนะ!\" ตัวละครผู้ชนะลอยอยู่กลางอากาศ ไม่ยืนบนพื้นเวที",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-25",
|
||
"note": "แก้แล้ว (deploy prod room-lobby.js?v=0.0312): พื้นหลัง win-bg เดิม center/cover ทำให้พื้นเวทีถูก crop เลื่อน + podium ตั้ง bottom:9% ตัวละครเลยลอย. แก้เป็น (1) ปักพื้นหลังไว้ขอบล่าง background-position:center bottom -> พื้นเวทีติดขอบล่างจอเสมอทุกสัดส่วน (2) ลด podium bottom 9% -> 2% ให้ตัวละครยืนบนพื้น. ไฟล์: Game/public/js/room-lobby.js (injectFinalResultStyle, #trial-final-podium).",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 74,
|
||
"name": "แถวหน้าตัวละคร (ready ใต้ปุ่ม HOW TO) ค้างบนจอระหว่างเล่นเกม",
|
||
"detail": "หลังกด HOW TO/Ready แล้วเริ่มเกม กล่องแถว avatar คนที่กด ready (ใต้ปุ่ม) ไม่ถูกซ่อน ค้างอยู่กลางจอล่างทับฉากเกม (เห็นชัดใน MG3 stack) — กระทบ MG1/3/5/6",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-26",
|
||
"note": "กล่องลอย #gch-ready-avatars-float ถูกซ่อนเฉพาะ MG2 (dismissGauntletCrownHowtoOverlayPlay) + MG4 (quiz_carry) เท่านั้น. begin*CountdownThenRun ของ MG1/3/5/6 (stack/jump/space/quiz) ตั้ง gauntletCrownHowtoVisible=false แต่ไม่เรียก hideReadyAvatarsFloat() → กล่องค้าง display:flex ทั้งเกม (ไม่มี driver เรียกใหม่ตอน live). แก้: เพิ่ม hideReadyAvatarsFloat() ในทั้ง 4 ฟังก์ชันเริ่มเกม (play.js). v0.006260101",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"name": "block สีไม่ตรงในฝั่ง client",
|
||
"detail": "",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"note": "",
|
||
"cat": "Minigame 3",
|
||
"updated": "2026-06-26",
|
||
"n": 75
|
||
},
|
||
{
|
||
"name": "บางที client บางคนเล่นไม่ได้",
|
||
"detail": "",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"note": "",
|
||
"cat": "Minigame 3",
|
||
"updated": "2026-06-26",
|
||
"n": 76
|
||
},
|
||
{
|
||
"n": 82,
|
||
"name": "MG1: หน้า How-to ใหม่ (SAFE/SCAM)",
|
||
"detail": "เปลี่ยน how-to เป็น \"วิเคราะห์ภัยร้าย\" (เดิมเป็นดีไซน์ MG4)",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-26",
|
||
"note": "วิธีเทส: เข้า MG1 → หน้า HOW TO PLAY ต้องเป็น \"วิเคราะห์ภัยร้าย ปกป้องระบบให้ปลอดภัย\" มี SAFE/SCAM + การ์ด COMMON/RARE/LEGENDARY",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 83,
|
||
"name": "MG1: ปุ่ม READY 2 สถานะ",
|
||
"detail": "ยังไม่กด=ฟ้า / กดแล้ว=เขียว+เครื่องหมายถูก",
|
||
"prio": "ต่ำ",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-26",
|
||
"note": "วิธีเทส: หน้า ready MG1 → ปุ่มฟ้า · กด → เขียวมี ✓ · กดอีกที → กลับฟ้า",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 84,
|
||
"name": "MG1: auto-start เมื่อทุกคน ready",
|
||
"detail": "ครบ ready → server เริ่มเอง ไม่ต้องรอ host กด START",
|
||
"prio": "สูง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-26",
|
||
"note": "วิธีเทส: ทุกคนกด READY ครบ → เกมเริ่มเอง (นับ 3-2-1) ไม่ต้องมีใครกด START · ลองให้ host ออกก่อนคนสุดท้าย ready → ยังเริ่มได้",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 85,
|
||
"name": "MG1: คน/บอท วิ่งเร็วเท่ากัน",
|
||
"detail": "movement time-based",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-26",
|
||
"note": "วิธีเทส: 2 เครื่องเล่น MG1 พร้อมกัน → คนวิ่งเร็วเท่ากัน · บอทวิ่งเข้าโซน SAFE/SCAM สม่ำเสมอ",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 86,
|
||
"name": "MG1: ผีหาย (avatar ไม่ซ้ำ)",
|
||
"detail": "server ส่ง play-roster ทุก 1.5s ตัดตัวซ้ำระหว่างเล่น",
|
||
"prio": "สูง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-26",
|
||
"note": "วิธีเทส: เล่น MG1 แล้วมีคนหลุด/reconnect → ต้องไม่มีตัวซ้ำขยับไม่ได้ค้างในสนาม",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 87,
|
||
"name": "MG1: บอทเดินต่อแม้ host หลุด",
|
||
"detail": "server เป็นเจ้าของการเดินบอท quiz",
|
||
"prio": "วิกฤต",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-26",
|
||
"note": "วิธีเทส: เล่น MG1 กับบอท · host รีเฟรช/ออกกลางเกม → บอทต้องเดิน+วิ่งเข้าโซนต่อ ไม่หยุดนิ่ง",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 88,
|
||
"name": "MG1: คะแนนบอทตรงกันทุกจอ",
|
||
"detail": "server คิดคะแนนบอท (เดิม host คิดเอง ไม่ sync)",
|
||
"prio": "สูง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-26",
|
||
"note": "วิธีเทส: 2 เครื่องเล่น MG1 กับบอท → คะแนนบอทบนกระดานต้องตรงกันทั้ง 2 จอทุกข้อ",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 89,
|
||
"name": "MG1: ผีบอทอยู่ในโซนผี ไม่ทับ SAFE/SCAM",
|
||
"detail": "บอทตอบผิด=ผี ตำแหน่งจริงอยู่ในโซนผี (กลาง-บน) — แก้การวาดภาพผีที่เคยห้อยลงทับสนามคำตอบ",
|
||
"prio": "สูง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-27",
|
||
"note": "วิธีเทส: เล่น MG1 กับบอท ให้มีบอทตอบผิด → ตัวผีต้องลอยอยู่แถบกลาง-บน (เหนือ SAFE/SCAM) ไม่ห้อยลงทับช่อง SAFE/SCAM",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 90,
|
||
"name": "MG1: บอทเดินลื่น ไม่วาป",
|
||
"detail": "บอท quiz เดินจาก server (time-based) + lerp นุ่ม",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-27",
|
||
"note": "วิธีเทส: เล่น MG1 กับบอท → บอทเดินเข้าโซน SAFE/SCAM ลื่น ไม่กระตุก ไม่วาปไปมา",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 92,
|
||
"name": "Admin: ตัวเลขผู้ใช้ออนไลน์ + ความจุ",
|
||
"detail": "widget 👥 N/500 สบาย/เริ่มหนัก/หนัก (เขียว/เหลือง/แดง) บนแถบ Admin",
|
||
"prio": "ต่ำ",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-27",
|
||
"note": "วิธีเทส: เปิดหน้า Admin → มุมขวาบนมี 👥 ตัวเลขผู้เล่นออนไลน์ · hover เห็น CPU/RAM/ห้อง/socket · อัปเดตทุก 10 วิ",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 93,
|
||
"name": "MG1: หลุดกลางเกม → บอท takeover ในที่เดิม",
|
||
"detail": "บอทแทนทันที สี/ตำแหน่ง/สถานะเดิม (คะแนนต่อ, ตกรอบ→ผีต่อ)",
|
||
"prio": "สูง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-27",
|
||
"note": "วิธีเทส: เล่น MG1 หลายคน → คนนึงปิดแท็บกลางเกม → ตัวละครต้องไม่หาย กลายเป็นบอทสีเดิม ตำแหน่งเดิม เล่นต่อ + มี \"(บอท)\" หลังชื่อ",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 94,
|
||
"name": "MG1: หลุดแล้วกลับมาใน 10วิ → คืนสิทธิ์เล่น",
|
||
"detail": "reconnect-undo: ถอนบอท takeover คืนตัวจริง (กันตัวซ้ำ)",
|
||
"prio": "สูง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-27",
|
||
"note": "วิธีเทส: เล่น MG1 → refresh กลางเกม (กลับมาใน 10วิ) → ต้องเล่นเองต่อได้ ไม่มีบอทซ้ำกับตัวเรา",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 95,
|
||
"name": "MG1: host หลุดในหน้า how-to → เล่นต่อได้",
|
||
"detail": "expectedActive ลดตอนคนออกถาวร → host ใหม่กด START ได้ (เดิมค้าง \"รอ x/y\")",
|
||
"prio": "วิกฤต",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-27",
|
||
"note": "วิธีเทส: เข้า MG1 how-to หลายคน → host ปิดแท็บ → รอ ~10วิ → host ใหม่กด START ได้ + บอทสีเดิมเล่นแทน",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 98,
|
||
"name": "MG how-to: เห็น countdown ตอนมีคนหลุด",
|
||
"detail": "grace banner z-index ขึ้นเหนือ how-to overlay",
|
||
"prio": "ต่ำ",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-06-27",
|
||
"note": "วิธีเทส: ในหน้า how-to มีคนหลุด → ต้องเห็นแถบ \"🔌 ... หลุด — รอกลับมา N วิ\" ลอยเหนือ how-to (ไม่ถูกบัง)",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 99,
|
||
"name": "Login + ตั้งชื่อผู้เล่น",
|
||
"detail": "ล็อกอิน/ตั้งชื่อได้ ชื่อไปแสดงในห้อง/เกม",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: เปิดเกม → login → ตั้งชื่อ → เข้า Main Menu → ชื่อตรงทุกหน้า",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 100,
|
||
"name": "Main Menu นำทางครบ",
|
||
"detail": "ปุ่มทุกอันใน Main Menu พาไปหน้าถูก (สร้าง/เข้าห้อง, โปรไฟล์, how-to)",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: กดทุกปุ่มใน Main Menu → ไปหน้าตรงป้าย + ปุ่มย้อนกลับได้",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 101,
|
||
"name": "สร้างห้อง Public",
|
||
"detail": "สร้างห้องสาธารณะได้ เข้า LobbyA",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: Create Room → Public → ตั้งชื่อ → ยืนยัน → เข้า LobbyA เป็น host",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 102,
|
||
"name": "สร้างห้อง Private (PIN 4 หลัก)",
|
||
"detail": "ห้องส่วนตัวต้องใส่ PIN 4 หลัก ล็อก 🔒",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: Create Room → Private → ใส่ PIN 4 หลัก → ยืนยัน → ห้องขึ้น 🔒 · ใส่ PIN ไม่ครบ = ยืนยันไม่ได้",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 103,
|
||
"name": "สรุปจำนวนบอทถูก (1-3 คน)",
|
||
"detail": "เลือก 1/2/3 คน → บอท 5/4/3 (รวม 6)",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: Create Room → เลือกจำนวนผู้เล่น 1,2,3 → summary แสดง '+5/+4/+3 Bot'",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 104,
|
||
"name": "เลือก ≥ 4 คน = ไม่มีบอท",
|
||
"detail": "เลือก 4/5/6 คน → 0 Bot ทั้ง summary และในเกมจริง",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: Create Room → เลือก 4,5,6 → summary '+0 Bot' → เข้าเกมจริงต้องไม่มีบอทเติม (รอคนจริง)",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 105,
|
||
"name": "เข้าห้อง Public จากรายการ",
|
||
"detail": "เห็นรายชื่อห้อง public + กดเข้าได้",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: Join Room → เห็นห้อง public → กดเข้า → เข้า LobbyA เป็น client",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 106,
|
||
"name": "เข้าห้อง Private ด้วยชื่อ+PIN",
|
||
"detail": "เข้าห้องส่วนตัวได้เมื่อใส่ชื่อ+PIN ถูก · ผิด = เข้าไม่ได้",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: Join Room → Private → ใส่ชื่อห้อง+PIN → ถูก=เข้าได้ / ผิด=แจ้ง error",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 107,
|
||
"name": "ห้องเต็ม",
|
||
"detail": "ห้องเต็ม (ครบ maxPlayers) เข้าไม่ได้ แจ้งเตือน",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: ห้องมีคนครบ → คนใหม่กดเข้า → แจ้ง 'ห้องเต็ม (n/max)'",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 108,
|
||
"name": "ฉาก LobbyA โหลดเร็ว",
|
||
"detail": "เข้าฉากภายใน ~2 วิ ไม่ค้างขาว",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: เข้า LobbyA → จับเวลา loading-hide < ~3 วิ (เดิมเคยค้าง 15-40 วิ)",
|
||
"cat": "LobbyA"
|
||
},
|
||
{
|
||
"n": 109,
|
||
"name": "กดพร้อม (Ready)",
|
||
"detail": "toggle พร้อม/ไม่พร้อม ได้ ทุกคนเห็นตรงกัน",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: กด Ready → สถานะเปลี่ยน + คนอื่นเห็น · กดซ้ำ = ยกเลิกพร้อม",
|
||
"cat": "LobbyA"
|
||
},
|
||
{
|
||
"n": 110,
|
||
"name": "ห้องแต่งตัว (กด F)",
|
||
"detail": "เดินไปจุดเขียว กด F เปิดห้องแต่งตัว เปลี่ยนชุด/ตัวละครได้",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: LobbyA → เดินไปไอคอนห้องแต่งตัว → กด F → popup เปิด → เปลี่ยนได้ทุกคน",
|
||
"cat": "LobbyA"
|
||
},
|
||
{
|
||
"n": 111,
|
||
"name": "Host Console (กด F, เฉพาะ host)",
|
||
"detail": "host เดินไปไอคอนชมพู กด F เปิด console · client กดไม่ได้",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: host → จุดชมพู → F → console เปิด · client → F → แจ้ง 'เฉพาะ Host'",
|
||
"cat": "LobbyA"
|
||
},
|
||
{
|
||
"n": 112,
|
||
"name": "ปุ่มกลางแมป (START GAME) + glow",
|
||
"detail": "ทุกคน+host พร้อม → ปุ่มกลางเรือง glow เหลืองกระพริบ → host กด F เริ่มเกม",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: ทุกคนกด Ready ครบ → ปุ่ม START กลางแมป glow เหลือง → host เดินเข้าใกล้ กด F → เข้า wizard เลือกระดับ/คดี",
|
||
"cat": "LobbyA"
|
||
},
|
||
{
|
||
"n": 113,
|
||
"name": "บอทเดินในฉาก ไม่หลุดขอบ",
|
||
"detail": "บอท LobbyA เดินในฉากหลัก ไม่ติดขอบ/นอกฉาก",
|
||
"prio": "ต่ำ",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: สังเกตบอทใน LobbyA → ต้องเดินวนในฉาก ไม่ค้างขอบ/หลุดออกนอก",
|
||
"cat": "LobbyA"
|
||
},
|
||
{
|
||
"n": 114,
|
||
"name": "เสียงพูดใน Lobby (mic)",
|
||
"detail": "เปิด/ปิดไมค์ได้ ได้ยินเสียงกัน",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: หลายคน → เปิดไมค์ → พูด → คนอื่นได้ยิน · กดปิด = เงียบ",
|
||
"cat": "LobbyA"
|
||
},
|
||
{
|
||
"n": 115,
|
||
"name": "MG1 เข้าเกม + how-to",
|
||
"detail": "เข้า MG1 เห็น how-to → เริ่มพร้อมกัน",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: เริ่มเกม → เข้า MG1 → how-to ขึ้น → ปิด/countdown → เริ่มพร้อมกันทุกคน",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 116,
|
||
"name": "MG1 ตอบถูก/ผิด",
|
||
"detail": "ตอบถูกได้คะแนน · ตอบผิดกลายเป็นผี/ล็อก",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: เดินเข้าโซนจริง/ไม่จริง → ถูก=คะแนน+ / ผิด=ล็อก(ผี) ตรงกันทุกเครื่อง",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 117,
|
||
"name": "MG1 บอทเล่น + คะแนนตรง",
|
||
"detail": "บอทตอบเอง คะแนน/สถานะบอทตรงทุกเครื่อง",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: สังเกตบอท MG1 → ตอบเอง + คะแนน/ล็อก ตรงทุก client",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 118,
|
||
"name": "MG1 จบเกม + สรุปคะแนน",
|
||
"detail": "หมดเวลา/ทุกคนตอบผิด → จบ + สรุปคะแนนถูก",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: เล่นจนจบ → ผลจบ (complete/timeup) + คะแนน/coin ตามอันดับ",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 119,
|
||
"name": "MG2 วิ่ง+กระโดดหลบ",
|
||
"detail": "เดิน/วิ่ง + กระโดดข้ามสิ่งกีดขวางได้ ชน=เสียแต้ม",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: MG2 → วิ่งหลบ → กระโดดข้าม obstacle · โดนเลเซอร์/สิ่งกีดขวาง = penalty",
|
||
"cat": "Minigame 2"
|
||
},
|
||
{
|
||
"n": 120,
|
||
"name": "MG2 ปรับความสูง/เวลากระโดด (Admin)",
|
||
"detail": "ปรับ 'ความสูงกระโดด' + 'เวลากระโดดขึ้น-ลง' ใน Admin → มีผลรอบถัดไป",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: Admin → Minigame-2 → ตั้งความสูง/tick → เริ่มเกมใหม่ → กระโดดสูง/เร็วตามตั้ง",
|
||
"cat": "Minigame 2"
|
||
},
|
||
{
|
||
"n": 121,
|
||
"name": "MG2 finish/จบ",
|
||
"detail": "วิ่งถึงเส้นชัย/หมดเวลา → จบถูก ไม่ค้าง",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: MG2 → ถึงปลายทาง หรือหมดเวลา → ฉากจบ + คะแนน",
|
||
"cat": "Minigame 2"
|
||
},
|
||
{
|
||
"n": 122,
|
||
"name": "MG3 ต่อบล็อกตรง",
|
||
"detail": "เล็งตรง support → บล็อกลงตรง ไม่เฉียง ต่อได้",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: MG3 → กด DROP ตอนบล็อกอยู่เหนือบล็อกก่อน → ลงตรงดิ่ง ทับพอดี (ไม่ไถลเฉียง)",
|
||
"cat": "Minigame 3"
|
||
},
|
||
{
|
||
"n": 123,
|
||
"name": "MG3 หัวใจรวม + จบเกม",
|
||
"detail": "หัวใจ (System Integrity) เป็นของรวม · ใครพลาดก็ลด · พลาด 3 ครั้ง = จบ",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: หลายคน → ผลัดกันวาง · วางเยื้องมาก = หัวใจลด (ทุกคนเห็นเท่ากัน) · ครบ 3 = จบเกม",
|
||
"cat": "Minigame 3"
|
||
},
|
||
{
|
||
"n": 124,
|
||
"name": "MG3 บอทวางตรง support",
|
||
"detail": "บอทวางบล็อกลงตรงยอดตึก ไม่เฉียง/หลุด",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: สังเกตบอท MG3 → วางลงตรงบล็อกก่อนหน้า (ตึกไม่เป๋)",
|
||
"cat": "Minigame 3"
|
||
},
|
||
{
|
||
"n": 125,
|
||
"name": "MG3 สีบล็อกตรง avatar",
|
||
"detail": "สีบล็อกที่วาง = สีตัวละครคนวาง ทุกเครื่องตรงกัน",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: วาง → สีบล็อกตรงสี avatar คนวาง (host/client/บอท ตรงกัน)",
|
||
"cat": "Minigame 3"
|
||
},
|
||
{
|
||
"n": 126,
|
||
"name": "MG3 ตัวห้อยแกว่งลื่น",
|
||
"detail": "บล็อกที่ห้อยแกว่งลื่น ไม่กระตุก",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: สังเกตบล็อกห้อย → แกว่งนุ่ม ไม่กระตุก/วาป",
|
||
"cat": "Minigame 3"
|
||
},
|
||
{
|
||
"n": 127,
|
||
"name": "MG4 หยิบคำ-ส่งคำตอบ",
|
||
"detail": "หยิบ word option จากโต๊ะข้าง → เดินไปส่งที่โต๊ะกลาง",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: MG4 → เดินไปโต๊ะ option → หยิบคำ → เดินไปโต๊ะ submit → ส่ง → ถูก=คะแนน",
|
||
"cat": "Minigame 4"
|
||
},
|
||
{
|
||
"n": 128,
|
||
"name": "MG4 บอทไม่ยืนบนโต๊ะกลาง",
|
||
"detail": "บอทไม่ spawn/ยืนติดบนคอนโซลกลาง เดินหยิบ-ส่งปกติ",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: สังเกตบอท MG4 → ไม่มีบอทค้างยืนบนโต๊ะกลาง · บอทหยิบ-ส่งได้",
|
||
"cat": "Minigame 4"
|
||
},
|
||
{
|
||
"n": 129,
|
||
"name": "MG4 จบ + คะแนน",
|
||
"detail": "หมดเวลา/ครบข้อ → จบ + คะแนนถูก",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: เล่นจนจบ → ผลจบ + คะแนนตามส่ง",
|
||
"cat": "Minigame 4"
|
||
},
|
||
{
|
||
"n": 130,
|
||
"name": "MG5 กระโดดขึ้นแท่นเอาตัวรอด",
|
||
"detail": "กระโดดขึ้นแท่นตามสายพานเลื่อน ตก= ตกรอบ",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: MG5 → กระโดดขึ้นแท่น หนีพื้นเลื่อน · ตกล่าง = eliminated",
|
||
"cat": "Minigame 5"
|
||
},
|
||
{
|
||
"n": 131,
|
||
"name": "MG5 สลับแท็บ (unfocus) ตกเนียน",
|
||
"detail": "สลับแท็บออก → ตัวละครตกลงต่อ คนอื่นเห็นลื่น (ไม่ลอยค้าง/กระตุก)",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: MG5 กำลังเล่น → สลับไปแท็บอื่น 5 วิ → คนอื่นเห็นตัวเราไหลลงเนียน",
|
||
"cat": "Minigame 5"
|
||
},
|
||
{
|
||
"n": 132,
|
||
"name": "MG5 บอท + จบเกม",
|
||
"detail": "บอทกระโดดเอง · จบเกม (all-dead/timeup) + เกรด",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: สังเกตบอท MG5 กระโดดเอง → เล่นจนจบ → เกรด/คะแนนถูก",
|
||
"cat": "Minigame 5"
|
||
},
|
||
{
|
||
"n": 133,
|
||
"name": "MG6 ยิงอุกาบาต",
|
||
"detail": "บังคับยาน + ยิง หลบอุกาบาต โดน 3 ครั้ง=ตาย",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: MG6 → ขยับยาน ยิง · โดนอุกาบาต 3 = eliminated",
|
||
"cat": "Minigame 6"
|
||
},
|
||
{
|
||
"n": 134,
|
||
"name": "MG6 บอทขยับทุก client",
|
||
"detail": "บอททุกตัวขยับเห็นตรงกันทุกเครื่อง (ไม่มีบอทค้าง)",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: หลายคน MG6 → บอททุกตัวต้องขยับบนทุกจอ (ไม่มีตัวค้างนิ่งเฉพาะบางเครื่อง)",
|
||
"cat": "Minigame 6"
|
||
},
|
||
{
|
||
"n": 135,
|
||
"name": "MG6 จบ + คะแนน",
|
||
"detail": "หมดเวลา/รอด → จบ + คะแนนถูก",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: เล่นจนจบ → ผล + คะแนน/coin ตามอันดับ",
|
||
"cat": "Minigame 6"
|
||
},
|
||
{
|
||
"n": 136,
|
||
"name": "MG7 ยิงบอส (Mega Virus)",
|
||
"detail": "เล็ง+ยิงบอส ลด HP บอส · บอสชนเรา=เสียหาย",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: MG7 → หมุนเล็ง ยิงบอส → HP บอสลด · บอสเคลื่อนที่ชน = เด้ง/เสียหาย",
|
||
"cat": "Minigame 7"
|
||
},
|
||
{
|
||
"n": 137,
|
||
"name": "MG7 บอทยิง+หลบบอส",
|
||
"detail": "บอทยิงบอส + หลบบอส ไม่ค้างนิ่ง",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: สังเกตบอท MG7 → ยิงบอส + ดริฟต์หลบ ไม่ติดนิ่ง",
|
||
"cat": "Minigame 7"
|
||
},
|
||
{
|
||
"n": 138,
|
||
"name": "MG7 จบ + คะแนน",
|
||
"detail": "บอสตาย/หมดเวลา → จบ + คะแนนถูก",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: เล่นจนจบ → ผล + คะแนน",
|
||
"cat": "Minigame 7"
|
||
},
|
||
{
|
||
"n": 139,
|
||
"name": "กลับ LobbyB หลังจบมินิเกม",
|
||
"detail": "จบรอบมินิเกม → กลับเข้า LobbyB (หน้าคดี)",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: จบมินิเกม → interstitial → เข้า LobbyB",
|
||
"cat": "LobbyB"
|
||
},
|
||
{
|
||
"n": 140,
|
||
"name": "หน้าเลือกผู้ต้องสงสัยเปิด",
|
||
"detail": "จบเคส → หน้าเลือกผู้ต้องสงสัยเปิดอัตโนมัติทุกคน",
|
||
"prio": "วิกฤต",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: เล่นจบเคส → LobbyB → overlay เลือกผู้ต้องสงสัยขึ้นทุกเครื่อง (ไม่ค้าง/ไม่ขึ้น)",
|
||
"cat": "LobbyB"
|
||
},
|
||
{
|
||
"n": 141,
|
||
"name": "ปุ่มกลาง (F) เปิดผู้ต้องสงสัยซ้ำ",
|
||
"detail": "ปิด overlay แล้ว → ปุ่มกลางแมป glow → กด F เปิดกลับ (แทนปุ่มลอยเดิม)",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: ปิดหน้าผู้ต้องสงสัย → ปุ่มกลาง glow → เดินเข้าใกล้ กด F → overlay เปิดกลับ",
|
||
"cat": "LobbyB"
|
||
},
|
||
{
|
||
"n": 142,
|
||
"name": "เสนอบทตัวป่วน",
|
||
"detail": "≥4 คน (หรือเปิด force) → มีการเสนอบทตัวป่วน กดรับ/ปฏิเสธได้ในเวลาที่ตั้ง",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: จบเคส → ระบบเสนอบทตัวป่วนให้ 1 คน → countdown (ตาม Admin) → กดรับ/ปฏิเสธ",
|
||
"cat": "LobbyB"
|
||
},
|
||
{
|
||
"n": 143,
|
||
"name": "สืบผู้ต้องสงสัย (เก็บหลักฐาน)",
|
||
"detail": "สืบครบ 3 ผู้ต้องสงสัย (เล่นมินิเกม) → เก็บหลักฐานได้",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: เลือกผู้ต้องสงสัย → เล่นมินิเกม → ได้หลักฐาน +1 ต่อคน",
|
||
"cat": "LobbyB"
|
||
},
|
||
{
|
||
"n": 144,
|
||
"name": "โหวตชี้ตัวคนร้าย (พิจารณาคดี)",
|
||
"detail": "สืบครบ → โหวตชี้คนร้าย → ผลตัดสินถูก",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-02",
|
||
"note": "🧪 Flow TC · วิธีเทส: สืบครบ 3 → เปิดพิจารณาคดี → โหวต → เฉลยถูก/ผิด · 🔎 gamelog: [TC144] / ev=lobbyb-gate (LobbyB) · deploy 2026-07-01",
|
||
"cat": "LobbyB"
|
||
},
|
||
{
|
||
"n": 145,
|
||
"name": "หน้า Cyber Awareness หลังตัดสิน",
|
||
"detail": "หลังตัดสินคดี → หน้าให้ความรู้กฎหมายไซเบอร์ ก่อนกลับ Main Lobby",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: ตัดสินคดีจบ → interstitial cyber-law → กลับ Main-Lobby",
|
||
"cat": "LobbyB"
|
||
},
|
||
{
|
||
"n": 146,
|
||
"name": "Host หลุด → migration",
|
||
"detail": "host ปิด/หลุด → เลือก host ใหม่อัตโนมัติ เกมไปต่อได้",
|
||
"prio": "วิกฤต",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: ระหว่างเกม host ปิดแท็บ → ~10วิ → host ใหม่ถูกตั้ง เกมไม่ค้าง",
|
||
"cat": "ระบบ disconnect"
|
||
},
|
||
{
|
||
"n": 147,
|
||
"name": "ผู้เล่นหลุด → บอทแทน",
|
||
"detail": "คนหลุดกลางมินิเกม → บอทเล่นแทน (สีเดิม) ไม่ค้าง",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: ระหว่างมินิเกม ผู้เล่นปิดแท็บ → บอท takeover เล่นแทน (สีตามคนออก)",
|
||
"cat": "ระบบ disconnect"
|
||
},
|
||
{
|
||
"n": 148,
|
||
"name": "แถบ grace ตอนมีคนหลุด",
|
||
"detail": "มีคนหลุด → แถบ '🔌 ... หลุด รอกลับ N วิ' ขึ้น (เหนือ how-to)",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: คนหลุด → แถบ grace countdown ขึ้นทุกเครื่อง (ลอยเหนือ overlay)",
|
||
"cat": "ระบบ disconnect"
|
||
},
|
||
{
|
||
"n": 149,
|
||
"name": "Reconnect กลับเข้าเกม",
|
||
"detail": "หลุดแล้วต่อกลับ → กลับเข้าห้อง/มินิเกมเดิมได้",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: หลุดเน็ตชั่วคราว → เชื่อมกลับ → auto re-join ห้องเดิม ไม่ต้องเริ่มใหม่",
|
||
"cat": "ระบบ disconnect"
|
||
},
|
||
{
|
||
"n": 150,
|
||
"name": "คะแนน/COINS ตามอันดับ",
|
||
"detail": "จบมินิเกม → รับ coin ตามอันดับ (ผู้รอด)",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: จบมินิเกม → ผู้รอดได้ coin [10,8,6,4,2,0] ตามอันดับ + คะแนนสะสมขึ้น leaderboard",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 151,
|
||
"name": "กระดานผู้นำ (Leaderboard)",
|
||
"detail": "คะแนนสะสม/high score แสดงถูกในกระดานผู้นำ",
|
||
"prio": "ต่ำ",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: เล่นจบ → เช็ค leaderboard → คะแนนอัปเดตถูก",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 152,
|
||
"name": "เสียงพูดในมินิเกม (MG1-7)",
|
||
"detail": "เปิดไมค์ในมินิเกม → ได้ยินกัน (WebRTC mesh)",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: ระหว่างมินิเกม → กดไมค์ → พูด → คนอื่นได้ยิน",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 153,
|
||
"name": "ออกจากห้อง (Exit)",
|
||
"detail": "ออกจาก Lobby → host ไป Create Room / client ไป Join Room",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "🧪 Flow TC · วิธีเทส: LobbyA/B → กด Exit → host→Create, client→Join",
|
||
"cat": "อื่นๆ"
|
||
},
|
||
{
|
||
"n": 154,
|
||
"name": "LobbyA: ล็อก unready ระหว่าง host เลือกคดี",
|
||
"detail": "ทุกคน ready + host เปิด wizard เลือกระดับ/คดี → client กด unready ไม่ได้ (ปุ่ม disable + ป้าย \"host กำลังเลือกคดี\")",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-02",
|
||
"note": "📋 PLAN (flow/sound) · วิธีเทส: ทุกคนกด Ready ครบ → host กด F เปิด wizard → อีกเครื่องลองกดยกเลิก Ready → ต้องกดไม่ได้ · 🔎 gamelog: [TC154] / ev=preplay-lock (LobbyA) · deploy 2026-07-01",
|
||
"cat": "LobbyA"
|
||
},
|
||
{
|
||
"n": 155,
|
||
"name": "LobbyB: ต้องรอทุกคนเข้าครบก่อน \"ชี้ตัวคนร้าย\"",
|
||
"detail": "ปุ่มชี้ตัวคนร้าย (พิจารณาคดี) เปิดได้เฉพาะเมื่อผู้เล่นเข้า LobbyB ครบทุกคน · ยังไม่ครบ = disable + ป้าย \"รอผู้เล่น (n/total)\"",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-01",
|
||
"note": "📋 PLAN (flow/sound) · วิธีเทส: จบเคส → คนบางคนยังไม่เข้า LobbyB → host/ระบบต้องยังชี้ตัวไม่ได้ จนครบทุกคน",
|
||
"cat": "LobbyB"
|
||
},
|
||
{
|
||
"n": 156,
|
||
"name": "LobbyA→B: gate เลือกผู้ต้องสงสัยจนกว่าทุกคนอ่าน story ครบ",
|
||
"detail": "มีหน้าอ่านเนื้อเรื่อง story 1-2 (cutscene) ก่อน LobbyB · host เลือกผู้ต้องสงสัยไม่ได้จนกว่าทุกคนกด \"ไปต่อ\" อ่านจบครบ",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-02",
|
||
"note": "📋 PLAN (flow/sound) · วิธีเทส: เข้า LobbyB → หน้า story ขึ้น → บางคนยังไม่กดอ่านจบ → host ต้องเลือกผู้ต้องสงสัยไม่ได้ (ป้าย \"รออ่านเนื้อเรื่อง n/total\") · 🔎 gamelog: [TC156] / ev=story-gate (LobbyB) · deploy 2026-07-01",
|
||
"cat": "LobbyA"
|
||
},
|
||
{
|
||
"n": 157,
|
||
"name": "Vote Ban: เริ่มโหวตเมื่อทุกคนเข้า+โหลดเสร็จ · ยังไม่โหวต=เลือกผู้ต้องสงสัยไม่ได้",
|
||
"detail": "โหวตแบน/ปิดปากผู้เล่น เริ่มเมื่อทุกคนเข้า LobbyB + โหลดเสร็จเท่านั้น · ถ้ายังไม่โหวตเสร็จ host เลือกผู้ต้องสงสัยไม่ได้ (ตาม flow)",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-02",
|
||
"note": "📋 PLAN (flow/sound) · วิธีเทส: จบเคสที่มีการ์ด ban/silence → ต้องรอทุกคนเข้า+โหลดเสร็จ แล้วค่อยเริ่มโหวต → ระหว่างโหวต host เลือกผู้ต้องสงสัยไม่ได้จนโหวตจบ · 🔎 gamelog: [TC157] / ev=vote-gate (LobbyB) · deploy 2026-07-01",
|
||
"cat": "LobbyB"
|
||
},
|
||
{
|
||
"n": 158,
|
||
"name": "MG4: บอทว๊าป/กระโดดข้ามโต๊ะกลาง",
|
||
"detail": "บอทต้องเดินอ้อมโต๊ะกลาง ไม่ว๊าป/กระโดดข้าม (ลื่นไม่ teleport)",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-02",
|
||
"note": "📋 PLAN (flow/sound) · วิธีเทส: MG4 หลายรอบ → สังเกตบอท: ต้องไม่กระโดด/วาปข้ามโต๊ะกลาง · เดินอ้อมเนียน · 🔎 gamelog: [TC158] / ev=mg4-warp (MG4 · pass = ไม่มี event) · deploy 2026-07-01",
|
||
"cat": "Minigame 4"
|
||
},
|
||
{
|
||
"n": 159,
|
||
"name": "เพิ่ม BG Music + Sound Effect",
|
||
"detail": "มีเพลงพื้นหลังต่อฉาก (เมนู/LobbyA/B/มินิเกม) + SFX เหตุการณ์ (ปุ่ม, ready, drop, ยิง, ถูก/ผิด, ชนะ/แพ้) + ปุ่ม 🔊/🔇 ปรับ/ปิดได้",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "2026-07-02",
|
||
"note": "✅ Phase 1+2 deploy 2026-07-02 (sound.js?v=1 · play.js?v=0.006301062). BGM 7 เกม+lobby · จบเกม ชนะ/หมดเวลา/แพ้ · toggle Music/SFX จำค่า · BGM หรี่ตอนพูด · per-event SFX ครบ 7 เกม (ถูก/ผิด · drop · jump · laser · bomb · boss-elim · countdown) · Admin endpoint /Game/api/sound-settings พร้อม. เทสย่อย TC160-165. ค้าง: Admin UI slider · remote voice-duck · MG6 crash",
|
||
"cat": "เสียง (Sound)"
|
||
},
|
||
{
|
||
"n": 160,
|
||
"name": "เสียง: BGM ต่อฉาก (lobby + MG1-7)",
|
||
"detail": "เข้า LobbyA/B และแต่ละมินิเกม → มีเพลงพื้นหลังเล่นวน · เปลี่ยนเกม → เพลงเปลี่ยนตาม",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-02",
|
||
"note": "lobby ยืม BGM มินิเกม 4 · เริ่มเล่นตอนแตะจอครั้งแรก (นโยบาย autoplay) · idempotent",
|
||
"cat": "เสียง (Sound)"
|
||
},
|
||
{
|
||
"n": 161,
|
||
"name": "เสียง: จบเกม ชนะ/หมดเวลา/แพ้ (ครบ 7 เกม)",
|
||
"detail": "จบมินิเกมทั้ง 7 → ชนะ = แฟนแฟร์ · หมดเวลา = นกหวีด · แพ้ = game-over · BGM หยุด",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-02",
|
||
"note": "hook begin*ResultFlash* ทุกเกม (jdEndSfxFromFile) · MG7 ไม่มีไฟล์ timeup",
|
||
"cat": "เสียง (Sound)"
|
||
},
|
||
{
|
||
"n": 162,
|
||
"name": "เสียง: ปุ่มคลิก + MG4 ตอบถูก/ผิด",
|
||
"detail": "กดปุ่มจริง → เสียงคลิก · MG4 ตอบถูก = เสียง correct / ผิด = เสียง wrong",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-02",
|
||
"note": "ปุ่มคลิก = delegated (เฉพาะ element ปุ่มจริง)",
|
||
"cat": "เสียง (Sound)"
|
||
},
|
||
{
|
||
"n": 163,
|
||
"name": "เสียง: ปุ่ม Music/SFX (profile) เปิด-ปิด + จำค่า",
|
||
"detail": "profile → กด toggle Music / SFX → เปิด/ปิดเสียงได้จริง · รีเฟรช/เปลี่ยนหน้า ค่ายังเดิม",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-02",
|
||
"note": "localStorage jd_music_on / jd_sfx_on มีผลทุกหน้า · Main-Menu ยังไม่ wire (Phase 2)",
|
||
"cat": "เสียง (Sound)"
|
||
},
|
||
{
|
||
"n": 164,
|
||
"name": "เสียง: ไมค์ไม่โดนกลบ (หรี่ BGM ตอนพูด)",
|
||
"detail": "เปิดไมค์คุย → BGM หรี่ลงอัตโนมัติ เสียงคนชัด ไม่โดนเพลง/เอฟเฟกต์กลบ (caution)",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-02",
|
||
"note": "duck ×0.22 ตอน voice-activity · ตอนนี้ duck เฉพาะตอนเราพูด (remote = Phase 2)",
|
||
"cat": "เสียง (Sound)"
|
||
},
|
||
{
|
||
"n": 165,
|
||
"name": "เสียง: SFX รายเกม (drop/jump/laser/bomb/boss/countdown)",
|
||
"detail": "MG3 วางบล็อก=drop · MG2/MG5 กระโดด=jump · MG6/MG7 ยิง=laser · MG6 อุกกาบาตระเบิด=bomb · MG7 ฆ่าบอส=boss-elim · นับถอยหลัง 3-2-1=tick",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-02",
|
||
"note": "per-event SFX Phase 2 · เล่นตอนเหตุการณ์จริง · MG6 crash (ยานชน) ยังไม่ต่อ",
|
||
"cat": "เสียง (Sound)"
|
||
},
|
||
{
|
||
"n": 166,
|
||
"name": "LobbyB: รอทุกคนโหลดเสร็จจริงก่อน host เริ่ม (กันค้างตอนจบ)",
|
||
"detail": "บางคนยังโหลด LobbyB ไม่เสร็จ (ค้างฉากเกมเก่า) แต่ host กดไปต่อได้ → จบแล้วค้าง · แก้: นับ present จากคน \"โหลด LobbyB เสร็จจริง\" (lobbyb-loaded) ไม่ใช่แค่ peer มี",
|
||
"prio": "สูง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-02",
|
||
"note": "🔎 gamelog ev=lobbyb-gate [TC144] \"โหลด LobbyB เสร็จ N/total\" · เทส 2+ คน ให้คนช้า → host เริ่มไม่ได้จนโหลดครบ · deploy 2026-07-02",
|
||
"cat": "LobbyB"
|
||
},
|
||
{
|
||
"n": 167,
|
||
"name": "MG1: label 3 สถานะ ใต้ TIME",
|
||
"detail": "ใต้ UI TIME โชว์: อ่านคำถาม=\"📖 อ่านคำถาม\"(ทอง) · ตอบ=\"✍️ เริ่มตอบคำถาม\"(เขียว) · พัก=\"รอคำถามข้อต่อไป\"(ฟ้า)",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-02",
|
||
"note": "client-side (ฟัง/ดูเอง) · อยู่ใต้ TIME ไม่ใช่บนกระดานคำถาม · deploy play.js?v=0.006301069",
|
||
"cat": "Minigame 1"
|
||
},
|
||
{
|
||
"n": 168,
|
||
"name": "MG4: ป้ายตัวเลือก/คำที่ถือ ไม่โดนบัง",
|
||
"detail": "ป้ายตัวเลือกบนโต๊ะ (ยังไม่หยิบ) อยู่หน้าตัวละคร (คน/บอทไม่บัง) · คำที่ถือลอยชิดเหนือหัว (ไม่สูงเกิน)",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-02",
|
||
"note": "client-side · deploy play.js?v=0.006301066+",
|
||
"cat": "Minigame 4"
|
||
},
|
||
{
|
||
"n": 169,
|
||
"name": "MG4: โชว์ใครตอบถูกก่อนไปข้อต่อไป",
|
||
"detail": "ตอบถูก → โชว์ \"🎉 X ตอบถูก!\" ~1.6วิ ให้ทุกคนเห็นก่อน → ค่อยเป็น \"รอคำถามข้อต่อไป\" · หมดเวลาไม่มีคนถูก=พักทันที",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-02",
|
||
"note": "client-side · deploy play.js?v=0.006301065+",
|
||
"cat": "Minigame 4"
|
||
},
|
||
{
|
||
"n": 170,
|
||
"name": "MG2: บอทไม่กระจุกมุมบนก่อนเริ่ม",
|
||
"detail": "ช่วง pregame (howto/countdown) บอทอยู่ที่จุดเกิด (เรียงตาม lane) ไม่ไปกองมุมบนซ้าย",
|
||
"prio": "กลาง",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-02",
|
||
"note": "server ส่ง bot spawn ใน crownLobbySyncPayload · client วางที่ spawn ตอน pre-live · deploy 2026-07-02",
|
||
"cat": "Minigame 2"
|
||
},
|
||
{
|
||
"n": 171,
|
||
"name": "MG2: obstacle ไม่จางตอนใกล้เส้นชัย",
|
||
"detail": "เข้าใกล้เส้นชัย obstacle โชว์เต็ม (ไม่ค่อยๆ จาง) แล้วตัดหายที่จุด stop · (ถ้ายัง \"ขึ้นมาใหม่\" ช่วงท้าย = คนละอาการ)",
|
||
"prio": "ต่ำ",
|
||
"status": "เปิด",
|
||
"updated": "2026-07-02",
|
||
"note": "client-side · gauntletCrownRunwayObstacleDrawAlphaPlay hard-cutoff · deploy play.js?v=0.006301068",
|
||
"cat": "Minigame 2"
|
||
},
|
||
{
|
||
"n": 172,
|
||
"cat": "Minigame 2",
|
||
"name": "MG2: ตายหมด → ขึ้น game over + จบทันที",
|
||
"detail": "MG2 (วิ่งหลบ) ถ้าผู้เล่นจริงตกขอบหมด ต้องขึ้นจอ result-gameover แล้วเข้าสรุป (GCM) → กลับ LobbyB ทันที (grace 3 วิ) ไม่ใช่รอเดินเข้าเส้นชัย/รอหมดเวลา · fix: server ส่ง sync สุดท้าย(ทุกคนตาย)ให้ client ทริกจอ + grace เท่าทางชนะ · verify: gamelog ev=gauntlet-end [TC172]",
|
||
"prio": "สูง",
|
||
"status": "รอทดสอบ",
|
||
"updated": "",
|
||
"note": "ต้องเทส 2+ คน + มีบอท · log tag [TC172]"
|
||
},
|
||
{
|
||
"n": 173,
|
||
"cat": "ระบบ disconnect",
|
||
"name": "บอทผีเข้าไปเล่นเอง MG3/5/7 (pending takeover ค้าง)",
|
||
"detail": "ตอน host กดเริ่มเกม ทุก client navigate room-lobby→play.html socket หลุดชั่วขณะช่วง how-to → server จองบอท takeover ไว้ พอ reconnect กลับมา เดิมไม่ล้าง pending → seed เป็นบอทผีเล่นคู่กับคนจริง (เฉพาะ MG3/5/7 ที่สร้าง session ตอน 3-2-1 จบ) · fix: rejoin ล้าง pendingMissionTakeovers ที่ playerKey ตรง · verify: gamelog ev=join [TC173]",
|
||
"prio": "สูง",
|
||
"status": "รอทดสอบ",
|
||
"updated": "",
|
||
"note": "ต้องเทส 2+ คน · log tag [TC173]"
|
||
},
|
||
{
|
||
"n": 174,
|
||
"cat": "LobbyB",
|
||
"name": "Vote reveal โชว์ผลนานขึ้น (7วิ) + admin ปรับได้",
|
||
"detail": "โหวตจบ → จอ \"คนร้ายตัวจริงคือ...\" โชว์ ~7วิ ก่อนไปหน้าผลเต็ม (เดิม 2.6วิ) · ปรับที่ admin→Vote timing→โชว์ผลโหวต · verify: gamelog ev=trial-reveal-dur [TC174]",
|
||
"prio": "กลาง",
|
||
"status": "รอทดสอบ",
|
||
"updated": "",
|
||
"note": "เทสด้วยตา+log · admin game-timing.trialResultRevealMs"
|
||
},
|
||
{
|
||
"n": 175,
|
||
"cat": "ระบบ disconnect",
|
||
"name": "เน็ตแย่ → บล็อกกด Ready + safety 15วิ",
|
||
"detail": "ในหน้า how-to มินิเกม ถ้าเน็ตแย่ (RTT≥700/reconnecting) ปุ่ม Ready เทากดไม่ได้ + toast \"กำลังรอสัญญาณให้เสถียร\" · เน็ตกลับ/ครบ15วิ ปลดล็อกเอง · verify: gamelog ev=net-ready-block [TC175]",
|
||
"prio": "กลาง",
|
||
"status": "รอทดสอบ",
|
||
"updated": "",
|
||
"note": "throttle เน็ต (Slow 3G) เทส · client log"
|
||
},
|
||
{
|
||
"n": 176,
|
||
"cat": "LobbyB",
|
||
"name": "LobbyB ไม่โชว์ ✓ ready เหนือหัว",
|
||
"detail": "LobbyB ไม่มีเฟสกดพร้อม → ไม่วาด ✓ เหนือหัวตัวละคร (LobbyA ยังมี) · เทสด้วยตา",
|
||
"prio": "กลาง",
|
||
"status": "รอทดสอบ",
|
||
"updated": "",
|
||
"note": "visual only"
|
||
},
|
||
{
|
||
"n": 177,
|
||
"cat": "LobbyB",
|
||
"name": "มือถือ ปุ่มกลาง(รูป) แทนกด F",
|
||
"detail": "coarse pointer: LobbyA host+พร้อมครบ=ปุ่ม เริ่มเกม กลางล่าง · LobbyB เฟสสืบสวน=ปุ่ม ผู้ต้องสงสัย · กดทำ action เลย ไม่ต้องเดินไปยืน+F · อยู่คู่ปุ่ม F ล่างซ้าย · PC ไม่เห็น · verify: gamelog ev=mobile-center-btn [TC177]",
|
||
"prio": "กลาง",
|
||
"status": "รอทดสอบ",
|
||
"updated": "",
|
||
"note": "เทสมือถือ + client log"
|
||
},
|
||
{
|
||
"n": 178,
|
||
"cat": "Minigame 2",
|
||
"name": "ปุ่ม action ทุกเกม = แบบ MG3 (มุมขวาล่าง)",
|
||
"detail": "MG2/5/7 ปุ่มกระโดด/ยิง ใช้ position/size เดียวกับ MG3 (#stack-tower-drop-btn มุมขวาล่างวงกลม) · เทสด้วยตา ไม่ทับ art HUD",
|
||
"prio": "กลาง",
|
||
"status": "รอทดสอบ",
|
||
"updated": "",
|
||
"note": "visual only"
|
||
},
|
||
{
|
||
"n": 179,
|
||
"cat": "LobbyB",
|
||
"name": "การ์ดหลักฐาน LobbyB เท่ากันทุกจอ (team progress)",
|
||
"detail": "ช่องหลักฐานใต้การ์ดผู้ต้องสงสัยใช้ team progress (shared server) ไม่ใช่หลักฐานส่วนตัว → ทุกจอเห็นเท่ากัน (เดิมจริง1 บางคนเห็น3) · verify: gamelog ev=suspect-progress [TC179]",
|
||
"prio": "กลาง",
|
||
"status": "รอทดสอบ",
|
||
"updated": "",
|
||
"note": "เทส 4 คน + log"
|
||
},
|
||
{
|
||
"n": 180,
|
||
"cat": "LobbyB",
|
||
"name": "Vote ยืนยันก่อนส่ง (barrier รอทุกคน)",
|
||
"detail": "เลือกการ์ด (เปลี่ยนใจได้) → กด ยืนยันโหวต ✓ → ล็อก · รอทุกคนยืนยันครบ (บอท auto/แบนข้าม) ค่อย reveal · verify: gamelog ev=trial-vote [TC180] + trial-confirm",
|
||
"prio": "กลาง",
|
||
"status": "รอทดสอบ",
|
||
"updated": "",
|
||
"note": "เทส 2+ คน + log"
|
||
},
|
||
{
|
||
"n": 182,
|
||
"cat": "ระบบ disconnect",
|
||
"name": "หลักฐานแจกเกินตอนชื่อซ้ำ (MONE) — 1 การ์ด/คน",
|
||
"detail": "ชื่อซ้ำหลายจอ → หลักฐานเก็บด้วย nickname ชนกันแจกเกิน · fix: key ด้วย playerKey + dedup 1/key/เกม · verify gamelog [TC182] ใบ/key=[1,1,1,1]",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "",
|
||
"note": ""
|
||
},
|
||
{
|
||
"n": 183,
|
||
"cat": "Minigame 3",
|
||
"name": "MG3 คะแนนต่อคนปกติ (ไม่ inflate)",
|
||
"detail": "เช็คคะแนน MG3 ไม่สูงผิดปกติ/ไม่ซ้ำจากชื่อซ้ำ · verify gamelog [TC183] team + ต่อคน (เช่น 50/50/40/30 = ปกติ)",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "",
|
||
"note": ""
|
||
},
|
||
{
|
||
"n": 184,
|
||
"cat": "Minigame 3",
|
||
"name": "MG3 เปลี่ยนตาไม่ค้าง (turn-hang)",
|
||
"detail": "พอไปตาคนต่อไปเดิมค้าง ~1.5วิ (swing แช่แข็ง) · fix: swing เดินต่อระหว่าง busy + ลด 1500→1200",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "",
|
||
"note": ""
|
||
},
|
||
{
|
||
"n": 185,
|
||
"cat": "Minigame 3",
|
||
"name": "MG3 หัวใจ/decrypt% sync ตรงทุกจอ",
|
||
"detail": "เดิมหัวใจไม่ลดบางจอ (full-sync ไม่ส่ง teamMissesLeft) · fix: full-sync ส่งหัวใจ+% + client self-correct",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "",
|
||
"note": ""
|
||
},
|
||
{
|
||
"n": 186,
|
||
"cat": "Minigame 3",
|
||
"name": "MG3 TIME ตรงทุกจอ (ไม่ 90 vs 8)",
|
||
"detail": "เดิมจอเข้าช้า TIME เริ่มใหม่ (local clock) · fix: ยึด server anchor (playMissionLiveBeginsAt)",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "",
|
||
"note": ""
|
||
},
|
||
{
|
||
"n": 187,
|
||
"cat": "Minigame 3",
|
||
"name": "MG3 avatar โหลดสำเร็จบนเครื่องช้า",
|
||
"detail": "avatar ก้อนเขียวตอนเครื่องช้า (preload ยอมแพ้ 3.6วิ) · fix: retry ขยาย 15วิ",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "",
|
||
"note": ""
|
||
},
|
||
{
|
||
"n": 189,
|
||
"cat": "ระบบ disconnect",
|
||
"name": "refresh กลางเกม → เล่นต่อได้ ไม่ติด how-to",
|
||
"detail": "F5/reconnect กลางเกม live เดิมค้างหน้า how-to · fix: server missionLive flag + client skip how-to",
|
||
"prio": "กลาง",
|
||
"status": "แก้ไขแล้ว",
|
||
"updated": "",
|
||
"note": ""
|
||
}
|
||
] |