1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Исправление багов Skyrim. Восстановление связей — Обучающие статьи — Общая

The Elder Scrolls 5: Skyrim
Прохождение задания с золотым когтем

Багов на данный момент в Скайриме обнаружено огромное количество. Полный список можно посмотреть здесь, на английском, мы же постараемся сделать обзор самых часто-встречающихся. Теми, которыми отчасти можно пользоваться, и теми, которых стоит избегать.

Важно! Количество багов в лицензионной версии большое, а в пиратке просто зашкаливает. Все проблемы со скриптами, вылетами, мелькающими диалогами — относятся именно к крякнутым версиям. Если вы играете на пиратке, все нравится, но баги запарили – рекомендуем перейти на лицензионную — игровой процесс станет значительно приятней.

Список находится в доработке, собираю информацию по частям с разных форумов (сам за 40+ часов игры встретил только один глюк с текстурами). Пока все в одной куче, потом буду сортировать баги по типам.

Баг на бесконечную магию

Задание с мистическими перчатками для настройки. Берется у темного эльфа в академии, вроде бы эльф который учит иллюзии. После того как снимите перчатки — эффект бесконечной маны остается, и играть становится совершенно не интересно.

На коне можно подниматься чуть ли не на 90-градусные отвесные стены. Можно использовать, если вам хочется забраться на самые недоступные вершины.

Баг на прокачку красноречия до 100

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

Вместо букв в консоли квадратики

Необходимо открыть файл «skyrimDataInterfacefontconfig.txt» и заменить строку
map «$ConsoleFont» = «Arial» Normal
на
map «$ConsoleFont» = «Futura Condensed test» Normal

Так же, измените в ОС язык по умолчанию на английский

Иногда (у меня это бывает после свертывания и развертывания игры) появляются разные точки/полоски по всему экрану.

Иногда игра просто вылетает

купите лицензионную версию/обновите драйвера видеокарты

Застревают стрелы в персонаже

Стрелы/магия попавшие в персонажа не исчезают, и продолжают торчать

Пусть в вас еще кто-нибудь постреляет/купите лицензионную версию

Зависает/застревает во во время заставки

Данный баг встречается только на пиратках — во время первой заставки игра или зависает, или тележка упирается в невидимую стену

Попробуйте скачать это сохранение (на этапе создания персонажа), и загрузить его — тем самым пропустив заставку

Пишите баги с которыми вы столкнулись, и как с ними справились (или не справились)!
Очень желательно так же указывать игру — лицензионная или пиратка.

Хорошая новость

Вице-президент Bethesda Softworks в своем твиттере сообщил, что в скором времени (после 24-го ноября) выйдет новый патч для PC-версии. Ждем и верим в исправление большинства багов!

Исправление багов Skyrim. Восстановление связей

Исправление багов Skyrim. Восстановление связей

Я немного устал чинить чужие сохраненные игры, поэтому в этой статье расскажу, как самостоятельно исправить некоторые скриптовые баги в Skyrim.

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

Не путать с вылетами на рабочий стол!

Сразу заявляю, что я не буду отвечать на наивные комментарии вида «Я просто делаю чистку с помощью SaveTool, и у меня все прекрасно«. Искренне надеюсь, что вы не столкнетесь с ситуацией, когда SaveTool окажется бесполезной. Но если столкнетесь, вспомните про эту статью.

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

Как чтение статьи, так и исправление сохраненок, требует от пользователя умения и желания ДУМАТЬ. Но я считаю, что с этим проблем нет, так как «нужда заставит». Перспектива потерять 600-часовое сохранение и начать все заново кого угодно заставит пошевелить извилинами.

Кроме того, я кажется где-то слышал, что все жалуются, будто паззлы в Skyrim — недостаточно сложные? ) Что ж, вы можете воспринимать свою проблему как достойную головоломку

Чтобы упросить вам задачу, я специально пометил места в статье, где пользователю придется ДУМАТЬ самостоятельно.

Что такое скрипт?

Скрипт в Skyrim — это программа, написанная на интерпретируемом языке, которая расширяет функционал объектов в игре.

Читать еще:  Что делать, если компьютер (или ноутбук) не видит флешку, система не определяет съемный носитель

Тело скрипта, которое как раз вносит функционал, реагирует на игровые события и содержит всю полезную нагрузку, состоит из инструкций (набор инструкций еще называют байткодом). Тело получается из исходного кода путем компиляции (например, из CreationKit). ВСЕ скрипты, которые поставляются вместе с модами (не важно, в архиве они или нет), идут в форме скомпилированного байткода.

