Skip to content

Commit 0985e3a

Browse files
committed
Решение #65 путем проверки любого очевидного слова и повтора попыток получить рабочий ID
1 parent 457eb7d commit 0985e3a

2 files changed

Lines changed: 82 additions & 2 deletions

File tree

css/style.css

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,4 +386,33 @@ input[type="submit"]:disabled {
386386
margin-bottom: 10px;
387387
/* Финальный отступ между сообщениями */
388388
}
389+
}
390+
391+
/* error overlay */
392+
393+
.error-overlay {
394+
position: fixed;
395+
top: 0;
396+
left: 0;
397+
width: 100%;
398+
height: 100%;
399+
background: rgba(0, 0, 0, 0.95);
400+
color: white;
401+
display: flex;
402+
align-items: center;
403+
justify-content: center;
404+
text-align: center;
405+
font-size: 2rem;
406+
padding: 20px;
407+
z-index: 9999;
408+
animation: fadeInOpacity 0.5s ease-in-out;
409+
}
410+
411+
.error-overlay .error-content {
412+
max-width: 600px;
413+
}
414+
415+
.error-overlay .error-icon {
416+
font-size: 5rem;
417+
margin-bottom: 20px;
389418
}

js/init.js

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,62 @@ let wordQueue = [];
77
let win_avatar_enable = false;
88

99
async function generate_secret_word() {
10-
const data = await kontekstno_query({ method: 'random-challenge' });
11-
room_id = data.id;
10+
let room_id;
11+
let is_bugged = true;
12+
let retry_count = 0;
13+
const max_retries = 5;
14+
15+
while (is_bugged) {
16+
if (retry_count >= max_retries) {
17+
show_fullscreen_error('Ошибка получения секретного слова.<br>Пожалуйста, попробуйте зайти позже.');
18+
throw new Error('Превышено количество попыток получения секретного слова.');
19+
}
20+
21+
const data = await kontekstno_query({ method: 'random-challenge' });
22+
room_id = data.id;
23+
24+
// Проверка на забагованное слово.
25+
// Если для "банан" возвращается 0, значит игра сломана и надо перезапустить.
26+
try {
27+
const check = await kontekstno_query({
28+
method: 'score',
29+
word: 'банан',
30+
challenge_id: room_id
31+
});
32+
33+
if (check.distance === 0) {
34+
console.warn(`Слово ID ${room_id} забаговано (дистанция для "банан" = 0). Попытка ${retry_count + 1}/${max_retries}...`);
35+
retry_count++;
36+
} else {
37+
is_bugged = false;
38+
}
39+
} catch (e) {
40+
console.error('Ошибка при проверке слова на баг:', e);
41+
retry_count++;
42+
// Небольшая пауза перед повтором при сетевой ошибке
43+
await new Promise(resolve => setTimeout(resolve, 1000));
44+
}
45+
}
46+
1247
return room_id;
1348
}
1449

50+
function show_fullscreen_error(message) {
51+
// Удаляем предыдущую ошибку, если она есть
52+
const existing = document.querySelector('.error-overlay');
53+
if (existing) existing.remove();
54+
55+
const error_html = `
56+
<div class="error-overlay">
57+
<div class="error-content">
58+
<div class="error-icon">⚠️</div>
59+
<div class="error-message">${message}</div>
60+
</div>
61+
</div>
62+
`;
63+
document.body.insertAdjacentHTML('beforeend', error_html);
64+
}
65+
1566
async function kontekstno_query({
1667
method = '',
1768
word = '',

0 commit comments

Comments
 (0)