helpful
August 3

Ошибка Degree_Tracker в Last Exception: кто виноват и что делать

Спойлер: за все годы моей игры была лишь одна поломка сейва. Да, связанная с degree_tracker.py.

В Last Exception можно увидеть разные сообщения об ошибке, но все из них либо имеют эту строчку:

Last Module Called: degree_tracker.py

либо упоминают университетские файлы (чаще всего в career_base.py):

Эту информацию можно найти в Pretty Error CallStack файла Last Exception

Такой тип ошибок чаще возникает на более поздних этапах прогрессии как следствие сломанного degree_tracker.

Так что это за ошибки, из-за чего они возникают и как с ними бороться?

P.S. многабукав, я провела полноценное исследование.



Что за Degree Tracker?

Про трэкеры

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

Например, для ведения беременности симу назначается pregnancy tracker. В нем хранится информация о том, есть ли беременность, сколько детей, кто родители и так далее. Этот же трэкер вызывает функции для вычисления генетики, рождения детей и очистки статуса беременности.

Как видите, беременность не ограничивается мудлетом, настроением и растущим животом. Без трэкера никакой прогрессии и не было бы.

А что с университетом?

Трэкер университета управляет зачислением, успеваемостью, завершением семестра, получением диплома, отчислением и прочими процессами, включая служебные.

Он также прикрепляется к каждому симу, и всю информацию о его студенческой жизни можно получить через трэкер.

Казалось бы, ничего особенного. Но это лишь на первый взгляд.


Почему происходят ошибки?

Причина возникновения

Ответ прост и сложен одновременно: потеря данных.

Как это обычно (к сожалению) бывает, проблема не воспроизводится в 100% случаев, а потому установить и устранить первоисточник поломок очень трудно.

Говоря кратко, в какой-то момент трэкер теряет данные о студенческой жизни. На панели сима все выглядит нормально, но это лишь статические данные. В процессах вместо необходимых структур – пустота, тот самый NoneType, который присутствует в ошибках Например:

Last Module Called: degree_tracker.py

Last Function Called: enroll

Error message: Exception in Sim Timeline: Exception running Element (AttributeError: 'NoneType' object has no attribute '__name__'), CategoryID: degree_tracker:2265

А присутствует он потому, что трэкер не в курсе, что данные могут быть утеряны. Предполагается, что при наличии трэкера на симе у него инициализированы необходимые данные об университете, и к их полям и функциям происходит вызов. Вот только, и правда, какое поле "имя" может быть у отсутствующего объекта?

Да, я вставляю скрины для интересующихся

И да, я читала код, прежде чем написать эту статью. Надеюсь, никто не удивлен.

Факторы риска

Пока что невозможно установить точную причину потери данных. Система университета достаточно хрупкая, и потому в некоторых случаях информация корраптится и удаляется.

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


1. Читы

Абсолютное большинство проблем связано именно с читами университета, включая зачисление, выдачу дипломов, завершение семестра и так далее.

А все потому, что все читы проверяют и изменяют статус зачисления (set_enrollment_status). К примеру:

  • university.enroll чит:
if self._enrollment_status != EnrollmentStatus.PROBATION:    
    self._set_enrollment_status(EnrollmentStatus.ENROLLED)
  • university.finish_term чит:
if self._current_credits >= self.CREDITS_REQUIRED:   
    self._set_enrollment_status(EnrollmentStatus.GRADUATED)
  • university.graduate чит:
self._set_enrollment_status(EnrollmentStatus.GRADUATED)

И так далее :)

Вот только при потере данных статус зачисления пропадает и становится тем самым NoneType, который вы часто встречаете в описании ошибки трэкера.


Это заметила не только я, но и другие моддеры. Скрины и имена называть не буду. это нарушает правила. Приведу лишь перевод обсуждения.

А: Прогресс в университете включает в себя зачисление. Читы для поступления также опасны, как и читы для завершения университета. Также опасно зачислить сима в одном сейве, а потом переехать с ним в другой сейв – игра потеряет данные о прогрессии. Это происходит не с каждым симом, но если ошибка возникнет, то она не прекратит появляться, пока вы ее не исправите.
Б: Я подозреваю, что причиной ошибок от читов может быть изменение статуса зачисления в университет (enrollment_status_change). <...> Я [в своих модах] не вмешиваюсь в статус зачисления симов, поэтому не думаю, что мои моды могут вызывать ошибку трэкера в Last Exception.