Как и любая другая программа, скрипт должен обладать памятью. Переменные (свойства) скрипта составляют его долгосрочную память. Переменные могут хранить числа, а могут хранить идентификаторы других скриптов для связи с ними (переменные, которые хранят ID других скриптов, называются «указателями»).

Как скрипты пишутся в сохраненную игру?

Упрощенно, игра записывает в сейв нити (как часть Стекфреймов) и сущности.

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

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

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

Но класс скрипта — один на все манекены (все манекены обрабатываются одинаково).

Итак, баги скриптов бывают двух типов :

Баг в самой логике скрипта (теле). В этом случае, надо пинать автора мода. Сами вы проблему не решите. После исправления, достаточно обновиться до новой версии мода.

Баг, связанный с неправильной памятью скриптовой сущности (т.е. неправильным значением какой-либо переменной). При этом в оригинальном моде никаких багов нет. В этом случае, пинать автора бесполезно (и даже вредно), т.к. проблема ТОЛЬКО в вашем сохранении.

«Как такое может быть» — спросите вы? Дело в том, что доступ к памяти скриптов ничем не ограничен. Любой скрипт из любого мода может изменить переменные скрипта из другого мода, игра не запрещает этого делать.

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

Также в некоторых ситуациях, игре не удается правильно заполнить значения указателей. Это может, например, возникнуть из-за хаотичной смены версий мода.

Например, вы обновили мод до версии 2. Вам не понравилось — вы откатились до версии 1. Все хорошо, используются скрипты 1-ой версии, но память-то осталась от второй версии! Автор мода мог что-то поменять в структурах данных, сущности в вашем сохранении обновились, и память скриптов изменилась. Значения существующих скриптовых переменных НЕ меняются со сменой версии мода.

Если что-то работает не так, как ожидается — скорее всего сбросились какие-то числовые параметры.

Но чаще что-то просто не работает. Например, предметы не активируются . В чем может быть причина?

Помните, я выше писал про «указатели» ? Указатель — это переменная, которая связывает одну скриптовую сущность с другой (хранит числовой идентификатор этой другой сущности). Зачем это вообще нужно?

В случае с манекенами, всю работу делает один скрипт. Одного скрипта достаточно для отслеживать броню и одевать ее на манекена.

Но в случае каких-то сложных квестов одного скрипта никогда не бывает достаточно. Работает сеть взаимосвязанных скриптов. Каждый из этих скриптов выполняет свою часть работы. Когда ему что-то нужно от другого скрипта, он посылает ему «сообщения» (вызывает функции этого скрипта). Но чтобы послать скрипту сообщения, он должен знать его идентификатор. Для этого как раз и существуют «указатели«. Они связывают скрипты друг с другом, чтобы те могли взаимодействовать.

Что произойдет, если указатель потеряет свое значение по причинам, описанным выше? Связь оборвется, скрипты не смогут взаимодействовать друг с другом. Одни скрипты не будут отправлять сообщения, а другие не будут их получать, в результате — какая-то часть работы не будет выполнена (что вы, собственно, и наблюдаете в игре).

Читать еще:  Инструкция: Как восстановить «кирпич» на Android (На примере Sony Xperia TX)

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

Если память скрипта не содержит ничего важного, можно попробовать просто удалить сущность. Для этого подойдет как SaveTool, так и Papyrus Data Transfer (Script Scalpel). Вы должны определить имя скрипта и вручную указать его.

Когда игра загружает отредактированный сейв, она видит, что что-то не сходится — сущности больше нет, хотя она должна быть привязана к объекту в игре (согласно информации в файле плагина .esp). После чего, игра восстанавливает скриптовую сущность с памятью по умолчанию (все переменные будут содержать те значения, которые изначально указал моддер). Это как раз и решает нашу проблему в большинстве случаев, т.к. изначально скрипты связаны друг с другом.

Но что если память скрипта хранит важные данные, например, о прохождении квеста? При удалении, игра забудет эти данные, и игрок не сможет завершить квест. Или к примеру, моддер не заполняет значения изначально, и пишет скрипт, который выставит их при определенном событии. В этом случае — удаление скрипта не является решением.

Восстановление связей вручную

SaveTool не умеет редактировать переменные, поэтому потребуется скачать Papyrus Data Transfer.

Рассмотрим реальный случай, когда игрок не может снять печать и освободить Серану из гроба (Жаровни не вообще никак не реагируют, когда их активируют).

