|
|
|
@@ -1847,6 +1847,9 @@
|
|
|
|
|
let quizCarryEmbedPendingQuestion = null;
|
|
|
|
|
let quizCarryEmbedCountdownStartAt = 0;
|
|
|
|
|
let quizCarryEmbedCountdownEndAt = 0;
|
|
|
|
|
/** editor embed: นับ 3–2–1 รอบสองหลังโชว์คำถาม ก่อนเปิดป้ายตัวเลือกบนแมป */
|
|
|
|
|
let quizCarryEmbedPreOptionCountdownStartAt = 0;
|
|
|
|
|
let quizCarryEmbedPreOptionCountdownEndAt = 0;
|
|
|
|
|
/** quiz_carry: epoch ให้หยิบตัวเลือกได้ · epoch ปิดรอบตอบ (ตั้งที่ Admin แท็บหยิบมาวาง) */
|
|
|
|
|
let quizCarryOptionRevealAt = 0;
|
|
|
|
|
let quizCarryAnswerCloseAt = 0;
|
|
|
|
@@ -6599,7 +6602,9 @@
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function isQuizCarryEmbedCountdownBlockingMovement() {
|
|
|
|
|
return !!(previewMode && editorEmbedReturn && isQuizCarry() && quizCarryEmbedCountdownEndAt > Date.now());
|
|
|
|
|
if (!(previewMode && editorEmbedReturn && isQuizCarry())) return false;
|
|
|
|
|
const now = Date.now();
|
|
|
|
|
return (quizCarryEmbedCountdownEndAt > now) || (quizCarryEmbedPreOptionCountdownEndAt > now);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function isQuizCarryEmbedLobbyBlockingMovement() {
|
|
|
|
@@ -6711,13 +6716,17 @@
|
|
|
|
|
quizCarryPregameActive = false;
|
|
|
|
|
hideQuizCarryPregameOverlay();
|
|
|
|
|
quizCarryPickNextQuestion();
|
|
|
|
|
if (!(previewMode && editorEmbedReturn && quizCarryEmbedCountdownEndAt > Date.now())) {
|
|
|
|
|
const nowEmb = Date.now();
|
|
|
|
|
if (!(previewMode && editorEmbedReturn && quizCarryEmbedCountdownEndAt > nowEmb)
|
|
|
|
|
&& !(previewMode && editorEmbedReturn && quizCarryEmbedPreOptionCountdownEndAt > nowEmb)) {
|
|
|
|
|
quizCarryRestoreEmbedPhaseLabel();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function quizCarryOptionsPickableNow() {
|
|
|
|
|
if (!isQuizCarry() || !quizCarryCurrent) return true;
|
|
|
|
|
/* embed: ระหว่าง 3–2–1 รอบสอง (คำถามขึ้นแล้ว) — ยังไม่วาด/ไม่ให้หยิบป้ายตัวเลือก */
|
|
|
|
|
if (previewMode && editorEmbedReturn && quizCarryEmbedPreOptionCountdownEndAt > Date.now()) return false;
|
|
|
|
|
if (!quizCarryOptionRevealAt || quizCarryOptionRevealAt <= 0) return true;
|
|
|
|
|
return Date.now() >= quizCarryOptionRevealAt;
|
|
|
|
|
}
|
|
|
|
@@ -6740,6 +6749,15 @@
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** embed: หลัง 3–2–1 ก่อนหยิบ — เปิดป้ายตัวเลือกทันที + จับเวลาตอบ carryAnswerMs */
|
|
|
|
|
function quizCarryApplyEmbedAnswerWindowAfterPreOption321() {
|
|
|
|
|
if (!quizCarryCurrent) return;
|
|
|
|
|
const ansMs = Math.max(1000, Math.floor(Number(quizCarryCarryTimingMs.carryAnswerMs)) || 5000);
|
|
|
|
|
const t0 = Date.now();
|
|
|
|
|
quizCarryOptionRevealAt = 0;
|
|
|
|
|
quizCarryAnswerCloseAt = t0 + ansMs;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function updateQuizCarryCarryPhaseHud() {
|
|
|
|
|
if (quizCarrySessionEnded) return;
|
|
|
|
|
if (quizCarryPregameActive) return;
|
|
|
|
@@ -6752,6 +6770,11 @@
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const now = Date.now();
|
|
|
|
|
if (previewMode && editorEmbedReturn && quizCarryEmbedPreOptionCountdownEndAt > 0 && now < quizCarryEmbedPreOptionCountdownEndAt) {
|
|
|
|
|
const sec = Math.max(0, Math.ceil((quizCarryEmbedPreOptionCountdownEndAt - now) / 1000));
|
|
|
|
|
phaseEl.textContent = 'เตรียมหยิบคำตอบ — นับ 3·2·1 (' + sec + ' วิ)';
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (quizCarryOptionRevealAt > 0 && now < quizCarryOptionRevealAt) {
|
|
|
|
|
const remain = Math.max(0, Math.ceil((quizCarryOptionRevealAt - now) / 1000));
|
|
|
|
|
phaseEl.textContent = 'อ่านคำถาม — ตัวเลือกขึ้นใน ' + remain + ' วิ';
|
|
|
|
@@ -6770,6 +6793,7 @@
|
|
|
|
|
if (quizCarryPregameActive) return;
|
|
|
|
|
if (!isQuizCarry() || !mapData || !quizCarryCurrent) return;
|
|
|
|
|
if (quizCarryEmbedCountdownEndAt > Date.now()) return;
|
|
|
|
|
if (quizCarryEmbedPreOptionCountdownEndAt > Date.now()) return;
|
|
|
|
|
if (quizCarryEmbedPendingQuestion) return;
|
|
|
|
|
if (quizCarryAnswerTimeupAwaitNext) return;
|
|
|
|
|
if (!quizCarryAnswerCloseAt || quizCarryAnswerCloseAt <= 0) return;
|
|
|
|
@@ -6829,10 +6853,36 @@
|
|
|
|
|
|
|
|
|
|
function tickQuizCarryEmbedCountdown() {
|
|
|
|
|
if (!previewMode || !editorEmbedReturn || !isQuizCarry()) return;
|
|
|
|
|
if (!quizCarryEmbedPendingQuestion || quizCarryEmbedCountdownEndAt <= 0) return;
|
|
|
|
|
const now = Date.now();
|
|
|
|
|
const ov = document.getElementById('quiz-carry-embed-countdown');
|
|
|
|
|
const numEl = document.getElementById('quiz-carry-embed-countdown-num');
|
|
|
|
|
|
|
|
|
|
if (quizCarryCurrent && quizCarryEmbedPreOptionCountdownEndAt > 0) {
|
|
|
|
|
if (!numEl) return;
|
|
|
|
|
if (now >= quizCarryEmbedPreOptionCountdownEndAt) {
|
|
|
|
|
quizCarryEmbedPreOptionCountdownEndAt = 0;
|
|
|
|
|
quizCarryEmbedPreOptionCountdownStartAt = 0;
|
|
|
|
|
hideQuizCarryEmbedCountdownOverlay();
|
|
|
|
|
quizCarryApplyEmbedAnswerWindowAfterPreOption321();
|
|
|
|
|
quizCarryRestoreEmbedPhaseLabel();
|
|
|
|
|
syncQuizCarryEmbedQuestionStrip();
|
|
|
|
|
updateQuizCarryCarryPhaseHud();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const elapsedPre = now - quizCarryEmbedPreOptionCountdownStartAt;
|
|
|
|
|
const nPre = 3 - Math.min(2, Math.floor(elapsedPre / 1000));
|
|
|
|
|
setCountdown321QuestionAssetGraphic(numEl, Math.max(1, Math.min(3, nPre)));
|
|
|
|
|
if (ov) {
|
|
|
|
|
ov.classList.remove('is-hidden');
|
|
|
|
|
ov.setAttribute('aria-hidden', 'false');
|
|
|
|
|
}
|
|
|
|
|
syncQuizCarryEmbedCountdownLayout();
|
|
|
|
|
showQuizCarryEmbedCountdownDigitsOnlyChrome();
|
|
|
|
|
syncQuizCarryEmbedQuestionStrip();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!quizCarryEmbedPendingQuestion || quizCarryEmbedCountdownEndAt <= 0) return;
|
|
|
|
|
if (now >= quizCarryEmbedCountdownEndAt) {
|
|
|
|
|
const pq = quizCarryEmbedPendingQuestion;
|
|
|
|
|
quizCarryEmbedPendingQuestion = null;
|
|
|
|
@@ -6851,7 +6901,9 @@
|
|
|
|
|
o.botQuizCarryPathfindAfter = 0;
|
|
|
|
|
});
|
|
|
|
|
syncQuizCarryEmbedQuestionStrip();
|
|
|
|
|
quizCarryApplyPhaseTimersForCurrentQuestion();
|
|
|
|
|
quizCarryEmbedPreOptionCountdownStartAt = Date.now();
|
|
|
|
|
quizCarryEmbedPreOptionCountdownEndAt = quizCarryEmbedPreOptionCountdownStartAt + 3000;
|
|
|
|
|
updateQuizCarryCarryPhaseHud();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const elapsed = now - quizCarryEmbedCountdownStartAt;
|
|
|
|
@@ -6874,6 +6926,8 @@
|
|
|
|
|
quizCarryEmbedPendingQuestion = null;
|
|
|
|
|
quizCarryEmbedCountdownEndAt = 0;
|
|
|
|
|
quizCarryEmbedCountdownStartAt = 0;
|
|
|
|
|
quizCarryEmbedPreOptionCountdownStartAt = 0;
|
|
|
|
|
quizCarryEmbedPreOptionCountdownEndAt = 0;
|
|
|
|
|
quizCarryOptionRevealAt = 0;
|
|
|
|
|
quizCarryAnswerCloseAt = 0;
|
|
|
|
|
hideQuizCarryEmbedCountdownOverlay();
|
|
|
|
@@ -6891,6 +6945,8 @@
|
|
|
|
|
preloadQuizCarryChoiceImages(q);
|
|
|
|
|
quizCarryEmbedCountdownStartAt = Date.now();
|
|
|
|
|
quizCarryEmbedCountdownEndAt = quizCarryEmbedCountdownStartAt + 3000;
|
|
|
|
|
quizCarryEmbedPreOptionCountdownStartAt = 0;
|
|
|
|
|
quizCarryEmbedPreOptionCountdownEndAt = 0;
|
|
|
|
|
quizCarryCurrent = null;
|
|
|
|
|
playQuizText = '';
|
|
|
|
|
clearQuizMapQuestionCarryFeedback();
|
|
|
|
@@ -7372,6 +7428,8 @@
|
|
|
|
|
quizCarryEmbedPendingQuestion = null;
|
|
|
|
|
quizCarryEmbedCountdownEndAt = 0;
|
|
|
|
|
quizCarryEmbedCountdownStartAt = 0;
|
|
|
|
|
quizCarryEmbedPreOptionCountdownStartAt = 0;
|
|
|
|
|
quizCarryEmbedPreOptionCountdownEndAt = 0;
|
|
|
|
|
quizCarryOptionRevealAt = 0;
|
|
|
|
|
quizCarryAnswerCloseAt = 0;
|
|
|
|
|
hideQuizCarryEmbedCountdownOverlay();
|
|
|
|
@@ -7676,6 +7734,8 @@
|
|
|
|
|
quizCarryEmbedPendingQuestion = null;
|
|
|
|
|
quizCarryEmbedCountdownStartAt = 0;
|
|
|
|
|
quizCarryEmbedCountdownEndAt = 0;
|
|
|
|
|
quizCarryEmbedPreOptionCountdownStartAt = 0;
|
|
|
|
|
quizCarryEmbedPreOptionCountdownEndAt = 0;
|
|
|
|
|
quizCarryOptionRevealAt = 0;
|
|
|
|
|
quizCarryAnswerCloseAt = 0;
|
|
|
|
|
quizCarryAnswerTimeupAwaitNext = false;
|
|
|
|
@@ -7738,6 +7798,8 @@
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function loadQuizCarryPoolAndStart() {
|
|
|
|
|
quizCarryEmbedPreOptionCountdownStartAt = 0;
|
|
|
|
|
quizCarryEmbedPreOptionCountdownEndAt = 0;
|
|
|
|
|
quizCarryRoundsCompleted = 0;
|
|
|
|
|
quizCarrySessionEnded = false;
|
|
|
|
|
hideQuizCarryTimeupOnDeskLayer();
|
|
|
|
@@ -7842,7 +7904,9 @@
|
|
|
|
|
} else {
|
|
|
|
|
quizCarryPickNextQuestion();
|
|
|
|
|
}
|
|
|
|
|
if (!(previewMode && editorEmbedReturn && quizCarryEmbedCountdownEndAt > Date.now())) {
|
|
|
|
|
const nowJoin = Date.now();
|
|
|
|
|
if (!(previewMode && editorEmbedReturn && quizCarryEmbedCountdownEndAt > nowJoin)
|
|
|
|
|
&& !(previewMode && editorEmbedReturn && quizCarryEmbedPreOptionCountdownEndAt > nowJoin)) {
|
|
|
|
|
quizCarryRestoreEmbedPhaseLabel();
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
@@ -14856,6 +14920,9 @@
|
|
|
|
|
} else if (previewMode && editorEmbedReturn && quizCarryEmbedCountdownEndAt > Date.now()) {
|
|
|
|
|
const rem = Math.max(0, Math.ceil((quizCarryEmbedCountdownEndAt - Date.now()) / 1000));
|
|
|
|
|
timeVal.textContent = String(rem);
|
|
|
|
|
} else if (previewMode && editorEmbedReturn && quizCarryEmbedPreOptionCountdownEndAt > Date.now()) {
|
|
|
|
|
const rem2 = Math.max(0, Math.ceil((quizCarryEmbedPreOptionCountdownEndAt - Date.now()) / 1000));
|
|
|
|
|
timeVal.textContent = String(rem2);
|
|
|
|
|
} else if (quizCarryPregameActive) {
|
|
|
|
|
timeVal.textContent = '···';
|
|
|
|
|
} else if (!quizCarryCurrent) {
|
|
|
|
@@ -16003,7 +16070,8 @@
|
|
|
|
|
if (isQuizCarry()) {
|
|
|
|
|
drawQuizCarryEmbedCountdownHighlight(ctx, worldToScreen, zDraw, timeMs);
|
|
|
|
|
}
|
|
|
|
|
if (previewMode && editorEmbedReturn && isQuizCarry() && quizCarryEmbedCountdownEndAt > Date.now()) {
|
|
|
|
|
if (previewMode && editorEmbedReturn && isQuizCarry()
|
|
|
|
|
&& (quizCarryEmbedCountdownEndAt > Date.now() || quizCarryEmbedPreOptionCountdownEndAt > Date.now())) {
|
|
|
|
|
syncQuizCarryEmbedCountdownLayout();
|
|
|
|
|
}
|
|
|
|
|
drawQuizTfScorePopupsLayer(ctx, worldToScreen, zDraw, timeMs);
|
|
|
|
|