fix game567
This commit is contained in:
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
@@ -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 |
@@ -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 + ')';
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user