bug fixes
This commit is contained in:
@@ -50,7 +50,7 @@ window.startGameClick = async function() {
|
||||
sessionID = sData.sessionId;
|
||||
rng = new PseudoRNG(sData.seed);
|
||||
isGameRunning = true;
|
||||
// Wir resetten die Zeit, damit es keinen Sprung gibt
|
||||
maxRawBgIndex = 0;
|
||||
lastTime = performance.now();
|
||||
resize();
|
||||
} catch(e) {
|
||||
@@ -100,32 +100,48 @@ window.submitScore = async function() {
|
||||
// ==========================================
|
||||
window.showMyCodes = function() {
|
||||
if(window.openModal) window.openModal('codes');
|
||||
|
||||
const listEl = document.getElementById('codesList');
|
||||
if(!listEl) return;
|
||||
const claims = JSON.parse(localStorage.getItem('escape_claims') || '[]');
|
||||
|
||||
if (claims.length === 0) {
|
||||
|
||||
const rawClaims = JSON.parse(localStorage.getItem('escape_claims') || '[]');
|
||||
|
||||
if (rawClaims.length === 0) {
|
||||
listEl.innerHTML = "<div style='padding:10px; text-align:center; color:#666;'>Keine Codes gespeichert.</div>";
|
||||
return;
|
||||
}
|
||||
|
||||
const sortedClaims = rawClaims
|
||||
.map((item, index) => ({ ...item, originalIndex: index }))
|
||||
.sort((a, b) => b.score - a.score);
|
||||
|
||||
let html = "";
|
||||
for (let i = claims.length - 1; i >= 0; i--) {
|
||||
const c = claims[i];
|
||||
|
||||
|
||||
sortedClaims.forEach(c => {
|
||||
const canDelete = c.sessionId ? true : false;
|
||||
const btnStyle = canDelete ? "cursor:pointer; color:#ff4444; border-color:#ff4444;" : "cursor:not-allowed; color:gray; border-color:gray;";
|
||||
const btnAttr = canDelete ? `onclick="deleteClaim(${i}, '${c.sessionId}', '${c.code}')"` : "disabled";
|
||||
const btnAttr = canDelete ? `onclick="deleteClaim(${c.originalIndex}, '${c.sessionId}', '${c.code}')"` : "disabled";
|
||||
|
||||
let rankIcon = "📄";
|
||||
if (c.score >= 10000) rankIcon = "🔥";
|
||||
if (c.score >= 5000) rankIcon = "⭐";
|
||||
|
||||
html += `
|
||||
<div style="border-bottom:1px solid #444; padding:8px 0; display:flex; justify-content:space-between; align-items:center;">
|
||||
<div style="text-align:left;">
|
||||
<span style="color:#00e5ff; font-weight:bold; font-size:12px;">${c.code}</span>
|
||||
<span style="color:#ffcc00;">(${c.score} Pkt)</span><br>
|
||||
<span style="color:#00e5ff; font-weight:bold; font-size:12px;">${rankIcon} ${c.code}</span>
|
||||
<span style="color:#ffcc00; font-weight:bold;">(${c.score} Pkt)</span><br>
|
||||
<span style="color:#aaa; font-size:9px;">${c.name} • ${c.date}</span>
|
||||
</div>
|
||||
<button ${btnAttr} style="background:transparent; border:1px solid; padding:5px; font-size:9px; margin:0; ${btnStyle}">LÖSCHEN</button>
|
||||
<button ${btnAttr}
|
||||
style="background:transparent; border:1px solid; padding:5px; font-size:9px; margin:0; ${btnStyle}">
|
||||
LÖSCHEN
|
||||
</button>
|
||||
</div>`;
|
||||
}
|
||||
});
|
||||
|
||||
listEl.innerHTML = html;
|
||||
};
|
||||
|
||||
@@ -150,13 +166,38 @@ async function loadLeaderboard() {
|
||||
try {
|
||||
const res = await fetch(`/api/leaderboard?sessionId=${sessionID}`);
|
||||
const entries = await res.json();
|
||||
let html = "<h3>BESTENLISTE</h3>";
|
||||
|
||||
let html = "<h3 style='margin-bottom:5px'>BESTENLISTE</h3>";
|
||||
|
||||
entries.forEach(e => {
|
||||
const color = e.isMe ? "yellow" : "white";
|
||||
html += `<div style="display:flex; justify-content:space-between; color:${color}; margin-bottom:5px;"><span>#${e.rank} ${e.name}</span><span>${Math.floor(e.score/10)}</span></div>`;
|
||||
const bgStyle = e.isMe ? "background:rgba(255,255,0,0.1);" : "";
|
||||
|
||||
const betterThanMe = e.rank - 1;
|
||||
let infoText = "";
|
||||
|
||||
if (e.isMe && betterThanMe > 0) {
|
||||
infoText = `<div style='font-size:8px; color:#aaa;'>(${betterThanMe} waren besser)</div>`;
|
||||
} else if (e.isMe && betterThanMe === 0) {
|
||||
infoText = `<div style='font-size:8px; color:#ffcc00;'>👑 NIEMAND ist besser!</div>`;
|
||||
}
|
||||
|
||||
html += `
|
||||
<div style="border-bottom:1px dotted #444; padding:5px; ${bgStyle} margin-bottom:2px;">
|
||||
<div style="display:flex; justify-content:space-between; color:${color};">
|
||||
<span>#${e.rank} ${e.name.toUpperCase()}</span>
|
||||
<span>${Math.floor(e.score/10)}</span>
|
||||
</div>
|
||||
${infoText}
|
||||
</div>`;
|
||||
|
||||
if(e.rank === 3 && entries.length > 3 && !entries[3].isMe) {
|
||||
html += "<div style='text-align:center; color:gray; font-size:8px;'>...</div>";
|
||||
}
|
||||
});
|
||||
|
||||
document.getElementById('leaderboard').innerHTML = html;
|
||||
} catch(e) {}
|
||||
} catch(e) { console.error(e); }
|
||||
}
|
||||
|
||||
async function loadStartScreenLeaderboard() {
|
||||
|
||||
Reference in New Issue
Block a user