Ошибка Degree_Tracker в Last Exception: кто виноват и что делать
Спойлер: за все годы моей игры была лишь одна поломка сейва. Да, связанная с degree_tracker.py.
В Last Exception можно увидеть разные сообщения об ошибке, но все из них либо имеют эту строчку:
Last Module Called: degree_tracker.py
либо упоминают университетские файлы (чаще всего в career_base.py):
Такой тип ошибок чаще возникает на более поздних этапах прогрессии как следствие сломанного degree_tracker.
Так что это за ошибки, из-за чего они возникают и как с ними бороться?
P.S. многабукав, я провела полноценное исследование.
Что за Degree Tracker?
Про трэкеры
Трэкеры нужны, чтобы корректно обрабатывать ситуации и процессы. Они цепляются к симу, накапливают данные, за которые отвечают, и преобразовывают их в зависимости от этапа того или иного процесса.
Например, для ведения беременности симу назначается pregnancy tracker. В нем хранится информация о том, есть ли беременность, сколько детей, кто родители и так далее. Этот же трэкер вызывает функции для вычисления генетики, рождения детей и очистки статуса беременности.
Как видите, беременность не ограничивается мудлетом, настроением и растущим животом. Без трэкера никакой прогрессии и не было бы.
А что с университетом?
Трэкер университета управляет зачислением, успеваемостью, завершением семестра, получением диплома, отчислением и прочими процессами, включая служебные.
Он также прикрепляется к каждому симу, и всю информацию о его студенческой жизни можно получить через трэкер.
Казалось бы, ничего особенного. Но это лишь на первый взгляд.
Почему происходят ошибки?
Причина возникновения
Ответ прост и сложен одновременно: потеря данных.
Как это обычно (к сожалению) бывает, проблема не воспроизводится в 100% случаев, а потому установить и устранить первоисточник поломок очень трудно.
Говоря кратко, в какой-то момент трэкер теряет данные о студенческой жизни. На панели сима все выглядит нормально, но это лишь статические данные. В процессах вместо необходимых структур – пустота, тот самый NoneType, который присутствует в ошибках Например:
Last Module Called: degree_tracker.py
Error message: Exception in Sim Timeline: Exception running Element (AttributeError: 'NoneType' object has no attribute '__name__'), CategoryID: degree_tracker:2265
А присутствует он потому, что трэкер не в курсе, что данные могут быть утеряны. Предполагается, что при наличии трэкера на симе у него инициализированы необходимые данные об университете, и к их полям и функциям происходит вызов. Вот только, и правда, какое поле "имя" может быть у отсутствующего объекта?
И да, я читала код, прежде чем написать эту статью. Надеюсь, никто не удивлен.
Факторы риска
Пока что невозможно установить точную причину потери данных. Система университета достаточно хрупкая, и потому в некоторых случаях информация корраптится и удаляется.
С этим мы ничего поделать не можем, но стоит держать в уме, что потеря данных не происходит абсолютно случайно. Ниже я разберу основные факторы, повышающие вероятность возникновения ошибок.
Абсолютное большинство проблем связано именно с читами университета, включая зачисление, выдачу дипломов, завершение семестра и так далее.
А все потому, что все читы проверяют и изменяют статус зачисления (set_enrollment_status). К примеру:
if self._enrollment_status != EnrollmentStatus.PROBATION: self._set_enrollment_status(EnrollmentStatus.ENROLLED)
if self._current_credits >= self.CREDITS_REQUIRED: self._set_enrollment_status(EnrollmentStatus.GRADUATED)
self._set_enrollment_status(EnrollmentStatus.GRADUATED)
Вот только при потере данных статус зачисления пропадает и становится тем самым NoneType, который вы часто встречаете в описании ошибки трэкера.
Это заметила не только я, но и другие моддеры. Скрины и имена называть не буду. это нарушает правила. Приведу лишь перевод обсуждения.
А: Прогресс в университете включает в себя зачисление. Читы для поступления также опасны, как и читы для завершения университета. Также опасно зачислить сима в одном сейве, а потом переехать с ним в другой сейв – игра потеряет данные о прогрессии. Это происходит не с каждым симом, но если ошибка возникнет, то она не прекратит появляться, пока вы ее не исправите.
Б: Я подозреваю, что причиной ошибок от читов может быть изменение статуса зачисления в университет (enrollment_status_change). <...> Я [в своих модах] не вмешиваюсь в статус зачисления симов, поэтому не думаю, что мои моды могут вызывать ошибку трэкера в Last Exception.
Как видите, последствия читов сохраняются при симе и в других сейвах. По этой причине ошибки могут быть не только с вашими симами, но и со скачанными. В общем-то, все в том же сервере есть краткий алгоритм поиска причины:
А: Прочитать ошибку. Разобраться, использовались ли читы. Если да, то использовать фикс (о нем ниже). Если нет, проверить, нет ли в багаже симов диплома. Если все еще нет, то проверить, есть ли скачанные симы.
Так что использование чужих симов с дипломами, которые были получены через читы, тоже рискованно.
2. Ошибки прогрессии в университете
Выше в обсуждении упоминается физический диплом как фактор риска. Это действительно так: если в багаже сима находится диплом, то при утрате данных он потеряет корректную привязку к симу и постоянно будет напоминать о своем существовании ошибкой.
Аналогичная проблема возникает и с другими взаимодействиями с университетом. Например:
- Письмо о поступлении попало в багаж к другому симу
- Письмо о поступлении читает другой сим
- Поступивший сим, не закончивший обучение, переезжает в другой сейв (и теряет прогрессию как следствие)
Из прочих факторов — это влияние некоторых модов для университета (например, КЦ читы для него) или же старый Life Decider от Kawaii Stacie (впрочем, само использование модов от этого автора — огромный риск).
А вот что НЕ является фактором риска — это получение диплома через черту характера. Это присвоение результата без затрагивания системы университета, и оно работает также, как и добавление любых других черт через читы. Например, таким образом написан мод Instant CAS Story от Chingyu/Vicky Sims. Это также обсуждалось между моддерами:
А: В таком случае трэкер должен быть пуст, да
Б: Черты характера даже никак не привязаны к трэкеру, в тюнинге
В: Это так
Чем опасны ошибки?
Ну хорошо, а почему нельзя это просто игнорировать?
Во-первых, НИКАКУЮ ошибку КЦ нельзя игнорировать. Повторяться не буду, можете прочитать другую мою статью.
Во-вторых, это не просто случайная разовая ошибка — это ошибка таймлайна. Таймлайн — это глобальный процесс, на который, как на временную шкалу, наносятся события и подпроцессы о всей игре. Можете представить, как игра себя чувствует, если в процесс планирования всей игры постоянно вклинивается поломанный код и не дает завершить какой-то этап. А поломка таймлайна ведет к поломке всего сейва.
В-третьих, это просто назойливо. Эти ошибки трэкера будут сыпаться и сыпаться, ваша игра будет зависать (привет ошибкам таймлайна), пока вы не разберетесь с проблемой.
Как бороться?
Окей, что происходит и почему тоже разобрались, а что делать-то?
Если дело в модах — либо убираете их, либо не пользуетесь той частью, что связана с университетом (как те же университетские читы от КЦ).
Если проблема в дипломе или письме от университета, попробуйте их вытащить из инвентаря сима.
Если проблема с самими симами, но вы совсем недавно использовали читы, то откатите сейв — это легче всего.
Если же это невозможно или не подходит вам, то соберите всех, кому диплом был выдан читами, кто переезжал из прошлого сохранения, кто был скачан с дипломом. И...
Это работает, потому что при смерти у сима происходит очищение данных, включая застрявший и поломанный трэкер университета.
Легче всего это сделать с читами КЦ. Но есть и другой метод:
- Собрать всех проблемных симов в одну семью.
- Зачислить их всех в университет без использования читов.
- Перейти в управление мирами и вернуться обратно к этой семье.
- Вы получите уведомление, что симы завалили это семестр и числятся на испытательном сроке.
- После этого бросьте университет за каждого сима.
Честно, лучше использовать первый вариант. Он легче и надежнее. Но просто привожу вам полную информацию из саппорта сервера КЦ. К слову, там случаев с ошибками университета более тысячи – и они всегда советуют решать проблему так, как я описала.
На крайний случай вы можете просто удалить проблемного сима, если он вам не очень-то и нужен.
Превентивные меры
Из вышесказанного следуют очевидные советы, как снизить вероятность ошибки:
- Не используйте читы.
- Не качайте симов с дипломами, если только не сказано, что они были получены без читов или же добавлением черты университета.
- Не давайте симам, не являющимися студентами, притрагиваться к диплому, поступлению в университет и прочим процессам.
- Не храните диплом и письмо в багаже, особенно если вы собираетесь переезжать с симом в новый сейв.
- Старайтесь не переезжать в новый сейв со студентами — пусть они либо закончат учебу, либо начнут ее в новом сейве.
- Не используйте моды (или их модули), которые известны своими поломками, связанными с университетом.
Если же вам прям НУЖНО присвоить кому-то диплом, не играя в университете, то сделайте это через черту характера, а не через читы университета.