Новости | Об игре | Форум
01:03, 1183 онлайн
Форумы » Техническая поддержка » Время прибытия 

АвторТема: Время прибытия
ZmBi



 1 
 -7   
  написано: 11.12.2024 10:02:31 
Отплыл на шлюпке с З на Г.
Писало час с чем-то, отплыл,пишет 16минут до прибытия)
ZmBi



 2 
   
  написано: 11.12.2024 10:03:38 
А если нажать на карту то пишет 6800 секунд, то есть как и должно быть
-Эльдорадо-



 3 
 12   
  написано: 11.12.2024 10:16:22 
Так и должно быть. 16 минут даже на вертолете не долетишь
Irey 1993



 4 
 -12   
  написано: 11.12.2024 10:47:58 
Если верить ChatGPT, то в формуле представления времени есть ошибка. Но в целом, с учетом что прилетишь ты в правильное с точки зрения игровой механики время - это особо не страшно ни для кого.
Irey 1993



 5 
 -4   
  написано: 11.12.2024 10:48:02 
Давайте разберём, откуда берутся 20 минут (или 1200 секунд) вместо ожидаемых 2 часов (7216 секунд).

Оригинальный код:
javascript
Копировать код
var minutes = '0' + Math.floor(timeleft / 60); // Пример: '0120'
var seconds = '0' + (timeleft - minutes * 60);
Что происходит?
timeleft = 7216.

Math.floor(timeleft / 60) даёт 120.
Затем '0' + 120 превращает minutes в строку '0120'.
В строке seconds = '0' + (timeleft - minutes * 60):

minutes * 60 превращается в строку ('0120' * 60).
JavaScript пытается интерпретировать строку '0120' как число, но делает это некорректно.
В JavaScript, если строка содержит цифры, её можно преобразовать в число при необходимости, но при умножении строки на число результат часто оказывается неожиданным:

'0120' воспринимается как число 120, поэтому minutes * 60 = 7200.
Итог:

javascript
Копировать код
seconds = timeleft - minutes * 60; // 7216 - 7200 = 16
В результате:

minutes = '0120' (строка, воспринимается как 120).
seconds = 16.
На этом этапе всё выглядит корректным: 120 минут и 16 секунд. Однако проблема скрыта в другом месте.

Визуализация результата:
Код для отображения:

javascript
Копировать код
var res = minutes.substr(-2) + ":" + seconds.substr(-2);
Здесь используется строка minutes.substr(-2). Из-за того, что minutes = '0120', substr(-2) берёт последние 2 символа:

'0120'.substr(-2) возвращает '20'.
Это превращает отображаемое значение минут в 20, а не 120, что вводит в заблуждение.

Итог:

Отображается "20:16", как будто осталось только 20 минут и 16 секунд.
Как исправить:
Избегайте преобразования чисел в строки до окончания всех вычислений. Используйте строковые функции только для форматирования.

Исправленный код:

javascript
Копировать код
var minutes = Math.floor(timeleft / 60); // Число
var seconds = timeleft % 60; // Остаток от деления

var res = ('0' + minutes).slice(-2) + ":" + ('0' + seconds).slice(-2);
Теперь minutes = 120 будет правильно обработано:

('0' + minutes).slice(-2) возьмёт только последние две цифры после добавления ведущего нуля.
Отображаемое время станет "120:16", что соответствует 2 часам и 16 секундам.
Заключение:
20 минут берётся из-за неправильного использования substr(-2), которое отсекает последние две цифры строки '0120'. В результате вместо правильного отображения 120 минут остаются только последние две цифры — 20.
Irey 1993



 6 
 -12   
  написано: 11.12.2024 13:08:44 
Хотя, на самом деле видимо тут ИИ слегка тупит, потому что var res = ('0' + minutes).slice(-2) + ":" + ('0' + seconds).slice(-2); вроде как особо ситуацию не исправит.

Я бы или использовал просто отображение в секундах, как и на карте.

Или:

var hours = Math.floor(timeleft / 3600); var minutes = Math.floor((timeleft % 3600) / 60); var seconds = timeleft % 60; var res = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;

Но за этот код опять же не ручаюсь, потому что написан он той же GPT.

Может "кто-то" все же найдёт время и внесет изменения, по своему усмотрению. Может нет. К сожалению, второй вариант более вероятный.
Тема закрыта ZmBi

К списку тем