- •Скрипты Морровинда для чайников
- •Предисловие к восьмому изданию
- •Вступление Как использовать это руководство.
- •Что такое скрипт?
- •Что могут скрипты?
- •Чего не могут скрипты:
- •Обучающий курс
- •Поехали!
- •Окно редактора скриптов
- •Чего мы хотим?
- •Написание скрипта
- •Имя для скрипта: Begin и End
- •Обнаружение действий игрока
- •Вывод текста и получение решений игрока
- •Как выполняются локальные скрипты
- •Ваш первый баг
- •Наложение заклинания на игрока
- •Как узнать больше?
- •Синтаксис
- •Начало и завершение скриптов
- •Общий синтаксис функций:
- •Общий синтаксис: запятые, скобки и пробелы.
- •Комментарии
- •Отступы / использование табуляторов
- •Переменные Типы переменных
- •Локальные переменные
- •Глобальные переменные
- •Использование переменных в других локальных скриптах и объектах
- •Использование переменных в функциях
- •Операторы / математические расчеты
- •Проверка условий Использование условий if… elseif
- •Условия While
- •Создание булевых операторов в скриптах tes
- •Список функций tes Объяснение формата
- •Работа с объектами Работа с вещами в инвентаре Добавление и удаление вещей из инвентаря
- •Сброс предмета на пол
- •Отслеживание активности инвентаря: Добавление, сброс и использование камней душ
- •Надевание предметов
- •Отслеживание, был ли надет предмет
- •Выключение возможности надеть предмет
- •Проверка присутствия предметов в инвентаре
- •Починка предметов
- •Информация о надетых объектах
- •Функция UsedOnMe
- •Движение и создание объектов
- •Движение вдоль оси объекта
- •Движение вдоль оси мира
- •Установка позиции (другой путь, чтобы сгенерировать движение)
- •Позиционирование объектов в мире или во внутренних ячейках
- •Перемещение объекта в его оригинальную позицию
- •Помещение предмета рядом с игроком
- •Создание предметов рядом с объектом
- •Создание копий объектов с помощью PlaceItem
- •Вращение и углы
- •Вращение объектов
- •Установка углов
- •Функции размеров
- •Определения локации, относительного положения и движения Определение нахождения игрока в интерьере или в экстерьере
- •Определения ячейки игрока
- •Расстояние от одного объекта до другого
- •Определяем позицию и поворот объекта
- •Линия видимости
- •Определяем, замечен ли один актер другим
- •Определяем, когда игрок покинул ячейку
- •Определяем, путешествует ли игрок
- •Триггеры для актеров, стоящих на объектах
- •Повреждение актера, стоящего на объекте
- •Функции сталкивания объектов
- •Проверка активации предмета и его активация
- •Запирание и отпирание дверей или сундуков
- •Анимирование объектов
- •Доступные и недоступные объекты
- •Полное удаление копии
- •Не сохранять изменений объекта
- •Скрипты для npc: ии и движение npc идет в новую локацию
- •Проверка, завершил ли npc свое движение
- •Поворачиваем актера в нужном направлении
- •Задание случайного перемещения Актера
- •Актеры активируют объекты
- •Следование и эскорт
- •Определение текущего пакета ии
- •Заставляем актера красться
- •Заставляем актера бегать и прыгать: Движения в Трибунале
- •Проверка действий игрока: бежит, прыгает, крадется?
- •Определение готовности к бою
- •Заставляем кого-то падать
- •Доля в экипировке и другие функции компаньонов
- •Раса, Фракция и Ранг Определение расы
- •Определение статуса игрока во фракции
- •Изменение реакции и положения во фракции
- •Определение и изменение реакции
- •Функции для оборотней Установка атрибутов оборотня
- •Специальные глобальные переменные для оборотней
- •Текст и Диалог Краткая инструкция по диалогам
- •Концепция диалогов в Морре
- •Как работает диалог
- •Несколько золотых правил
- •Диалог 101
- •Функции для диалогов
- •Показ сообщений
- •Показ переменных и предопределенного текста в окне сообщения
- •Пример: Дурацкий простой скрипт, демонстрирующий весь возможный синтаксис:
- •Добавление темы для диалога
- •Начало и окончание диалога
- •Инициация диалога с оборотнем (Bloodmoon)
- •Множественный выбор – как задавать вопросы
- •Добавление записей в журнал и тест записей журнала
- •Специальные диалоговые функции
- •Изменение значения Hello
- •Полезные диалоговые переменные
- •Изменяем и проверяем Навыки, Атрибуты и другие характеристики Get, Set, and Mod Stats – общие замечания
- •Определение и изменение характеристик игрока и актеров: Определение и изменение атрибутов:
- •Определение и изменение Здоровья, Магии и Усталости:
- •Определяем и изменяем скиллы:
- •Определение и изменение уровня
- •Начало и конец боя
- •Обнаружение атак
- •Функции Get/Mod/Set ии для Боя: Fight, Flee, Alarm
- •Отслеживание убийств и нокаутов
- •Воскрешение мертвого Актера
- •Преступления Определение и изменение уровня преступлений
- •Заключение игрока в тюрьму
- •Очистка игрока от преступлений
- •Уровень преступления игрока
- •Полезные глобальные переменные
- •Магия Ограничение на телепортацию
- •Ограничение левитации
- •Проверка и работа с душами и камнями душ
- •Id камней душ:
- •Добавление и удаление заклинаний и проклятий
- •Кастование заклинаний
- •Управление и тестирование заклинаний
- •Управление и тестирование эффектов заклинаний
- •Тестирование болезней
- •Функции Get/Mod/Set для магии:
- •Звук Пусть актеры говорят
- •Проигрывание музыки
- •Проигрывание звуков
- •Управление звуком
- •Форматы звуковых файлов:
- •Следим за временем
- •Глобальные переменные, зависящие от времени
- •Течение дней
- •Фазы лун
- •Погода Изменение погоды
- •Изменение установок погоды для региона
- •Определение текущей погоды
- •Определение скорости ветра
- •Средства управления игрока Игрок спит
- •Включение и выключение средств управления и интерфейса Отключение средств управления
- •Включение средств управления
- •Проверка статуса средств управления
- •Переключение в вид от первого и от третьего лица
- •Функции для меню генерации персонажа
- •Определение открыл ли игрок меню
- •Использование MenuTest, чтобы открыть и закрыть меню
- •Различные функции и переменные Прерывание выполнения скрипта
- •Управление глобальными скриптами
- •Уменьшение и увеличение яркости
- •Добавление локации на карту
- •Присваивание случайных значений переменным
- •Проигрывание видео
- •Функции Уровневых Списков
- •Квадратный корень
- •Функции уровня воды
- •Советы и трюки Маленькие помощники: поиск, копирование и вставка текста
- •Альтернативные скриптовые редакторы
- •Используйте стиль для написания нормальных скриптов
- •Чистка вашего мода
- •Ограничения редактора скриптов
- •Сохранение процессорного времени
- •Нацеленные скрипты: запуск «глобальных» скриптов, привязанных к объекту
- •Проверяем, когда игрок загружает игру
- •Использование переменной CharGenState – отключение сохранения и меню
- •Обнаружение использования свитков или книг
- •Заставляем Актеров переключать оружие
- •Магические и механические ловушки
- •Скриптовая телепортация
- •Тестируем на присутствие другого мода
- •Безопасный старт глобальных скриптов — избегая скрипт main
- •Использование звука для обнаружения событий
- •Большие сражения
- •Руководство по созданию объектов для езды
- •Выбор объектов
- •Создание/Удаление объектов
- •Падение с объектов
- •Обнаружение столкновений
- •Проблема с сохранением
- •Скрипт по тригонометрии – быстрый синус и косинус
- •Манекены
- •Она на меня смотрит?
- •Кинематическая последовательность
- •Решение проблем Основные советы
- •Консоль Использование консоли для проверки переменных:
- •Использование консоли для быстрой проверки скриптов:
- •Сообщения об ошибках, неправильная работа и обычные причины в игре, когда исполняется скрипт: в редакторе
- •Внутриигровые сообщения:
- •AiTravel не работает
- •Вылет при исполнении скрипта
- •Вылет при загрузке плагина
- •Приложение Новые функции Трибунала
- •Изменения / исправления скриптов Морровинда:
- •Список новых функций Трибунала:
- •Новые функции Бладмуна
- •Список новых функций и переменных Бладмуна:
- •Ранее недокументированные функции
- •Единицы измерения:
- •Список магических эффектов
- •Список консольных команд
- •Игровые установки
- •Алфавитный указатель
Несколько золотых правил
-
Самые специфичные ответы должны быть сверху списка, ответы «для всех» должны быть в самом низу! Помните, тот ответ, который возвращает «истину», тот и берется. Так что вы не должны ставить ответ для всех в Вивеке выше, чем ответ для конкретного NPC в Вивеке.
-
Если вы хотите, чтобы NPC мог говорить с игроком о чем-то особенном, вы должны представить тематическую фразу, например в приветствии (greeting) или в отклике на тему "свежие сплетни". Как альтернативу можно использовать скрипт с функцией AddTopic.
-
Не используйте обычные слова как темы для журнала. Topic, Greeting, Journal на самом деле единая БД – вот почему журнальные темы используют формат, вида A1_dreams. Если бы стояло просто "dreams", тогда журнальная запись для "dreams" могла появиться, как отклик на диалог для слова "dreams".
-
Никогда не удаляйте тему, которая принадлежит к оригинальному Морру/Трибуналу. Это тяжело исправить и это может привести к фатальным ошибкам в сэйвах. (Emma)
-
Когда используйте секцию Greetings, не помещайте свои приветствия в самом верху. Верхние приветствия принадлежат определенным квестам, и должны быть оставлены наверху, что они всегда появлялись.
Диалог 101
Нижеследующее суммирует некоторые наиболее распространенные проблемы с диалогами. Это список был собран из дискуссий на форумах, которые прислали Klinn, Emma и GarryB.
Совет 1) Мои новые темы исчезают! Зайдите в Фильтры внизу списка тем. Выберете самый верхний пустой элемент в выпадающем меню. Рекомендуется вызвать окно диалогов с панели инструментов, а не из окон Актеров.
Совет 2) Мои NPC постоянно задают мне один и тот же вопрос! Убедитесь, что ответы находятся выше вопроса. Звучит странно, но это работает.
Совет 3) Мой NPC говорит обо всем! Чтобы NPC не говорил на стандартные Морровские темы, присоедините скрипт «nolore» к нему. Если он уже имеет скрипт, то добавьте в него объявление переменной Short NoLore.
Совет 4) Мой NPC все равно имеет дополнительные темы! Некоторые другие темы всегда будут появляться в зависимости от класса и фракции NPC. Например, члены Имперского Легиона всегда будут говорить о своей фракции, Империи и т.д.
Совет 5) Как я могу добавить темы только для моего NPC? После создания темы и ответов для нее, укажите в графе Speaker Conditions ID своего NPC.
Совет 6) Я добавил темы, но мой NPC их не имеет! Две возможности: NPC должен употребить это слово до того, как вы можете его об этом спрашивать. Обычно это делается тем, что слово добавляется в приветствие. Второе: возможно Speaker Conditions не позволяют теме появится. Даже когда вы фильтруете диалог для NPC, некоторые темы зависят от того, достиг ли игрок определенного места игры, имеет ли нужную запись в журнале и т.д.
Совет 7) Как можно поменять порядок ответов? Используйте левую и правую стрелки на клавиатуре, чтобы передвигать ответы вверх и вниз.
Совет 8) Как можно создать диалог с существами? Каждое существо может иметь свои диалог. Это можно сделать так же как и диалога с NPC, кроме одного различия.
Нужно создавать диалог, не фильтруя его. После того как вы создали диалог, можете его фильтровать для этого существа31.
Совет 9) Как чаще всего используются поля result? Emma приводит здесь полезные и часто используемые команды для полей result.
-
Player->AddItem "my item" 1 (нужный предмет добавляется игроку в инвентарь)
-
Player->RemoveItem "my item" 1 (нужный предмет удаляется из инвентаря игрока)
-
ModDisposition 5 (реакция NPC увеличится на 5 пунктов)
-
cast "my_new_spell" player (NPC скастует заклинание)
-
AiFollow Player 0 0 0 0 0 (NPC пойдет за игроком)
-
AiWander 0 0 0 0 0 0 0 0 0 0 0 0 (NPC перестанет ходить за игроком)
-
SetFight 100 (NPC нападет на игрока)
-
StartCombat->player (NPC нападет на игрока)
-
StopCombat (ааа, вы догадались. Прекратить бой)
-
StartScript "my_global_script" (начать определенный скрипт32)
-
Set companion to 1 (если вы добавили "short companion" в скрипт на NPC, то NPC станет с вами делится, требует Трибунал)
-
SetHealth 100 (установит здоровье NPC в 100, тоже самое можно использовать с другими скиллами и атрибутами, например SetMagicka, SetLongBlade и др.)
-
disable (NPC исчезнет)
-
goodbye (завершит разговор с игроком. Может быть полезно, чтобы избежать последующего разговора с NPC, который исчез)
Совет 10) Я создал много диалогов, как я могу проверить их на орфографию? Проверка орфографии осуществляется, используя функции экспорта-импорта в CS. Экспортируйте “новые” диалоги в файл, проверьте его на ошибки своим текстовым редактором и импортируйте обратно. Это гораздо проще, чем лазить по тысячам тем (Информация с форумов / GarryB)