on progress minigame 2

This commit is contained in:
2026-06-27 11:28:34 +00:00
parent cc9bc8dbf3
commit d599c5c72d
9 changed files with 1634 additions and 25 deletions
+9 -9
View File
@@ -51,9 +51,9 @@
"providerUserId": "p_1775109142385_wq7wfy1p32j",
"notes": "auto: player-coins",
"blocked": false,
"coins": 2256,
"coins": 2322,
"createdAt": "2026-04-02T05:52:21+00:00",
"updatedAt": "2026-06-26T18:19:28+00:00",
"updatedAt": "2026-06-27T11:14:02+00:00",
"daily": {
"anchorMs": 1781197200000,
"claimedDays": [
@@ -67,13 +67,13 @@
],
"lockUntilMs": 0
},
"score": 192,
"score": 248,
"scoreByCase": {
"1": 26,
"10": 616,
"8": 296,
"11": 20,
"13": 268,
"13": 324,
"14": 30,
"9": 40,
"12": 408,
@@ -663,15 +663,15 @@
"providerUserId": "p_1782016990238_0u37bv7pxlxs",
"notes": "auto: player-coins",
"blocked": false,
"coins": 510,
"coins": 572,
"createdAt": "2026-06-21T04:43:11+00:00",
"updatedAt": "2026-06-26T18:36:24+00:00",
"updatedAt": "2026-06-27T11:14:02+00:00",
"lobbyColorThemeIndex": 5,
"lobbySkinToneIndex": 1,
"score": 470,
"score": 532,
"scoreByCase": {
"13": 130,
"10": 238,
"13": 182,
"10": 248,
"6": 8,
"8": 20,
"2": 46,
+101 -10
View File
@@ -1313,6 +1313,10 @@
let gauntletCrownRunwayBgOff = false;
let gauntletCrownRunwayBgSpeedPxPerSec = 48;
let gauntletCrownRunwayBgScrollPx = 0;
/* G1: scroll ผูกเวลา server (ทุกเครื่องตรงกัน ไม่ขึ้น resolution/frame-rate/host) — scroll = base + speed × (serverNow anchor) */
let gauntletCrownRunwayLiveAnchorServerMs = 0; /* เวลาเริ่ม live (server epoch) */
let gauntletCrownRunwayServerLiveStartMs = 0; /* liveStartMs จาก server (gauntlet-sync) — anchor เดียวกันทุกเครื่อง */
let gauntletCrownRunwayBaseScrollPx = 0; /* ค่า scroll ตอน snap (resolution-independent เท่ากันทุกเครื่อง) */
let gauntletCrownRunwayBgFinishLatched = false;
/** ส่งสัญญาณ "ถึงเส้นชัย" ให้ server แล้วหรือยัง (กันส่งซ้ำ) — server จะหยุด obstacle/collision */
let gauntletFinishPhaseSignaled = false;
@@ -1934,12 +1938,28 @@
const raw = mapData.gauntletCrownRunwayBg && typeof mapData.gauntletCrownRunwayBg === 'object' ? mapData.gauntletCrownRunwayBg : {};
const frac = Math.max(0.02, Math.min(0.95, Number(raw.runwaySpawnAlignFrac) || 0.32));
gauntletCrownRunwayBgScrollPx = frac * w0 - anchorWorldX;
/* G1: เก็บ base (ค่า snap นี้ — เท่ากันทุกเครื่อง) + anchor เวลาเริ่ม (server epoch) → scroll คำนวณจากเวลา server */
gauntletCrownRunwayBaseScrollPx = gauntletCrownRunwayBgScrollPx;
/* anchor = liveStartMs server (gauntlet-sync) authoritative +
(เดมใช playMissionLiveBeginsAt างจากเกมกอน scroll กระโดด/host-client ไมตรง)
fallback: liveBeginsAt าสด ไม serverNow() */
if (gauntletCrownRunwayServerLiveStartMs > 0) {
gauntletCrownRunwayLiveAnchorServerMs = gauntletCrownRunwayServerLiveStartMs;
} else {
const _lba = (typeof playMissionLiveBeginsAt !== 'undefined') ? Number(playMissionLiveBeginsAt) : 0;
const _nowS = serverNow();
const _el = _nowS - _lba;
gauntletCrownRunwayLiveAnchorServerMs = (_lba > 0 && _el >= -2000 && _el < 10000) ? _lba : _nowS;
}
gauntletCrownRunwaySpawnScrollSnapped = true;
}
function reloadGauntletCrownRunwayBgFromMap() {
gauntletCrownRunwayBgImgs = [null, null, null, null, null];
gauntletCrownRunwayBgScrollPx = 0;
gauntletCrownRunwayLiveAnchorServerMs = 0; /* G1: รีเซ็ต anchor รอบใหม่ */
gauntletCrownRunwayServerLiveStartMs = 0;
gauntletCrownRunwayBaseScrollPx = 0;
gauntletCrownRunwayBgFinishLatched = false;
gauntletFinishPhaseSignaled = false;
gauntletCrownRunwayWalkActive = false;
@@ -2044,17 +2064,27 @@
} catch (_d) { /* ignore */ }
return;
}
const gcrInc = (gauntletCrownRunwayBgSpeedPxPerSec || 48) * dtSec;
/* ถ้าก้าวถัดไป "จะถึง/เลย" จุดหยุด FINISH → หยุดเป๊ะตรงนั้น (ไม่วิ่งเลย) แล้วเริ่มจบเกมทันที */
/* G1: scroll = base + speed × (serverNow anchor) resolution/frame-rate/host
(เด scrollPx += speed×dt local จากเวลาเรมของตวเอง เลอนไมตรงก + host หล/resize เพยน)
fallback เปนน local ายงไม anchor (นคาง) */
const gcrSpeed = gauntletCrownRunwayBgSpeedPxPerSec || 48;
let gcrTarget;
if (gauntletCrownRunwayLiveAnchorServerMs > 0) {
gcrTarget = gauntletCrownRunwayBaseScrollPx + gcrSpeed * Math.max(0, (serverNow() - gauntletCrownRunwayLiveAnchorServerMs)) / 1000;
} else {
gcrTarget = gauntletCrownRunwayBgScrollPx + gcrSpeed * dtSec;
}
/* ถ้า "จะถึง/เลย" จุดหยุด FINISH → หยุดเป๊ะตรงนั้น แล้วเริ่มจบเกมทันที */
const gcrLiveStopPx = gauntletCrownRunwayFinishStopScrollPxPlay();
if (gauntletCrownRunwayBgMapEligiblePlay() && gcrLiveStopPx != null
&& gcrLiveStopPx >= gauntletCrownRunwayBgScrollPx - 0.01
&& gauntletCrownRunwayBgScrollPx + gcrInc >= gcrLiveStopPx) {
&& gcrTarget >= gcrLiveStopPx) {
gauntletCrownRunwayBgScrollPx = gcrLiveStopPx;
gauntletCrownRunwayBeginFinishStopPlay();
return;
}
gauntletCrownRunwayBgScrollPx += gcrInc;
/* monotonic — เลื่อนหน้าเท่านั้น (กัน clock jitter ดึงถอย) */
if (gcrTarget > gauntletCrownRunwayBgScrollPx) gauntletCrownRunwayBgScrollPx = gcrTarget;
}
/** stack + แมป mnn93hpi — พื้นหลัง intro+loop เลื่อนแนวตั้ง (stackTowerBgScroll ในแมป) */
@@ -3878,13 +3908,34 @@
}
/** tile coords screen pos ghost ( caller render scope)
* helpers เป scope-local (worldToScreen, zDraw) เพราะถกเรยกในรอบ draw เทาน */
/** row ล่างสุดของโซนผี (cache บน mapData) — ใช้ clamp ภาพผีให้อยู่ในโซน */
function quizGhostZoneMaxRowPlay() {
if (!mapData) return null;
if (mapData._ghostMaxRow !== undefined) return mapData._ghostMaxRow;
const g = mapData.quizGhostArea;
let maxY = null;
if (Array.isArray(g)) {
for (let y = 0; y < g.length; y++) {
const row = g[y] || [];
for (let x = 0; x < row.length; x++) { if (Number(row[x]) === 1) maxY = y; }
}
}
mapData._ghostMaxRow = maxY;
return maxY;
}
function _quizGhostScreenAnchorPlay(axTile, ayTile, w2s, zDrawIn) {
const md = mapData;
const { cw, ch } = getCharacterFootprintWH(md);
const cxWorld = (axTile + cw * 0.5) * tileSize;
/* : anchor " tile" (ayTile) (ayTile+ch)
ไมอยลงทบโซนคำตอบ SAFE/SCAM (ตำแหนงจรอยในโซน y4-6 แตเดมภาพอย y7-8) */
const cyBottomWorld = ayTile * tileSize;
/* anchor (ayTile + ch) clamp (maxRow + 0.6)
ภาพผอย "ในโซนผี" พอด: ไมอยงเก (เคส ayTile) และไมอยลงท SAFE/SCAM (เคส ayTile+ch) */
let bottomTile = ayTile + ch;
const maxRow = quizGhostZoneMaxRowPlay();
if (maxRow != null) {
const clampBottom = maxRow + 0.6;
if (bottomTile > clampBottom) bottomTile = clampBottom;
}
const cyBottomWorld = bottomTile * tileSize;
const [sx, sy] = w2s(cxWorld, cyBottomWorld);
/* ความสูง = สูง avatar บนจอ (สอดคล้องกับ drawAvatar: boxH = tileSize * zDraw * ch * 1.35) */
const sizeH = tileSize * zDrawIn * Math.max(ch, 1) * 1.35;
@@ -6465,6 +6516,12 @@
zDraw = Math.min(canvas.width / mwPx, canvas.height / mhPx) * 0.96;
} else if (isQuizBattle()) {
zDraw *= quizBattleUserZoomMul;
} else if (isGauntletCrownHeistMapPlay() && !(previewMode && editorEmbedReturn)) {
/* #1 map fit: gauntlet fit " ()" resolution-adaptive
(เดมใช zoom ไมปรบตาม resolution = ไมพอด) · fit งอยางเดยว เพราะ runway เลอนแนวนอน */
const mhPx = h * tileSize;
const fitZ = (canvas.height / mhPx) * 0.96;
if (Number.isFinite(fitZ) && fitZ > 0) zDraw = fitZ;
}
if (isStackTowerEmbedZoomLockedPlay()) {
playEmbedUserZoomMul = PLAY_EMBED_STACK_TOWER_FIXED_ZOOM_MUL;
@@ -12705,6 +12762,10 @@
if (Number.isFinite(jt)) gauntletRuntimeJumpTicks = Math.max(4, Math.min(40, jt));
const tl = Number(payload.gauntletTimeLimitSec);
if (Number.isFinite(tl)) gauntletRuntimeTimeLimitSec = Math.max(0, Math.min(7200, tl));
if (Object.prototype.hasOwnProperty.call(payload, 'gauntletLiveStartMs')) {
const _ls = Number(payload.gauntletLiveStartMs);
gauntletCrownRunwayServerLiveStartMs = (Number.isFinite(_ls) && _ls > 0) ? _ls : 0; /* G1: anchor scroll จาก server (เดียวกันทุกเครื่อง) */
}
if (Object.prototype.hasOwnProperty.call(payload, 'gauntletEndsAt')) {
if (payload.gauntletEndsAt == null) gauntletEndsAtMs = null;
else {
@@ -20778,6 +20839,8 @@
let removed = 0;
[...others.keys()].forEach((id) => {
if (isPreviewBotId(id)) return;
const oo = others.get(id);
if (oo && oo.isQuizTakeoverBot) return; /* บอทที่แปลงจากคนหลุด — ไม่อยู่ใน peers แล้ว แต่ห้าม prune */
if (myId != null && String(id) === String(myId)) return;
if (!live.has(String(id))) { others.delete(id); removed++; }
});
@@ -20786,10 +20849,23 @@
}
});
/* บอท MG1 quiz: server เป็นเจ้าของการเดิน (host หลุดก็ไม่หยุด) → รับตำแหน่ง แล้ว lerp ใน tick (o.tx/o.ty) */
/* คนหลุด MG1 → server แปลงเป็นบอท "ในที่เดิม" (สี/ตำแหน่ง/สถานะเดิม) → client เก็บ avatar ไว้ (ไม่ลบ) แล้วให้ server ขับ */
socket.on('quiz-player-to-bot', (d) => {
if (!d || d.id == null) return;
const o = others.get(d.id) || others.get(String(d.id));
if (o) {
o.isQuizTakeoverBot = true;
o.tx = o.x; o.ty = o.y; /* หยุดนิ่งจนกว่า quiz-bot-move ตัวแรกจะมา */
/* UX: เติม "(บอท)" หลังชื่อเดิม → รู้ว่าคนนี้กลายเป็นบอทแล้ว (กันสับสน) */
if (o.nickname && String(o.nickname).indexOf('(บอท)') < 0) o.nickname = String(o.nickname).trim() + ' (บอท)';
}
});
/* MG1 quiz: server (host ) lerp tick (o.tx/o.ty)
บท quiz (ไม detectiveCaseFillBots) รองร takeover bot แมเรมเกมไมบอท */
socket.on('quiz-bot-move', (d) => {
if (!d || !Array.isArray(d.bots)) return;
if (!(isQuiz() && detectiveCaseFillBots)) return;
if (!isQuiz()) return;
d.bots.forEach((rb) => {
if (!rb || typeof rb.id !== 'string') return;
const o = others.get(rb.id);
@@ -20821,7 +20897,7 @@
if (!el) {
el = document.createElement('div');
el.id = 'play-grace-banner';
el.style.cssText = 'position:fixed;left:50%;top:12px;transform:translateX(-50%);z-index:9500;'
el.style.cssText = 'position:fixed;left:50%;top:12px;transform:translateX(-50%);z-index:10500;'
+ 'padding:9px 18px;border-radius:12px;background:rgba(176,55,40,.93);color:#fff;'
+ 'font:600 15px system-ui,"Kanit",sans-serif;box-shadow:0 4px 16px rgba(0,0,0,.42);pointer-events:none;letter-spacing:.2px;';
document.body.appendChild(el);
@@ -21400,6 +21476,21 @@
}
}
});
/* G3 (#4): gauntlet-sync = roster server-authoritative ( ~80ms) peer roster
3 ครงต (~240ms · debounce blip คนเพ join) · ามบอท + วเราเอง = เรวกว play-roster 1.5s */
{
const syncLive = new Set();
data.players.forEach((p) => { if (p && p.id != null) syncLive.add(String(p.id)); });
[...others.keys()].forEach((id) => {
if (isPreviewBotId(id)) return;
const oo = others.get(id);
if (!oo || oo.isQuizTakeoverBot) return;
if (myId != null && String(id) === String(myId)) return;
if (syncLive.has(String(id))) { oo._notInGSync = 0; return; }
oo._notInGSync = (oo._notInGSync || 0) + 1;
if (oo._notInGSync >= 3) others.delete(id);
});
}
if (playBotsEnabled()) {
applyGauntletPreviewBotsAfterSync();
emitGauntletPreviewRowsToServer();
+2 -1
View File
@@ -708,7 +708,8 @@
el.id = 'lobby-color-loading';
el.style.cssText = 'position:fixed;inset:0;z-index:99999;display:none;flex-direction:column;align-items:center;'
+ 'justify-content:center;gap:16px;background:rgba(0,0,0,.9);opacity:0;transition:opacity .16s ease;'
+ 'pointer-events:all;font-family:Kanit,system-ui,sans-serif';
/* pointer-events:none → overlay สี (peer เข้า/เปลี่ยนสี) ไม่บังการกดปุ่ม (เดิม all = re-tint ทุกคนทุก join = กดไม่ได้) */
+ 'pointer-events:none;font-family:Kanit,system-ui,sans-serif';
el.innerHTML =
'<div style="color:#9fe8ff;font-size:17px;letter-spacing:.4px">กำลังโหลดสีตัวละคร...</div>'
+ '<div id="lcl-pct" style="color:#fff;font-size:38px;font-weight:800;text-shadow:0 0 14px rgba(80,200,255,.6)">0%</div>'
+1 -1
View File
@@ -5426,7 +5426,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.006260129"></script>
<script src="js/play.js?v=0.006260138"></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)
+1 -1
View File
@@ -1648,7 +1648,7 @@
<script src="js/version.js?v=0.0122"></script>
<script src="js/customize-popup.js?v=40" data-customize-triggers="" data-customize-asset-base="img/03-5-Customize"></script>
<script src="js/achievements.js?v=0.002" data-asset-base="img/03-6-Profile"></script>
<script src="js/room-lobby.js?v=0.0329"></script>
<script src="js/room-lobby.js?v=0.0330"></script>
<div class="version-tag">v —</div>
</body>
</html>
+51 -3
View File
@@ -634,7 +634,9 @@ const SPECIAL_QUIZ_ICON_TYPES = ['lawyer', 'police'];
/** โอกาสโผล่ = 1 ใน 3 ของการเล่นแต่ละรอบ */
/** โอกาสขึ้นคำถามพิเศษต่อรอบ (เล่นจริง) — 1/3 · โหมดเทสต์บังคับการ์ดต่อเกมจะ force ขึ้นเสมอแยกต่างหาก */
const SPECIAL_QUIZ_SPAWN_CHANCE = 1 / 3;
/** หลุดกลางมินิเกม → ให้เวลา reconnect (วิ) ก่อน bot เข้าเล่นแทน */
/** reconnect () bot (roster /LobbyB)
ามต 0: เปลยนหน lobbyBplaylobbyB (socket หลดชวคราว) จะถกถอดจาก roster rejoin ไมได ("ห้องนี้เริ่มคดีแล้ว")
หมายเหต: bot takeover "ในเกม MG1" (sess.bots) เปนทนทอยแล แยกจาก grace */
const DISCONNECT_GRACE_SEC = 10;
/** โหมดเทสต์ (admin): บังคับ "การ์ดพิเศษใบไหน → เกมไหน" — { mapId: cardId(1-7) } · เกมที่ตั้งไว้จะ force ขึ้นเสมอด้วยการ์ดนั้น */
@@ -6875,6 +6877,7 @@ function emitGauntletSync(sid, space) {
gauntletTimeLimitSec: getGauntletTimeLimitSec(),
gauntletEndsAt: gr.endsAt != null ? gr.endsAt : null,
gauntletCrownRunHeld: !!gr.crownRunHeld,
gauntletLiveStartMs: gr.liveStartMs || null, /* G1: เวลาเริ่ม run (server) → client anchor scroll เดียวกันทุกเครื่อง */
...getGauntletVisualsForClient(),
});
}
@@ -8159,6 +8162,17 @@ io.on('connection', (socket) => {
if (space.graceTimers && space.graceTimers[joinPlayerKey]) { clearTimeout(space.graceTimers[joinPlayerKey]); delete space.graceTimers[joinPlayerKey]; }
io.to(spaceId).emit('peer-grace-cancel', { nickname: nickname || 'ผู้เล่น' });
}
/* MG1 takeover: quiz (playerKey ) (sess.bots)
"ตัวซ้ำ" (บอท takeover + วท rejoin) */
const sessJ = space.quizSession;
if (sessJ && sessJ.bots) {
const dropBotIds = [];
sessJ.bots.forEach((b, bid) => { if (b && b.takeover && b.takeoverPlayerKey && b.takeoverPlayerKey === joinPlayerKey) dropBotIds.push(bid); });
dropBotIds.forEach((bid) => {
sessJ.bots.delete(bid);
io.to(spaceId).emit('user-left', { id: bid }); /* ลบ avatar บอท takeover เก่า — ตัวจริงจะมาใหม่ผ่าน user-joined */
});
}
}
/* reconnect dedup 2: ghost playerKey block (peer playerKey)
ลบดวย "ชื่อ custom เดียวกัน" แต **เฉพาะ peer เกาทไม valid playerKey** เทาน
@@ -9363,6 +9377,27 @@ io.on('connection', (socket) => {
/* สี (ธีม/สกิน) ของคนที่ออก — ใช้ให้ bot ที่มาแทนใช้สีเดียวกัน (b) */
const leftThemeIndex = parseInt(leftPeerInfo.lobbyColorThemeIndex, 10);
const leftSkinIndex = parseInt(leftPeerInfo.lobbySkinToneIndex, 10);
/* MG1 (quiz live): entity (socket.id) server ""
เก avatar เดมไว = +ตำแหนงเดมอตโนม + inherit คะแนน/สถานะตกรอบ (าตอบผ) */
let mg1Takeover = false;
try {
const md9 = (space.mapId && maps.get(space.mapId)) || space.mapData;
const sessT = space.quizSession;
if (sessT && sessT.active && sessT.bots && md9 && md9.gameType === 'quiz') {
const st = (sessT.players && sessT.players[socket.id]) || {};
const px = Number(leftPeerInfo.x), py = Number(leftPeerInfo.y);
sessT.bots.set(socket.id, {
tier: quizBotTierForSlot(sessT.bots.size),
x: Number.isFinite(px) ? px : 1, y: Number.isFinite(py) ? py : 1,
dir: leftPeerInfo.direction || 'down', isWalking: false,
score: Math.max(0, Number(st.score) || 0),
eliminated: !!(st.cannotTrue && st.cannotFalse),
choice: null, answerRight: false, tx: null, ty: null, wanderTX: null, wanderTY: null, retargetAt: 0,
takeover: true, takeoverPlayerKey: leftPlayerKey || '',
});
mg1Takeover = true;
}
} catch (e) { /* ignore */ }
if (space.voiceInits) delete space.voiceInits[socket.id];
if (space.troublesomeEligible) space.troublesomeEligible.delete(socket.id);
if (space.quizSession && space.quizSession.players) delete space.quizSession.players[socket.id];
@@ -9410,8 +9445,14 @@ io.on('connection', (socket) => {
glog(sid, space, 'host-change', 'host ใหม่ → ' + ((firstPeer.nickname) || String(firstPeer.id).slice(0, 6)), leftNick);
}
}
io.to(sid).emit('user-left', { id: socket.id });
glog(sid, space, 'leave', 'ออกจากห้อง · เหลือคน ' + space.peers.size, leftNick);
if (mg1Takeover) {
/* MG1: ไม่ลบ avatar — แปลงเป็นบอทในที่เดิม (สี/ตำแหน่ง/สถานะเดิม) ให้ client เก็บ entity ไว้ */
io.to(sid).emit('quiz-player-to-bot', { id: socket.id, nickname: leftNick });
glog(sid, space, 'leave', 'หลุด MG1 → บอทแทนในเกม (สี/ตำแหน่งเดิม) · เหลือคน ' + space.peers.size, leftNick);
} else {
io.to(sid).emit('user-left', { id: socket.id });
glog(sid, space, 'leave', 'ออกจากห้อง · เหลือคน ' + space.peers.size, leftNick);
}
if (space.qbwSolved) qbwBroadcastScores(sid, space); // Quiz Battle ฉากเดิน — อัปเดตอันดับหลังมีคนออก
emitDetectiveLobbyBPresence(sid, space); /* คนออกจาก LobbyB → อัปเดตจำนวนที่พร้อมให้ host */
/* กำลังรอกด «เล่นต่อ» (special-quiz) แล้วมีคนออก — เอา ack คนนั้นออกแล้วเช็คใหม่ (กันค้างรอคนที่ไม่อยู่แล้ว) */
@@ -9460,6 +9501,12 @@ io.on('connection', (socket) => {
try { sp.caseParticipantNicknames.delete(normalizeLobbyNickname(leftNick)); } catch (e) { /* ignore */ }
emitDetectiveLobbyBPresence(sid, sp);
}
/* expectedActive () + re-emit lobby-sync
แก: host หลดในหน how-to อนกด START host ใหมกดไมไดเพราะคาง "รอผู้เล่นครบ (x/y)" (y ไมลด) */
if (typeof sp.minigameExpectedActiveCount === 'number' && sp.minigameExpectedActiveCount > 0) {
sp.minigameExpectedActiveCount = Math.max(0, sp.minigameExpectedActiveCount - 1);
}
if (isCrownLobbyShellSpace(sp)) io.to(sid).emit('gauntlet-crown-lobby-sync', crownLobbySyncPayload(sp));
/* (c) persist + (b) : 1 (: LobbyB vote)
แล pin "สีของคนที่ออก" ให slot บอทใหม บอททมาแทนสตรงคนเด + งสใหกเครองตรงก */
try {
@@ -9526,6 +9573,7 @@ io.on('connection', (socket) => {
if (!previewRoom && space.hostId !== socket.id) return reply({ ok: false, error: 'host' });
if (!gr.crownRunHeld) return reply({ ok: true, already: true });
gr.crownRunHeld = false;
gr.liveStartMs = Date.now(); /* G1: เวลาเริ่ม run จริง (server) — broadcast ให้ทุกเครื่อง anchor scroll เดียวกัน */
if (okGauntletCrown) {
ensureGauntletEndsAtIfNeeded(space);
emitGauntletSync(sid, space);
+537
View File
@@ -754,3 +754,540 @@
{"t":1782498573171,"cat":"MG1","room":"aasd","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782498573171,"cat":"MG1","room":"aasd","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782498583172,"cat":"MG1","room":"aasd","who":"Q","ev":"bot-takeover","detail":"หลุดเกิน 10วิ → บอทแทน (สีตามคนออก)","src":"server"}
{"t":1782540745045,"cat":"LobbyA","room":"adss-1782540742106","who":"Q","ev":"lobby-open","detail":"space=adss-1782540742106 [+0ms]","src":"client"}
{"t":1782540745089,"cat":"LobbyA","room":"adss-1782540742106","who":"Q","ev":"preload-start","detail":" [+21ms]","src":"client"}
{"t":1782540745139,"cat":"LobbyA","room":"adss-1782540742106","who":"Q","ev":"manifest-done","detail":" [+91ms]","src":"client"}
{"t":1782540745162,"cat":"LobbyA","room":"adss-1782540742106","who":"Q","ev":"colors-resolved","detail":" [+92ms]","src":"client"}
{"t":1782540745180,"cat":"LobbyA","room":"adss-1782540742106","who":"Q","ev":"socket-connect","detail":" [+134ms]","src":"client"}
{"t":1782540745212,"cat":"LobbyA","room":"adss","who":"Q","ev":"join","detail":"สี#7 · คน 1 + บอท 4","src":"server"}
{"t":1782540746130,"cat":"LobbyA","room":"adss-1782540742106","who":"Q","ev":"join-ok","detail":"peers=1 host=me map=mlsbbxfe bots=4 [+1042ms]","src":"client"}
{"t":1782540750347,"cat":"LobbyA","room":"adss-1782540742106","who":"Q","ev":"mychar-tinted","detail":"roomJoinReady=true [+5298ms]","src":"client"}
{"t":1782540759114,"cat":"LobbyA","room":"adss-1782540742106","who":"Q","ev":"preload-occupants-done","detail":" [+14065ms]","src":"client"}
{"t":1782540759116,"cat":"LobbyA","room":"adss-1782540742106","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+14066ms]","src":"client"}
{"t":1782540759116,"cat":"LobbyA","room":"adss-1782540742106","who":"Q","ev":"preload-ready(occupants)","detail":" [+14066ms]","src":"client"}
{"t":1782540765742,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"lobby-open","detail":"space=adss-1782540742106 [+1ms]","src":"client"}
{"t":1782540765798,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"preload-start","detail":" [+65ms]","src":"client"}
{"t":1782540765805,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"manifest-done","detail":" [+66ms]","src":"client"}
{"t":1782540765808,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"colors-resolved","detail":" [+66ms]","src":"client"}
{"t":1782540765812,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"mychar-tinted","detail":"roomJoinReady=false [+67ms]","src":"client"}
{"t":1782540765844,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"preload-ready(occupants)","detail":" [+68ms]","src":"client"}
{"t":1782540765845,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"preload-occupants-done","detail":" [+67ms]","src":"client"}
{"t":1782540765908,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"socket-connect","detail":" [+185ms]","src":"client"}
{"t":1782540765921,"cat":"LobbyA","room":"adss","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782540766921,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"join-ok","detail":"peers=2 host=other map=mlsbbxfe bots=4 [+1188ms]","src":"client"}
{"t":1782540766926,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+1188ms]","src":"client"}
{"t":1782540771113,"cat":"LobbyA","room":"adss","who":"MONE","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782540772594,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"lobby-open","detail":"space=adss-1782540742106 [+0ms]","src":"client"}
{"t":1782540772680,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"preload-start","detail":" [+85ms]","src":"client"}
{"t":1782540772691,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"manifest-done","detail":" [+87ms]","src":"client"}
{"t":1782540772717,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"colors-resolved","detail":" [+92ms]","src":"client"}
{"t":1782540772721,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"preload-occupants-done","detail":" [+94ms]","src":"client"}
{"t":1782540772724,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"preload-ready(occupants)","detail":" [+94ms]","src":"client"}
{"t":1782540772726,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"mychar-tinted","detail":"roomJoinReady=false [+93ms]","src":"client"}
{"t":1782540772849,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"socket-connect","detail":" [+246ms]","src":"client"}
{"t":1782540772856,"cat":"LobbyA","room":"adss","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782540775072,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+2480ms]","src":"client"}
{"t":1782540775072,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"join-ok","detail":"peers=2 host=other map=mlsbbxfe bots=4 [+2479ms]","src":"client"}
{"t":1782540790956,"cat":"LobbyA","room":"adss-1782540742106","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+18358ms]","src":"client"}
{"t":1782540790992,"cat":"LobbyA","room":"adss-1782540742106","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+45903ms]","src":"client"}
{"t":1782540794439,"cat":"LobbyB","room":"adss-1782540742106","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+49398ms]","src":"client"}
{"t":1782540795703,"cat":"LobbyB","room":"adss-1782540742106","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+23111ms]","src":"client"}
{"t":1782540799466,"cat":"MG1","room":"adss","who":"","ev":"game-start","detail":"เริ่มมินิเกม: Minigame-1 จริงหรือไม่ (การ์ด 1)","src":"server"}
{"t":1782540799598,"cat":"MG1","room":"adss","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782540799598,"cat":"MG1","room":"adss","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782540799599,"cat":"MG1","room":"adss","who":"Q","ev":"bot-takeover","detail":"หลุดเกิน 0วิ → บอทแทน (สีตามคนออก)","src":"server"}
{"t":1782540799842,"cat":"MG1","room":"adss","who":"MONE","ev":"join","detail":"สี#5 · คน 1 + บอท 5","src":"server"}
{"t":1782540815958,"cat":"LobbyA","room":"adss-1782540742106","who":"Q","ev":"lobby-open","detail":"space=adss-1782540742106 [+0ms]","src":"client"}
{"t":1782540816073,"cat":"LobbyA","room":"adss-1782540742106","who":"Q","ev":"preload-start","detail":" [+114ms]","src":"client"}
{"t":1782540816132,"cat":"LobbyA","room":"adss-1782540742106","who":"Q","ev":"manifest-done","detail":" [+186ms]","src":"client"}
{"t":1782540816140,"cat":"LobbyA","room":"adss-1782540742106","who":"Q","ev":"colors-resolved","detail":" [+186ms]","src":"client"}
{"t":1782540816172,"cat":"LobbyA","room":"adss-1782540742106","who":"Q","ev":"socket-connect","detail":" [+211ms]","src":"client"}
{"t":1782541271050,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"Q","ev":"lobby-open","detail":"space=ฟฟฟ-1782541267929 [+0ms]","src":"client"}
{"t":1782541271092,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"Q","ev":"preload-start","detail":" [+20ms]","src":"client"}
{"t":1782541271153,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"Q","ev":"colors-resolved","detail":" [+104ms]","src":"client"}
{"t":1782541271155,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"Q","ev":"manifest-done","detail":" [+104ms]","src":"client"}
{"t":1782541271178,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"Q","ev":"socket-connect","detail":" [+131ms]","src":"client"}
{"t":1782541271183,"cat":"LobbyA","room":"ฟฟฟ","who":"Q","ev":"join","detail":"สี#7 · คน 1 + บอท 4","src":"server"}
{"t":1782541271961,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"Q","ev":"join-ok","detail":"peers=1 host=me map=mlsbbxfe bots=4 [+891ms]","src":"client"}
{"t":1782541277541,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"MONE","ev":"lobby-open","detail":"space=ฟฟฟ-1782541267929 [+0ms]","src":"client"}
{"t":1782541277613,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"MONE","ev":"preload-start","detail":" [+86ms]","src":"client"}
{"t":1782541277615,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"MONE","ev":"manifest-done","detail":" [+88ms]","src":"client"}
{"t":1782541277620,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"MONE","ev":"colors-resolved","detail":" [+92ms]","src":"client"}
{"t":1782541277625,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"MONE","ev":"mychar-tinted","detail":"roomJoinReady=false [+94ms]","src":"client"}
{"t":1782541277641,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"MONE","ev":"preload-occupants-done","detail":" [+96ms]","src":"client"}
{"t":1782541277647,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"MONE","ev":"preload-ready(occupants)","detail":" [+99ms]","src":"client"}
{"t":1782541277715,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"MONE","ev":"socket-connect","detail":" [+185ms]","src":"client"}
{"t":1782541277721,"cat":"LobbyA","room":"ฟฟฟ","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782541278058,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"Q","ev":"mychar-tinted","detail":"roomJoinReady=true [+7007ms]","src":"client"}
{"t":1782541279782,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+2255ms]","src":"client"}
{"t":1782541279784,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"MONE","ev":"join-ok","detail":"peers=2 host=other map=mlsbbxfe bots=4 [+2254ms]","src":"client"}
{"t":1782541288598,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"Q","ev":"preload-occupants-done","detail":" [+17549ms]","src":"client"}
{"t":1782541288602,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+17550ms]","src":"client"}
{"t":1782541288602,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"Q","ev":"preload-ready(occupants)","detail":" [+17550ms]","src":"client"}
{"t":1782541418533,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+147476ms]","src":"client"}
{"t":1782541418533,"cat":"LobbyA","room":"ฟฟฟ-1782541267929","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+141009ms]","src":"client"}
{"t":1782541421260,"cat":"LobbyB","room":"ฟฟฟ-1782541267929","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+150215ms]","src":"client"}
{"t":1782541422839,"cat":"LobbyB","room":"ฟฟฟ-1782541267929","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+145314ms]","src":"client"}
{"t":1782541423444,"cat":"MG1","room":"ฟฟฟ","who":"","ev":"game-start","detail":"เริ่มมินิเกม: Minigame-1 จริงหรือไม่ (การ์ด 1)","src":"server"}
{"t":1782541423561,"cat":"MG1","room":"ฟฟฟ","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782541423561,"cat":"MG1","room":"ฟฟฟ","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782541423895,"cat":"MG1","room":"ฟฟฟ","who":"MONE","ev":"join","detail":"สี#5 · คน 1 + บอท 4","src":"server"}
{"t":1782541423983,"cat":"MG1","room":"ฟฟฟ","who":"Q","ev":"join","detail":"สี#7 · คน 2 + บอท 4","src":"server"}
{"t":1782541467566,"cat":"MG1","room":"ฟฟฟ","who":"MONE","ev":"leave","detail":"หลุด MG1 → บอทแทนในเกม (สี/ตำแหน่งเดิม) · เหลือคน 1","src":"server"}
{"t":1782541477568,"cat":"MG1","room":"ฟฟฟ","who":"MONE","ev":"bot-takeover","detail":"หลุดเกิน 10วิ → บอทแทน (สีตามคนออก)","src":"server"}
{"t":1782541696320,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"Q","ev":"lobby-open","detail":"space=ฟฟฟก-1782541693366 [+0ms]","src":"client"}
{"t":1782541696368,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"Q","ev":"preload-start","detail":" [+31ms]","src":"client"}
{"t":1782541696426,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"Q","ev":"manifest-done","detail":" [+100ms]","src":"client"}
{"t":1782541696440,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"Q","ev":"colors-resolved","detail":" [+100ms]","src":"client"}
{"t":1782541696474,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"Q","ev":"socket-connect","detail":" [+138ms]","src":"client"}
{"t":1782541696495,"cat":"LobbyA","room":"ฟฟฟก","who":"Q","ev":"join","detail":"สี#7 · คน 1 + บอท 4","src":"server"}
{"t":1782541697254,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"Q","ev":"join-ok","detail":"peers=1 host=me map=mlsbbxfe bots=4 [+913ms]","src":"client"}
{"t":1782541701504,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"Q","ev":"mychar-tinted","detail":"roomJoinReady=true [+5186ms]","src":"client"}
{"t":1782541713065,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"Q","ev":"preload-occupants-done","detail":" [+16744ms]","src":"client"}
{"t":1782541713065,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+16745ms]","src":"client"}
{"t":1782541713066,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"Q","ev":"preload-ready(occupants)","detail":" [+16744ms]","src":"client"}
{"t":1782541730111,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"MONE","ev":"lobby-open","detail":"space=ฟฟฟก-1782541693366 [+0ms]","src":"client"}
{"t":1782541730184,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"MONE","ev":"preload-start","detail":" [+72ms]","src":"client"}
{"t":1782541730200,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"MONE","ev":"manifest-done","detail":" [+72ms]","src":"client"}
{"t":1782541730200,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"MONE","ev":"colors-resolved","detail":" [+73ms]","src":"client"}
{"t":1782541730204,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"MONE","ev":"mychar-tinted","detail":"roomJoinReady=false [+75ms]","src":"client"}
{"t":1782541730223,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"MONE","ev":"preload-occupants-done","detail":" [+76ms]","src":"client"}
{"t":1782541730225,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"MONE","ev":"preload-ready(occupants)","detail":" [+76ms]","src":"client"}
{"t":1782541730289,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"MONE","ev":"socket-connect","detail":" [+178ms]","src":"client"}
{"t":1782541730291,"cat":"LobbyA","room":"ฟฟฟก","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782541732620,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+2513ms]","src":"client"}
{"t":1782541732620,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"MONE","ev":"join-ok","detail":"peers=2 host=other map=mlsbbxfe bots=4 [+2512ms]","src":"client"}
{"t":1782541769781,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+73456ms]","src":"client"}
{"t":1782541769788,"cat":"LobbyA","room":"ฟฟฟก-1782541693366","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+39673ms]","src":"client"}
{"t":1782541776385,"cat":"LobbyB","room":"ฟฟฟก-1782541693366","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+80070ms]","src":"client"}
{"t":1782541778204,"cat":"LobbyB","room":"ฟฟฟก-1782541693366","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+48096ms]","src":"client"}
{"t":1782541782568,"cat":"MG1","room":"ฟฟฟก","who":"","ev":"game-start","detail":"เริ่มมินิเกม: Minigame-1 จริงหรือไม่ (การ์ด 1)","src":"server"}
{"t":1782541782689,"cat":"MG1","room":"ฟฟฟก","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782541782689,"cat":"MG1","room":"ฟฟฟก","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782541783017,"cat":"MG1","room":"ฟฟฟก","who":"Q","ev":"join","detail":"สี#7 · คน 1 + บอท 4","src":"server"}
{"t":1782541783109,"cat":"MG1","room":"ฟฟฟก","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782541794471,"cat":"MG1","room":"ฟฟฟก","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782541794471,"cat":"MG1","room":"ฟฟฟก","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782541804472,"cat":"MG1","room":"ฟฟฟก","who":"Q","ev":"bot-takeover","detail":"หลุดเกิน 10วิ → บอทแทน (สีตามคนออก)","src":"server"}
{"t":1782542121611,"cat":"LobbyA","room":"aaa-1782542118629","who":"Q","ev":"lobby-open","detail":"space=aaa-1782542118629 [+0ms]","src":"client"}
{"t":1782542121653,"cat":"LobbyA","room":"aaa-1782542118629","who":"Q","ev":"preload-start","detail":" [+20ms]","src":"client"}
{"t":1782542121720,"cat":"LobbyA","room":"aaa-1782542118629","who":"Q","ev":"manifest-done","detail":" [+131ms]","src":"client"}
{"t":1782542121743,"cat":"LobbyA","room":"aaa-1782542118629","who":"Q","ev":"colors-resolved","detail":" [+132ms]","src":"client"}
{"t":1782542121755,"cat":"LobbyA","room":"aaa-1782542118629","who":"Q","ev":"socket-connect","detail":" [+159ms]","src":"client"}
{"t":1782542121757,"cat":"LobbyA","room":"aaa","who":"Q","ev":"join","detail":"สี#7 · คน 1 + บอท 4","src":"server"}
{"t":1782542122748,"cat":"LobbyA","room":"aaa-1782542118629","who":"Q","ev":"join-ok","detail":"peers=1 host=me map=mlsbbxfe bots=4 [+1161ms]","src":"client"}
{"t":1782542126872,"cat":"LobbyA","room":"aaa-1782542118629","who":"Q","ev":"mychar-tinted","detail":"roomJoinReady=true [+5284ms]","src":"client"}
{"t":1782542134621,"cat":"LobbyA","room":"aaa-1782542118629","who":"MONE","ev":"lobby-open","detail":"space=aaa-1782542118629 [+0ms]","src":"client"}
{"t":1782542134691,"cat":"LobbyA","room":"aaa-1782542118629","who":"MONE","ev":"preload-start","detail":" [+68ms]","src":"client"}
{"t":1782542134704,"cat":"LobbyA","room":"aaa-1782542118629","who":"MONE","ev":"manifest-done","detail":" [+69ms]","src":"client"}
{"t":1782542134711,"cat":"LobbyA","room":"aaa-1782542118629","who":"MONE","ev":"colors-resolved","detail":" [+70ms]","src":"client"}
{"t":1782542134717,"cat":"LobbyA","room":"aaa-1782542118629","who":"MONE","ev":"mychar-tinted","detail":"roomJoinReady=false [+71ms]","src":"client"}
{"t":1782542134738,"cat":"LobbyA","room":"aaa-1782542118629","who":"MONE","ev":"preload-ready(occupants)","detail":" [+72ms]","src":"client"}
{"t":1782542134738,"cat":"LobbyA","room":"aaa-1782542118629","who":"MONE","ev":"preload-occupants-done","detail":" [+72ms]","src":"client"}
{"t":1782542134812,"cat":"LobbyA","room":"aaa-1782542118629","who":"MONE","ev":"socket-connect","detail":" [+193ms]","src":"client"}
{"t":1782542134813,"cat":"LobbyA","room":"aaa","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782542135734,"cat":"LobbyA","room":"aaa-1782542118629","who":"MONE","ev":"join-ok","detail":"peers=2 host=other map=mlsbbxfe bots=4 [+1120ms]","src":"client"}
{"t":1782542135736,"cat":"LobbyA","room":"aaa-1782542118629","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+1120ms]","src":"client"}
{"t":1782542137862,"cat":"LobbyA","room":"aaa-1782542118629","who":"Q","ev":"preload-occupants-done","detail":" [+16275ms]","src":"client"}
{"t":1782542137863,"cat":"LobbyA","room":"aaa-1782542118629","who":"Q","ev":"preload-ready(occupants)","detail":" [+16276ms]","src":"client"}
{"t":1782542137863,"cat":"LobbyA","room":"aaa-1782542118629","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+16276ms]","src":"client"}
{"t":1782542151174,"cat":"LobbyA","room":"aaa-1782542118629","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+29586ms]","src":"client"}
{"t":1782542151181,"cat":"LobbyA","room":"aaa-1782542118629","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+16568ms]","src":"client"}
{"t":1782542153825,"cat":"LobbyB","room":"aaa-1782542118629","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+32240ms]","src":"client"}
{"t":1782542154787,"cat":"LobbyB","room":"aaa-1782542118629","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+20173ms]","src":"client"}
{"t":1782542155890,"cat":"MG1","room":"aaa","who":"","ev":"game-start","detail":"เริ่มมินิเกม: Minigame-1 จริงหรือไม่ (การ์ด 1)","src":"server"}
{"t":1782542155998,"cat":"MG1","room":"aaa","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782542155998,"cat":"MG1","room":"aaa","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782542156307,"cat":"MG1","room":"aaa","who":"Q","ev":"join","detail":"สี#7 · คน 1 + บอท 4","src":"server"}
{"t":1782542156400,"cat":"MG1","room":"aaa","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782542164237,"cat":"MG1","room":"aaa","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782542164238,"cat":"MG1","room":"aaa","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782542174240,"cat":"MG1","room":"aaa","who":"Q","ev":"bot-takeover","detail":"หลุดเกิน 10วิ → บอทแทน (สีตามคนออก)","src":"server"}
{"t":1782542346136,"cat":"LobbyA","room":"aaa-1782542118629","who":"MONE","ev":"lobby-open","detail":"space=aaa-1782542118629 [+0ms]","src":"client"}
{"t":1782542346190,"cat":"LobbyA","room":"aaa-1782542118629","who":"MONE","ev":"preload-start","detail":" [+53ms]","src":"client"}
{"t":1782542346191,"cat":"LobbyA","room":"aaa-1782542118629","who":"MONE","ev":"manifest-done","detail":" [+54ms]","src":"client"}
{"t":1782542346203,"cat":"LobbyA","room":"aaa-1782542118629","who":"MONE","ev":"colors-resolved","detail":" [+54ms]","src":"client"}
{"t":1782542346209,"cat":"LobbyA","room":"aaa-1782542118629","who":"MONE","ev":"mychar-tinted","detail":"roomJoinReady=false [+55ms]","src":"client"}
{"t":1782542346216,"cat":"LobbyA","room":"aaa-1782542118629","who":"MONE","ev":"preload-occupants-done","detail":" [+55ms]","src":"client"}
{"t":1782542346234,"cat":"LobbyA","room":"aaa-1782542118629","who":"MONE","ev":"preload-ready(occupants)","detail":" [+55ms]","src":"client"}
{"t":1782542346287,"cat":"LobbyA","room":"aaa-1782542118629","who":"MONE","ev":"socket-connect","detail":" [+157ms]","src":"client"}
{"t":1782542346340,"cat":"LobbyB","room":"aaa","who":"MONE","ev":"join","detail":"สี#5 · คน 1 + บอท 5","src":"server"}
{"t":1782542348811,"cat":"LobbyB","room":"aaa-1782542118629","who":"MONE","ev":"join-ok","detail":"peers=1 host=me map=mn8nx46h bots=5 [+2677ms]","src":"client"}
{"t":1782542348812,"cat":"LobbyB","room":"aaa-1782542118629","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+2680ms]","src":"client"}
{"t":1782542443503,"cat":"LobbyB","room":"aaa-1782542118629","who":"MONE","ev":"socket-connect","detail":" [+97367ms]","src":"client"}
{"t":1782542443511,"cat":"LobbyB","room":"aaa","who":"MONE","ev":"join","detail":"สี#5 · คน 1 + บอท 5","src":"server"}
{"t":1782542500492,"cat":"LobbyB","room":"aaa-1782542118629","who":"MONE","ev":"socket-connect","detail":" [+154355ms]","src":"client"}
{"t":1782542500494,"cat":"LobbyB","room":"aaa","who":"MONE","ev":"join","detail":"สี#5 · คน 1 + บอท 5","src":"server"}
{"t":1782542511493,"cat":"LobbyB","room":"aaa-1782542118629","who":"MONE","ev":"join-ok","detail":"peers=1 host=me map=mn8nx46h bots=5 [+165361ms]","src":"client"}
{"t":1782542533149,"cat":"LobbyB","room":"aaa-1782542118629","who":"MONE","ev":"socket-connect","detail":" [+187012ms]","src":"client"}
{"t":1782542533150,"cat":"LobbyB","room":"aaa","who":"MONE","ev":"join","detail":"สี#5 · คน 1 + บอท 5","src":"server"}
{"t":1782542534242,"cat":"LobbyB","room":"aaa-1782542118629","who":"MONE","ev":"join-ok","detail":"peers=1 host=other map=mn8nx46h bots=5 [+188110ms]","src":"client"}
{"t":1782542568757,"cat":"LobbyA","room":"assdw-1782542565774","who":"Q","ev":"lobby-open","detail":"space=assdw-1782542565774 [+0ms]","src":"client"}
{"t":1782542568798,"cat":"LobbyA","room":"assdw-1782542565774","who":"Q","ev":"preload-start","detail":" [+20ms]","src":"client"}
{"t":1782542568853,"cat":"LobbyA","room":"assdw-1782542565774","who":"Q","ev":"manifest-done","detail":" [+109ms]","src":"client"}
{"t":1782542568873,"cat":"LobbyA","room":"assdw-1782542565774","who":"Q","ev":"colors-resolved","detail":" [+110ms]","src":"client"}
{"t":1782542568890,"cat":"LobbyA","room":"assdw-1782542565774","who":"Q","ev":"socket-connect","detail":" [+141ms]","src":"client"}
{"t":1782542568898,"cat":"LobbyA","room":"assdw","who":"Q","ev":"join","detail":"สี#7 · คน 1 + บอท 3","src":"server"}
{"t":1782542569588,"cat":"LobbyA","room":"assdw-1782542565774","who":"Q","ev":"join-ok","detail":"peers=1 host=me map=mlsbbxfe bots=3 [+799ms]","src":"client"}
{"t":1782542573352,"cat":"LobbyA","room":"assdw-1782542565774","who":"Q","ev":"mychar-tinted","detail":"roomJoinReady=true [+4613ms]","src":"client"}
{"t":1782542584564,"cat":"LobbyA","room":"assdw-1782542565774","who":"Q","ev":"preload-ready(occupants)","detail":" [+15824ms]","src":"client"}
{"t":1782542584565,"cat":"LobbyA","room":"assdw-1782542565774","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+15824ms]","src":"client"}
{"t":1782542584565,"cat":"LobbyA","room":"assdw-1782542565774","who":"Q","ev":"preload-occupants-done","detail":" [+15824ms]","src":"client"}
{"t":1782542594546,"cat":"LobbyA","room":"aaa-1782542591594","who":"Q","ev":"lobby-open","detail":"space=aaa-1782542591594 [+0ms]","src":"client"}
{"t":1782542594591,"cat":"LobbyA","room":"aaa-1782542591594","who":"Q","ev":"preload-start","detail":" [+29ms]","src":"client"}
{"t":1782542594641,"cat":"LobbyA","room":"aaa-1782542591594","who":"Q","ev":"manifest-done","detail":" [+122ms]","src":"client"}
{"t":1782542594666,"cat":"LobbyA","room":"aaa-1782542591594","who":"Q","ev":"colors-resolved","detail":" [+122ms]","src":"client"}
{"t":1782542594683,"cat":"LobbyA","room":"aaa-1782542591594","who":"Q","ev":"socket-connect","detail":" [+149ms]","src":"client"}
{"t":1782542594686,"cat":"LobbyA","room":"aaa","who":"Q","ev":"join","detail":"สี#7 · คน 1 + บอท 4","src":"server"}
{"t":1782542595504,"cat":"LobbyA","room":"aaa-1782542591594","who":"Q","ev":"join-ok","detail":"peers=1 host=me map=mlsbbxfe bots=4 [+976ms]","src":"client"}
{"t":1782542599207,"cat":"LobbyA","room":"aaa-1782542591594","who":"MONE","ev":"lobby-open","detail":"space=aaa-1782542591594 [+0ms]","src":"client"}
{"t":1782542599311,"cat":"LobbyA","room":"aaa-1782542591594","who":"MONE","ev":"preload-start","detail":" [+111ms]","src":"client"}
{"t":1782542599323,"cat":"LobbyA","room":"aaa-1782542591594","who":"MONE","ev":"manifest-done","detail":" [+112ms]","src":"client"}
{"t":1782542599330,"cat":"LobbyA","room":"aaa-1782542591594","who":"MONE","ev":"colors-resolved","detail":" [+113ms]","src":"client"}
{"t":1782542599337,"cat":"LobbyA","room":"aaa-1782542591594","who":"MONE","ev":"mychar-tinted","detail":"roomJoinReady=false [+114ms]","src":"client"}
{"t":1782542599339,"cat":"LobbyA","room":"aaa-1782542591594","who":"MONE","ev":"preload-occupants-done","detail":" [+115ms]","src":"client"}
{"t":1782542599341,"cat":"LobbyA","room":"aaa-1782542591594","who":"MONE","ev":"preload-ready(occupants)","detail":" [+116ms]","src":"client"}
{"t":1782542599426,"cat":"LobbyA","room":"aaa-1782542591594","who":"MONE","ev":"socket-connect","detail":" [+209ms]","src":"client"}
{"t":1782542599431,"cat":"LobbyA","room":"aaa","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782542601113,"cat":"LobbyA","room":"aaa-1782542591594","who":"MONE","ev":"join-ok","detail":"peers=2 host=other map=mlsbbxfe bots=4 [+1910ms]","src":"client"}
{"t":1782542601116,"cat":"LobbyA","room":"aaa-1782542591594","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+1911ms]","src":"client"}
{"t":1782542602821,"cat":"LobbyA","room":"aaa-1782542591594","who":"Q","ev":"mychar-tinted","detail":"roomJoinReady=true [+8298ms]","src":"client"}
{"t":1782542607351,"cat":"LobbyA","room":"aaa-1782542591594","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+12800ms]","src":"client"}
{"t":1782542612001,"cat":"LobbyA","room":"aaa-1782542591594","who":"Q","ev":"preload-occupants-done","detail":" [+17476ms]","src":"client"}
{"t":1782542612001,"cat":"LobbyA","room":"aaa-1782542591594","who":"Q","ev":"preload-ready(occupants)","detail":" [+17477ms]","src":"client"}
{"t":1782542625050,"cat":"LobbyA","room":"aaa-1782542591594","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+30528ms]","src":"client"}
{"t":1782542625075,"cat":"LobbyA","room":"aaa-1782542591594","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+25871ms]","src":"client"}
{"t":1782542628742,"cat":"LobbyB","room":"aaa-1782542591594","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+34223ms]","src":"client"}
{"t":1782542629900,"cat":"LobbyB","room":"aaa-1782542591594","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+30697ms]","src":"client"}
{"t":1782542630581,"cat":"MG1","room":"aaa","who":"","ev":"game-start","detail":"เริ่มมินิเกม: Minigame-1 จริงหรือไม่ (การ์ด 1)","src":"server"}
{"t":1782542630684,"cat":"MG1","room":"aaa","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782542630684,"cat":"MG1","room":"aaa","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782542630978,"cat":"MG1","room":"aaa","who":"Q","ev":"join","detail":"สี#7 · คน 1 + บอท 4","src":"server"}
{"t":1782542631081,"cat":"MG1","room":"aaa","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782542637109,"cat":"MG1","room":"aaa","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782542637109,"cat":"MG1","room":"aaa","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782542647111,"cat":"MG1","room":"aaa","who":"Q","ev":"bot-takeover","detail":"หลุดเกิน 10วิ → บอทแทน (สีตามคนออก)","src":"server"}
{"t":1782555311809,"cat":"LobbyA","room":"ฟฟ-1782555308706","who":"ผู้เล่น","ev":"lobby-open","detail":"space=ฟฟ-1782555308706 [+0ms]","src":"client"}
{"t":1782555311869,"cat":"LobbyA","room":"ฟฟ-1782555308706","who":"ผู้เล่น","ev":"preload-start","detail":" [+29ms]","src":"client"}
{"t":1782555312115,"cat":"LobbyA","room":"ฟฟ-1782555308706","who":"ผู้เล่น","ev":"colors-resolved","detail":" [+230ms]","src":"client"}
{"t":1782555312115,"cat":"LobbyA","room":"ฟฟ-1782555308706","who":"ผู้เล่น","ev":"manifest-done","detail":" [+230ms]","src":"client"}
{"t":1782555312164,"cat":"LobbyA","room":"ฟฟ-1782555308706","who":"ผู้เล่น","ev":"socket-connect","detail":" [+293ms]","src":"client"}
{"t":1782555312202,"cat":"LobbyA","room":"ฟฟ","who":"ผู้เล่น","ev":"join","detail":"สี#6 · คน 1 + บอท 4","src":"server"}
{"t":1782555313581,"cat":"LobbyA","room":"ฟฟ-1782555308706","who":"ผู้เล่น","ev":"join-ok","detail":"peers=1 host=me map=mlsbbxfe bots=4 [+1775ms]","src":"client"}
{"t":1782555318596,"cat":"LobbyA","room":"ฟฟ-1782555308706","who":"ผู้เล่น","ev":"mychar-tinted","detail":"roomJoinReady=true [+6789ms]","src":"client"}
{"t":1782555328482,"cat":"LobbyA","room":"ฟฟ-1782555308706","who":"ผู้เล่น","ev":"preload-ready(occupants)","detail":" [+16678ms]","src":"client"}
{"t":1782555328483,"cat":"LobbyA","room":"ฟฟ-1782555308706","who":"ผู้เล่น","ev":"preload-occupants-done","detail":" [+16678ms]","src":"client"}
{"t":1782555328483,"cat":"LobbyA","room":"ฟฟ-1782555308706","who":"ผู้เล่น","ev":"loading-hide","detail":"เริ่มเล่นได้ [+16678ms]","src":"client"}
{"t":1782555332190,"cat":"LobbyA","room":"ฟฟ-1782555308706","who":"ผู้เล่น","ev":"loading-hide","detail":"เริ่มเล่นได้ [+20387ms]","src":"client"}
{"t":1782555334898,"cat":"LobbyB","room":"ฟฟ-1782555308706","who":"ผู้เล่น","ev":"loading-hide","detail":"เริ่มเล่นได้ [+23092ms]","src":"client"}
{"t":1782555338180,"cat":"MG1","room":"ฟฟ","who":"","ev":"game-start","detail":"เริ่มมินิเกม: Minigame-1 จริงหรือไม่ (การ์ด 1)","src":"server"}
{"t":1782555338788,"cat":"MG1","room":"ฟฟ","who":"ผู้เล่น","ev":"join","detail":"สี#6 · คน 1 + บอท 4","src":"server"}
{"t":1782558057769,"cat":"LobbyA","room":"aaa-1782558054668","who":"Q","ev":"lobby-open","detail":"space=aaa-1782558054668 [+0ms]","src":"client"}
{"t":1782558057810,"cat":"LobbyA","room":"aaa-1782558054668","who":"Q","ev":"preload-start","detail":" [+26ms]","src":"client"}
{"t":1782558057872,"cat":"LobbyA","room":"aaa-1782558054668","who":"Q","ev":"manifest-done","detail":" [+105ms]","src":"client"}
{"t":1782558057896,"cat":"LobbyA","room":"aaa-1782558054668","who":"Q","ev":"colors-resolved","detail":" [+105ms]","src":"client"}
{"t":1782558057910,"cat":"LobbyA","room":"aaa-1782558054668","who":"Q","ev":"socket-connect","detail":" [+140ms]","src":"client"}
{"t":1782558057911,"cat":"LobbyA","room":"aaa","who":"Q","ev":"join","detail":"สี#7 · คน 1 + บอท 3","src":"server"}
{"t":1782558058708,"cat":"LobbyA","room":"aaa-1782558054668","who":"Q","ev":"join-ok","detail":"peers=1 host=me map=mlsbbxfe bots=3 [+939ms]","src":"client"}
{"t":1782558062569,"cat":"LobbyA","room":"aaa-1782558054668","who":"Q","ev":"mychar-tinted","detail":"roomJoinReady=true [+4797ms]","src":"client"}
{"t":1782558070813,"cat":"LobbyA","room":"aaa-1782558054668","who":"Q","ev":"preload-occupants-done","detail":" [+13042ms]","src":"client"}
{"t":1782558070815,"cat":"LobbyA","room":"aaa-1782558054668","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+13043ms]","src":"client"}
{"t":1782558070817,"cat":"LobbyA","room":"aaa-1782558054668","who":"Q","ev":"preload-ready(occupants)","detail":" [+13043ms]","src":"client"}
{"t":1782558078004,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"lobby-open","detail":"space=aaa-1782558075072 [+0ms]","src":"client"}
{"t":1782558078050,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"preload-start","detail":" [+26ms]","src":"client"}
{"t":1782558078130,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"manifest-done","detail":" [+102ms]","src":"client"}
{"t":1782558078137,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"colors-resolved","detail":" [+103ms]","src":"client"}
{"t":1782558078182,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"socket-connect","detail":" [+150ms]","src":"client"}
{"t":1782558078183,"cat":"LobbyA","room":"aaa","who":"Q","ev":"join","detail":"สี#7 · คน 1 + บอท 4","src":"server"}
{"t":1782558078933,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"join-ok","detail":"peers=1 host=me map=mlsbbxfe bots=4 [+925ms]","src":"client"}
{"t":1782558083284,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"mychar-tinted","detail":"roomJoinReady=true [+5277ms]","src":"client"}
{"t":1782558085130,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"lobby-open","detail":"space=aaa-1782558075072 [+0ms]","src":"client"}
{"t":1782558085215,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"preload-start","detail":" [+66ms]","src":"client"}
{"t":1782558085218,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"manifest-done","detail":" [+67ms]","src":"client"}
{"t":1782558085222,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"colors-resolved","detail":" [+68ms]","src":"client"}
{"t":1782558085225,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"mychar-tinted","detail":"roomJoinReady=false [+68ms]","src":"client"}
{"t":1782558085233,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"preload-occupants-done","detail":" [+68ms]","src":"client"}
{"t":1782558085252,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"preload-ready(occupants)","detail":" [+69ms]","src":"client"}
{"t":1782558085321,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"socket-connect","detail":" [+191ms]","src":"client"}
{"t":1782558085328,"cat":"LobbyA","room":"aaa","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782558087179,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"join-ok","detail":"peers=2 host=other map=mlsbbxfe bots=4 [+2051ms]","src":"client"}
{"t":1782558087184,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+2052ms]","src":"client"}
{"t":1782558098238,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+20235ms]","src":"client"}
{"t":1782558098238,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"preload-occupants-done","detail":" [+20235ms]","src":"client"}
{"t":1782558098241,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"preload-ready(occupants)","detail":" [+20235ms]","src":"client"}
{"t":1782558108831,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+30820ms]","src":"client"}
{"t":1782558108877,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+23695ms]","src":"client"}
{"t":1782558111596,"cat":"LobbyB","room":"aaa-1782558075072","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+33588ms]","src":"client"}
{"t":1782558113383,"cat":"LobbyB","room":"aaa-1782558075072","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+28254ms]","src":"client"}
{"t":1782558113426,"cat":"MG1","room":"aaa","who":"","ev":"game-start","detail":"เริ่มมินิเกม: Minigame-1 จริงหรือไม่ (การ์ด 1)","src":"server"}
{"t":1782558113546,"cat":"MG1","room":"aaa","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782558113546,"cat":"MG1","room":"aaa","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558113859,"cat":"MG1","room":"aaa","who":"Q","ev":"join","detail":"สี#7 · คน 1 + บอท 4","src":"server"}
{"t":1782558113979,"cat":"MG1","room":"aaa","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782558198785,"cat":"LobbyB","room":"aaa","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782558198785,"cat":"LobbyB","room":"aaa","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558199204,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"lobby-open","detail":"space=aaa-1782558075072 [+0ms]","src":"client"}
{"t":1782558199245,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"preload-start","detail":" [+30ms]","src":"client"}
{"t":1782558199306,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"manifest-done","detail":" [+99ms]","src":"client"}
{"t":1782558199312,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"colors-resolved","detail":" [+100ms]","src":"client"}
{"t":1782558199334,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"socket-connect","detail":" [+129ms]","src":"client"}
{"t":1782558199384,"cat":"LobbyB","room":"aaa","who":"Q","ev":"join","detail":"สี#7 · คน 2 + บอท 4","src":"server"}
{"t":1782558200326,"cat":"LobbyB","room":"aaa-1782558075072","who":"Q","ev":"join-ok","detail":"peers=2 host=me map=mn8nx46h bots=4 [+1099ms]","src":"client"}
{"t":1782558201765,"cat":"LobbyB","room":"aaa","who":"MONE","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558202200,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"lobby-open","detail":"space=aaa-1782558075072 [+1ms]","src":"client"}
{"t":1782558202264,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"preload-start","detail":" [+60ms]","src":"client"}
{"t":1782558202275,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"manifest-done","detail":" [+61ms]","src":"client"}
{"t":1782558202279,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"colors-resolved","detail":" [+62ms]","src":"client"}
{"t":1782558202279,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"mychar-tinted","detail":"roomJoinReady=false [+62ms]","src":"client"}
{"t":1782558202307,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"preload-occupants-done","detail":" [+63ms]","src":"client"}
{"t":1782558202312,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"preload-ready(occupants)","detail":" [+65ms]","src":"client"}
{"t":1782558202371,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"socket-connect","detail":" [+169ms]","src":"client"}
{"t":1782558202411,"cat":"LobbyB","room":"aaa","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782558203151,"cat":"LobbyB","room":"aaa-1782558075072","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+912ms]","src":"client"}
{"t":1782558203152,"cat":"LobbyB","room":"aaa-1782558075072","who":"MONE","ev":"join-ok","detail":"peers=2 host=other map=mn8nx46h bots=4 [+911ms]","src":"client"}
{"t":1782558205003,"cat":"LobbyB","room":"aaa-1782558075072","who":"Q","ev":"mychar-tinted","detail":"roomJoinReady=true [+5799ms]","src":"client"}
{"t":1782558221072,"cat":"LobbyB","room":"aaa-1782558075072","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+21874ms]","src":"client"}
{"t":1782558221074,"cat":"LobbyB","room":"aaa-1782558075072","who":"Q","ev":"preload-ready(occupants)","detail":" [+21874ms]","src":"client"}
{"t":1782558221075,"cat":"LobbyB","room":"aaa-1782558075072","who":"Q","ev":"preload-occupants-done","detail":" [+21874ms]","src":"client"}
{"t":1782558222747,"cat":"MG1","room":"aaa","who":"","ev":"game-start","detail":"เริ่มมินิเกม: Minigame-1 จริงหรือไม่ (การ์ด 1)","src":"server"}
{"t":1782558228202,"cat":"MG1","room":"aaa","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782558228202,"cat":"MG1","room":"aaa","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558228478,"cat":"MG1","room":"aaa","who":"Q","ev":"join","detail":"สี#7 · คน 2 + บอท 4","src":"server"}
{"t":1782558239740,"cat":"MG1","room":"aaa","who":"MONE","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558240317,"cat":"MG1","room":"aaa","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782558303460,"cat":"LobbyB","room":"aaa","who":"MONE","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558303659,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"lobby-open","detail":"space=aaa-1782558075072 [+0ms]","src":"client"}
{"t":1782558303711,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"manifest-done","detail":" [+48ms]","src":"client"}
{"t":1782558303714,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"preload-start","detail":" [+48ms]","src":"client"}
{"t":1782558303714,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"colors-resolved","detail":" [+49ms]","src":"client"}
{"t":1782558303727,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"mychar-tinted","detail":"roomJoinReady=false [+49ms]","src":"client"}
{"t":1782558303743,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"preload-occupants-done","detail":" [+50ms]","src":"client"}
{"t":1782558303748,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"preload-ready(occupants)","detail":" [+50ms]","src":"client"}
{"t":1782558303842,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"socket-connect","detail":" [+158ms]","src":"client"}
{"t":1782558303888,"cat":"LobbyB","room":"aaa","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782558304624,"cat":"LobbyB","room":"aaa","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782558304625,"cat":"LobbyB","room":"aaa","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558304874,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"lobby-open","detail":"space=aaa-1782558075072 [+1ms]","src":"client"}
{"t":1782558304877,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"preload-start","detail":" [+14ms]","src":"client"}
{"t":1782558304967,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"manifest-done","detail":" [+131ms]","src":"client"}
{"t":1782558304967,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"colors-resolved","detail":" [+131ms]","src":"client"}
{"t":1782558305028,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"socket-connect","detail":" [+159ms]","src":"client"}
{"t":1782558305071,"cat":"LobbyB","room":"aaa","who":"Q","ev":"join","detail":"สี#7 · คน 2 + บอท 4","src":"server"}
{"t":1782558306253,"cat":"LobbyB","room":"aaa-1782558075072","who":"Q","ev":"join-ok","detail":"peers=2 host=me map=mn8nx46h bots=4 [+1416ms]","src":"client"}
{"t":1782558306838,"cat":"LobbyB","room":"aaa-1782558075072","who":"MONE","ev":"join-ok","detail":"peers=2 host=other map=mn8nx46h bots=4 [+3190ms]","src":"client"}
{"t":1782558306843,"cat":"LobbyB","room":"aaa-1782558075072","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+3191ms]","src":"client"}
{"t":1782558307890,"cat":"LobbyB","room":"aaa-1782558075072","who":"Q","ev":"mychar-tinted","detail":"roomJoinReady=true [+3059ms]","src":"client"}
{"t":1782558323324,"cat":"LobbyB","room":"aaa-1782558075072","who":"Q","ev":"preload-ready(occupants)","detail":" [+18493ms]","src":"client"}
{"t":1782558323325,"cat":"LobbyB","room":"aaa-1782558075072","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+18493ms]","src":"client"}
{"t":1782558323326,"cat":"LobbyB","room":"aaa-1782558075072","who":"Q","ev":"preload-occupants-done","detail":" [+18492ms]","src":"client"}
{"t":1782558326594,"cat":"MG2","room":"aaa","who":"","ev":"game-start","detail":"เริ่มมินิเกม: Minigame-2 วิ่งหลบสิ่งกีดขวาง (การ์ด 2)","src":"server"}
{"t":1782558329137,"cat":"MG2","room":"aaa","who":"MONE","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558329737,"cat":"MG2","room":"aaa","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782558329845,"cat":"MG2","room":"aaa","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782558329845,"cat":"MG2","room":"aaa","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558330058,"cat":"MG2","room":"aaa","who":"Q","ev":"join","detail":"สี#7 · คน 2 + บอท 4","src":"server"}
{"t":1782558357746,"cat":"LobbyB","room":"aaa","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782558357746,"cat":"LobbyB","room":"aaa","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558357970,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"lobby-open","detail":"space=aaa-1782558075072 [+0ms]","src":"client"}
{"t":1782558358014,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"preload-start","detail":" [+28ms]","src":"client"}
{"t":1782558358071,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"manifest-done","detail":" [+97ms]","src":"client"}
{"t":1782558358073,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"colors-resolved","detail":" [+97ms]","src":"client"}
{"t":1782558358119,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"socket-connect","detail":" [+146ms]","src":"client"}
{"t":1782558358168,"cat":"LobbyB","room":"aaa","who":"Q","ev":"join","detail":"สี#7 · คน 2 + บอท 4","src":"server"}
{"t":1782558358569,"cat":"LobbyB","room":"aaa","who":"MONE","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558358804,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"lobby-open","detail":"space=aaa-1782558075072 [+0ms]","src":"client"}
{"t":1782558358853,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"preload-start","detail":" [+49ms]","src":"client"}
{"t":1782558358858,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"manifest-done","detail":" [+49ms]","src":"client"}
{"t":1782558358866,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"colors-resolved","detail":" [+50ms]","src":"client"}
{"t":1782558358868,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"mychar-tinted","detail":"roomJoinReady=false [+51ms]","src":"client"}
{"t":1782558358891,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"preload-occupants-done","detail":" [+51ms]","src":"client"}
{"t":1782558358894,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"preload-ready(occupants)","detail":" [+52ms]","src":"client"}
{"t":1782558358980,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"socket-connect","detail":" [+171ms]","src":"client"}
{"t":1782558359037,"cat":"LobbyB","room":"aaa","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782558360438,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"mychar-tinted","detail":"roomJoinReady=false [+2487ms]","src":"client"}
{"t":1782558361342,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"preload-occupants-done","detail":" [+3391ms]","src":"client"}
{"t":1782558361343,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"preload-ready(occupants)","detail":" [+3392ms]","src":"client"}
{"t":1782558361991,"cat":"LobbyB","room":"aaa-1782558075072","who":"Q","ev":"join-ok","detail":"peers=2 host=me map=mn8nx46h bots=4 [+4040ms]","src":"client"}
{"t":1782558361996,"cat":"LobbyB","room":"aaa-1782558075072","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+4041ms]","src":"client"}
{"t":1782558361999,"cat":"LobbyB","room":"aaa-1782558075072","who":"MONE","ev":"join-ok","detail":"peers=2 host=other map=mn8nx46h bots=4 [+3218ms]","src":"client"}
{"t":1782558362002,"cat":"LobbyB","room":"aaa-1782558075072","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+3218ms]","src":"client"}
{"t":1782558363679,"cat":"MG2","room":"aaa","who":"","ev":"game-start","detail":"เริ่มมินิเกม: Minigame-2 วิ่งหลบสิ่งกีดขวาง (การ์ด 2)","src":"server"}
{"t":1782558379583,"cat":"MG2","room":"aaa","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782558379584,"cat":"MG2","room":"aaa","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558379856,"cat":"MG2","room":"aaa","who":"Q","ev":"join","detail":"สี#7 · คน 2 + บอท 4","src":"server"}
{"t":1782558382033,"cat":"MG2","room":"aaa","who":"MONE","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558382630,"cat":"MG2","room":"aaa","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782558447649,"cat":"LobbyB","room":"aaa","who":"MONE","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558447800,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"lobby-open","detail":"space=aaa-1782558075072 [+1ms]","src":"client"}
{"t":1782558447882,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"preload-start","detail":" [+69ms]","src":"client"}
{"t":1782558447884,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"manifest-done","detail":" [+69ms]","src":"client"}
{"t":1782558447888,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"colors-resolved","detail":" [+71ms]","src":"client"}
{"t":1782558447888,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"mychar-tinted","detail":"roomJoinReady=false [+71ms]","src":"client"}
{"t":1782558447908,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"preload-occupants-done","detail":" [+72ms]","src":"client"}
{"t":1782558447922,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"preload-ready(occupants)","detail":" [+72ms]","src":"client"}
{"t":1782558447981,"cat":"LobbyA","room":"aaa-1782558075072","who":"MONE","ev":"socket-connect","detail":" [+180ms]","src":"client"}
{"t":1782558448021,"cat":"LobbyB","room":"aaa","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782558448672,"cat":"LobbyB","room":"aaa-1782558075072","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+876ms]","src":"client"}
{"t":1782558448673,"cat":"LobbyB","room":"aaa-1782558075072","who":"MONE","ev":"join-ok","detail":"peers=2 host=other map=mn8nx46h bots=4 [+875ms]","src":"client"}
{"t":1782558492838,"cat":"LobbyB","room":"aaa","who":"MONE","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558502839,"cat":"LobbyB","room":"aaa","who":"MONE","ev":"bot-takeover","detail":"หลุดเกิน 10วิ → บอทแทน (สีตามคนออก)","src":"server"}
{"t":1782558529750,"cat":"LobbyB","room":"aaa-1782558075072","who":"MONE","ev":"socket-connect","detail":" [+81943ms]","src":"client"}
{"t":1782558594332,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"lobby-open","detail":"space=aaa-1782558075072 [+0ms]","src":"client"}
{"t":1782558594373,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"preload-start","detail":" [+16ms]","src":"client"}
{"t":1782558594435,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"manifest-done","detail":" [+108ms]","src":"client"}
{"t":1782558594436,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"colors-resolved","detail":" [+109ms]","src":"client"}
{"t":1782558594465,"cat":"LobbyA","room":"aaa-1782558075072","who":"Q","ev":"socket-connect","detail":" [+136ms]","src":"client"}
{"t":1782558594482,"cat":"LobbyB","room":"aaa","who":"Q","ev":"join","detail":"สี#7 · คน 1 + บอท 5","src":"server"}
{"t":1782558595206,"cat":"LobbyB","room":"aaa-1782558075072","who":"Q","ev":"join-ok","detail":"peers=1 host=me map=mn8nx46h bots=5 [+858ms]","src":"client"}
{"t":1782558602052,"cat":"LobbyB","room":"aaa-1782558075072","who":"Q","ev":"mychar-tinted","detail":"roomJoinReady=true [+7719ms]","src":"client"}
{"t":1782558617899,"cat":"LobbyB","room":"aaa-1782558075072","who":"Q","ev":"preload-ready(occupants)","detail":" [+23571ms]","src":"client"}
{"t":1782558617900,"cat":"LobbyB","room":"aaa-1782558075072","who":"Q","ev":"preload-occupants-done","detail":" [+23571ms]","src":"client"}
{"t":1782558617900,"cat":"LobbyB","room":"aaa-1782558075072","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+23571ms]","src":"client"}
{"t":1782558621690,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"lobby-open","detail":"space=ฟฟฟ-1782558618711 [+0ms]","src":"client"}
{"t":1782558621735,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"preload-start","detail":" [+30ms]","src":"client"}
{"t":1782558621787,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"manifest-done","detail":" [+144ms]","src":"client"}
{"t":1782558621828,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"colors-resolved","detail":" [+145ms]","src":"client"}
{"t":1782558621833,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"socket-connect","detail":" [+188ms]","src":"client"}
{"t":1782558621874,"cat":"LobbyA","room":"ฟฟฟ","who":"Q","ev":"join","detail":"สี#7 · คน 1 + บอท 4","src":"server"}
{"t":1782558623640,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"mychar-tinted","detail":"roomJoinReady=false [+1996ms]","src":"client"}
{"t":1782558624394,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"preload-occupants-done","detail":" [+2749ms]","src":"client"}
{"t":1782558624396,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"preload-ready(occupants)","detail":" [+2750ms]","src":"client"}
{"t":1782558624421,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"join-ok","detail":"peers=1 host=me map=mlsbbxfe bots=4 [+2778ms]","src":"client"}
{"t":1782558624422,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+2778ms]","src":"client"}
{"t":1782558630445,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"lobby-open","detail":"space=ฟฟฟ-1782558618711 [+0ms]","src":"client"}
{"t":1782558630495,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"preload-start","detail":" [+47ms]","src":"client"}
{"t":1782558630497,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"manifest-done","detail":" [+49ms]","src":"client"}
{"t":1782558630505,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"colors-resolved","detail":" [+54ms]","src":"client"}
{"t":1782558630510,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"mychar-tinted","detail":"roomJoinReady=false [+55ms]","src":"client"}
{"t":1782558630525,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"preload-occupants-done","detail":" [+57ms]","src":"client"}
{"t":1782558630531,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"preload-ready(occupants)","detail":" [+59ms]","src":"client"}
{"t":1782558630587,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"socket-connect","detail":" [+146ms]","src":"client"}
{"t":1782558630591,"cat":"LobbyA","room":"ฟฟฟ","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782558631471,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"join-ok","detail":"peers=2 host=other map=mlsbbxfe bots=4 [+1027ms]","src":"client"}
{"t":1782558631472,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+1027ms]","src":"client"}
{"t":1782558656940,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+35294ms]","src":"client"}
{"t":1782558656955,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+26500ms]","src":"client"}
{"t":1782558660640,"cat":"LobbyB","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+30195ms]","src":"client"}
{"t":1782558661879,"cat":"LobbyB","room":"ฟฟฟ-1782558618711","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+40233ms]","src":"client"}
{"t":1782558663516,"cat":"MG1","room":"ฟฟฟ","who":"","ev":"game-start","detail":"เริ่มมินิเกม: Minigame-1 จริงหรือไม่ (การ์ด 1)","src":"server"}
{"t":1782558663630,"cat":"MG1","room":"ฟฟฟ","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782558663630,"cat":"MG1","room":"ฟฟฟ","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558663916,"cat":"MG1","room":"ฟฟฟ","who":"Q","ev":"join","detail":"สี#7 · คน 1 + บอท 4","src":"server"}
{"t":1782558663996,"cat":"MG1","room":"ฟฟฟ","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782558768207,"cat":"LobbyB","room":"ฟฟฟ","who":"MONE","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558768421,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"lobby-open","detail":"space=ฟฟฟ-1782558618711 [+0ms]","src":"client"}
{"t":1782558768455,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"preload-start","detail":" [+35ms]","src":"client"}
{"t":1782558768460,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"manifest-done","detail":" [+35ms]","src":"client"}
{"t":1782558768460,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"colors-resolved","detail":" [+36ms]","src":"client"}
{"t":1782558768473,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"mychar-tinted","detail":"roomJoinReady=false [+36ms]","src":"client"}
{"t":1782558768480,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"preload-occupants-done","detail":" [+37ms]","src":"client"}
{"t":1782558768497,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"preload-ready(occupants)","detail":" [+37ms]","src":"client"}
{"t":1782558768556,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"socket-connect","detail":" [+146ms]","src":"client"}
{"t":1782558768630,"cat":"LobbyB","room":"ฟฟฟ","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782558769019,"cat":"LobbyB","room":"ฟฟฟ","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782558769019,"cat":"LobbyB","room":"ฟฟฟ","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558769244,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"lobby-open","detail":"space=ฟฟฟ-1782558618711 [+0ms]","src":"client"}
{"t":1782558769293,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"preload-start","detail":" [+36ms]","src":"client"}
{"t":1782558769345,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"manifest-done","detail":" [+103ms]","src":"client"}
{"t":1782558769347,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"colors-resolved","detail":" [+103ms]","src":"client"}
{"t":1782558769386,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"socket-connect","detail":" [+145ms]","src":"client"}
{"t":1782558769451,"cat":"LobbyB","room":"ฟฟฟ","who":"Q","ev":"join","detail":"สี#7 · คน 2 + บอท 4","src":"server"}
{"t":1782558770233,"cat":"LobbyB","room":"ฟฟฟ-1782558618711","who":"Q","ev":"join-ok","detail":"peers=2 host=me map=mn8nx46h bots=4 [+990ms]","src":"client"}
{"t":1782558771281,"cat":"LobbyB","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+2868ms]","src":"client"}
{"t":1782558771282,"cat":"LobbyB","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"join-ok","detail":"peers=2 host=other map=mn8nx46h bots=4 [+2867ms]","src":"client"}
{"t":1782558775967,"cat":"LobbyB","room":"ฟฟฟ-1782558618711","who":"Q","ev":"mychar-tinted","detail":"roomJoinReady=true [+6722ms]","src":"client"}
{"t":1782558790234,"cat":"LobbyB","room":"ฟฟฟ-1782558618711","who":"Q","ev":"preload-occupants-done","detail":" [+20994ms]","src":"client"}
{"t":1782558790241,"cat":"LobbyB","room":"ฟฟฟ-1782558618711","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+21000ms]","src":"client"}
{"t":1782558790242,"cat":"LobbyB","room":"ฟฟฟ-1782558618711","who":"Q","ev":"preload-ready(occupants)","detail":" [+21000ms]","src":"client"}
{"t":1782558792256,"cat":"MG2","room":"ฟฟฟ","who":"","ev":"game-start","detail":"เริ่มมินิเกม: Minigame-2 วิ่งหลบสิ่งกีดขวาง (การ์ด 2)","src":"server"}
{"t":1782558792374,"cat":"MG2","room":"ฟฟฟ","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782558792374,"cat":"MG2","room":"ฟฟฟ","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558792691,"cat":"MG2","room":"ฟฟฟ","who":"Q","ev":"join","detail":"สี#7 · คน 2 + บอท 4","src":"server"}
{"t":1782558813441,"cat":"MG2","room":"ฟฟฟ","who":"MONE","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558821371,"cat":"MG2","room":"ฟฟฟ","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782558854198,"cat":"LobbyB","room":"ฟฟฟ","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782558854198,"cat":"LobbyB","room":"ฟฟฟ","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558854386,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"lobby-open","detail":"space=ฟฟฟ-1782558618711 [+0ms]","src":"client"}
{"t":1782558854428,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"preload-start","detail":" [+32ms]","src":"client"}
{"t":1782558854485,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"manifest-done","detail":" [+107ms]","src":"client"}
{"t":1782558854501,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"colors-resolved","detail":" [+107ms]","src":"client"}
{"t":1782558854529,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"Q","ev":"socket-connect","detail":" [+146ms]","src":"client"}
{"t":1782558854576,"cat":"LobbyB","room":"ฟฟฟ","who":"Q","ev":"join","detail":"สี#7 · คน 2 + บอท 4","src":"server"}
{"t":1782558855339,"cat":"LobbyB","room":"ฟฟฟ-1782558618711","who":"Q","ev":"join-ok","detail":"peers=2 host=me map=mn8nx46h bots=4 [+953ms]","src":"client"}
{"t":1782558859888,"cat":"LobbyB","room":"ฟฟฟ-1782558618711","who":"Q","ev":"mychar-tinted","detail":"roomJoinReady=true [+5506ms]","src":"client"}
{"t":1782558868697,"cat":"LobbyB","room":"ฟฟฟ-1782558618711","who":"Q","ev":"preload-occupants-done","detail":" [+14317ms]","src":"client"}
{"t":1782558868699,"cat":"LobbyB","room":"ฟฟฟ-1782558618711","who":"Q","ev":"preload-ready(occupants)","detail":" [+14317ms]","src":"client"}
{"t":1782558868700,"cat":"LobbyB","room":"ฟฟฟ-1782558618711","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+14317ms]","src":"client"}
{"t":1782558932655,"cat":"LobbyB","room":"ฟฟฟ","who":"MONE","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782558933072,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"lobby-open","detail":"space=ฟฟฟ-1782558618711 [+0ms]","src":"client"}
{"t":1782558933131,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"preload-start","detail":" [+68ms]","src":"client"}
{"t":1782558933132,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"manifest-done","detail":" [+69ms]","src":"client"}
{"t":1782558933134,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"colors-resolved","detail":" [+71ms]","src":"client"}
{"t":1782558933135,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"mychar-tinted","detail":"roomJoinReady=false [+72ms]","src":"client"}
{"t":1782558933159,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"preload-ready(occupants)","detail":" [+76ms]","src":"client"}
{"t":1782558933159,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"preload-occupants-done","detail":" [+74ms]","src":"client"}
{"t":1782558933235,"cat":"LobbyA","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"socket-connect","detail":" [+170ms]","src":"client"}
{"t":1782558933286,"cat":"LobbyB","room":"ฟฟฟ","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782558933797,"cat":"LobbyB","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"join-ok","detail":"peers=2 host=other map=mn8nx46h bots=4 [+736ms]","src":"client"}
{"t":1782558933799,"cat":"LobbyB","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+737ms]","src":"client"}
{"t":1782559171709,"cat":"LobbyB","room":"ฟฟฟ-1782558618711","who":"MONE","ev":"socket-connect","detail":" [+238646ms]","src":"client"}
{"t":1782559172905,"cat":"LobbyB","room":"ฟฟฟ-1782558618711","who":"Q","ev":"socket-connect","detail":" [+318528ms]","src":"client"}
{"t":1782559184290,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"Q","ev":"lobby-open","detail":"space=ผผผ-1782559181164 [+0ms]","src":"client"}
{"t":1782559184343,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"Q","ev":"preload-start","detail":" [+41ms]","src":"client"}
{"t":1782559184396,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"Q","ev":"manifest-done","detail":" [+108ms]","src":"client"}
{"t":1782559184399,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"Q","ev":"colors-resolved","detail":" [+109ms]","src":"client"}
{"t":1782559184419,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"Q","ev":"socket-connect","detail":" [+134ms]","src":"client"}
{"t":1782559184440,"cat":"LobbyA","room":"ผผผ","who":"Q","ev":"join","detail":"สี#7 · คน 1 + บอท 4","src":"server"}
{"t":1782559185530,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"Q","ev":"join-ok","detail":"peers=1 host=me map=mlsbbxfe bots=4 [+1226ms]","src":"client"}
{"t":1782559188214,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"Q","ev":"mychar-tinted","detail":"roomJoinReady=true [+3925ms]","src":"client"}
{"t":1782559189827,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"MONE","ev":"lobby-open","detail":"space=ผผผ-1782559181164 [+0ms]","src":"client"}
{"t":1782559189870,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"MONE","ev":"preload-start","detail":" [+44ms]","src":"client"}
{"t":1782559189889,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"MONE","ev":"manifest-done","detail":" [+45ms]","src":"client"}
{"t":1782559189890,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"MONE","ev":"colors-resolved","detail":" [+47ms]","src":"client"}
{"t":1782559189890,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"MONE","ev":"mychar-tinted","detail":"roomJoinReady=false [+48ms]","src":"client"}
{"t":1782559189903,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"MONE","ev":"preload-occupants-done","detail":" [+49ms]","src":"client"}
{"t":1782559189906,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"MONE","ev":"preload-ready(occupants)","detail":" [+50ms]","src":"client"}
{"t":1782559189977,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"MONE","ev":"socket-connect","detail":" [+153ms]","src":"client"}
{"t":1782559189992,"cat":"LobbyA","room":"ผผผ","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782559190750,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"MONE","ev":"join-ok","detail":"peers=2 host=other map=mlsbbxfe bots=4 [+906ms]","src":"client"}
{"t":1782559190753,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+907ms]","src":"client"}
{"t":1782559194261,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+9974ms]","src":"client"}
{"t":1782559197368,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"Q","ev":"preload-ready(occupants)","detail":" [+13084ms]","src":"client"}
{"t":1782559197369,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"Q","ev":"preload-occupants-done","detail":" [+13084ms]","src":"client"}
{"t":1782559213667,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+29380ms]","src":"client"}
{"t":1782559213704,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+23846ms]","src":"client"}
{"t":1782559218095,"cat":"LobbyB","room":"ผผผ-1782559181164","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+28272ms]","src":"client"}
{"t":1782559219474,"cat":"LobbyB","room":"ผผผ-1782559181164","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+35181ms]","src":"client"}
{"t":1782559222663,"cat":"MG2","room":"ผผผ","who":"","ev":"game-start","detail":"เริ่มมินิเกม: Minigame-2 วิ่งหลบสิ่งกีดขวาง (การ์ด 2)","src":"server"}
{"t":1782559222777,"cat":"MG2","room":"ผผผ","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782559222777,"cat":"MG2","room":"ผผผ","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782559223081,"cat":"MG2","room":"ผผผ","who":"MONE","ev":"join","detail":"สี#5 · คน 1 + บอท 4","src":"server"}
{"t":1782559223143,"cat":"MG2","room":"ผผผ","who":"Q","ev":"join","detail":"สี#7 · คน 2 + บอท 4","src":"server"}
{"t":1782559280452,"cat":"LobbyB","room":"ผผผ","who":"Q","ev":"host-change","detail":"host ใหม่ → MONE","src":"server"}
{"t":1782559280452,"cat":"LobbyB","room":"ผผผ","who":"Q","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782559280667,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"Q","ev":"lobby-open","detail":"space=ผผผ-1782559181164 [+0ms]","src":"client"}
{"t":1782559280726,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"Q","ev":"preload-start","detail":" [+58ms]","src":"client"}
{"t":1782559280776,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"Q","ev":"manifest-done","detail":" [+125ms]","src":"client"}
{"t":1782559280776,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"Q","ev":"colors-resolved","detail":" [+126ms]","src":"client"}
{"t":1782559280814,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"Q","ev":"socket-connect","detail":" [+151ms]","src":"client"}
{"t":1782559280860,"cat":"LobbyB","room":"ผผผ","who":"Q","ev":"join","detail":"สี#7 · คน 2 + บอท 4","src":"server"}
{"t":1782559281270,"cat":"LobbyB","room":"ผผผ","who":"MONE","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782559281415,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"MONE","ev":"lobby-open","detail":"space=ผผผ-1782559181164 [+0ms]","src":"client"}
{"t":1782559281490,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"MONE","ev":"preload-start","detail":" [+66ms]","src":"client"}
{"t":1782559281490,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"MONE","ev":"manifest-done","detail":" [+66ms]","src":"client"}
{"t":1782559281491,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"MONE","ev":"colors-resolved","detail":" [+67ms]","src":"client"}
{"t":1782559281495,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"MONE","ev":"mychar-tinted","detail":"roomJoinReady=false [+67ms]","src":"client"}
{"t":1782559281498,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"MONE","ev":"preload-occupants-done","detail":" [+68ms]","src":"client"}
{"t":1782559281527,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"MONE","ev":"preload-ready(occupants)","detail":" [+68ms]","src":"client"}
{"t":1782559281585,"cat":"LobbyB","room":"ผผผ-1782559181164","who":"Q","ev":"join-ok","detail":"peers=2 host=me map=mn8nx46h bots=4 [+913ms]","src":"client"}
{"t":1782559281607,"cat":"LobbyA","room":"ผผผ-1782559181164","who":"MONE","ev":"socket-connect","detail":" [+166ms]","src":"client"}
{"t":1782559281628,"cat":"LobbyB","room":"ผผผ","who":"MONE","ev":"join","detail":"สี#5 · คน 2 + บอท 4","src":"server"}
{"t":1782559282455,"cat":"LobbyB","room":"ผผผ-1782559181164","who":"MONE","ev":"join-ok","detail":"peers=2 host=other map=mn8nx46h bots=4 [+999ms]","src":"client"}
{"t":1782559282456,"cat":"LobbyB","room":"ผผผ-1782559181164","who":"MONE","ev":"loading-hide","detail":"เริ่มเล่นได้ [+1000ms]","src":"client"}
{"t":1782559286534,"cat":"LobbyB","room":"ผผผ-1782559181164","who":"Q","ev":"mychar-tinted","detail":"roomJoinReady=true [+5873ms]","src":"client"}
{"t":1782559302193,"cat":"LobbyB","room":"ผผผ-1782559181164","who":"Q","ev":"loading-hide","detail":"เริ่มเล่นได้ [+21536ms]","src":"client"}
{"t":1782559302195,"cat":"LobbyB","room":"ผผผ-1782559181164","who":"Q","ev":"preload-occupants-done","detail":" [+21536ms]","src":"client"}
{"t":1782559302197,"cat":"LobbyB","room":"ผผผ-1782559181164","who":"Q","ev":"preload-ready(occupants)","detail":" [+21536ms]","src":"client"}
{"t":1782559326448,"cat":"LobbyB","room":"ผผผ","who":"MONE","ev":"leave","detail":"ออกจากห้อง · เหลือคน 1","src":"server"}
{"t":1782559336449,"cat":"LobbyB","room":"ผผผ","who":"MONE","ev":"bot-takeover","detail":"หลุดเกิน 10วิ → บอทแทน (สีตามคนออก)","src":"server"}
{"t":1782559365612,"cat":"LobbyB","room":"ผผผ-1782559181164","who":"MONE","ev":"socket-connect","detail":" [+84199ms]","src":"client"}
+60
View File
@@ -868,5 +868,65 @@
"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": 96,
"name": "เปลี่ยนหน้า lobbyB↔play ไม่ถูกถอดจาก roster",
"detail": "grace 10วิ ครอบ socket หลุดชั่วคราวตอนเปลี่ยนหน้า (เคยพังตอนตั้ง grace=0)",
"prio": "วิกฤต",
"status": "แก้ไขแล้ว",
"updated": "2026-06-27",
"note": "วิธีเทส: เข้าเกม-ออกจากเกม (LobbyB→play→LobbyB) ปกติ → ต้องไม่เจอ \"ห้องนี้เริ่มคดีแล้ว\" / ไม่กลายเป็นบอท",
"cat": "LobbyB"
},
{
"n": 97,
"name": "Lobby A/B: กดปุ่มได้ตลอด (ไม่ค้างตอนโหลดสี)",
"detail": "overlay สีตัวละคร pointer-events:none → ไม่บังคลิก",
"prio": "สูง",
"status": "แก้ไขแล้ว",
"updated": "2026-06-27",
"note": "วิธีเทส: อยู่ LobbyA/B แล้วมีคนเข้า/เปลี่ยนสี (overlay สีแวบ) → ต้องกดปุ่มต่างๆ ได้ตลอด ไม่ค้าง",
"cat": "LobbyA"
},
{
"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"
}
]
@@ -0,0 +1,872 @@
[
{
"n": 1,
"name": "แต่งตัวไม่ได้",
"detail": "แต่งตัวยังไม่ได้ มีพี่คิวทำได้คนเดียว",
"prio": "วิกฤต",
"status": "แก้ไขแล้ว",
"updated": "",
"note": "",
"cat": "LobbyA"
},
{
"n": 2,
"name": "ตัวละครไม่แสดง",
"detail": "หน้าเลือกเกม Quiz battle ภาพตัวละครไม่แสดง",
"prio": "กลาง",
"status": "แก้ไขแล้ว",
"updated": "",
"note": "",
"cat": "Minigame 1"
},
{
"n": 3,
"name": "ระบบ join เกมมีปัญหา",
"detail": "เมื่อเข้ามินิเกม : บางคนเล่นเกมกะบอท บางคนเล่นกะเพื่อน แต่ละคนเข้ามินิเกมแล้วเจอกันบ้าง ไม่เจอกันบ้าง",
"prio": "วิกฤต",
"status": "แก้ไขแล้ว",
"updated": "",
"note": "",
"cat": "อื่นๆ"
},
{
"n": 4,
"name": "ระบบ Host มีปัญหา - 1",
"detail": "เป็น host ในเกม ตอนที่เลือกผู้ต้องสงสัย รอบที่ 2 ระบบบอกว่าให้รอ host ไม่สามารถเลือกการ์ดและกดเริ่มสืบสวนได้",
"prio": "วิกฤต",
"status": "แก้ไขแล้ว",
"updated": "",
"note": "",
"cat": "LobbyB"
},
{
"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": 13,
"name": "เข้าร่วมห้องไม่ได้",
"detail": "สร้างห้องส่วนตัวเเล้ว เเต่เพื่อนจอยเข้าไปไม่ได้ ทั้งที่กรอกข้อมูลครบ",
"prio": "วิกฤต",
"status": "แก้ไขแล้ว",
"updated": "",
"note": "",
"cat": "LobbyA"
},
{
"n": 14,
"name": "Room ID",
"detail": "เวลาจอยห้องให้กรอกเเค่ ID กับรหัสที่สร้าง",
"prio": "ต่ำ",
"status": "แก้ไขแล้ว",
"updated": "",
"note": "",
"cat": "อื่นๆ"
},
{
"n": 15,
"name": "จอยห้องคนอื่น",
"detail": "ในกรณีที่จอยห้องคนอื่น ไปหน้าเข้าร่วม เเละกดปุ่มเข้าร่วมไปเเล้ว จากนั้นกดปุ่ม exit จะพาไปหน้าสร้างห้อง สิ่งที่ถูกต้อง มันควรมาหน้า ห้องเข้าร่วมเกม",
"prio": "กลาง",
"status": "แก้ไขแล้ว",
"updated": "",
"note": "",
"cat": "LobbyA"
},
{
"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": 24,
"name": "UI แต่งตัว : การแจ้งเตือนสีตัวละครถูกใช้แล้ว",
"detail": "ตอนเลือกสีให้มีคำแจ้งเตือน used",
"prio": "กลาง",
"status": "เปิด",
"updated": "",
"note": "",
"cat": "LobbyA"
},
{
"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": 31,
"name": "เอา mock การ์ดผู้ต้องหาเก่าออกไป",
"detail": "มันแว่บๆมา",
"prio": "กลาง",
"status": "แก้ไขแล้ว",
"updated": "2026-06-25",
"note": "✅ แก้แล้ว 2026-06-25 v0.006242530 (รอเทส) — ซ่อนรูปจนรูปคดีจริงโหลด + spinner",
"cat": "LobbyB"
},
{
"n": 32,
"name": "เอา popup ขออนุญาตใช้ไมค์ออกไปเลย น่ารำคาญ",
"detail": "",
"prio": "สูง",
"status": "เปิด",
"updated": "",
"note": "",
"cat": "อื่นๆ"
},
{
"n": 33,
"name": "หน้า howto เปลี่ยนสีปุ่ม ready ด้วยตอน กดready แล้ว",
"detail": "เปลี่ยนเป้นสีเขียวพร้อมเครื่องหมายถูกตามดีไซน์",
"prio": "สูง",
"status": "เปิด",
"updated": "",
"note": "",
"cat": "LobbyA"
},
{
"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": 37,
"name": "popup รับหลักฐาน ทับไมค์",
"detail": "กดไมค์ไม่ได้ ตอนรับหลักฐาน ไปดูเรื่องเลเยอร์อีกที",
"prio": "กลาง",
"status": "เปิด",
"updated": "",
"note": "",
"cat": "LobbyB"
},
{
"n": 38,
"name": "หน้าส่งหลักฐาน ปุ่มส่งหลักฐานหลุดจอ (เครื่องของเนส)",
"detail": "เป้นเครื่องเนสคนเดียว",
"prio": "วิกฤต",
"status": "เปิด",
"updated": "",
"note": "",
"cat": "ระบบ disconnect"
},
{
"n": 39,
"name": "ห้องส่งหลักฐาน : เมื่อมีคนหลุด 1 คน จะไปต่อไม่ได้เลย",
"detail": "",
"prio": "วิกฤต",
"status": "แก้ไขแล้ว",
"updated": "2026-06-24",
"note": "✅ แก้แล้ว 2026-06-24 v0.006242500 (รอเทส) — testimony: disconnect ลบ submit/ready + client ใช้ totalPlayers authoritative",
"cat": "ระบบ disconnect"
},
{
"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": 45,
"name": "เกมไม่รองรับ 4K",
"detail": "หน้ารับหลักฐาน (หลังจากเล่นเกมจบ)",
"prio": "วิกฤต",
"status": "เปิด",
"updated": "",
"note": "",
"cat": "LobbyB"
},
{
"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": 48,
"name": "เพิ่ม popup เมื่อเกมค้าง เล่นต้่อไม่ได้ ให้มีปุ่มกดออกไปหน้าแรกสุด",
"detail": "สาเหตุเกิดจากมีคนหลุดระหว่างรอ host กด",
"prio": "วิกฤต",
"status": "เปิด",
"updated": "",
"note": "",
"cat": "ระบบ disconnect"
},
{
"n": 49,
"name": "กรณีผู้เล่นหลุดออกจากเกม",
"detail": "ถ้ามีคนหลุด ให้กลายเป้นบอทแทน",
"prio": "วิกฤต",
"status": "แก้ไขแล้ว",
"updated": "2026-06-25",
"note": "แก้แล้ว 2026-06-25: คนออกระหว่าง LobbyB/เปลี่ยนหน้า กลายเป็นบอทสีตามคนออก (ดูบั๊ก #73)",
"cat": "ระบบ disconnect"
},
{
"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": 52,
"name": "หน้าไต่สวน/สรุปหลักฐาน: กรอบปลิ้นตอน 6 คน",
"detail": "member row grid repeat(5)->repeat(6) ใน testimony-overlay.css (คนที่6 ตกแถว2)",
"prio": "สูง",
"status": "แก้ไขแล้ว",
"updated": "2026-06-25",
"note": "✅ แก้แล้ว 2026-06-25 v0.006242530 (รอเทส)",
"cat": "LobbyB"
},
{
"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": 55,
"name": "หลังออกจาก LobbyA ไม่ให้ใครเข้า join",
"detail": "server มี joinLocked (set ตอน LobbyA->case ~8656, check ~7585 whitelist nickname) — ต้อง repro ว่าใครเข้าได้ยังไง (room list ยังโชว์? ชื่อซ้ำ whitelist?)",
"prio": "สูง",
"status": "แก้ไขแล้ว",
"updated": "2026-06-25",
"note": "✅ แก้แล้ว 2026-06-25 — กรองห้อง joinLocked ออกจาก /api/spaces list (ห้องเริ่มคดีแล้วหาย) + server reject อยู่แล้ว",
"cat": "LobbyB"
},
{
"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": 57,
"name": "เล่นมินิเกมเกิน 3 ครั้งต่อผู้ต้องสงสัย (+การ์ดพิเศษโผล่รอบที่4)",
"detail": "server cap suspect-pick-start (max หลักฐาน>=3 reject) + award cap 3 + client canInvestigateSuspect<3 (เดิม stub return true). UI messaging มีอยู่แล้ว",
"prio": "วิกฤต",
"status": "แก้ไขแล้ว",
"updated": "2026-06-25",
"note": "✅ แก้แล้ว 2026-06-25 v0.0309/server (รอเทส)",
"cat": "LobbyB"
},
{
"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": 59,
"name": "loading ไม่คลุม scene transition (เห็นฉากเก่าก่อนเปลี่ยน)",
"detail": "LobbyA->B (in-page swap) โชว์ room-loading ระหว่าง fetch+swap · LobbyB->เกม โชว์ overlay ก่อน location.href · play.html มี overlay รับช่วง",
"prio": "สูง",
"status": "แก้ไขแล้ว",
"updated": "2026-06-25",
"note": "✅ แก้แล้ว 2026-06-25 v0.0309/server (รอเทส)",
"cat": "LobbyA"
},
{
"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": 63,
"name": "LobbyA มือถือ กดเดินไม่ได้",
"detail": "lobby canvas มีแค่ dblclick (ไม่มี touch) → มือถือแตะเดินไม่ได้. แก้: เพิ่ม tap-to-walk (เฉพาะ touch, PC ยัง dblclick) + DPI-safe coord + touch-action:none + zoom-out default บนจอ<600px (PC ย่อส่วน)",
"prio": "วิกฤต",
"status": "แก้ไขแล้ว",
"updated": "2026-06-25",
"note": "✅ แก้แล้ว 2026-06-25 room-lobby.js?v=0.0310 (รอเทสมือถือ) · PC ไม่กระทบ",
"cat": "LobbyA"
},
{
"n": 64,
"name": "มือถือ: ปุ่มแชท AI ใหญ่ไป + ปุ่ม F (host) ไม่มี",
"detail": "AI chat collapsed btn 213x201px → ใหญ่บนมือถือ. + การกด F (interact: host เลือกระดับ/คดี, ห้องแต่งตัว) ไม่มีบนมือถือ",
"prio": "สูง",
"status": "แก้ไขแล้ว",
"updated": "2026-06-25",
"note": "✅ แก้แล้ว 2026-06-25 (css 0.0176/js 0.0311): media<600px ย่อปุ่ม AI (92px) + ปุ่มลอย \"โต้ตอบ(F)\" บน touch-primary device (dispatch synthetic KeyF). PC ไม่เห็น",
"cat": "LobbyB"
},
{
"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": 66,
"name": "host หลุด → ย้าย host ให้คนอยู่นานสุด",
"detail": "pickNextHostPeer เลือก spawnJoinOrder ต่ำสุด (เสถียรข้าม reconnect) แทน Map-first + host จริง reclaim ได้",
"prio": "สูง",
"status": "แก้ไขแล้ว",
"updated": "2026-06-25",
"note": "✅ แก้แล้ว 2026-06-25 (server) — Part 1 host migration",
"cat": "ระบบ disconnect"
},
{
"n": 67,
"name": "คนหลุดกลางเกม → 10 วิ reconnect + บอทเล่นแทน",
"detail": "peer-disconnect-grace แบนเนอร์นับ 10 วิ · กลับทัน=cancel เล่นต่อ · ครบเวลา=peer-bot-takeover host เติมบอท 1 ตัว (rebalance, cap≤6). บอทไม่สืบทอดตำแหน่ง/คะแนน",
"prio": "สูง",
"status": "แก้ไขแล้ว",
"updated": "2026-06-25",
"note": "✅ แก้แล้ว 2026-06-25 (server+play.js v0.006250400) — Part 2 แบบ A · seamless(host คุม entity เดิม)=ค้าง(เสี่ยง)",
"cat": "ระบบ disconnect"
},
{
"n": 69,
"name": "UI ห้องเกม (LobbyA) มือถือแนวนอน — ย่อให้พอดี",
"detail": "room-lobby ไม่มี landscape media query → chat panel(576x525), ปุ่ม voice/แว่น/ถ้วย(80px), AI chat ล้น/ใหญ่บนแนวนอน. เพิ่ม @media(landscape+max-height:540px) ย่อตามความสูงจอ (อิง Main-Lobby pattern)",
"prio": "สูง",
"status": "แก้ไขแล้ว",
"updated": "2026-06-25",
"note": "✅ แก้แล้ว 2026-06-25 room-lobby.css?v=0.0177 — chat/BR buttons/AI/ready/exit · overlay หลักฐาน-อันดับ (inline/JS) ยังต้องทำแยก",
"cat": "LobbyB"
},
{
"n": 70,
"name": "การ์ดรางวัลหลักฐาน มือถือใหญ่เกิน กดปุ่มไม่ได้",
"detail": "หน้าโชว์การ์ดรางวัล \"คุณได้รับหลักฐาน!\" (หลังจบมินิเกมสืบสวน) บนมือถือการ์ดใหญ่มากจนเนื้อหา+ปุ่ม \"เก็บเข้าแฟ้ม\" หลุดล่างจอ กดปิดไม่ได้",
"prio": "สูง",
"status": "แก้ไขแล้ว",
"updated": "2026-06-25",
"note": "แก้แล้ว (deploy prod play.js?v=0.006250402): ทำ overlay เป็น scroll container + inner margin:auto (กัน flexbox clip ด้านบนเวลาเนื้อหาสูงเกินจอ) + คุมขนาดการ์ด/หัวข้อ/ปุ่มด้วย clamp ตาม viewport (การ์ด max-width min(72vw,360px) + max-height 52vh, ปุ่ม font/padding clamp). มือถือแนวตั้งเลื่อนถึงปุ่มได้เสมอ. ไฟล์: Game/public/js/play.js (showInSceneEvidenceReveal).",
"cat": "ระบบ disconnect"
},
{
"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": 72,
"name": "ป๊อปอัปขอสิทธิ์ไมค์ เด้งทุกครั้งที่เข้า Lobby",
"detail": "หน้าขอสิทธิ์ไมโครโฟน (mic-permission-overlay) เด้งขึ้นทุกครั้งที่เข้า LobbyA/LobbyB น่ารำคาญ ทั้งที่เบราว์เซอร์จำสิทธิ์ให้แล้ว",
"prio": "กลาง",
"status": "แก้ไขแล้ว",
"updated": "2026-06-25",
"note": "แก้แล้ว (deploy prod room-lobby.js?v=0.0313): เดิม overlay เป็น display:flex default จึงเด้งทุกครั้งที่โหลดหน้า. เพิ่มตรวจสิทธิ์ผ่าน navigator.permissions.query(microphone) + จำสถานะใน localStorage (justiceMicPromptHandled). แสดงเฉพาะครั้งแรกที่ยังไม่เคยตัดสินใจ (permission=prompt และยังไม่เคยกดอนุญาต/ปิด); ถ้า granted แล้ว/เคยจัดการแล้ว → ซ่อนทันที (มี inline script กันแฟลชก่อน paint). ปุ่ม 🎤 ขอสิทธิ์ไมค์ ในห้องยังใช้ขอใหม่ได้. ไฟล์: room-lobby.html (inline gate) + room-lobby.js (gateMicPermissionOverlay, hideMicPermissionOverlay).",
"cat": "LobbyA"
},
{
"n": 73,
"name": "คนออก LobbyB / ช่วงเปลี่ยนหน้า → ไม่เติมบอท + ค้างรอผู้เล่น เริ่มเกมต่อไม่ได้",
"detail": "คนหลุดระหว่างนั่งอยู่ LobbyB หรือช่วงเปลี่ยนหน้า minigame→LobbyB เดิมไม่ถูกเติมบอทแทน + ยังถูกนับใน roster คดี → host กดเริ่มสืบสวนรอบต่อไปไม่ได้ ค้าง รอผู้เล่น (x/y) ตลอดไป",
"prio": "วิกฤต",
"status": "แก้ไขแล้ว",
"updated": "2026-06-25",
"note": "ขยาย grace+bot-takeover gate ให้ครอบ LobbyB/คดีล็อก ไม่ใช่แค่ minigame active (server.js ~8921: inCaseFlowForBot = detectiveMinigameActive || serverMapIsPostCaseLobbyB || (joinLocked && caseParticipantNicknames.size>0)). คนออก→หลัง grace 10วิ ลบจาก roster + เติมบอทสีตามคนออก + presence ใหม่ → allHere=true เล่นต่อได้. + ส่ง botSlotCount ใน lobby-tint-sync (server.js ~121) + client อัปเดต lobbyBotSlotCount ก่อน render (room-lobby.js ~768) ให้บอทโผล่ทันทีไม่ต้อง re-join. v0.0323",
"cat": "ระบบ disconnect"
},
{
"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
},
{
"name": "เปลี่ยนปุมลำโพง",
"detail": "",
"prio": "กลาง",
"status": "เปิด",
"note": "",
"cat": "LobbyA",
"updated": "2026-06-26",
"n": 77
},
{
"n": 78,
"name": "Lobby: คน/บอท วิ่งเร็วเท่ากันทุกเครื่อง",
"detail": "เดิมจอ FPS สูงเดินเร็วกว่า — แก้เป็น time-based ความเร็วเท่ากันทุกเครื่อง",
"prio": "สูง",
"status": "แก้ไขแล้ว",
"updated": "2026-06-26",
"note": "วิธีเทส: เปิด 2 เครื่อง/2 แท็บ เข้า LobbyA ห้องเดียวกัน เดินพร้อมกัน → ความเร็วต้องเท่ากัน และดูบอทเดินสม่ำเสมอ",
"cat": "LobbyA"
},
{
"n": 79,
"name": "Lobby: บอทเดินเองโดย server (host หลุดไม่หยุด)",
"detail": "ย้ายการเดินบอท lobby จาก host → server",
"prio": "สูง",
"status": "แก้ไขแล้ว",
"updated": "2026-06-26",
"note": "วิธีเทส: LobbyA มีบอท → ให้ host (คนสร้างห้อง) รีเฟรช/ออก → บอทต้องเดินต่อ ไม่หยุดนิ่ง",
"cat": "LobbyA"
},
{
"n": 80,
"name": "Lobby: ผีหาย (avatar ไม่ซ้ำ)",
"detail": "server ส่ง roster ทุก 1.5s → client ตัดตัวซ้ำ",
"prio": "วิกฤต",
"status": "แก้ไขแล้ว",
"updated": "2026-06-26",
"note": "วิธีเทส: เข้า LobbyA/B แล้วรีเฟรช/เข้า-ออกซ้ำ 2-3 รอบ → ต้องไม่มีตัวละครซ้ำค้าง (รอ ~2วิ ผีหายเอง)",
"cat": "LobbyA"
},
{
"n": 81,
"name": "Lobby: บอทเกิดในห้อง ตำแหน่งเดียวกับคน",
"detail": "เดิมบอทเกิดนอกพื้นที่/ซ้อนกัน — แก้ให้เกิดที่ช่อง spawn ผู้เล่น",
"prio": "กลาง",
"status": "แก้ไขแล้ว",
"updated": "2026-06-26",
"note": "วิธีเทส: เข้า LobbyA ที่มีบอท → บอทต้องเกิดในห้อง (ไม่หลุดออกนอก area) แต่ละตัวคนละช่อง",
"cat": "LobbyA"
},
{
"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": 91,
"name": "Lobby A/B: Loading คลุม occupants + %",
"detail": "overlay ดำ 0.9 เต็มจอ ค้างจนย้อมสีตัวละครทุกคนเสร็จ + โชว์ %",
"prio": "กลาง",
"status": "แก้ไขแล้ว",
"updated": "2026-06-27",
"note": "วิธีเทส: เข้า LobbyA/B (Ctrl+Shift+R) → ต้องเห็นจอดำ + spinner + \"กำลังโหลดตัวละคร… N%\" ไต่จนครบแล้วค่อยหาย (ไม่เห็นตัวละครโผล่สีทีหลัง)",
"cat": "LobbyA"
},
{
"n": 92,
"name": "Admin: ตัวเลขผู้ใช้ออนไลน์ + ความจุ",
"detail": "widget 👥 N/500 สบาย/เริ่มหนัก/หนัก (เขียว/เหลือง/แดง) บนแถบ Admin",
"prio": "ต่ำ",
"status": "แก้ไขแล้ว",
"updated": "2026-06-27",
"note": "วิธีเทส: เปิดหน้า Admin → มุมขวาบนมี 👥 ตัวเลขผู้เล่นออนไลน์ · hover เห็น CPU/RAM/ห้อง/socket · อัปเดตทุก 10 วิ",
"cat": "อื่นๆ"
}
]