Исходный код скайрима

Обновлено: 05.07.2024

Guten Abend, meine liebe Genossen и сегодня очередная часть "повествования" о том, как идет процесс "подгонки" Скайрима под мои нужды.

И, прежде чем продолжить, хотелось бы обратиться к новым подписчикам, которые успели появиться с момента выхода прошлой части:

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

Однако, иногда бывает так, что подписывается совершенно случайный человек, который "оказался рядом", увидев, к примеру, мой комментарий в совершенно стороннем посте. Если вы - один из таких, убедительная просьба - не ставьте минусов публикациям лишь по той причине, что их содержание не пересекается с вашими интересами. Поверьте, это не только нагоняет тоску, но и отбивает всякое желание дальше публиковать что-то.

А теперь мы продолжаем. Как вы уже успели заметить из моих предыдущих постов - я медленно, но, верно, делаю дом игрока на манер локации "Туманная роща".

Обливион - это не пещера, не дом и не замок. Простому смертному туда не попасть через дверь. Разорвать ткань Обливиона могут лишь те, кто познал мастерство магии.

Блин, да кому вообще интересен весь этот напыщенный пафос? В общем, господа, сегодня мы будем делать заклинание, которое будет телепортировать игрока в локацию и обратно. Причем не абы как, а с сохранением исходной точки! Откуда ушли, туда и пришли. А в этом нам поможет Папирус - скриптовый язык Скайрима.

Итак, начнем с простого. У нас уже имеется так называемый COCMarkerHeading, вот его и задействуем. Для тех, кто далек от этой темы - данный маркер обозначает место, в которое игрок будет телепортирован при использовании консольной команды "сос имялокации". К слову, в обычных помещениях используются схожие маркеры, определяющие, где окажется игрок после прохождения через дверь.

Основы скриптинга в Skyrim или разрываем ткань Обливиона The Elder Scrolls, The Elder Scrolls V: Skyrim, Skyrim, Creation Kit, Papyrus, Видео, Длиннопост

Также для для реализации данной задумки понадобится вспомогательная локация. Для чего она нужна? Чтобы не плодить мусор в основной локации, все объекты, которые задействованы в работе, отправляются в неё.

Таковая у меня уже имеется. В неё мы помещаем так называемый XMarkerHeading, и переименовываем в MGHMarkTeleport - так нам будет удобнее. Для чего он нужен? Об этом расскажу ниже. Также в этой локации можно заметить кучу суровых нордских мужичков - это NPC которые необходимы для нормального функционирования плодородной земли - каждая "грядка" ссылается на своего NPC. 30 посадочных мест - 30 немытых нордов. И, собственно, наш маркер:

Основы скриптинга в Skyrim или разрываем ткань Обливиона The Elder Scrolls, The Elder Scrolls V: Skyrim, Skyrim, Creation Kit, Papyrus, Видео, Длиннопост

Топаем в раздел Magic - Spell. Тут хранятся все имеющиеся заклинания. Создаем новое. Вписываем ID, имя, временный placeholder для описания, а также назначаем эффект.

Основы скриптинга в Skyrim или разрываем ткань Обливиона The Elder Scrolls, The Elder Scrolls V: Skyrim, Skyrim, Creation Kit, Papyrus, Видео, Длиннопост

Стоп, что? Какой эффект?

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

Spell - заклинание, которое появляется, собственно, в разделе заклинаний.

При чтении заклинания активируется привязанный эффект. Этот самый эффект и надо будет создать. Для этого топаем в Magic - Magic Effect и создаем новый. Видим кучу всего непонятного:

Основы скриптинга в Skyrim или разрываем ткань Обливиона The Elder Scrolls, The Elder Scrolls V: Skyrim, Skyrim, Creation Kit, Papyrus, Видео, Длиннопост

На самом деле, всё довольно понятно.

ID - собственно, ID.

Name - пока не разобрался, замещено placeholderom, потом глянем, где всплывет.

Effect Archetype - выставлено "Скрипт". Это значит, что магический эффект сам не будет делать ничего, а отдаст эту обязанность скрипту.

Casting type - "Выстрелил и забыл". И ежу понятно - один раз прочитали, скрипт активировался и всё. После этого можно читать еще раз.

Delivery - v subbotu указывает, на кого применяется результат заклинания - на цель, или же на себя.

Magic Skill - колдовство. Отвечает за сортировку - в какой вкладке будет заклинание.

Minimum Skill Level - пока не разобрался, что это и на что влияет.

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

Звуки - они и в Африке звуки.

А теперь самое интересное - скрипт!

Добавляется он кнопочкой Add, что справа внизу.

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

Вот, собственно, и он сам. Кому надо - забирайте.

Scriptname MGHScriptTeleport extends ActiveMagicEffect

ObjectReference Property Marker Auto
ObjectReference Property Mark Auto
Cell Property TargetCell Auto

Event OnEffectStart(Actor Caster, Actor Target)

If Caster.GetParentCell() != TargetCell
Utility.Wait(1.0)
Mark.MoveTo(Caster)
Caster.MoveTo(Marker)

Что это вообще такое? Ну, если понимать что к чему, то всё довольно понятно:

Scriptname - служебная фраза, обозначает начало скрипта.

MGHScriptTeleport - имя скрипта.

extends - служебная фраза. Дословно - "Расширяет" или же "Основывается"

extends ActiveMagicEffect - основывается на "Родителе" ActiveMagicEffect

А теперь немного логики. Вот как работает скрипт:

Для начала мы объявим "свойства":

ObjectReference Property Marker Auto
ObjectReference Property Mark Auto
Cell Property TargetCell Auto

Что есть свойства? Свойства позволяют использовать один скрипт множество раз.

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

Тогда бы мне пришлось писать два разных скрипта:

Игрок.ТелепортироватьВ - Дом_1
Игрок.ТелепортироватьВ - Дом_2

Через свойства это можно сделать одним скриптом:

Игрок.ТелепортироватьВ - СвойствоДом

И после этого уже сделать два заклинания и каждому сослаться:

Не понятно, да? Ладно, продолжим.

Предположим, игрок стоит в Вайтране и читает скрипт первый раз, дабы перенестись в локацию.

"Стоит в Вайтране" - то есть, стоит где угодно, но не в конечной локации.

Для того, чтобы проверить это условие, впишем строку:

If Caster.GetParentCell() != TargetCell

ПозицияИгрока НеРавна СвойствоЛокация - вот тут просто ссылаемся на нашу локацию, а не жестко прописываем её имя.

Utility.Wait(1.0) - подождать одну секунду, дабы сперва мы увидели графический эффект от чтения заклинания.

Mark.MoveTo(Caster) - "Метка" - тот самый маркер MGHMarkTeleport, который находился ранее во вспомогательной локации и на который мы ссылаемся в свойствах, передвигается на место игрока. Всё! Метка размещена и игра помнит, где она находится!

Caster.MoveTo(Marker) - Заклинатель, то есть игрок, перемещается на место, где расположен другой маркер - COCMarkerHeading, то есть, который расположен в основной локации и при перемещении на него, игрок перемещается в локацию.

С этим всё! Но, помните строчку?

"Стоит в Вайтране" - то есть, стоит где угодно, но не в конечной локации.

Эту работу осуществляет всё та же строчка кода:

If Caster.GetParentCell() != TargetCell

А нужный код помещает под условием Иначе

Utility.Wait(1.0) - ждем секунду

Caster.MoveTo(Mark) - игрок перемещается обратно на метку, которая расположилась в месте первого чтения заклинания и ждет не дождется, когда когда мы на неё вернемся.

EndIf - конец цикла "Если/То/Иначе"

EndEvent - конец кода (события, вообще-то - это немного другое)

Ничего не понятно, да?

Ладно, попробую рассказать это всё нормальным, человеческим языком:

Вот вам три свойства:

Читаем заклинание первый раз:

Нет! Значит, мы хотим туда попасть!

Размещаем Метку туда, где стоим, пусть дожидается нас.

Отправляемся в Локацию.

Читаем заклинание второй раз:

Угууу! Значит, мы хотим попасть обратно.

Тогда просто перемещаемся на метку, которая нас уже ждет.

Дело осталось за малым.

Вставляем текст нашего скрипта и компилируем.

Основы скриптинга в Skyrim или разрываем ткань Обливиона The Elder Scrolls, The Elder Scrolls V: Skyrim, Skyrim, Creation Kit, Papyrus, Видео, Длиннопост

Переходим в Свойства скрипта и начинаем связывать Свойста с нужными объектами:

Основы скриптинга в Skyrim или разрываем ткань Обливиона The Elder Scrolls, The Elder Scrolls V: Skyrim, Skyrim, Creation Kit, Papyrus, Видео, Длиннопост

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

Marker ссылается на Маркер, который расположен там, где мы окажемся после чтения заклинания.

TargetCell - ссылаемся на нашу локацию - AAAMGHaven. ААА - временный префикс для сортировки локации вверх списка. MGHaven - Misty Grove Haven, то бишь "Убежище в Туманной роще"


Консольные команды предназначены для выявления и устранения багов и добавляют большое количество возможностей для игрока. Данные команды доступны только в PC версии.

Во время игры нажмите клавишу [

] («тильда») для того, чтобы вызвать консоль. После чего вводите один из нижеприведённых кодов для активации необходимого действия.

Квестовые команды

Команда Описание
sqs <ID квеста> Показать все стадии квеста.
getstage <ID квеста> Показать номер текущей стадии квеста.
setstage <ID квеста> <стадия> Перейти к стадии квеста по её номеру.
completeallobjectives <ID квеста> Пометить все задачи квеста как выполненные.
resetquest <ID квеста> Перейти к стартовой стадии квеста.
setobjectivecompleted <ID квеста> <стадия> <состояние> Установить все задачи стадии квеста в состояние «выполнено» (1) или «не выполнено» (0).
setobjectivedisplayed <ID квеста> <стадия> <состояние> Установить состояние задач стадии квеста (0 - выключено, 1 - включено).
movetoqt <ID квеста> Переместить героя к текущей цели квеста.
StartQuest <ID квеста> Начать квест.
CompleteQuest <ID квеста> Завершить квест.
showquesttargets Показать ID и цели активных квестов.
sqt То же самое.
saq Начать все квесты игры (может вызвать сбой игры).
caqs Завершить все квесты игры (может вызвать сбой игры).

Навигатор по ID кодам

Общие команды

Команды изменения персонажа

На The Elder Scrolls Wiki есть два режима редактирования: визуальный редактор и исходный код (далее ИК). Все данные располагаются в ИК, а визуальный редактор лишь преобразует викитекст для наглядности.

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

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

Сворачиваемая таблица

Цвета в спойлерах можно менять, как и цвет текста. Если вам нужен сложный цвет, его можно подобрать в палитре GIMP или Photoshop. В примечаниях ниже приведена ссылка на подборку цветов и их коды. Также в спойлеры можно добавлять изображения и к тексту в них применимы все перечисленные выше способы форматирования.

Содержание

Спойлер

Спойлер — это тип оформления, при котором часть текста по умолчанию скрыта.

Дополнительные функции

Подпись

В основном используется код

Разделительная линия

Это разделительная линия.

Акроним

Исходный код, комментарии

  1. ↑ В тег <pre> нельзя заключать много текста, так как в подавляющем большинстве браузеров он будет «уезжать» за правый край страницы и для его прокручивания будет появляться горизонтальный скролл.
  2. ↑ Эффекта, аналогичного <pre>…</pre> можно добиться, просто начав строку с пробела.
  3. ↑ Комментарии используются для того, чтобы спрятать часть кода или сообщить что-либо следующим редакторам.

Переключатели

Переменные

Второй уровень

Третий уровень

Четвёртый уровень

Одиночные переносы
не влияют
на разметку.

