Задача 2: Записи в квестовом журнале

Задачник по скриптам Обливиона

Автор: Visman

E-mail: visman@inbox.ru
Сайт: http://alltes.ru/

 

Оглавление

 

Вступление

Задача 1: Автодобавление предметов

Задача 2: Записи в квестовом журнале

Задача 3: Автоактивация

Задача 4: Множественность ядовитости (ф-ии OBSE)

Задача 5: Ловушка (простая)

Задача 6: Почувствуй себя богом :) (заклинания и анимация)

Задача 7: Автоподбор (ф-ии OBSE)

Вступление

 

Данный задачник был написан мной (Visman'ом) для школы скриптинга сайта tesall.ru по просьбе Siegrun в начале 2009 года. За что можете ей сказать большое спасибо.

 

Ниже представлены задачи, которые помогут вам разобраться с написанием скриптов (надеюсь ;) ).

Сейчас выложено 7 задач, возможно в будущем добавлю еще.

 

Для работы вам понадобятся:

1. TES CONSTRUCTION SET - для создания плагинов (написания скриптов);

2. Учебник по скриптам OSFM V1.0. Том 1 (online) или OSFM V1.2. Том 1 (offline);

3. Расширитель функций скриптового языка Oblivion (OBSE) - для некоторых задач.

 

 

Задача 1: Автодобавление предметов

 

Задача:

Требуется один раз добавить определенный предмет в инвентарь игрока (при старте плагина).

 

Решение:

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

 

Сначала создаем квест svaQuestTestQ1. В нем ни чего прописывать не надо. Он служит только для автозапуска скрипта (галка Start Game Enabled включена).

Создаем и сохраняем новый скрипт svaScriptTestQ1. Тип скрипта Quest (задаем в поле Script Type).

 

scn svaScriptTestQ1

; блок работает когда у вас не открыто ни одного меню

Begin GameMode

Player.AddItem Gem6DiamondFlawless, 1 ; Добавляем игроку безупречный бриллиант в кол-ве 1 шт.

StopQuest svaQuestTestQ1 ; Останавливаем квест svaQuestTestQ1 в котором работает данный скрипт

End

 

Снова открываем окно квестов, выбираем квест svaQuestTestQ1 и в поле Script выбираем скрипт svaScriptTestQ1.

Жмем ОК.

Сохраняем плагин.

P.S. Через некоторое время после первого старта игры с этим плагином у вас в инвентаре появится безупречный бриллиант!

 

Задания:

1. Измените скрипт, чтобы он добавлял игроку два разных предмета.

2. Добавьте вывод информирующего окна при добавлении предмета игроку. (Используйте ф-ию MessageBox)

3. Измените скрипт так, чтобы предмет был добавлен не игроку, а какому-нибудь торговцу (торговца выберите по своему усмотрению).

 

Замечание:

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

 

Задача 2: Записи в квестовом журнале

 

Задача:

Оставить записи в квестовом журнале о посещении определенных мест (городов).

 

Решение:

Нужен квест в котором пропишем требуемые записи и скрипт для управления выводом этих записей в журнал квестов.

 

Сначала создаем квест svaQuestTestQ2. В имени квеста пишем Посещение городов и ставим галку Start Game Enabled для автостарта квеста (скрипт пока не указываем).

 

 

На вкладке Quest Stages прописываем стадии квеста. Это и будут наши сообщения в журнале квестов.

Стадии с 10 по 70 однотипны. В них заполняется поле Log Entry, которое и видно в игре.

10 - Я посетил Анвил.

20 - Я посетил Бравил.

30 - Я посетил Бруму.

40 - Я посетил Чейдинхолл.

50 - Я посетил Коррол.

60 - Я посетил Лейавиин.

70 - Я посетил Скинград.

 

 

80 стадия отличается от предыдущих. Она финальная - установлена галка Complete Quest и в поле результирующего скрипта Result Script стоит команда StopQuest svaQuestTestQ2 (для остановки данного квеста).

Поле Log Entry для этой стадии содержит Все города посещены.

 

 

Жмем OK.

Далее создаем и сохраняем новый скрипт svaScriptTestQ2. Тип скрипта Quest (задаем в поле Script Type).

 

scn svaScriptTestQ2

; переменные s1-7 будут отвечать за посещении городов

short s1

short s2

short s3

short s4

short s5

short s6

short s7

Begin GameMode

if ( s1==0 && Player.GetInWorldspace AnvilWorld )

; если посещение Анвила еще не было отслежено скриптом и игрок в Анвиле

SetStage svaQuestTestQ2 10; включаем 10 стадию квеста про Анвил, при этом выводится квестовое сообщение и в журнал квестов заносится запись

Set s1 to 1; отмечаем посещение этого города

