Files
justice/www/html/testcase/data/bugs.json
T
2026-07-04 14:02:12 +00:00

1492 lines
80 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
[
{
"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": ""
}
]