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

От: SonozakiSisters
Поделиться:

Спойлер: за все годы моей игры была лишь одна поломка сейва. Да, связанная с 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. В нем хранится информация о том, есть ли беременность, сколько детей, кто родители и так далее. Этот же трэкер вызывает функции для вычисления генетики, рождения детей и очистки статуса беременности.

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

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

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

Banner

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

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

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

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

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

Как это обычно (к сожалению) бывает, проблема не воспроизводится в 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. Не используйте моды (или их модули), которые известны своими поломками, связанными с университетом.

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

 

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

 

SonozakiSisters:

Boosty 

Telegram

Patreon

Tumblr

Древо династии Mt. Komorebi Fushigi Monogatari

SonozakiSisters

SonozakiSisters

Привет, я Мари – создаю моды, фиксы и полезные инструменты. Люблю делиться закадровым процессом, а также объяснять ошибки и технические аспекты игрового кода.

Поделиться: