Skyrim ck питання і відповіді по скриптам

На цій сторінці описуються поширені помилки при роботі з Papyrus і способи їх діагностування та усунення.

Звикання до Papyrus може бути складним процесом - ця сторінка покликана полегшити цей процес! Метою цієї сторінки є збір найбільш поширених перешкод і бар'єрів, з якими ми всі стикаємося, коли намагаємося працювати з Папірусом на перших порах.

Дізналися самі - підкажіть іншим! Якщо ви знайшли спосіб обійти деякі складності, будь ласка, додайте їх до цього FAQ. Настійно рекомендується давати посилання і фрагменти коду, щоб продемонструвати ваші рішення.

Загальні питання

Мій скрипт компілюється, але не працює! Як мені його налагодити?

Перед початком роботи з Papyrus, слід активувати систему логування помилок скриптів. За замовчуванням така можливість виключена - більшості користувачів вона не потрібна, а логирование трохи знижує продуктивність вашого комп'ютера для гри.

Включення логування проводиться в ini файлі. Відкрийте (або створіть) свій SkyrimCustom.ini файл в папці. / My Documents / My Games / Skyrim. Додайте в нього наступні рядки. Якщо якісь з них вже існують, переконайтеся, що значення у цих параметрів встановлені в "1", в іншому випадку змініть "0" на "1".

  • bEnableLogging включає / вимикає систему логування скриптів;
  • bEnableTrace включає Debug.Trace і пов'язані з ним функції,
  • bLoadDebugInformation буде завантажувати інформацію про номери рядків, в яких сталася помилка, таким чином, ви можете легко визначити місце її виникнення.

Якщо гра виявляє помилку в скрипті, вона виведе його в наступному форматі:

Function 0 - це функція, яка викликала повідомлення про помилку. Function 1 це функція, що викликається Function 0. Function 2 викликає Function 1 і т.д. Це допоможе вам відстежити, що може бути причиною будь-яких помилок, про які вам повідомляється.

Але, можливо, ви не побачите ніяких помилок. Що ж тоді робити? Ви можете використовувати різні налагоджувальні функції, наприклад Trace і TraceStack, щоб побачити як працює ваш скрипт, які змінні і властивості він має. Наприклад, подивіться на таку функцію:

Після додавання операторів трасування в вашу функцію, ви зможете подивитися записи в балці, щоб спробувати точно визначити, що пішло не так. У не бачите "My function called!" У вашому балці? Це означає, що ваша функція зовсім не працює і треба продовжувати пошуки причини. Ви бачите перше повідомлення, але не бачите другого ( "Cool value is 20!")? Тоді вам доведеться з'ясувати, чому виведене функцією значення відмінно від очікуваного. І ви помітите, що в прикладі, ми дійсно відстежуємо значення змінної простим "об'єднанням" за допомогою оператора "+".

Не можу видалити предмет у персонажа гравця

  • Фокус із завданням негативних значень для функції AddItem проходить тільки в консолі, а в скриптах не працює. Використовуйте замість цієї функції - правильну - RemoveItem.

Мій скрипт НЕ компілюється і я не можу використовувати Editor ID!

Мій плагін працює у мене і не працює у інших!

Це звучить як комплексна проблема. Розглянемо її по частинах:

  • Чи не забули ви прикласти до плагіну необхідні файли мешів (meshes) і / або текстур (textures)? Малоймовірно, що текстури можуть стати причиною краху гри, але їх відсутність точно зіпсує зовнішній вигляд (наприклад, об'єкти будуть рожевими або фіолетовими). Втрачені меши (meshes) можуть стати причиною графічних аномалій і навіть краху гри. Переконайтеся, що ваші графічні елементи мають відносні, а не абсолютні шляхи, інакше вони не будуть нормально довантажуватися з папок, шляхи до яких відмінні від заданих вами.
  • Ви використовуєте користувальницькі скрипти, які розширюють інші призначені для користувача скрипти? Тут є помилка [1] в пакувальників .bsa packager where if the parent custom script is not actually present in a base form in the game, then it will not be listed in the file selector for the packager. The solution is to create a dummy mesh that has the parent script attached, or manually include it in the .bsa on build.

Цей матеріал потребує перекладу або доперекладав. .
Ви можете допомогти перевести його. Не забувайте попередньо додавати рядок

>> в матеріали над якими працюєте, щоб не створювати конфлікту правок.
Будь ласка, зніміть шаблон цього повідомлення, коли матеріал буде вичитаний.

створення об'єктів

Я не можу створити новий об'єкт

  • Problem: I can not create a new object.
  • Explanation: Papyrus currently does not support the instantiation of objects within script; the new keyword only works for arrays, not objects (unlike Java, for example), and constructors do not seem to work.
  • Solution: For a workaround, you could try casting a PlaceAtMe ObjectReference as your desired object. Of course your object must extend ObjectReference for this to work.

Can not cast an object as its child

  • Problem: I can not cast an object as its child. For instance, casting an ObjectReference as a TestReference when TestReference extends ObjectReference.
  • Explanation: Casting will only work if the reference casted actually has its script attached. For instance, the TestReference base object needs to have the TestReference script attached in the editor form window for it to be castable from ObjectReference to TestReference.
  • Solution: Use the editor and attach the script to the object you're actually casting. For instance, if TestReference is supposed to refer to a book, open up the book you want to cast in the editor window, goto the scripts section, and attach the TestReference script from there.

I can not get my alias to point to a reference

I can not add a property to a script fragment!

Схожі статті