Задачник по скриптам Обливиона
Автор: Visman
E-mail: visman@inbox.ru
Сайт: https://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)