Как видите, последствия читов сохраняются при симе и в других сейвах. По этой причине ошибки могут быть не только с вашими симами, но и со скачанными. В общем-то, все в том же сервере есть краткий алгоритм поиска причины:

А: Прочитать ошибку. Разобраться, использовались ли читы. Если да, то использовать фикс (о нем ниже). Если нет, проверить, нет ли в багаже симов диплома. Если все еще нет, то проверить, есть ли скачанные симы.

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


2. Ошибки прогрессии в университете

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


Аналогичная проблема возникает и с другими взаимодействиями с университетом. Например:

  • Письмо о поступлении попало в багаж к другому симу
  • Письмо о поступлении читает другой сим
  • Поступивший сим, не закончивший обучение, переезжает в другой сейв (и теряет прогрессию как следствие)

3. Некоторые моды

Из прочих факторов — это влияние некоторых модов для университета (например, КЦ читы для него) или же старый Life Decider от Kawaii Stacie (впрочем, само использование модов от этого автора — огромный риск).


А вот что НЕ является фактором риска — это получение диплома через черту характера. Это присвоение результата без затрагивания системы университета, и оно работает также, как и добавление любых других черт через читы. Например, таким образом написан мод Instant CAS Story от Chingyu/Vicky Sims. Это также обсуждалось между моддерами:

А: В таком случае трэкер должен быть пуст, да
Б: Черты характера даже никак не привязаны к трэкеру, в тюнинге
В: Это так

Чем опасны ошибки?

Ну хорошо, а почему нельзя это просто игнорировать?

Во-первых, НИКАКУЮ ошибку КЦ нельзя игнорировать. Повторяться не буду, можете прочитать другую мою статью.

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

В-третьих, это просто назойливо. Эти ошибки трэкера будут сыпаться и сыпаться, ваша игра будет зависать (привет ошибкам таймлайна), пока вы не разберетесь с проблемой.

Оно вам надо?


Как бороться?

Окей, что происходит и почему тоже разобрались, а что делать-то?


Если дело в модах — либо убираете их, либо не пользуетесь той частью, что связана с университетом (как те же университетские читы от КЦ).


Если проблема в дипломе или письме от университета, попробуйте их вытащить из инвентаря сима.


Если проблема с самими симами, но вы совсем недавно использовали читы, то откатите сейв — это легче всего.


Если же это невозможно или не подходит вам, то соберите всех, кому диплом был выдан читами, кто переезжал из прошлого сохранения, кто был скачан с дипломом. И...

Убейте и воскресите.

Это работает, потому что при смерти у сима происходит очищение данных, включая застрявший и поломанный трэкер университета.

Легче всего это сделать с читами КЦ. Но есть и другой метод:

  1. Собрать всех проблемных симов в одну семью.
  2. Зачислить их всех в университет без использования читов.
  3. Перейти в управление мирами и вернуться обратно к этой семье.
  4. Вы получите уведомление, что симы завалили это семестр и числятся на испытательном сроке.
  5. После этого бросьте университет за каждого сима.

Честно, лучше использовать первый вариант. Он легче и надежнее. Но просто привожу вам полную информацию из саппорта сервера КЦ. К слову, там случаев с ошибками университета более тысячи – и они всегда советуют решать проблему так, как я описала.

На крайний случай вы можете просто удалить проблемного сима, если он вам не очень-то и нужен.


Превентивные меры

Из вышесказанного следуют очевидные советы, как снизить вероятность ошибки:

  1. Не используйте читы.
  2. Не качайте симов с дипломами, если только не сказано, что они были получены без читов или же добавлением черты университета.
  3. Не давайте симам, не являющимися студентами, притрагиваться к диплому, поступлению в университет и прочим процессам.
  4. Не храните диплом и письмо в багаже, особенно если вы собираетесь переезжать с симом в новый сейв.
  5. Старайтесь не переезжать в новый сейв со студентами — пусть они либо закончат учебу, либо начнут ее в новом сейве.
  6. Не используйте моды (или их модули), которые известны своими поломками, связанными с университетом.

Если же вам прям НУЖНО присвоить кому-то диплом, не играя в университете, то сделайте это через черту характера, а не через читы университета.


Надеюсь, для вас это было полезно! :)