Строка один
Строка два

Без отступа
:С отступом
::С двойным отступом

Списки

* Первый уровень
** Второй уровень
**: Пример отступа для второго уровня

  1. ↑ 1,01,1 В большинстве случаев применяют именно ненумерованный список. Нумерованный список нужен лишь тогда, когда действительно нужно перечисление.

Колонки

  • первое слово
  • второе слово
  • третье слово
  • четвёртое слово
  • пятое слово
  • шестое слово
  • седьмое слово
  1. ↑ Так как на небольших экранах страницы The Elder Scrolls Wiki довольно узкие (минимальная ширина 700 пикселей), не рекомендуется разбивать текст на четыре и более колонок.

Форматирование текста

Использование консоли

Ввод команд

  • Команды не восприимчивы к регистру: «A» и «a» идентичны;
  • Для навигации используются кнопки PgUp и PgDn ;
  • Нули в начале кода можно игнорировать, например:

Данный метод не работает с объектами из дополнений, так как в их командах в первых двух цифрах используется указатель порядка XX.

Объектные команды

Данные команды работают только с объектами. Для выбора объекта нужно кликнуть по нему в консоли. Желательно, чтобы объект был виден без помех, типа тумана, снега и прочего. Также можно выбрать объект с помощью команды prid <RefID> .

Префиксные команды

Некоторые команды требуют префикса в начале. Для примера:

Основное наполнение статей

Ссылки

Разделы, абзацы и строки

Работа с изображениями

Простая вставка

  1. ↑ Команды можно писать по-русски:
    • thumb = мини
    • left = слева
    • right = справа
    • center = центр
    • px = пкс

Галерея

Несколько однотипных изображений, используемых для оформления статьи можно оформить в галерею. Обычно галереи располагаются внизу страницы. Для того чтобы оформить самую простую галерею достаточно перечислить в столбик названия файлов изображений (без уточнения Файл:) и заключить их в теги <gallery> … </gallery>, которые нужно поставить, соответственно, над и под списком названий файлов.

<gallery>
Высасование жизненных сил Даунгард.jpg|Подпись 1
VampireLord.jpg|Подпись 2
</gallery>

Высасование жизненных сил Даунгард

VampireLord


Однако, как видно из примера, такое оформление зачастую выглядит не самым эстетичным образом. Для того, чтобы облагородить галерею существует ряд дополнительных переменных для тега <gallery> … </gallery>, с помощью которых можно изменять размеры изображений галереи, расположение галереи на странице, превратить галерею в слайд-шоу и многое другое. Рассмотрим эти переменные в таблице ниже.

Объектные команды

  1. <% × 10> Процентное соотношение уровня к главному герою (1000 = 100.0%)-
  2. <1 уровень +/-> На сколько выше или ниже уровня.
  3. <начальный уровень> Самый начальный уровень неигрового персонажа.
  4. <предельный уровень> Максимальный уровень неигрового персонажа, до которого он может развиваться.

Заплатить штраф во владениях. Либо при выбранном неигровом персонаже, либо нужно добавить в начале player. .

X = 1: Убрать похищенные предметы. 0: Не убирать. Y = 1: Пойти в тюрьму. 0: Не идти в тюрьму.

Добавить персонажу фракцию. Либо при выбранном неигровом персонаже, либо нужно добавить в начале player. . Возможные значения для ранга фракции могут быть различными, но 0 — это всегда добавления персонажа в фракцию с минимально возможным рангом, а –1 — удаление персонажа из фракции.
Примеры некоторых фракций, которые можно добавить персонажам, приведены ниже:

Запятые в шаблонах

  • В шаблоне вместо запятой введите %2C (Пример: Дверь%2C которая шепчет). Именно так сделана ссылка на уже упоминавшийся квест в статье Нелкир.
  • В шаблоне вместо запятой используем Шаблон:, (Пример: Анасси> особый друг.) Тогда Шаблон:Персонаж проигнорирует эту запятую как разделитель и результат будет как в статье Анасси.

Читайте также: