buylist time

Тема в разделе "Ошибки", создана пользователем SD, 7 май 2020.

Статус темы:
Закрыта.
  1. SD

    SD Игрок

    Не так давно я смотрел сабж и там были скупки максимум полугодичной давности. А сегодня там есть скупки старостью и полтора года и почти два. Это Икс при рестарте восстановил несвежую базу торговцев или команда глючит?
  2. X

    X Играет за мобов
    Команда форума

    Не совсем. Некоторые из этих "старых" скупок переустановили не так давно вернувшиеся в игру игроки, но их переоткрытие на высоком аптайме игрового сервера приводит к переполнению счётчика времени, используемого в момент фиксирования времени установки. Из-за этого, время переоткрытия не зафиксировалось и осталось прежним - таким, каким устанавливалось в предыдущий раз.

    Я пока не буду исправлять их вручную, может быть позже. Возможно игрок переоткроет их в ближайший месяц.

    Кстати, именно это - причина вопросиков в колонке открытия времени. Вы могли видеть такие вопросики у @buylist time в прошлом. Открытие скупки на высоком аптайме не фиксирует время скупки.

    Мы постараемся не доводить до этого в следующий раз. А со сменой эмулятора, эта архитектурная проблема пропадёт в принципе. Я понимаю, что это лишь смена всех связанных переменных на 64битные вместо 32, но не хочется исправлять это точечно в одиночку с перспективой выхода из под контроля каких-либо других вещей из-за этого.
  3. SD

    SD Игрок

    Вообще-то оно тут совсем не нужно. Минимальная градация там, кажется, день, так что значение, полученное от time(), можно спокойно делить на 86400 и сохранять именно таким. 32-х разрядов хватит за глаза.

    Или (что вероятнее) значение времени таки надо получать из time(), а не счётчика игровых тиков.
  4. X

    X Играет за мобов
    Команда форума

    Код:
    if ( !sd->state.loaded_autotrader )
        sd->buy_open_time = (int)time(NULL);
    Похоже, я ошибся: здесь уже используется системный time().

    Мы сохраняем некоторые некритичные флаги/состояния игрока (такие, как запоминание команд) в map_quit(), т.е. единожды, при плановой выгрузке персонажа из игры. Последняя аварийная остановка игры 3 мая была внеплановой, игровые процессы прерывались жёстко, поскольку с сервером была прервана связь и её нужно было вернуть. Это привело к тому, что map_quit() на персонажах не выполнился, а значит у него осталась лишь предыдущая метка об установке скупки.

    Спасибо, что обратили внимание.

    Да, проблема аптайма и некоторых сайд-эффектов связана с 32-битным счётчиком тиков. Этой проблемы нет на эмуляторе, куда мы мигрируем.
Статус темы:
Закрыта.