fixed 0 bot

This commit is contained in:
2026-07-01 14:39:09 +00:00
parent 0d3342027b
commit 82a34b2d53
11 changed files with 32982 additions and 8719 deletions
+123 -50
View File
@@ -51,9 +51,9 @@
"providerUserId": "p_1775109142385_wq7wfy1p32j",
"notes": "auto: player-coins",
"blocked": false,
"coins": 2642,
"coins": 2860,
"createdAt": "2026-04-02T05:52:21+00:00",
"updatedAt": "2026-07-01T00:43:02+00:00",
"updatedAt": "2026-07-01T14:37:22+00:00",
"daily": {
"anchorMs": 1781197200000,
"claimedDays": [
@@ -67,29 +67,33 @@
],
"lockUntilMs": 0
},
"score": 568,
"score": 786,
"scoreByCase": {
"1": 26,
"10": 782,
"10": 914,
"8": 296,
"11": 20,
"13": 344,
"13": 364,
"14": 30,
"9": 40,
"12": 466,
"15": 20,
"4": 20,
"5": 32,
"7": 6,
"7": 14,
"3": 150,
"6": 44,
"2": 166
"2": 224
},
"lbName": "Q",
"lbName": "บอท7",
"achievements": {
"d1_minigame_solver": 20,
"a1_first_deduction": 1,
"a5_truth_hunter": 3
"a5_truth_hunter": 3,
"e2_the_impostor": 1,
"e4_agent_of_chaos": 2,
"e3_master_of_doubt": 1,
"e5_slippery_eel": 1
},
"lobbyColorThemeIndex": 7,
"lobbySkinToneIndex": 1
@@ -102,9 +106,9 @@
"providerUserId": "p_1775128666204_xzgg2n6x8h",
"notes": "auto: player-coins",
"blocked": false,
"coins": 165,
"coins": 253,
"createdAt": "2026-04-02T11:17:46+00:00",
"updatedAt": "2026-06-26T12:12:46+00:00",
"updatedAt": "2026-07-01T12:26:22+00:00",
"lobbyColorThemeIndex": 1,
"lobbySkinToneIndex": 3,
"daily": {
@@ -112,28 +116,29 @@
"claimedDays": [
true,
true,
false,
true,
false,
false,
false,
false
],
"lockUntilMs": 1782493200000
"lockUntilMs": 1782925200000
},
"score": 140,
"score": 208,
"scoreByCase": {
"6": 30,
"13": 50,
"5": 8,
"12": 6,
"10": 36,
"3": 10
"10": 78,
"3": 10,
"2": 26
},
"lbName": "OHM",
"lbName": "บอท 888",
"achievements": {
"d1_minigame_solver": 19,
"d1_minigame_solver": 20,
"a1_first_deduction": 1,
"a5_truth_hunter": 1
"a5_truth_hunter": 3
}
},
{
@@ -325,26 +330,26 @@
"providerUserId": "p_1781849642042_x2vt68wscm",
"notes": "auto: player-coins",
"blocked": false,
"coins": 148,
"coins": 169,
"createdAt": "2026-06-19T06:14:02+00:00",
"updatedAt": "2026-06-26T12:12:46+00:00",
"updatedAt": "2026-07-01T11:44:24+00:00",
"daily": {
"anchorMs": 1781802000000,
"claimedDays": [
true,
false,
true,
false,
false,
false,
false,
false
],
"lockUntilMs": 0
"lockUntilMs": 1782925200000
},
"score": 138,
"score": 144,
"scoreByCase": {
"1": 66,
"7": 10,
"7": 16,
"5": 10,
"2": 40,
"6": 10,
@@ -352,8 +357,10 @@
},
"lbName": "tomato",
"achievements": {
"d1_minigame_solver": 18
}
"d1_minigame_solver": 19
},
"lobbyColorThemeIndex": 1,
"lobbySkinToneIndex": 1
},
{
"id": "cdf90c44df43f374c61afe24",
@@ -837,22 +844,25 @@
"providerUserId": "p_1782300287206_l5omneu1yeo",
"notes": "auto: player-coins",
"blocked": false,
"coins": 104,
"coins": 169,
"createdAt": "2026-06-24T11:24:48+00:00",
"updatedAt": "2026-06-26T12:12:46+00:00",
"updatedAt": "2026-07-01T12:20:59+00:00",
"lobbyColorThemeIndex": 3,
"lobbySkinToneIndex": 2,
"score": 94,
"lobbySkinToneIndex": 3,
"score": 144,
"scoreByCase": {
"6": 24,
"13": 26,
"13": 44,
"5": 16,
"12": 8,
"3": 20
"3": 20,
"7": 4,
"2": 14,
"10": 14
},
"lbName": "Nam",
"achievements": {
"d1_minigame_solver": 17,
"d1_minigame_solver": 20,
"a1_first_deduction": 1,
"a5_truth_hunter": 1
},
@@ -860,14 +870,14 @@
"anchorMs": 1782406800000,
"claimedDays": [
true,
false,
true,
false,
false,
false,
false,
false
],
"lockUntilMs": 1782493200000
"lockUntilMs": 1782925200000
}
},
{
@@ -962,35 +972,38 @@
"providerUserId": "p_1782472374020_hlha51h8q2m",
"notes": "auto: player-coins",
"blocked": false,
"coins": 86,
"coins": 135,
"createdAt": "2026-06-26T11:12:52+00:00",
"updatedAt": "2026-06-29T05:24:08+00:00",
"updatedAt": "2026-07-01T11:43:34+00:00",
"lobbyColorThemeIndex": 8,
"lobbySkinToneIndex": 3,
"score": 76,
"score": 110,
"scoreByCase": {
"10": 32,
"6": 8,
"3": 16,
"12": 10,
"1": 10
"1": 10,
"7": 10,
"2": 14,
"13": 10
},
"lbName": "MOOKIZ",
"achievements": {
"d1_minigame_solver": 9
"d1_minigame_solver": 13
},
"daily": {
"anchorMs": 1782666000000,
"claimedDays": [
true,
false,
true,
false,
false,
false,
false,
false
],
"lockUntilMs": 1782752400000
"lockUntilMs": 1782925200000
}
},
{
@@ -1013,17 +1026,19 @@
"providerUserId": "p_1778156246099_lbrni0cvx8",
"notes": "auto: player-coins",
"blocked": false,
"coins": 20,
"coins": 64,
"createdAt": "2026-06-29T07:25:24+00:00",
"updatedAt": "2026-06-29T07:32:57+00:00",
"score": 20,
"updatedAt": "2026-07-01T12:00:46+00:00",
"score": 64,
"scoreByCase": {
"10": 10,
"8": 10
"10": 42,
"8": 10,
"7": 2,
"1": 10
},
"lbName": "MONE",
"lbName": "บอท 1 (เกือบฉลาด)",
"achievements": {
"d1_minigame_solver": 2
"d1_minigame_solver": 9
}
},
{
@@ -1048,6 +1063,64 @@
"a1_first_deduction": 1,
"a5_truth_hunter": 1
}
},
{
"id": "071d6cc72313b5f1b71d0e21",
"email": "",
"displayName": "DevTester",
"loginType": "guest",
"providerUserId": "p_1782802776912_g9ua6h1w5dj",
"notes": "auto: achievements",
"blocked": false,
"coins": 40,
"achievements": {
"d1_minigame_solver": 4
},
"createdAt": "2026-07-01T06:43:44+00:00",
"updatedAt": "2026-07-01T06:48:17+00:00",
"score": 40,
"scoreByCase": {
"1": 40
},
"lbName": "DevTester"
},
{
"id": "0a493efd0dfaae0029a9b12f",
"email": "",
"displayName": "บอท0",
"loginType": "guest",
"providerUserId": "p_1782905000925_trqqhvxjdmm",
"notes": "auto: player-coins",
"blocked": false,
"coins": 88,
"createdAt": "2026-07-01T11:23:21+00:00",
"updatedAt": "2026-07-01T12:26:22+00:00",
"score": 78,
"scoreByCase": {
"10": 58,
"2": 20
},
"lbName": "บอท 7 (ฉลาด)",
"achievements": {
"d1_minigame_solver": 9,
"a1_first_deduction": 1,
"a5_truth_hunter": 2
},
"lobbyColorThemeIndex": 2,
"lobbySkinToneIndex": 1,
"daily": {
"anchorMs": 1782838800000,
"claimedDays": [
true,
false,
false,
false,
false,
false,
false
],
"lockUntilMs": 1782925200000
}
}
]
}
+2 -2
View File
@@ -98,8 +98,8 @@
"balloonBossBalloonsPerPlayer": 3,
"forcedMinigameKeys": [
"gauntlet",
"stack",
"quiz_carry"
"quiz",
"balloon_boss"
],
"testSpecialCardByMap": {},
"troublesomeForceOffer": false,
@@ -0,0 +1,107 @@
{
"gauntletTickMs": 220,
"gauntletJumpTicks": 6,
"gauntletJumpHeightMult": 0.52,
"gauntletTimeLimitSec": 0,
"troublesomeOfferSec": 15,
"gauntletLaneImageUrls": [],
"gauntletLaserTopUrl": "",
"gauntletLaserBottomUrl": "",
"gauntletLaserLineUrl": "",
"gauntletLaserFillColor": "rgba(140,230,255,0.42)",
"gauntletLaserStrokeColor": "rgba(255,220,255,0.9)",
"gauntletLaserLineWidthPx": 2,
"stackSwingHz": 0.1,
"stackBlockWidthTiles": 3.2,
"stackTowerMissionTimeSec": 90,
"stackTeamMissesMax": 3,
"stackTowerProgressBlocks": 50,
"stackBlockNormalImageUrls": [
"/Game/img/TowerBlock/Block-Code-1-red.png",
"/Game/img/TowerBlock/Block-Code-2-orange.png",
"/Game/img/TowerBlock/Block-Code-3-Yellow.png",
"/Game/img/TowerBlock/Block-Code-4-Green.png",
"/Game/img/TowerBlock/Block-Code-5-Blue.png",
"/Game/img/TowerBlock/Block-Code-6-Navy.png",
"",
""
],
"stackBlockHeavyImageUrls": [
"/Game/img/TowerBlock/Block-Code-1-red-2.png",
"/Game/img/TowerBlock/Block-Code-2-orange-2.png",
"/Game/img/TowerBlock/Block-Code-3-Yellow-2.png",
"/Game/img/TowerBlock/Block-Code-4-Green-2.png",
"/Game/img/TowerBlock/Block-Code-5-Blue-2.png",
"/Game/img/TowerBlock/Block-Code-6-Navy-2.png",
"",
""
],
"stackHeavyBlockPercent": 35,
"jumpSurviveJumpHeightMult": 1.7,
"jumpSurviveMissionTimeSec": 0,
"jumpSurvivePlatformTiles": [
{
"url": "/Game/img/Jumper/platfrom-1.png",
"w": 1392,
"h": 60
},
{
"url": "/Game/img/Jumper/platfrom-2.png",
"w": 389,
"h": 36
},
{
"url": "/Game/img/Jumper/platfrom-3.png",
"w": 212,
"h": 33
}
],
"spaceShooterMissionTimeSec": 0,
"spaceShooterShipImageUrls": [
"/Game/img/ViolentCrime/Rocket-1.png",
"/Game/img/ViolentCrime/Rocket-2.png",
"/Game/img/ViolentCrime/Rocket-3.png",
"/Game/img/ViolentCrime/Rocket-4.png",
"/Game/img/ViolentCrime/Rocket-5.png",
"/Game/img/ViolentCrime/Rocket-6.png"
],
"spaceShooterAsteroidSpriteUrls": [
"/Game/img/ViolentCrime/Meteo-1.png",
"/Game/img/ViolentCrime/Meteo-2.png",
"/Game/img/ViolentCrime/Meteo-3.png"
],
"spaceShooterAsteroidExplodeFrameMs": 60,
"spaceShooterAsteroidIntervalMs": 300,
"spaceShooterShipDamageOverlayUrls": [
"/Game/img/ViolentCrime/Rocket-broke-1.png",
"/Game/img/ViolentCrime/Rocket-broke-2.png",
"/Game/img/ViolentCrime/Rocket-broke-3.png"
],
"balloonBossMissionTimeSec": 60,
"balloonBossBossImageUrl": "/Game/img/MegaVirus/boss.png",
"balloonBossPlayerBalloonImageUrls": [
"/Game/img/MegaVirus/balloon-1.png",
"/Game/img/MegaVirus/balloon-2.png",
"/Game/img/MegaVirus/balloon-3.png",
"/Game/img/MegaVirus/balloon-4.png",
"/Game/img/MegaVirus/balloon-5.png",
"/Game/img/MegaVirus/balloon-6.png",
"",
""
],
"balloonBossPlayerBalloonFallbackUrl": "/Game/img/MegaVirus/Artboard%209.png",
"balloonBossBalloonsPerPlayer": 3,
"forcedMinigameKeys": [
"gauntlet",
"stack",
"quiz_carry"
],
"testSpecialCardByMap": {},
"troublesomeForceOffer": false,
"troublesomeRollMaxSec": 15,
"specialQuizIconExpireSec": 20,
"pickVoteSec": 25,
"trialVoteSec": 30,
"lobbyDebugHud": false,
"lobbyDebugHudNames": []
}
@@ -1 +1 @@
{"qbroom1":[{"name":"ผู้เล่น9514","score":17,"characterId":"char-1777017632279","ts":1781850667717},{"name":"MONE","score":10,"characterId":"char-1777017632279","ts":1781850749437},{"name":"tomato","score":9,"characterId":"char-1777017632279","ts":1781850748552},{"name":"Q","score":7,"characterId":"char-1777017632279","ts":1781171902962},{"name":"ผู้เล่น1991","score":5,"characterId":"char-1777017632279","ts":1781850950078},{"name":"ผู้เล่น8916","score":4,"characterId":"char-1777017632279","ts":1781074083031},{"name":"ผู้เล่น2821","score":4,"characterId":"char-1777017632279","ts":1781079179108},{"name":"Weenwild","score":4,"characterId":"char-1777017632279","ts":1781849863580}],"qbroom2":[{"name":"ผู้เล่น4472","score":13,"characterId":"char-1777017632279","ts":1781851033914},{"name":"Q","score":7,"characterId":"char-1777017632279","ts":1781175468983},{"name":"ผู้เล่น2612","score":1,"characterId":"char-1777017632279","ts":1781079252376}],"qbroom3":[{"name":"Q","score":9,"characterId":"char-1777017632279","ts":1781175654893},{"name":"Weenwild","score":2,"characterId":"char-1777017632279","ts":1781849898452}],"qbroom5":[{"name":"Q","score":6,"characterId":"char-1777017632279","ts":1781675299850}],"qbroom6":[{"name":"Q","score":3,"characterId":"char-1777017632279","ts":1781675383175}],"qbroom9":[{"name":"Q","score":7,"characterId":"char-1777017632279","ts":1781696345322}]}
{"qbroom1":[{"name":"Nam","score":18,"characterId":"char-1777017632279","ts":1782909257585},{"name":"ผู้เล่น9514","score":17,"characterId":"char-1777017632279","ts":1781850667717},{"name":"MONE","score":10,"characterId":"char-1777017632279","ts":1781850749437},{"name":"tomato","score":9,"characterId":"char-1777017632279","ts":1781850748552},{"name":"Q","score":7,"characterId":"char-1777017632279","ts":1781171902962},{"name":"ผู้เล่น1991","score":5,"characterId":"char-1777017632279","ts":1781850950078},{"name":"ผู้เล่น8916","score":4,"characterId":"char-1777017632279","ts":1781074083031},{"name":"ผู้เล่น2821","score":4,"characterId":"char-1777017632279","ts":1781079179108},{"name":"Weenwild","score":4,"characterId":"char-1777017632279","ts":1781849863580}],"qbroom2":[{"name":"ผู้เล่น4472","score":13,"characterId":"char-1777017632279","ts":1781851033914},{"name":"Q","score":7,"characterId":"char-1777017632279","ts":1781175468983},{"name":"ผู้เล่น2612","score":1,"characterId":"char-1777017632279","ts":1781079252376}],"qbroom3":[{"name":"Q","score":9,"characterId":"char-1777017632279","ts":1781175654893},{"name":"Weenwild","score":2,"characterId":"char-1777017632279","ts":1781849898452}],"qbroom5":[{"name":"Q","score":6,"characterId":"char-1777017632279","ts":1781675299850}],"qbroom6":[{"name":"Q","score":3,"characterId":"char-1777017632279","ts":1781675383175}],"qbroom9":[{"name":"Q","score":7,"characterId":"char-1777017632279","ts":1781696345322}]}
+3 -3
View File
@@ -8,16 +8,16 @@
"carryMapPanelTheme": {
"panelBg": "rgba(255, 0, 0, 0)",
"panelBorder": "rgba(255, 255, 255, 0)",
"textColor": "rgba(241, 245, 249, 1)",
"borderWidthPx": 0,
"textColor": "rgba(241, 245, 249, 1)",
"questionFontMinPx": 10,
"questionFontMaxPx": 24
},
"quizMapPanelTheme": {
"panelBg": "rgba(12, 14, 28, 0)",
"panelBorder": "rgba(255, 214, 102, 0)",
"borderWidthPx": 2,
"textColor": "rgba(255, 224, 102, 1)",
"borderWidthPx": 2,
"questionFontMinPx": 10,
"questionFontMaxPx": 28
},
@@ -175,7 +175,7 @@
"carryChoicePlaqueMapScale": 1.9,
"carryWalkSpeedMultForMapId": "",
"carryWalkSpeedMult": null,
"quizRoundQuestionCount": 3,
"quizRoundQuestionCount": 10,
"questions": [
{
"text": "เพื่อนทักขอยืมเงิน แต่ให้โอนเข้าบัญชีชื่อคนอื่น",
+9 -3
View File
@@ -20435,10 +20435,16 @@
try { socket.emit('special-quiz-testmode', { on: true }); } catch (eT) { /* ignore */ }
}
let botSlots = parseInt(res.botSlotCount, 10);
if ((!botSlots || botSlots < 1) && res.maxPlayers > 0 && res.maxPlayers < 6) {
botSlots = 6 - res.maxPlayers;
/* server botSlotCount (0 = 4 ) .
fallback 6-maxP เฉพาะตอน server "ไม่ส่งค่า" เทาน เด fallback 0 เป 6-maxP
= client สรางบอทแต server 0 จำนวนบอท 2 งไมตรง = "ทุกเกมแปลกๆ" */
if (!Number.isFinite(botSlots) || botSlots < 0) {
botSlots = (res.maxPlayers > 0 && res.maxPlayers < 6) ? (6 - res.maxPlayers) : 0;
}
if (botSlots > 0) {
/* detective ( editor preview) flow 0 .
เด gate botSlots>0 4 คน(0 บอท) = detectiveCaseFillBots าง false = playBotsEnabled()=false
turn order / sync / เงอนไขจบเกม เพยนทงหมด (รวม MG2 ไมจบ) */
if (!previewFillBots) {
detectiveCaseFillBots = true;
detectiveBotSlotCount = Math.min(6, Math.max(0, botSlots));
}
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -5438,7 +5438,7 @@
<script src="/app-base.js?v=2"></script>
<script src="/Game/socket.io/socket.io.js"></script>
<script src="js/version.js?v=0.0306"></script>
<script src="js/play.js?v=0.006301050"></script>
<script src="js/play.js?v=0.006301060"></script>
<div class="version-tag">v —</div>
<style id="qc-howto-mg2-fix">
/* HOW TO PLAY ของ quiz_carry (Minigame-4) -> ให้เหมือน Minigame-2 (gch-mg2-mock)
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,602 @@
[
{
"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"
}
]