fix game567

This commit is contained in:
2026-06-13 15:35:45 +00:00
parent 40e2bbd1fa
commit 933c751da6
15 changed files with 87 additions and 41 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -427,7 +427,7 @@
</div>
</div>
<script src="js/version.js?v=0.0258"></script>
<script src="js/editor.js?v=0.006131429"></script>
<script src="js/editor.js?v=0.006131500"></script>
<div class="version-tag">v —</div>
<!-- ===== QB overlay layout: map เต็มจอ + แถบเครื่องมือลอย ดัก/พับ/ปิดเปิดได้ (เพิ่มทับ ไม่แตะ editor.js) ===== -->
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

+12 -4
View File
@@ -3729,10 +3729,18 @@
.then(r => r.json())
.then(list => {
mapLoadEl.innerHTML = '<option value="">— เลือกฉากเดิม —</option>';
(list || []).forEach(m => {
if (!m) return;
// ซ่อนฉาก Quiz Battle (qbroom*) — มี qb-editor.html แยกแล้ว
if (/^qbroom\d+$/i.test(String(m.id || '')) || m.gameType === 'quiz_battle') return;
// ซ่อนฉาก Quiz Battle (qbroom*) — มี qb-editor.html แยกแล้ว
const visible = (list || []).filter(m => m && !(/^qbroom\d+$/i.test(String(m.id || '')) || m.gameType === 'quiz_battle'));
// เรียงมินิเกม "Minigame-N ..." ตามเลข 1-7 ก่อน แล้วตามด้วยฉากอื่น (ตามชื่อ)
const mgNum = (m) => { const x = String((m && m.name) || '').match(/Minigame-?\s*(\d+)/i); return x ? parseInt(x[1], 10) : null; };
visible.sort((a, b) => {
const na = mgNum(a), nb = mgNum(b);
if (na !== null && nb !== null) return na - nb;
if (na !== null) return -1;
if (nb !== null) return 1;
return String(a.name || a.id).localeCompare(String(b.name || b.id), 'th');
});
visible.forEach(m => {
const opt = document.createElement('option');
opt.value = m.id;
opt.textContent = (m.name || m.id) + ' (' + m.id + ')';
+38 -28
View File
@@ -7776,7 +7776,7 @@
}
} else {
root.style.removeProperty('--mmh-score-label');
root.style.setProperty('--mmh-score-bar', "url('" + missionMockHudAssetUrl('score-bar.png') + "')");
root.style.setProperty('--mmh-score-bar', "url('" + missionMockHudAssetUrl('score-bar.png') + "?v=3')");
}
root.style.setProperty('--mmh-score-avatar', "url('" + missionMockHudAssetUrl('score-avartar.png') + "')");
root.style.setProperty('--mmh-mic-on', "url('" + missionMockHudAssetUrl('btn-mic_on.png') + "')");
@@ -16962,6 +16962,10 @@
if (jumpQueued && onGround) {
vy = jumpV0;
onGround = false;
} else if (wasOnGround) {
/* ยืนอยู่ → ติดไปกับแท่นที่เลื่อนลง (กันลอยเหนือแท่นตอน fps สูง: การจม ∝dt² < ระยะ scroll ∝dt → onGround หลุด กระโดดไม่ได้/วิ่งค้าง) */
const platformRise = (Number(md.jumpSurviveRisePxPerSec) > 0 ? Number(md.jumpSurviveRisePxPerSec) : 42) * dt;
feetY += platformRise;
}
vy += g;
@@ -16979,32 +16983,38 @@
feetY += vy * dt;
let headTop = feetY - bh;
if (jumpSurviveOverlapsSolid(md, pxc - bw, headTop, pxc + bw, feetY)) {
if (vy > 0) {
const step = ts * 0.035;
const penetrationEst = Math.abs(vy) * dt + ts * 0.55;
const maxSteps = Math.min(160, Math.max(28, Math.ceil(penetrationEst / step) + 6));
for (let s = 0; s < maxSteps; s++) {
feetY -= step;
headTop = feetY - bh;
if (!jumpSurviveOverlapsSolid(md, pxc - bw, headTop, pxc + bw, feetY)) {
vy = 0;
onGround = true;
break;
}
}
} else if (vy < 0) {
const stepUp = ts * 0.035;
const penetrationEstUp = Math.abs(vy) * dt + ts * 0.55;
const maxStepsUp = Math.min(160, Math.max(28, Math.ceil(penetrationEstUp / stepUp) + 6));
for (let s = 0; s < maxStepsUp; s++) {
feetY += stepUp;
headTop = feetY - bh;
if (!jumpSurviveOverlapsSolid(md, pxc - bw, headTop, pxc + bw, feetY)) {
vy = 0;
break;
}
if (vy > 0 && jumpSurviveOverlapsSolid(md, pxc - bw, headTop, pxc + bw, feetY)) {
/* ตกลง → ลงยืนบนแพลตฟอร์ม/ขอบ (แพลตฟอร์มเป็น one-way: ชนเฉพาะตอนกำลังตก) */
const step = ts * 0.035;
const penetrationEst = Math.abs(vy) * dt + ts * 0.55;
const maxSteps = Math.min(160, Math.max(28, Math.ceil(penetrationEst / step) + 6));
let cleared = false;
for (let s = 0; s < maxSteps; s++) {
feetY -= step;
headTop = feetY - bh;
if (!jumpSurviveOverlapsSolid(md, pxc - bw, headTop, pxc + bw, feetY)) { cleared = true; break; }
}
if (cleared) {
/* snap แม่นยำที่ผิวบนแพลตฟอร์ม — กันตัวละคร “ดิ้น” ตอนยืน (แท่นเลื่อนลงทุกเฟรม จึงต้อง re-land แต่ตำแหน่งต้องนิ่ง) */
let lo = feetY, hi = feetY + step;
for (let i = 0; i < 20; i++) {
const mid = (lo + hi) * 0.5;
if (jumpSurviveOverlapsSolid(md, pxc - bw, mid - bh, pxc + bw, mid)) hi = mid; else lo = mid;
}
feetY = lo;
headTop = feetY - bh;
}
vy = 0;
onGround = true;
} else if (vy < 0 && jumpSurviveOverlapsObjectSolids(md, pxc - bw, headTop, pxc + bw, feetY)) {
/* กระโดดขึ้น: แพลตฟอร์มทะลุได้ (one-way) — หยุดเฉพาะกำแพง/ขอบ/เพดานจริง (objects) ไม่ให้หัวติดแท่นบน */
const stepUp = ts * 0.035;
const penetrationEstUp = Math.abs(vy) * dt + ts * 0.55;
const maxStepsUp = Math.min(160, Math.max(28, Math.ceil(penetrationEstUp / stepUp) + 6));
for (let s = 0; s < maxStepsUp; s++) {
feetY += stepUp;
headTop = feetY - bh;
if (!jumpSurviveOverlapsObjectSolids(md, pxc - bw, headTop, pxc + bw, feetY)) { vy = 0; break; }
}
} else {
onGround = false;
@@ -17364,7 +17374,7 @@
o.ty = o.y;
if (moveRight) o.direction = 'right';
else if (moveLeft) o.direction = 'left';
o.botIsWalking = Math.abs(r.vy) > 40 || moveLeft || moveRight;
o.botIsWalking = (!r.onGround && Math.abs(r.vy) > 40) || moveLeft || moveRight;
});
}
@@ -17440,7 +17450,7 @@
stepJumpSurvivePreviewBots(dt, halfViewH);
if (!jumpSurviveEliminated) {
me.isWalking = Math.abs(jumpSurviveVy) > 40 || moveLeftIn || moveRightIn;
me.isWalking = (!jumpSurviveOnGround && Math.abs(jumpSurviveVy) > 40) || moveLeftIn || moveRightIn;
if (moveRightIn) me.direction = 'right';
else if (moveLeftIn) me.direction = 'left';
+29 -1
View File
@@ -3948,6 +3948,34 @@
html #play-cyber-hud.play-cyber-hud.play-cyber-hud--quiz-tf-mock:is([data-mission-mock-skin="gauntlet_crown"], [data-mission-mock-skin="quiz_carry"]) .play-cyber-preview-line {
display: none !important;
}
/* quiz_carry (MG4): แสดง TIME กลางบนตามดีไซน์ Minigame-5 .mg-time (left:50% top:23) — ไม่ใช้ TIME ซ้ายแบบ MG2; วาง override หลัง rule ซ่อน center-stack ด้านบน (specificity เท่ากัน → มาทีหลังชนะ) */
html #play-cyber-hud.play-cyber-hud.play-cyber-hud--quiz-tf-mock[data-mission-mock-skin="quiz_carry"] .play-cyber-center-stack {
display: flex !important;
position: absolute !important;
left: 50% !important;
top: 23px !important;
transform: translateX(-50%) !important;
width: auto !important;
max-width: none !important;
min-width: 0 !important;
padding: 0 !important;
align-items: center !important;
justify-content: center !important;
grid-area: unset !important;
grid-column: unset !important;
grid-row: unset !important;
justify-self: unset !important;
align-self: unset !important;
z-index: 8 !important;
}
html #play-cyber-hud.play-cyber-hud.play-cyber-hud--quiz-tf-mock[data-mission-mock-skin="quiz_carry"] .play-cyber-time-block {
text-align: center !important;
min-width: 0 !important;
max-width: none !important;
}
html #play-cyber-hud.play-cyber-hud.play-cyber-hud--quiz-tf-mock[data-mission-mock-skin="quiz_carry"] .play-cyber-time-head {
align-items: center !important;
}
html #play-cyber-hud.play-cyber-hud.play-cyber-hud--quiz-tf-mock:is([data-mission-mock-skin="gauntlet_crown"], [data-mission-mock-skin="quiz_carry"]) .play-cyber-hud-mock-stage .play-cyber-scoreboard,
html #play-cyber-hud.play-cyber-hud.play-cyber-hud--quiz-tf-mock:is([data-mission-mock-skin="gauntlet_crown"], [data-mission-mock-skin="quiz_carry"]) .play-cyber-scoreboard.play-cyber-scoreboard--mg2-mock {
position: absolute !important;
@@ -5152,7 +5180,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.006131754"></script>
<script src="js/play.js?v=0.006131803"></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)