elseif ( s2==0 && Player.GetInWorldspace BravilWorld )

; аналогично Бравил

SetStage svaQuestTestQ2 20

Set s2 to 1

elseif ( s3==0 && Player.GetInWorldspace BrumaWorld )

; аналогично Брума

SetStage svaQuestTestQ2 30

Set s3 to 1

elseif ( s4==0 && Player.GetInWorldspace CheydinhalWorld )

; аналогично Чейдинхолл

SetStage svaQuestTestQ2 40

Set s4 to 1

elseif ( s5==0 && Player.GetInWorldspace ChorrolWorld )

; аналогично Коррол

SetStage svaQuestTestQ2 50

Set s5 to 1

elseif ( s6==0 && Player.GetInWorldspace LeyawiinWorld )

; аналогично Лейавиин

SetStage svaQuestTestQ2 60

Set s6 to 1

elseif ( s7==0 && Player.GetInWorldspace SkingradWorld )

; аналогично Скинград

SetStage svaQuestTestQ2 70

Set s7 to 1

endif

End

 

Снова открываем окно квестов, выбираем квест svaQuestTestQ2 и в поле Script выбираем скрипт svaScriptTestQ2.

Жмем ОК.

Сохраняем плагин.

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

 

Задания:

1. Добавьте стадию квеста 75 - Я посетил Университет Волшебства и измените скрипт, чтобы при посещении университета в журнал квестов была добавлена эта запись.

2. Измените скрипт так, чтобы после посещения всех 7 городов включилась 80-ая стадия квеста. (При наступлении этой стадии квест завершиться и в журнале перейдет в разряд выполненных)

3. (Трудное) Дополните стадии квеста так, чтобы построение предложений было правильно для женского и мужского персонажей. (Смотрите ф-ию GetPCIsSex)

 

Замечание:

Для добавления стадий квестов и их описаний жмем ПКМ в соответствующих областях окна квестов.

 

Задача 3: Автоактивация

 

Задача:

Требуется заставить фонарь зажигать пламя при приближении и тушить его при удалении игрока.

 

Решение:

Используем ф-ию GetDistance для определения расстояния от объекта до игрока.

 

Сначала подготовим фонарь. Его создадим из объекта IronOutdoorLampPostYellow256, который находится в источниках света Light.

Переименуем его Editor ID в svaLampPostTestQ3 и на вопрос "Create a new object?" ответим "Да".

Далее создаем и сохраняем новый скрипт svaScriptTestQ3. Тип скрипта Object (задаем в поле Script Type).

 

scn svaScriptTestQ3

short flag; переменная будет отвечать за пламя (горит или нет)

; при загрузке объекта в игру

Begin OnLoad

; производим первоначальную настройку пламени

if ( GetDistance Player >= 300 ); если игрок далеко

RemoveFlames ; удаляем пламя

Set flag to 0 ; и переводим флаг в 0

else ; иначе игрок близко

AddFlames; значит добавляем пламя

Set flag to 1 ; и переводим флаг в 1

endif

End

; в игровом режиме

Begin GameMode

if ( flag == 0 ) ; если флаг указывает на то, что пламя не горит

if ( GetDistance Player < 300 ) ; проверяем положение игрока на близость к фонарю и если он близко

AddFlames ; включаем пламя

Set flag to 1 ; и флаг

endif

else ; иначе флаг указывает на горение пламени

if ( GetDistance Player > 400 ) ; тогда проверяем положение игрока на удаленность и если он далеко

RemoveFlames ; выключаем пламя

Set flag to 0 ; и флаг

endif

endif

End

 

Затем вернитесь к объекту svaLampPostTestQ3 в источниках света и пропишите в его свойствах скрипт svaScriptTestQ3. И установите радиус освещения Radius данного источника света равным 16 (чтобы не смущал :) ).

 

После этого поставьте два таких фонаря недалеко друг от друга в Торговом районе Имперского города и протестируйте их работу.

 

Задания:

1. Измените скрипт так, чтобы пламя пропадало не сразу после удаления игрока от фонаря, а через 10 секунд. (Смотрите ф-ию GetSecondsPassed)

2. Измените скрипт так, чтобы каждый раз при включении пламени на игрока кастовался огненный шар (заклинание StandardFireDamageArea3Journeyman). (Смотрите ф-ию Cast)

3. Создайте новый сундук и разместите на нем этот скрипт. Скрипт измените так, чтобы при приближении игрока к сундуку, сундук активировался автоматически (т.е. открывалось меню обмена вещами). (Смотрите ф-ию Activate)

4. Переделайте скрипт так, чтобы при первом посещении сундука возле него появлялось два бандита. (Смотрите ф-ию PlaceAtMe)





©2015-2017 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.


ТОП 5 активных страниц!

...