after change GM1

This commit is contained in:
2026-07-05 15:52:03 +00:00
parent 2ea383aee1
commit 9b4ff9ed51
10 changed files with 59641 additions and 14 deletions
+4 -2
View File
@@ -53,7 +53,7 @@
"blocked": false,
"coins": 3156,
"createdAt": "2026-04-02T05:52:21+00:00",
"updatedAt": "2026-07-04T13:18:23+00:00",
"updatedAt": "2026-07-05T15:34:25+00:00",
"daily": {
"anchorMs": 1781197200000,
"claimedDays": [
@@ -93,7 +93,9 @@
"e2_the_impostor": 1,
"e4_agent_of_chaos": 2,
"e3_master_of_doubt": 1,
"e5_slippery_eel": 1
"e5_slippery_eel": 1,
"b4_data_miner": 1,
"b1_evidence_collector": 1
},
"lobbyColorThemeIndex": 7,
"lobbySkinToneIndex": 1
+1 -1
View File
@@ -97,7 +97,7 @@
"balloonBossPlayerBalloonFallbackUrl": "/Game/img/MegaVirus/Artboard%209.png",
"balloonBossBalloonsPerPlayer": 3,
"forcedMinigameKeys": [
"stack",
"quiz",
"gauntlet",
"space_shooter"
],
+11 -4
View File
@@ -6210,12 +6210,19 @@
}
function quizResolveChoiceFromStanding(ox, oy, correctTrue) {
const tx = Math.floor(ox);
const ty = Math.floor(oy);
const qt = mapData.quizTrueArea;
const qf = mapData.quizFalseArea;
const inT = quizCellOnPlay(qt, tx, ty);
const inF = quizCellOnPlay(qf, tx, ty);
/* "" (bottom row footprint) server resolveQuizRound
(/วโผลเขาโซนแตเทายงไม = ไม) */
const { cw, ch } = getCharacterFootprintWH(mapData);
const baseTx = Math.floor(ox);
const feetTy = Math.floor(oy) + ch - 1;
let inT = false, inF = false;
for (let dx = 0; dx < cw; dx++) {
const ftx = baseTx + dx;
if (!inT && quizCellOnPlay(qt, ftx, feetTy)) inT = true;
if (!inF && quizCellOnPlay(qf, ftx, feetTy)) inF = true;
}
let choice = null;
if (inT && !inF) choice = true;
else if (inF && !inT) choice = false;
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -5458,7 +5458,7 @@
<script src="/Game/socket.io/socket.io.js"></script>
<script src="js/version.js?v=0.0306"></script>
<script src="js/sound.js?v=1"></script>
<script src="js/play.js?v=0.006301081"></script>
<script src="js/play.js?v=0.006301082"></script>
<div class="version-tag">v —</div>
<style id="qc-howto-mg2-fix">
/* HOW TO PLAY ของ quiz_carry (Minigame-4) -> ให้เหมือน Minigame-2 (gch-mg2-mock)
File diff suppressed because it is too large Load Diff
+64 -6
View File
@@ -3826,6 +3826,21 @@ function awardRandomEvidenceCardToPlayer(space, playerId, suspectIndex, grade) {
return card;
}
/* [achv Phase A 2026-07-05] achievements
b4_data_miner(รวมทกใบ ×100) · b1_evidence_collector(common ×20) · a2_sharp_eye(rare/Silver ×10) · b3_hidden_fragment(legendary ครงแรก)
เฉพาะผเลนจร ( playerKey) ามบอท + เรยกจาก "จุดแจกจริง" 2 เทาน (ไมรวม debug hotkey) */
function trackEvidenceCollectAchv(space, playerId, card) {
if (!card || !card.rarity) return;
const p = space.peers && space.peers.get ? space.peers.get(playerId) : null;
const pkey = p && typeof p.playerKey === 'string' ? p.playerKey : null;
if (!pkey) return;
const achv = [{ playerKey: pkey, id: 'b4_data_miner', inc: 1 }];
if (card.rarity === 'common') achv.push({ playerKey: pkey, id: 'b1_evidence_collector', inc: 1 });
else if (card.rarity === 'rare') achv.push({ playerKey: pkey, id: 'a2_sharp_eye', inc: 1 });
else if (card.rarity === 'legendary') achv.push({ playerKey: pkey, id: 'b3_hidden_fragment', inc: 1 });
submitAchievementProgress(achv);
}
function awardDetectiveEvidenceForMinigameEnd(space, suspectIndex, playerIds, grade) {
const out = {};
const grantedKeys = new Set(); /* แจก 1 การ์ด/playerKey ต่อเกม — กัน "หลายแท็บ/ชื่อซ้ำ" key เดียวได้เกิน */
@@ -3834,7 +3849,7 @@ function awardDetectiveEvidenceForMinigameEnd(space, suspectIndex, playerIds, gr
const k = peerNickKey(space, pid);
if (k && grantedKeys.has(k)) return; /* key นี้ได้การ์ดรอบนี้แล้ว (evidence เก็บก้อนเดียวกันตาม key) */
const card = awardRandomEvidenceCardToPlayer(space, pid, suspectIndex, grade);
if (card != null) { out[pid] = card; if (k) grantedKeys.add(k); }
if (card != null) { out[pid] = card; if (k) grantedKeys.add(k); trackEvidenceCollectAchv(space, pid, card); }
});
return out;
}
@@ -3879,7 +3894,7 @@ function grantDetectiveEvidenceForCurrentRun(sid, space, playerIds) {
const k = peerNickKey(space, pid);
if (k && freeKeys.has(k)) return;
const extra = awardRandomEvidenceCardToPlayer(space, pid, suspectIdx, grade);
if (extra != null) { awardedList[pid].push(extra); if (awarded[pid] == null) awarded[pid] = extra; if (k) freeKeys.add(k); }
if (extra != null) { awardedList[pid].push(extra); if (awarded[pid] == null) awarded[pid] = extra; if (k) freeKeys.add(k); trackEvidenceCollectAchv(space, pid, extra); }
});
}
pend.consumed = true;
@@ -4251,12 +4266,32 @@ function computeAndEmitTrialResult(sid, space) {
/* ===== Achievement auto-track ===== */
try {
const achv = [];
/* Phase B: majority vote (เช็ค lone-wolf) + มีคนโหวตไหม */
let mvAchv = 0; for (let k = 1; k <= 2; k++) { if (counts[k] > counts[mvAchv]) mvAchv = k; }
const anyVotesAchv = (counts[0] + counts[1] + counts[2]) > 0;
/* a1 First Deduction (target 1) + a5 Truth Hunter (target 20) — ผู้โหวตถูก (ผู้เล่นจริงเท่านั้น) */
winners.forEach((id) => {
const p = space.peers.get(id);
if (p && p.playerKey) {
achv.push({ playerKey: p.playerKey, id: 'a1_first_deduction', inc: 1 });
achv.push({ playerKey: p.playerKey, id: 'a5_truth_hunter', inc: 1 });
/* ===== Phase B (2026-07-05) — เงื่อนไขต่อผู้โหวตถูก ===== */
/* c5 Lone Wolf: โหวตถูกแต่เสียงส่วนใหญ่ผิด (สวนทางทีม) */
if (anyVotesAchv && mvAchv !== culprit) achv.push({ playerKey: p.playerKey, id: 'c5_lone_wolf', inc: 1 });
/* หลักฐานในมือคดีนี้ (ต่อผู้ต้องสงสัย 3 กอง) */
const evRows = clonePlayerEvidence(space, id);
const evTotal = evRows.reduce((s, row) => s + (Array.isArray(row) ? row.length : 0), 0);
/* c2 High Stakes: โหวตถูกโดยมีหลักฐาน ≤3 ใบ */
if (evTotal <= 3) achv.push({ playerKey: p.playerKey, id: 'c2_high_stakes', inc: 1 });
/* a4 Logic Over Luck: โหวตถูกโดยไม่มีหลักฐาน legendary (ชี้ชัด) เลย */
const hasLegendary = evRows.some((row) => Array.isArray(row) && row.some((c) => c && c.rarity === 'legendary'));
if (!hasLegendary) achv.push({ playerKey: p.playerKey, id: 'a4_logic_over_luck', inc: 1 });
/* c4 Clutch Mind: โหวตถูกใน 10 วิสุดท้ายก่อนหมดเวลา */
const voteAt = space.trialVoteAt && space.trialVoteAt[id];
if (voteAt && space.trialVoteEndsAt) {
const remain = space.trialVoteEndsAt - voteAt;
if (remain >= 0 && remain <= 10000) achv.push({ playerKey: p.playerKey, id: 'c4_clutch_mind', inc: 1 });
}
}
});
/* ตัวป่วน — นับเฉพาะผู้เล่นจริง (มี playerKey) */
@@ -4423,6 +4458,7 @@ function openTrialVotingPhase(sid, space, opts) {
}
const durMs = trialVoteMs() + extraMs;
space.trialVoteEndsAt = Date.now() + durMs;
space.trialVoteAt = {}; /* [achv c4] รีเซ็ตเวลาโหวตทุกครั้งที่เปิดโหวต (รวม revote) */
space.peers.forEach((_p, pid) => {
const sock = io.sockets.sockets.get(pid);
if (!sock) return;
@@ -4699,15 +4735,23 @@ function resolveQuizRound(sid, space, md) {
const results = [];
const ejectMoves = [];
const tc191Rows = []; /* [TC191] verify: เทียบผลตัดสิน "แถวเท้า" vs "หัว(เดิม)" ต่อคน */
space.peers.forEach((p, peerId) => {
const st = sess.players[peerId];
if (!st) return;
eligibleCount++;
const tx = Math.floor(Number(p.x));
const ty = Math.floor(Number(p.y));
const inT = quizCellOn(tGrid, tx, ty);
const inF = quizCellOn(fGrid, tx, ty);
/* "" (bottom row footprint) / =
(องตรงก client quizResolveChoiceFromStanding) */
const { cw: qCw, ch: qCh } = getCharacterFootprintWHForMove(mdLive);
const qBaseTx = Math.floor(Number(p.x));
const qFeetTy = Math.floor(Number(p.y)) + qCh - 1;
let inT = false, inF = false;
for (let qdx = 0; qdx < qCw; qdx++) {
const qftx = qBaseTx + qdx;
if (!inT && quizCellOn(tGrid, qftx, qFeetTy)) inT = true;
if (!inF && quizCellOn(fGrid, qftx, qFeetTy)) inF = true;
}
let choice = null;
if (inT && !inF) choice = true;
else if (inF && !inT) choice = false;
@@ -4740,6 +4784,14 @@ function resolveQuizRound(sid, space, md) {
});
}
/* [TC191] เก็บบรรทัดเทียบ: เท้า(ที่ใช้จริง) vs หัว(สูตรเดิม single-tile) → พิสูจน์ว่าตัดสินที่แถวเท้า */
{
const headY = Math.floor(Number(p.y));
tc191Rows.push((p.nickname || '?').slice(0, 8) + ' fY=' + qFeetTy + ' hY=' + headY
+ ' เท้า[T' + (inT ? 1 : 0) + 'F' + (inF ? 1 : 0) + ']'
+ ' หัวเดิม[T' + (quizCellOn(tGrid, qBaseTx, headY) ? 1 : 0) + 'F' + (quizCellOn(fGrid, qBaseTx, headY) ? 1 : 0) + ']'
+ ' → ' + (choice === true ? 'จริง' : choice === false ? 'เท็จ' : '-') + (right ? '✓' : '✗'));
}
results.push({
id: peerId,
nickname: p.nickname || '',
@@ -4750,6 +4802,10 @@ function resolveQuizRound(sid, space, md) {
});
});
if (tc191Rows.length) {
try { glog(sid, space, 'mg1-feet', '[TC191] Q' + (idx + 1) + ' ตัดสินแถวเท้า: ' + tc191Rows.join(' | ')); } catch (e) { /* ignore */ }
}
ejectMoves.forEach((ev) => {
io.to(sid).emit('user-move', ev);
try {
@@ -11817,6 +11873,8 @@ io.on('connection', (socket) => {
}
space.trialVotes = space.trialVotes || {};
space.trialVotes[socket.id] = idx;
space.trialVoteAt = space.trialVoteAt || {};
space.trialVoteAt[socket.id] = Date.now(); /* [achv c4] เวลาโหวต → เช็ค "10 วิสุดท้าย" */
emitTrialVoteUpdate(sid, space);
const totalTV = trialEligibleVoterTotal(space);
const votedNow = Object.keys(space.trialVotes).length;
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+156
View File
@@ -16083,3 +16083,159 @@
{"t":1783179538192,"cat":"LobbyB","room":"a-1783173659054","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=3 [b0:24.3,13.2->25.3,12.9 b1:16.9,16.9->16.9,16.9 b2:21.5,8.3->20.9,7.6] [+5875719ms]","src":"client"}
{"t":1783179542255,"cat":"LobbyB","room":"a-1783173659054","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=3 [b0:17.1,8.7->16.2,8.6 b1:20.1,16.9->20.1,16.9 b2:17.8,5.2->17.8,5.2] [+5879776ms]","src":"client"}
{"t":1783179543757,"cat":"LobbyB","room":"a-1783173659054","who":"บอท7","ev":"socket-connect","detail":" [+5881283ms]","src":"client"}
{"t":1783265458800,"cat":"LobbyA","room":"a-1783265455082","who":"บอท7","ev":"lobby-open","detail":"space=a-1783265455082 [+0ms]","src":"client"}
{"t":1783265459007,"cat":"LobbyA","room":"a-1783265455082","who":"บอท7","ev":"preload-start","detail":" [+22ms]","src":"client"}
{"t":1783265459009,"cat":"LobbyA","room":"a-1783265455082","who":"บอท7","ev":"suspect-gate","detail":"postCase=false howtoOk=true micOk=true sent=false [+20ms]","src":"client"}
{"t":1783265459069,"cat":"LobbyA","room":"a-1783265455082","who":"บอท7","ev":"colors-resolved","detail":" [+291ms]","src":"client"}
{"t":1783265459069,"cat":"LobbyA","room":"a-1783265455082","who":"บอท7","ev":"manifest-done","detail":" [+290ms]","src":"client"}
{"t":1783265459106,"cat":"LobbyA","room":"a-1783265455082","who":"บอท7","ev":"socket-connect","detail":" [+305ms]","src":"client"}
{"t":1783265459117,"cat":"LobbyA","room":"a","who":"บอท7","ev":"join","detail":"สี#7 · คน 1 + บอท 5","src":"server"}
{"t":1783265461517,"cat":"LobbyA","room":"a-1783265455082","who":"บอท7","ev":"join-ok","detail":"peers=1 host=me map=mlsbbxfe bots=5 [+2741ms]","src":"client"}
{"t":1783265461601,"cat":"LobbyA","room":"a-1783265455082","who":"บอท7","ev":"suspect-join","detail":"phaseActive=false pickIdx=0 postCase=false clientMapId=mlsbbxfe spaceId=a-1783265455082 mapName=LobbyA [+2774ms]","src":"client"}
{"t":1783265461605,"cat":"LobbyA","room":"a-1783265455082","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:10.0,14.0->9.7,15.0 b1:16.0,14.0->15.0,13.8 b2:22.0,13.0->21.4,12.2 b3:23.0,8.0->22.0,8.4 b4:15.0,5.0->16.0,5.3] [+2782ms]","src":"client"}
{"t":1783265462691,"cat":"LobbyA","room":"a-1783265455082","who":"บอท7","ev":"mychar-tinted","detail":"roomJoinReady=true [+3872ms]","src":"client"}
{"t":1783265468487,"cat":"LobbyA","room":"a-1783265455082","who":"บอท7","ev":"preload-occupants-done","detail":" [+9715ms]","src":"client"}
{"t":1783265468499,"cat":"LobbyA","room":"a-1783265455082","who":"บอท7","ev":"preload-ready(occupants)","detail":" [+9715ms]","src":"client"}
{"t":1783265468500,"cat":"LobbyA","room":"a-1783265455082","who":"บอท7","ev":"loading-hide","detail":"เริ่มเล่นได้ [+9715ms]","src":"client"}
{"t":1783265468523,"cat":"LobbyA","room":"a-1783265455082","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:8.5,17.6->8.5,17.6 b1:6.0,11.0->6.0,11.0 b2:9.2,6.9->9.2,6.9 b3:8.3,7.4->8.3,7.4 b4:25.4,16.9->25.4,16.9] [+9750ms]","src":"client"}
{"t":1783265472569,"cat":"LobbyA","room":"a-1783265455082","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:25.5,10.3->26.4,10.9 b1:25.6,5.6->24.4,5.9 b2:22.9,6.2->23.0,5.5 b3:8.6,10.0->6.5,8.9 b4:29.9,6.1->29.9,6.1] [+13794ms]","src":"client"}
{"t":1783265472619,"cat":"LobbyA","room":"a","who":"บอท7","ev":"preplay-lock","detail":"[TC154] host เปิด wizard เลือกคดี → ล็อก set-ready ทั้งห้อง (1 คนในห้อง)","src":"server"}
{"t":1783265474605,"cat":"LobbyB","room":"a","who":"บอท7","ev":"preplay-lock","detail":"[TC154] host ปิด wizard → ปลดล็อก set-ready (1 คนในห้อง)","src":"server"}
{"t":1783265475067,"cat":"LobbyA","room":"a-1783265455082","who":"บอท7","ev":"loading-hide","detail":"เริ่มเล่นได้ [+16293ms]","src":"client"}
{"t":1783265476588,"cat":"LobbyA","room":"a-1783265455082","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:8.3,6.7->8.3,6.7 b1:20.6,8.3->20.6,8.3 b2:23.2,6.3->23.1,6.2 b3:27.7,16.3->27.7,16.3 b4:22.2,12.6->21.2,11.9] [+17812ms]","src":"client"}
{"t":1783265477432,"cat":"LobbyB","room":"a","who":"บอท7","ev":"story-gate","detail":"[TC156] อ่าน story จบ 1/1","src":"server"}
{"t":1783265477433,"cat":"LobbyB","room":"a","who":"","ev":"story-gate","detail":"[TC156] ทุกคนอ่าน story ครบ (1) → ปลดล็อกเลือกผู้ต้องสงสัย (pass)","src":"server"}
{"t":1783265477878,"cat":"LobbyA","room":"a-1783265455082","who":"บอท7","ev":"loading-hide","detail":"เริ่มเล่นได้ [+19106ms]","src":"client"}
{"t":1783265479830,"cat":"LobbyB","room":"a-1783265455082","who":"บอท7","ev":"suspect-gate","detail":"postCase=true howtoOk=true micOk=true sent=false [+21041ms]","src":"client"}
{"t":1783265480655,"cat":"LobbyB","room":"a-1783265455082","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:14.8,10.9->14.8,11.1 b1:17.5,13.2->18.1,13.2 b2:22.4,6.2->22.4,6.2 b3:14.4,15.1->14.1,15.1 b4:18.2,8.8->18.4,8.8] [+21813ms]","src":"client"}
{"t":1783265480657,"cat":"LobbyB","room":"a-1783265455082","who":"บอท7","ev":"suspect-open-evt","detail":"idx=0 postCase=true [+21880ms]","src":"client"}
{"t":1783265484749,"cat":"LobbyB","room":"a-1783265455082","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:27.2,12.2->27.2,11.3 b1:28.7,7.8->28.7,7.8 b2:26.7,8.1->25.9,7.8 b3:13.5,16.6->14.2,16.5 b4:18.5,8.8->18.5,8.8] [+25950ms]","src":"client"}
{"t":1783265488768,"cat":"LobbyB","room":"a-1783265455082","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:27.7,5.3->27.7,5.3 b1:23.5,12.0->15.5,14.6 b2:16.4,5.5->16.2,5.5 b3:27.6,14.2->25.9,12.9 b4:18.9,8.8->18.9,8.8] [+29995ms]","src":"client"}
{"t":1783265492804,"cat":"LobbyB","room":"a-1783265455082","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:27.7,5.3->19.0,10.6 b1:23.5,12.0->8.5,4.3 b2:16.4,5.5->16.6,8.8 b3:27.6,14.2->22.6,8.7 b4:18.9,8.8->18.9,13.0] [+34028ms]","src":"client"}
{"t":1783265496832,"cat":"LobbyB","room":"a-1783265455082","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:27.7,5.3->16.3,14.0 b1:23.5,12.0->14.7,10.2 b2:16.4,5.5->20.8,16.9 b3:27.6,14.2->27.7,10.9 b4:18.9,8.8->12.4,17.0] [+38058ms]","src":"client"}
{"t":1783265500877,"cat":"LobbyB","room":"a-1783265455082","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:5.1,16.4->5.1,16.4 b1:12.2,15.2->11.3,15.2 b2:16.1,13.1->15.8,13.1 b3:27.5,5.7->27.5,5.7 b4:12.4,17.0->12.4,17.0] [+42106ms]","src":"client"}
{"t":1783265512355,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"lobby-open","detail":"space=a-1783265509117 [+0ms]","src":"client"}
{"t":1783265512398,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"suspect-gate","detail":"postCase=false howtoOk=true micOk=true sent=false [+16ms]","src":"client"}
{"t":1783265512399,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"preload-start","detail":" [+17ms]","src":"client"}
{"t":1783265512494,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"manifest-done","detail":" [+141ms]","src":"client"}
{"t":1783265512499,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"colors-resolved","detail":" [+142ms]","src":"client"}
{"t":1783265512544,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"socket-connect","detail":" [+174ms]","src":"client"}
{"t":1783265512550,"cat":"LobbyA","room":"a","who":"บอท7","ev":"join","detail":"สี#7 · คน 1 + บอท 5","src":"server"}
{"t":1783265513423,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"mychar-tinted","detail":"roomJoinReady=false [+959ms]","src":"client"}
{"t":1783265513495,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"preload-occupants-done","detail":" [+1039ms]","src":"client"}
{"t":1783265513496,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"preload-ready(occupants)","detail":" [+1040ms]","src":"client"}
{"t":1783265513940,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"join-ok","detail":"peers=1 host=me map=mlsbbxfe bots=5 [+1525ms]","src":"client"}
{"t":1783265513941,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"suspect-join","detail":"phaseActive=false pickIdx=0 postCase=false clientMapId=mlsbbxfe spaceId=a-1783265509117 mapName=LobbyA [+1549ms]","src":"client"}
{"t":1783265513943,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"loading-hide","detail":"เริ่มเล่นได้ [+1526ms]","src":"client"}
{"t":1783265513954,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:10.0,14.0->9.1,13.9 b1:16.0,14.0->16.9,13.7 b2:22.0,13.0->21.1,13.1 b3:23.0,8.0->22.8,8.9 b4:15.0,5.0->15.7,5.6] [+1553ms]","src":"client"}
{"t":1783265518008,"cat":"LobbyA","room":"a","who":"บอท7","ev":"preplay-lock","detail":"[TC154] host เปิด wizard เลือกคดี → ล็อก set-ready ทั้งห้อง (1 คนในห้อง)","src":"server"}
{"t":1783265518405,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:6.4,13.5->6.4,13.5 b1:23.3,6.3->22.8,6.1 b2:24.2,9.9->24.6,9.6 b3:21.2,17.5->21.2,17.5 b4:27.6,13.2->27.6,13.1] [+6047ms]","src":"client"}
{"t":1783265521835,"cat":"LobbyB","room":"a","who":"บอท7","ev":"preplay-lock","detail":"[TC154] host ปิด wizard → ปลดล็อก set-ready (1 คนในห้อง)","src":"server"}
{"t":1783265522303,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"loading-hide","detail":"เริ่มเล่นได้ [+9935ms]","src":"client"}
{"t":1783265522410,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:20.0,8.3->20.0,8.3 b1:6.9,9.2->7.1,9.2 b2:5.4,9.1->5.3,9.1 b3:22.6,9.8->24.2,10.1 b4:11.5,7.6->9.9,7.3] [+10053ms]","src":"client"}
{"t":1783265526420,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:28.7,8.7->28.7,8.8 b1:15.8,8.3->16.3,8.9 b2:5.3,9.1->5.3,9.1 b3:19.3,11.8->19.2,11.8 b4:9.9,5.8->9.9,5.9] [+14069ms]","src":"client"}
{"t":1783265530452,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:28.7,8.9->28.7,8.9 b1:18.8,8.9->18.8,8.9 b2:14.6,9.9->14.6,9.9 b3:20.0,16.8->20.0,16.8 b4:23.1,11.9->22.3,11.9] [+18095ms]","src":"client"}
{"t":1783265530693,"cat":"LobbyB","room":"a","who":"บอท7","ev":"story-gate","detail":"[TC156] อ่าน story จบ 1/1","src":"server"}
{"t":1783265530693,"cat":"LobbyB","room":"a","who":"","ev":"story-gate","detail":"[TC156] ทุกคนอ่าน story ครบ (1) → ปลดล็อกเลือกผู้ต้องสงสัย (pass)","src":"server"}
{"t":1783265531152,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"loading-hide","detail":"เริ่มเล่นได้ [+18795ms]","src":"client"}
{"t":1783265533564,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"suspect-gate","detail":"postCase=true howtoOk=true micOk=true sent=false [+21202ms]","src":"client"}
{"t":1783265535562,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:6.4,17.0->6.4,17.0 b1:21.2,13.0->21.1,13.5 b2:25.7,6.5->25.7,6.5 b3:20.0,16.8->19.5,16.6 b4:17.0,9.0->17.0,9.0] [+22314ms]","src":"client"}
{"t":1783265535671,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"suspect-open-evt","detail":"idx=0 postCase=true [+23206ms]","src":"client"}
{"t":1783265538823,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:6.4,17.0->6.4,17.0 b1:20.7,15.1->20.7,15.1 b2:24.2,5.0->24.7,5.2 b3:13.4,14.3->12.9,14.0 b4:17.0,9.0->17.0,9.0] [+26422ms]","src":"client"}
{"t":1783265542842,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:19.0,16.9->19.0,16.9 b1:13.0,5.6->14.0,6.1 b2:24.9,10.7->25.9,11.2 b3:24.8,6.3->25.9,6.1 b4:23.1,10.2->24.2,10.6] [+30446ms]","src":"client"}
{"t":1783265546927,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:28.4,6.7->28.4,6.7 b1:26.6,15.7->27.3,16.0 b2:21.5,10.0->21.9,9.5 b3:27.5,5.2->27.5,5.2 b4:11.8,11.5->11.2,11.1] [+34506ms]","src":"client"}
{"t":1783265548802,"cat":"MG1","room":"a","who":"","ev":"game-start","detail":"เริ่มมินิเกม: Minigame-1 จริงหรือไม่ (การ์ด 1)","src":"server"}
{"t":1783265548821,"cat":"MG1","room":"a","who":"บอท7","ev":"lobbyb-gate","detail":"[TC144] เริ่มสืบสวน OK — ผู้เล่นครบ 1 คน · ผู้ต้องสงสัย #1","src":"server"}
{"t":1783265548873,"cat":"MG1","room":"a","who":"บอท7","ev":"preplay-lock","detail":"[TC154] host ปิด wizard → ปลดล็อก set-ready (1 คนในห้อง)","src":"server"}
{"t":1783265552571,"cat":"MG1","room":"a","who":"บอท7","ev":"join","detail":"สี#7 · คน 1 + บอท 5","src":"server"}
{"t":1783265664931,"cat":"MG1","room":"a","who":"","ev":"suspect-progress","detail":"[TC179] สืบผู้ต้องสงสัย #1 → team progress 1/0/0 (shared เท่ากันทุกจอ · pass)","src":"server"}
{"t":1783265664937,"cat":"MG1","room":"a","who":"","ev":"evidence-grant","detail":"[TC182] แจกหลักฐาน suspect#1 → 1 key · ใบ/key=[1] (1/key · pass)","src":"server"}
{"t":1783265666997,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"lobby-open","detail":"space=a-1783265509117 [+0ms]","src":"client"}
{"t":1783265667051,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"suspect-gate","detail":"postCase=true howtoOk=true micOk=true sent=false [+11ms]","src":"client"}
{"t":1783265667052,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"preload-start","detail":" [+13ms]","src":"client"}
{"t":1783265667102,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"suspect-gate","detail":"postCase=true howtoOk=true micOk=true sent=true [+16ms]","src":"client"}
{"t":1783265667119,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"manifest-done","detail":" [+128ms]","src":"client"}
{"t":1783265667152,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"colors-resolved","detail":" [+128ms]","src":"client"}
{"t":1783265667163,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"socket-connect","detail":" [+169ms]","src":"client"}
{"t":1783265667228,"cat":"LobbyB","room":"a","who":"บอท7","ev":"join","detail":"สี#7 · คน 1 + บอท 5","src":"server"}
{"t":1783265667896,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"mychar-tinted","detail":"roomJoinReady=false [+907ms]","src":"client"}
{"t":1783265668071,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"preload-occupants-done","detail":" [+1016ms]","src":"client"}
{"t":1783265668071,"cat":"LobbyA","room":"a-1783265509117","who":"บอท7","ev":"preload-ready(occupants)","detail":" [+1016ms]","src":"client"}
{"t":1783265669423,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"join-ok","detail":"peers=1 host=me map=mn8nx46h bots=5 [+2431ms]","src":"client"}
{"t":1783265669429,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"loading-hide","detail":"เริ่มเล่นได้ [+2431ms]","src":"client"}
{"t":1783265669459,"cat":"LobbyB","room":"a","who":"บอท7","ev":"lobbyb-gate","detail":"[TC144] โหลด LobbyB เสร็จ 1/1","src":"server"}
{"t":1783265669479,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:10.0,15.0->10.6,14.7 b1:15.0,15.0->15.6,14.7 b2:21.0,15.0->21.6,14.8 b3:23.0,12.0->22.4,11.9 b4:24.0,9.0->23.4,9.2] [+2464ms]","src":"client"}
{"t":1783265669485,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"suspect-join","detail":"phaseActive=true pickIdx=0 postCase=true clientMapId=mn8nx46h spaceId=a-1783265509117 mapName=LobbyB [+2456ms]","src":"client"}
{"t":1783265676042,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:23.3,8.8->23.3,8.8 b1:28.6,6.8->28.6,6.8 b2:14.5,11.7->14.5,11.7 b3:19.4,10.1->19.4,10.1 b4:24.6,10.6->25.2,10.6] [+9046ms]","src":"client"}
{"t":1783265680096,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:11.1,9.0->10.0,9.0 b1:20.1,12.1->19.5,12.9 b2:16.8,8.8->16.8,8.8 b3:8.2,8.2->8.2,8.3 b4:27.9,10.6->27.9,10.6] [+13098ms]","src":"client"}
{"t":1783265684123,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:13.4,5.6->13.4,5.6 b1:27.4,13.6->27.7,14.5 b2:16.8,8.8->16.8,8.8 b3:8.2,8.2->8.2,8.3 b4:26.6,16.5->26.6,16.5] [+17127ms]","src":"client"}
{"t":1783265688171,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:25.2,16.9->25.2,16.9 b1:12.7,12.3->12.7,13.2 b2:22.6,11.0->22.6,11.0 b3:25.4,8.9->26.1,8.2 b4:22.7,15.5->21.8,15.3] [+21175ms]","src":"client"}
{"t":1783265692183,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:25.2,16.9->25.2,16.9 b1:12.9,17.0->12.9,17.0 b2:14.7,13.3->13.7,13.1 b3:17.8,14.4->17.8,14.4 b4:7.4,12.5->7.4,12.5] [+25182ms]","src":"client"}
{"t":1783265696194,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:8.0,14.2->8.3,14.7 b1:28.6,6.4->28.6,6.3 b2:14.7,11.8->14.8,12.4 b3:17.5,13.1->17.5,13.1 b4:14.9,9.1->14.9,9.1] [+29196ms]","src":"client"}
{"t":1783265700220,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->25.6,8.1 b1:28.6,6.3->25.4,4.3 b2:21.4,13.0->19.2,7.5 b3:17.5,13.1->20.5,11.1 b4:25.7,8.8->17.8,8.3] [+33224ms]","src":"client"}
{"t":1783265704269,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->15.0,13.8 b1:28.6,6.3->24.4,5.0 b2:21.4,13.0->16.4,6.9 b3:17.5,13.1->19.3,11.7 b4:25.7,8.8->15.5,16.7] [+37273ms]","src":"client"}
{"t":1783265708297,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->13.0,10.2 b1:28.6,6.3->10.0,8.9 b2:21.4,13.0->11.7,13.9 b3:17.5,13.1->19.0,9.3 b4:25.7,8.8->16.2,6.0] [+41298ms]","src":"client"}
{"t":1783265712325,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->8.4,8.9 b1:28.6,6.3->14.7,10.5 b2:21.4,13.0->8.4,9.7 b3:17.5,13.1->9.3,8.4 b4:25.7,8.8->8.1,6.7] [+45329ms]","src":"client"}
{"t":1783265716378,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->8.4,8.4 b1:28.6,6.3->20.4,16.0 b2:21.4,13.0->12.6,5.2 b3:17.5,13.1->24.3,14.0 b4:25.7,8.8->17.9,7.6] [+49381ms]","src":"client"}
{"t":1783265720395,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->8.4,8.4 b1:28.6,6.3->27.8,5.3 b2:21.4,13.0->8.8,9.1 b3:17.5,13.1->10.3,13.6 b4:25.7,8.8->10.3,16.8] [+53402ms]","src":"client"}
{"t":1783265724433,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->25.1,8.1 b1:28.6,6.3->16.7,13.0 b2:21.4,13.0->20.7,11.2 b3:17.5,13.1->14.3,16.1 b4:25.7,8.8->12.8,7.6] [+57437ms]","src":"client"}
{"t":1783265728505,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->27.9,7.8 b1:28.6,6.3->25.3,3.1 b2:21.4,13.0->19.0,11.5 b3:17.5,13.1->6.5,15.2 b4:25.7,8.8->10.0,16.6] [+61501ms]","src":"client"}
{"t":1783265732555,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->25.7,10.3 b1:28.6,6.3->25.6,3.0 b2:21.4,13.0->8.3,6.8 b3:17.5,13.1->5.1,9.1 b4:25.7,8.8->19.4,16.9] [+65556ms]","src":"client"}
{"t":1783265736598,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->26.7,5.5 b1:28.6,6.3->25.1,4.0 b2:21.4,13.0->22.6,7.1 b3:17.5,13.1->12.0,13.1 b4:25.7,8.8->7.5,11.4] [+69599ms]","src":"client"}
{"t":1783265740623,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->19.1,11.1 b1:28.6,6.3->27.7,11.9 b2:21.4,13.0->14.0,5.7 b3:17.5,13.1->14.7,12.0 b4:25.7,8.8->12.7,14.2] [+73632ms]","src":"client"}
{"t":1783265744850,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->19.1,10.8 b1:28.6,6.3->19.3,11.5 b2:21.4,13.0->20.7,8.5 b3:17.5,13.1->26.4,9.4 b4:25.7,8.8->21.5,16.8] [+77732ms]","src":"client"}
{"t":1783265748778,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->27.8,16.1 b1:28.6,6.3->13.3,16.9 b2:21.4,13.0->27.5,13.4 b3:17.5,13.1->9.1,14.3 b4:25.7,8.8->25.6,14.3] [+81779ms]","src":"client"}
{"t":1783265752786,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->19.0,13.3 b1:28.6,6.3->5.8,9.2 b2:21.4,13.0->23.7,13.3 b3:17.5,13.1->6.3,16.7 b4:25.7,8.8->27.7,10.2] [+85792ms]","src":"client"}
{"t":1783265756823,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->13.6,14.6 b1:28.6,6.3->11.7,16.6 b2:21.4,13.0->23.0,6.8 b3:17.5,13.1->17.3,8.8 b4:25.7,8.8->16.9,8.9] [+89823ms]","src":"client"}
{"t":1783265760905,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->17.9,5.8 b1:28.6,6.3->11.7,16.6 b2:21.4,13.0->27.7,5.2 b3:17.5,13.1->8.4,5.2 b4:25.7,8.8->19.7,8.1] [+93853ms]","src":"client"}
{"t":1783265764878,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->19.4,10.9 b1:28.6,6.3->9.7,14.3 b2:21.4,13.0->28.8,8.9 b3:17.5,13.1->6.0,10.7 b4:25.7,8.8->10.9,10.8] [+97884ms]","src":"client"}
{"t":1783265768911,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->27.8,16.5 b1:28.6,6.3->9.7,14.0 b2:21.4,13.0->19.3,12.8 b3:17.5,13.1->21.5,8.4 b4:25.7,8.8->20.0,17.0] [+101914ms]","src":"client"}
{"t":1783265772990,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->27.2,16.7 b1:28.6,6.3->27.5,15.7 b2:21.4,13.0->27.8,9.9 b3:17.5,13.1->23.2,6.4 b4:25.7,8.8->9.6,11.1] [+105925ms]","src":"client"}
{"t":1783265776974,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->14.5,10.6 b1:28.6,6.3->5.3,15.0 b2:21.4,13.0->25.3,7.6 b3:17.5,13.1->25.1,3.5 b4:25.7,8.8->22.1,7.3] [+109979ms]","src":"client"}
{"t":1783265781015,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->14.5,11.3 b1:28.6,6.3->8.1,4.2 b2:21.4,13.0->12.6,8.2 b3:17.5,13.1->14.5,9.4 b4:25.7,8.8->28.6,8.5] [+114019ms]","src":"client"}
{"t":1783265785051,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->18.5,15.9 b1:28.6,6.3->22.3,9.3 b2:21.4,13.0->27.2,7.2 b3:17.5,13.1->9.7,5.8 b4:25.7,8.8->24.0,11.7] [+118056ms]","src":"client"}
{"t":1783265789087,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->26.5,11.5 b1:28.6,6.3->14.1,12.3 b2:21.4,13.0->26.0,15.5 b3:17.5,13.1->16.0,16.7 b4:25.7,8.8->17.6,5.5] [+122092ms]","src":"client"}
{"t":1783265793155,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->16.0,5.3 b1:28.6,6.3->7.4,14.4 b2:21.4,13.0->10.0,9.7 b3:17.5,13.1->14.4,16.7 b4:25.7,8.8->6.8,16.7] [+126142ms]","src":"client"}
{"t":1783265797148,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->26.4,11.4 b1:28.6,6.3->11.9,9.8 b2:21.4,13.0->21.4,6.9 b3:17.5,13.1->16.5,7.9 b4:25.7,8.8->14.2,10.4] [+130146ms]","src":"client"}
{"t":1783265801180,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->19.5,6.0 b1:28.6,6.3->26.7,16.9 b2:21.4,13.0->28.9,8.8 b3:17.5,13.1->18.4,8.9 b4:25.7,8.8->6.6,9.3] [+134184ms]","src":"client"}
{"t":1783265805234,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->26.2,14.3 b1:28.6,6.3->27.7,13.8 b2:21.4,13.0->17.0,15.0 b3:17.5,13.1->8.2,10.1 b4:25.7,8.8->14.8,9.9] [+138232ms]","src":"client"}
{"t":1783265809263,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->11.8,14.5 b1:28.6,6.3->27.4,11.8 b2:21.4,13.0->8.6,4.0 b3:17.5,13.1->17.5,14.4 b4:25.7,8.8->17.4,5.4] [+142269ms]","src":"client"}
{"t":1783265813306,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->21.0,12.7 b1:28.6,6.3->15.7,8.8 b2:21.4,13.0->12.3,14.7 b3:17.5,13.1->5.2,15.2 b4:25.7,8.8->8.3,7.6] [+146311ms]","src":"client"}
{"t":1783265817343,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->12.8,13.6 b1:28.6,6.3->16.6,14.2 b2:21.4,13.0->16.2,8.6 b3:17.5,13.1->24.6,16.5 b4:25.7,8.8->9.8,6.9] [+150349ms]","src":"client"}
{"t":1783265821378,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->15.1,13.0 b1:28.6,6.3->27.8,9.5 b2:21.4,13.0->27.9,10.1 b3:17.5,13.1->7.4,14.5 b4:25.7,8.8->23.0,7.1] [+154382ms]","src":"client"}
{"t":1783265825412,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->8.1,9.3 b1:28.6,6.3->23.5,9.6 b2:21.4,13.0->21.5,7.5 b3:17.5,13.1->6.2,10.4 b4:25.7,8.8->7.5,9.4] [+158415ms]","src":"client"}
{"t":1783265829451,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->22.2,10.0 b1:28.6,6.3->19.2,9.2 b2:21.4,13.0->24.8,13.5 b3:17.5,13.1->15.5,17.0 b4:25.7,8.8->26.2,13.9] [+162448ms]","src":"client"}
{"t":1783265833476,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->7.1,16.2 b1:28.6,6.3->10.3,7.1 b2:21.4,13.0->28.6,7.8 b3:17.5,13.1->20.8,10.2 b4:25.7,8.8->19.3,11.0] [+166486ms]","src":"client"}
{"t":1783265837515,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->19.0,11.9 b1:28.6,6.3->20.0,5.4 b2:21.4,13.0->20.1,15.2 b3:17.5,13.1->5.1,9.4 b4:25.7,8.8->11.1,7.0] [+170515ms]","src":"client"}
{"t":1783265841540,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->19.0,11.8 b1:28.6,6.3->13.4,11.6 b2:21.4,13.0->20.2,14.4 b3:17.5,13.1->5.5,9.9 b4:25.7,8.8->26.0,16.2] [+174544ms]","src":"client"}
{"t":1783265845569,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->19.0,11.8 b1:28.6,6.3->10.2,9.8 b2:21.4,13.0->27.7,13.7 b3:17.5,13.1->12.6,5.5 b4:25.7,8.8->21.9,5.3] [+178575ms]","src":"client"}
{"t":1783265849611,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->27.6,9.7 b1:28.6,6.3->7.1,14.0 b2:21.4,13.0->9.3,8.9 b3:17.5,13.1->26.8,16.8 b4:25.7,8.8->21.5,5.3] [+182614ms]","src":"client"}
{"t":1783265853637,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->19.1,11.6 b1:28.6,6.3->18.2,13.1 b2:21.4,13.0->27.9,5.5 b3:17.5,13.1->24.2,15.9 b4:25.7,8.8->18.7,8.8] [+186643ms]","src":"client"}
{"t":1783265857702,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:16.6,8.5->15.6,6.1 b1:28.6,6.3->18.2,13.1 b2:21.4,13.0->10.2,10.7 b3:17.5,13.1->9.5,10.2 b4:25.7,8.8->16.7,13.2] [+190707ms]","src":"client"}
{"t":1783265861760,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:17.7,5.2->17.7,5.2 b1:17.2,16.7->18.2,16.9 b2:8.0,4.7->8.0,4.7 b3:14.9,10.5->14.9,10.5 b4:8.2,5.4->8.2,5.1] [+194766ms]","src":"client"}
{"t":1783265865799,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:15.2,8.8->15.2,8.8 b1:16.3,8.6->15.4,8.4 b2:9.3,5.1->9.6,5.3 b3:27.8,5.8->28.4,6.0 b4:27.3,6.5->27.7,6.5] [+198807ms]","src":"client"}
{"t":1783265869847,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:21.8,16.8->21.7,16.8 b1:11.8,16.9->11.1,17.0 b2:14.6,8.2->14.0,8.9 b3:28.9,6.8->28.9,6.8 b4:13.3,9.7->14.2,9.5] [+202850ms]","src":"client"}
{"t":1783265873880,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:14.5,12.7->13.8,12.1 b1:9.6,16.9->8.9,16.6 b2:19.2,7.5->20.1,7.6 b3:21.7,13.5->21.0,14.2 b4:10.0,13.0->9.3,13.6] [+206854ms]","src":"client"}
{"t":1783265877856,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:14.9,12.4->14.9,12.4 b1:6.3,9.3->6.3,9.3 b2:8.2,6.1->8.2,6.1 b3:5.2,16.8->5.2,16.9 b4:14.6,11.8->14.8,11.4] [+210861ms]","src":"client"}
{"t":1783265881893,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:24.8,13.1->25.8,13.1 b1:9.6,5.8->9.6,5.8 b2:8.2,5.6->8.2,5.6 b3:5.2,16.9->5.2,16.9 b4:28.3,6.5->28.3,6.5] [+214896ms]","src":"client"}
{"t":1783265885957,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:18.9,15.3->17.9,15.5 b1:5.4,9.1->5.4,9.1 b2:26.8,11.5->27.2,11.1 b3:20.9,12.5->21.9,12.2 b4:28.3,6.5->28.3,6.5] [+218932ms]","src":"client"}
{"t":1783265889969,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:23.0,17.0->24.0,17.0 b1:28.2,8.4->28.7,8.4 b2:20.4,5.0->20.4,5.0 b3:27.7,9.3->27.7,9.3 b4:15.8,13.4->14.8,13.5] [+222967ms]","src":"client"}
{"t":1783265893996,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:21.3,16.8->20.6,16.8 b1:12.9,8.8->11.9,8.8 b2:20.4,5.0->20.4,5.0 b3:27.7,9.4->27.7,9.4 b4:26.6,10.3->27.5,10.2] [+227000ms]","src":"client"}
{"t":1783265898081,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:13.7,17.0->13.1,17.0 b1:15.3,13.0->15.9,13.1 b2:17.9,8.9->17.9,8.9 b3:10.7,16.9->10.3,16.9 b4:15.1,8.6->14.5,8.7] [+231083ms]","src":"client"}
{"t":1783265902132,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:17.6,8.9->16.7,8.9 b1:19.5,11.1->19.5,11.3 b2:16.9,8.9->16.4,8.9 b3:11.8,14.7->12.5,14.0 b4:14.7,9.9->14.7,9.9] [+235130ms]","src":"client"}
{"t":1783265906161,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:13.2,10.9->14.1,11.1 b1:16.2,16.6->16.2,16.6 b2:17.4,7.3->18.2,6.6 b3:24.0,6.6->23.4,6.4 b4:12.1,11.3->11.2,11.7] [+239164ms]","src":"client"}
{"t":1783265910199,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:14.7,12.4->14.7,12.4 b1:10.6,13.2->11.4,12.9 b2:21.2,16.9->21.2,16.9 b3:20.4,5.4->20.3,5.4 b4:16.3,16.9->17.3,16.9] [+243204ms]","src":"client"}
{"t":1783265914548,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:12.5,16.9->12.5,16.9 b1:23.8,7.7->24.5,7.3 b2:11.1,8.6->10.4,7.8 b3:20.2,5.4->20.2,5.4 b4:20.5,16.9->20.5,16.9] [+247234ms]","src":"client"}
{"t":1783265918285,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:8.6,16.3->7.7,16.2 b1:27.9,5.1->28.0,5.6 b2:8.2,4.6->8.2,4.6 b3:28.7,7.4->28.7,7.4 b4:26.9,13.0->26.9,13.0] [+251285ms]","src":"client"}
{"t":1783265922294,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:5.3,15.4->5.2,15.4 b1:28.9,8.8->28.9,8.8 b2:18.0,16.8->18.0,16.8 b3:22.5,12.9->22.7,13.9 b4:9.4,12.2->10.2,11.7] [+255295ms]","src":"client"}
{"t":1783265926327,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:7.0,15.4->7.0,15.4 b1:22.8,6.3->21.9,5.9 b2:17.4,16.9->17.4,16.9 b3:28.9,7.1->28.9,7.0 b4:8.2,8.1->8.2,8.1] [+259332ms]","src":"client"}
{"t":1783265930363,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:22.5,14.1->23.5,14.3 b1:10.6,16.8->10.6,16.8 b2:26.0,17.0->27.1,17.0 b3:5.2,9.5->5.1,9.6 b4:8.2,4.3->8.2,4.3] [+263367ms]","src":"client"}
{"t":1783265934438,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:8.5,14.8->9.3,14.5 b1:7.2,13.3->7.2,13.3 b2:20.3,7.9->19.6,8.3 b3:15.2,14.5->15.2,14.5 b4:10.1,6.1->10.8,6.6] [+267440ms]","src":"client"}
{"t":1783265938443,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:27.4,7.5->28.3,7.4 b1:13.3,13.4->13.3,13.4 b2:15.8,13.5->16.5,14.1 b3:13.5,5.6->13.8,5.4 b4:20.6,8.3->20.6,8.3] [+271447ms]","src":"client"}
{"t":1783265942467,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:21.0,5.6->20.9,5.6 b1:21.0,14.9->20.0,14.6 b2:8.3,6.8->8.3,6.8 b3:19.3,9.8->19.3,9.8 b4:19.4,12.4->19.3,11.8] [+275468ms]","src":"client"}
{"t":1783265944015,"cat":"LobbyB","room":"a","who":"","ev":"trial-vote","detail":"[TC180] ยืนยันโหวต 6/6 — ครบ → reveal (pass)","src":"server"}
{"t":1783265944022,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"trial-confirm","detail":"[TC180] กดยืนยันโหวต (แยก select\/confirm) → ส่งจริง [+277026ms]","src":"client"}
{"t":1783265944072,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"trial-reveal-dur","detail":"[TC174] โชว์ผลโหวต 7000ms (admin ปรับได้) ก่อนไปหน้าผลเต็ม [+277077ms]","src":"client"}
{"t":1783265946499,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:21.3,11.2->20.2,11.0 b1:5.4,9.3->5.4,9.3 b2:8.4,8.9->8.4,10.0 b3:19.3,9.2->19.3,9.2 b4:27.9,10.7->27.9,10.7] [+279503ms]","src":"client"}
{"t":1783265950528,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:8.4,7.5->8.4,7.5 b1:8.0,10.6->7.1,11.1 b2:24.9,16.9->24.9,16.9 b3:21.0,13.6->20.0,13.3 b4:14.2,6.6->14.9,7.3] [+283534ms]","src":"client"}
{"t":1783265954564,"cat":"LobbyB","room":"a-1783265509117","who":"บอท7","ev":"bot-pos","detail":"map=35x20 n=5 [b0:12.4,5.4->12.4,5.4 b1:7.6,9.1->7.6,9.1 b2:22.9,6.2->22.9,6.2 b3:19.0,11.4->19.0,11.4 b4:26.0,8.3->25.9,7.3] [+287567ms]","src":"client"}