diff --git a/www/html/Admin/admin.js b/www/html/Admin/admin.js index 9a2b49b..1867d8a 100644 --- a/www/html/Admin/admin.js +++ b/www/html/Admin/admin.js @@ -4689,6 +4689,7 @@ if (name === 'stack-game') loadStackGamePanel(); if (name === 'highscore') loadHighscore(); if (name === 'achievements') loadAchievementsPanel(); + if (name === 'vote-timing') loadVoteTimingPanel(); if (name === 'test-mode') { loadForcedMinigamePanel(); loadSpecialCardByMapPanel(); loadTroublesomeForcePanel(); } } @@ -5188,6 +5189,45 @@ }); })(); + /* ===== เวลาโหวต (vote timing) ===== */ + function loadVoteTimingPanel() { + gameTimingFetch('GET') + .then(function (data) { + var pk = (data && data.pickVoteSec != null) ? Number(data.pickVoteSec) : 25; + var tr = (data && data.trialVoteSec != null) ? Number(data.trialVoteSec) : 30; + if (el('vote-timing-pick')) el('vote-timing-pick').value = String(Number.isFinite(pk) ? pk : 25); + if (el('vote-timing-trial')) el('vote-timing-trial').value = String(Number.isFinite(tr) ? tr : 30); + setMsg('vote-timing-msg', '', ''); + }) + .catch(function (e) { setMsg('vote-timing-msg', (e.message || 'โหลดไม่ได้') + ' — เช็ค /Game/api/game-timing', 'error'); }); + } + + (function bindVoteTiming() { + var btn = el('btn-vote-timing-save'); + if (!btn) return; + btn.addEventListener('click', function () { + var pk = Math.max(5, Math.min(120, parseInt((el('vote-timing-pick') || {}).value, 10) || 25)); + var tr = Math.max(5, Math.min(180, parseInt((el('vote-timing-trial') || {}).value, 10) || 30)); + btn.disabled = true; + gameTimingFetch('GET') + .then(function (data) { + data.pickVoteSec = pk; + data.trialVoteSec = tr; + return gameTimingFetch('PUT', data); + }) + .then(function () { return gameTimingFetch('GET'); }) + .then(function (fresh) { + var p = (fresh && fresh.pickVoteSec != null) ? fresh.pickVoteSec : pk; + var t = (fresh && fresh.trialVoteSec != null) ? fresh.trialVoteSec : tr; + if (el('vote-timing-pick')) el('vote-timing-pick').value = String(p); + if (el('vote-timing-trial')) el('vote-timing-trial').value = String(t); + setMsg('vote-timing-msg', 'บันทึกแล้ว — โหวตเลือกผู้เล่น ' + p + 's · ชี้ตัวคนร้าย ' + t + 's · ผู้เล่นต้องรีเฟรช/เข้าห้องใหม่', 'ok'); + }) + .catch(function (e) { setMsg('vote-timing-msg', (e.message || 'บันทึกไม่ได้') + ' — เช็ค Node + /Game/api/game-timing', 'error'); }) + .then(function () { btn.disabled = false; }); + }); + })(); + /* ===== Achievements admin ===== */ var achvCatalog = []; var achvCatalogById = {}; @@ -5549,7 +5589,7 @@ try { want = new URL(window.location.href).searchParams.get('tab'); } catch (e) { /* ignore */ } - var allowed = { 'change-password': true, oauth: true, 'map-editor': true, quiz: true, 'special-quiz': true, 'quiz-carry': true, 'quiz-battle': true, 'jump-survive': true, 'space-shooter': true, 'mega-virus': true, 'game-timing': true, 'stack-game': true, characters: true, accounts: true, admins: true }; + var allowed = { 'change-password': true, oauth: true, 'map-editor': true, quiz: true, 'special-quiz': true, 'vote-timing': true, 'quiz-carry': true, 'quiz-battle': true, 'jump-survive': true, 'space-shooter': true, 'mega-virus': true, 'game-timing': true, 'stack-game': true, characters: true, accounts: true, admins: true }; if (!want || !allowed[want]) return 'oauth'; if (want === 'admins' && (!admin || admin.role !== 'super')) return 'oauth'; return want; diff --git a/www/html/Admin/index.html b/www/html/Admin/index.html index b575259..c9959a9 100644 --- a/www/html/Admin/index.html +++ b/www/html/Admin/index.html @@ -112,6 +112,7 @@ + @@ -1131,6 +1132,21 @@ + +