В первую очередь, нужно понять, что за скрипт привязан к активатору «Жаровня». Если подумать , то можно понять, что в английской версии активаторы носят название Brazier, поэтому попробуем просто загрузить секцию в PDT и поискать скрипты с таким названием на вкладке «Скриптовые данные» (используйте строку поиска внизу). В случаях, когда название активатора не совпадает с названием скрипта, можно открыть CreationKit, найти активатор и посмотреть, какой конкретно скрипт к нему привязан.

Успех! Мы нашли класс DLC1VQ01PuzzleBrazierScript.

Посмотрим на одну из сущностей. Опасения подтвердились, видим два указателя (Pointer), которые содержат значение 0 (то есть не указывают ни на один из скриптов).

Всего в сохранении 5 сущностей DLC1VQ01PuzzleBrazierScript (очевидно, потому что в загадке используется 5 жаровней). Видим, что у каждой из них имеется данная проблема.

Из названий (mainScript — «Главный Скрипт» и puzzleController) можно логически догадаться, что это ненормально, они ДОЛЖНЫ на что-то указывать, чтобы вся схема работала.

Теперь нужно подумать и догадаться, ID каких конкретно скриптов эти переменные должны содержать.

У mainScript стоит тип скрипта DLC1VQ01PuzzleController. Попробуем вбить это название в поиск и посмотреть, что за скрипты есть с таким классом. Видим одну единственную сущность.

Очевидно, у нас просто нет никаких других вариантов. Все переменные mainScript с типом данных DLC1VQ01PuzzleController должны указывать на данную сущность.

Но у нас остается переменная puzzleController, логика подсказывает (да, в этом месте надо подумать), что она также должна указывать на DLC1VQ01PuzzleController (зачем авторы это сделали, непонятно. но скорее всего, переменная с этим именем была добавлена неофициальным патчем). Чтобы окончательно убедиться, давайте попробуем найти такую переменную в другом скрипте.

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

Ага, видим скрипт, связанный с кнопкой DLC1VQ01PuzzleButtonScript. Двойной щелчок и мы попадаем на сущность. Граф зависимостей подтверждает нашу гипотезу: puzzleController должен указывать на DLC1VQ01PuzzleController.

Давайте подумаем и посмотрим, какие еще скрипты головоломки лишены связей. Возвращаемся к DLC1VQ01PuzzleController. С кнопкой все нормально. Кроме кнопки и жаровней, у нас есть еще скрипт Гроба. Двойной щелчок на указателе puzzleCoffin и мы попадаем на скрипт DLC1VQ01PuzzleCoffinScript.

Видим, что он страдает той же проблемой, что и Brazier. mainScript ни на что не указывает. Кроме того, видим указатель Serana (очевидно, должен указывать на скрипт Сераны), который тоже пустой!

Итого, у нас есть 6 скриптов с пустыми указателями. 5 жаровней, каждая из которых содержит по два указателя с нулевым значением. И скрипт гроба, который содержит два пустых указателя (один должен быть связан с Сераной, другой — с контроллером головоломки).

Для начала нужно сделать фильтр, который подскажет инструменту, какие именно переменные можно менять.

Идем в DLC1VQ01PuzzleCoffinScript. Правой кнопкой мыши по mainScript — инструмент добавит переменную в фильтр.

Аналогично поступаем DLC1VQ01PuzzleBrazierScript (достаточно сделать для одной жаровни).

Далее, мы должны выбрать скрипт, на которые переменные должны указывать. Идем на DLC1VQ01PuzzleController и встаем на заголовок (который содержит ScriptID).

Читать еще:  Как восстановить закрытые вкладки и удалённые закладки в Яндекс браузере?

Далее выбираем опцию «Значение Переменной» (Set Variables).

Видим такое окно:

Инструмент автоматически заполнил ID скрипта и фильтр (оба значения можно теперь поменять вручную). Помните, что мы построили фильтр только для одной жаровни? Если сейчас подумать , то можно понять, что при нажатии на кнопку «Изменить«, исправится только 1 жаровня из 5.

Нам нужен фильтр, который охватит ВСЕ 5 сущностей (т.е. весь класс). Для этого достаточно убрать RefID из фильтра. Вот так это будет выглядеть:

Нажимаем «Изменить». Переменные mainScript теперь содержат верное значение. В логе можно увидеть, что операция затронула 6 переменных.

Аналогично действуем с puzzleController

Итак, у нас остается пустой указатель на Серану. Но как узнать ее скрипт? Можно подумать и поискать похожий указатель где-нибудь по соседству. Далеко ходить не пришлось — если выйти обратно в контроллер головоломки, можно увидеть переменную SeranaRef

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

Указатель на Серану в скрипте DLC1VQ01PuzzleCoffinScript выставляется аналогично:

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

Загружаем игру — баг исчез, жаровни двигаются!
Серана спасена!

Если загрузить новое сохранение в PDT, можно четко увидеть различия на графе зависимостей

Связи скрипта Жаровни, до и после:

Связи скрипта Гроба, до и после:

Более подробно про редактирование переменных можно посмотреть на видео:

Сборка исправлений

Это мод состоит из модов от нескольких авторов.

Мод изменяет следующие:
1. У торговцев теперь больше золота. Не очень много для читерства но если учесть цену на еду то этот мод вполне вписывается в атмосферу игры.
Оригинал: Не нашел где скачивал 0_o
2. Лошади теперь быстрее в 2 раза. Стандартные лошади бегали медленно по сравнению с галопом лошадей в реальной жизни.
Оригинал: http://tes-game.ru/load/skyrim/gejmplej/bystrye_loshadi/47-1-0-1142
3. Теперь животные перестанут сообщать стражникам о ваших преступлениях. Добавляет реализма.
Оригинал: http://tes-game.ru/load/skyrim/gejmplej/8068/47-2-0-10231
4. НПС, бандиты, стражники, некроманты и т.д. перестанут «танцевать» перед смертью.
Оригинал: http://tes-game.ru/load/skyrim/animacii/2060/49-1-0-3078
5. Теперь вам придется поговорить с данным человеком чтобы узнать как его зовут. Вы когда-нибуть задумывались, откуда довакин наизусть знает всех жителей Скайрима?
Оригинал: http://tes-game.ru/load/skyrim/gejmplej/6265/47-1-0-8139
6. Теперь вы будите прыгать в 2 раза выше. Стандартный прыжок практически бесполезен. Теперь нет.
Оригинал: http://tes-game.ru/load/skyrim/gejmplej/4974/47-1-0-6637
7. Тела теперь не будут проваливаться сквозь друг друга.
Оригинал: http://tes-game.ru/load/skyrim/gejmplej/3699/47-1-0-4960
8. Магия будет развиваться вместе с вами. В скайриме гг изучал новые заклинания но не совершенствовал старые.
ВНИМАНИЕ (у гг и нпс возможно перестает работать телекинез, и Обнаружение жизни/смерти)
Чтобы убрать отключите лил удалите фаил magicscaling.esp
Оригинал: http://tes-game.ru/load/skyrim/zaklinanija/1287/43-1-0-1665
Добавлены новые исправления:
9. Камера при беге будет немного покачиваться. Раньше думал что это будет мешать играть. Сейчас играть без этого не могу.
Оригинал: Где-то на нексусе.
10. Теперь вы сможете дать еду нищим и детям. Порой давая золото беднякам думал. А не пропьют ли они его. Ведь накопив 15 золотых можно купить мед хонинга. Ну или сколько он там стоит.
Оригинал: http://tes-game.ru/load/skyrim/gejmplej/11760/47-1-0-14510
11. Теперь тела будут тонуть. Постепенно не спеша они буду мееееедленно погружаться на дно.
Оригинал: http://tes-game.ru/load/skyrim/gejmplej/13315/47-1-0-16281
12. Создание предметов требует инструментов. Дова конечно молодец что умеет накалдовывать молот перед кузней и верстаком, кинжал пере дубильным станком, лопату перед плавильней. ну думаю вы поняли меня.
Оригинал: http://tes-game.ru/load/skyrim/gejmplej/sozdanie_predmetov_trebuet_instrumentov/47-1-0-8424
13. Описание локализатора, который возможно взял его от автора данного мода, который его придумал, если он сам такомым не является (Данный мод для Скайрима добавляет камням Барензии характерный звук, что в свою очередь поможет вам в их поисках)
Оригинал: http://tes-game.ru/load/skyrim/gejmplej/11566/47-1-0-14289
14. Улучшенная камера от 1-го лица. Тоесть. С помощью сие творения вы перестаёте чувствовать себя приведением когда смотрите на мир скайрима своими глазами (от 1-го лица) а не камеры преследующей довакина на протяжение всей его жизни. Вы видете свое тело в режиме от 1-го лица.
Оригинал: http://tes-game.ru/load/skyrim/gejmplej/6073/47-1-0-7929

Требование.
SKSE- http://tes-game.ru/load/skyrim/apps/1904/52-1-0-2883
Последний патч для Скайрима! Не ниже 1.9.32.0!

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

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

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector