- •Скрипты Морровинда для чайников
- •Предисловие к восьмому изданию
- •Вступление Как использовать это руководство.
- •Что такое скрипт?
- •Что могут скрипты?
- •Чего не могут скрипты:
- •Обучающий курс
- •Поехали!
- •Окно редактора скриптов
- •Чего мы хотим?
- •Написание скрипта
- •Имя для скрипта: 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 не работает
- •Вылет при исполнении скрипта
- •Вылет при загрузке плагина
- •Приложение Новые функции Трибунала
- •Изменения / исправления скриптов Морровинда:
- •Список новых функций Трибунала:
- •Новые функции Бладмуна
- •Список новых функций и переменных Бладмуна:
- •Ранее недокументированные функции
- •Единицы измерения:
- •Список магических эффектов
- •Список консольных команд
- •Игровые установки
- •Алфавитный указатель
Определение и изменение реакции
Get/Mod/SetReputation
Get/Mod/SetDisposition
возможно, все это относится к базовой реакции (которая задается в CS, неизмененной никакими модификаторами)
Функции для оборотней Установка атрибутов оборотня
SetWerewolfAcrobatics
Actor -> SetWerewolfAcrobatics
Эта функция устанавливает атрибуты объекта, как у оборотня. Она устанавливает скиллы и атрибуты в значение fWerewolfxxxx установок геймплея. В большинстве случаев, это означает высокую силу, ловкость, акробатику и 0 для всего остального.
Player -> AddSpell "werewolf vision"
Player -> AddSpell "werewolf regeneration"
Player -> SetWereWolfAcrobatics
Изменение цвета Секунды
[no fix] TurnMoonWhite
[no fix] TurnMoonRed
Эти две функции очень просты – они изменяют цвет Секунды (маленькой, белой луны) с белого на красный и наоборот. Это не влияет на игру, но небо сразу выглядит другим. Используется в главном квесте Бладмуна.
if ( doOnce == 0 )
TurnMoonRed
set doOnce to 1
endif
Определение, скольких убил оборотень
[no fix] GetWerewolfKills (returns short ?)
Это счетчик, сколько NPC было убито оборотнем. Каждый раз, когда убивается NPC, в то время как игрок – оборотень, к этому счетчику добавляется 1. Он сбрасывается, когда игрок превращается в человека.
if ( GetWerewolfKills > 0 )
; код, чтобы игрок не страдал от голода.
endif
Проверка, находится ли существо в форме оборотня
IsWerewolf
If (Actor -> IsWerewolf ]
Эта функция позволяет определить, является оборотнем цель или нет. Она может использоваться на игроке или других Актерах.
if ( Player->IsWerewolf != 1 ) ;НЕ ВЫПОЛНЯТЬ ЕСЛИ ИГРОК НЕ ОБОРОТЕНЬ
return
endif
Превращение в оборотня
BecomeWerewolf
UndoWerewolf
Actor->BecomeWerewolf
Actor->UndoWerewolf
Эти функции превращают объект в оборотня и назад в человека. ВАЖНО: Использование Becomewerewolf и Undowerewolf МОЖЕТ запороть вам игру. Некоторые квесты и переменные целиком зависят от их использования, так что если вы решили использовать их, чтобы поразвлечься… (От WormGod).
if ( OnPCEquip == 1 )
Player->BecomeWereWolf
Set OnPCEquip to 0
Endif
Set timer to ( timer + GetSecondsPassed )
If ( timer > 10 )
Player->UndoWereWolf
Endif
Специальные глобальные переменные для оборотней
[no fix] PCknownWerewolf (is short global)
Глобальная переменная, которая указывает, известен ли игрок как оборотень.
[no fix] PCWerewolf (is short global)
Установлена в 1, если игрок – оборотень. Используется для контроля многих скриптов для оборотней.
[no fix] WerewolfClawMult (is float global)
Усилитель удара когтями. Точная формула неизвестна, см скрипты оборотней.
Текст и Диалог Краткая инструкция по диалогам
Диалоги как искусство в себе не может быть полностью рассмотрено здесь. Однако когда вы будете создавать квесты, вам часто придется смешивать диалоги и скрипты, чтобы контролировать квесты и добиваться определенных эффектов. Так что я приведу небольшое вступление.
Концепция диалогов в Морре
В Морровинде диалоги организованы в базу данных. Эта база структурирована следующим образом:
Верхний уровень:
Различные «подразделения» диалога:
Темы (Topics): Само тематическое слово и отклики для диалогового окна в игре.
Приветствия (Greetings): Текстовые строки, которыми вас приветствуют, когда вы начинаете диалог с актером.
Убеждение (Persuasion): Ответы, которые вы получите для успешной или провальной попытки убеждения.
Журнал (Journal): Записи в журнал.
Голоса (Voices): Звуковые файлы формата .mp3 (и субтитры), которые персонажи "говорят", когда вы проходите мимо, во время удара, во время бегства и т.д.
Подуровень 1:
Каждый из этих подразделений верхнего уровня имеют подуровни, которые я называю топиками – для секции Topics, это обычные "ключевые слова" (темы), на которые актерам есть что сказать. Эти слова будут подсвечены ("гиперссылки") в тексте и перечислены с правой стороны панели диалогового окна. Для Journal это различные заголовки (обычно один на задание). Для Voices это различные категории звуковых ответов, которые "включаются" при определенных игровых условиях и т.д. Для Greetings это просто основные категории приветствий (больной, предложения задания, стандартные и так далее). Вот как Беседка их использует (Информация с форумов / Emma):
-
Greetings 0: NPC встревожен
-
Greetings 1: Квесты (для которых не важно, является ли игрок вампиром, голым, больным, преступником и т.д.)
-
Greetings 2: Игрок вампир/раздет
-
Greetings 3: Предатели Мораг Тонг
-
Greetings 4: Преступления и болезни
-
Greetings 5: Квесты
-
Greetings 6: Фракции
-
Greetings 7: Классы, Конец игры, Рабы
-
Greetings 8: Одежда (общие приветствия на основании одежды игрока)
-
Greetings 9: Места
Для Persuasion это такие вещи, как отказ в услугах или успешная/неуспешная попытка дать взятку.
Подуровень 2:
Для каждого топика может быть еще один или несколько подразделов — это сами отклики. Для Topic и Greetings это ответы актеров на фразу темы. Для Journal это различные записи, описывающие прогресс выполнения задания.
Эти записи представлены связанным списком, что означает, что каждая запись содержит (невидимую) информацию о том, какая запись стоит перед ним, и какая после. (Это приводит к обычному сообщению об ошибке, когда в диалоге удаляли записи или перемещали их, например, при чистке мода в TESAME или, загружая несколько модов, которые изменяют одну и ту же тему. Игра более не уверена, какая запись идет после какой. Иногда это не важно, но иногда означает, что некоторые отклики будут вырезаны, потому что порядок изменился — это зависит от условий).
Записи идут вместе с условиями, которые можно установить в окне редактора диалогов. В окне тем (topic window), вы найдете список основных условий слева — здесь вы можете определить, какой актер (Actor ID) или их группа (Раса [Race], Класс [Class] и т.д.) должны знать эти отклики. Также есть два условия для игрока (Фракция игрока [PC faction] и ранг [rank]). Справа вы можете установить максимум 6 “свободных” условий, которые могут относиться к актеру, игроку или другим вещам, таким как состояние глобальных переменных — здесь много опций, с которыми вам придется разобраться самим. Это проверка записей журнала, состояние игрока, локальные или глобальные переменные, предметы в инвентаре и много других функций - некоторые эквивалентны скриптовым функциям, некоторые уникальны для диалогов. (см. ниже).
Важная и на первых порах смущающая функция редактора диалогов — фильтр (filter) (в левом нижнем углу). Когда вы выбираете здесь actor ID, вы можете видеть только темы, которые этот актер может знать (как описано выше). Помните, что когда вы создаете новую тему (topic) (возможно специально для этого актера), она не содержит ответов (responses). Таким образом, актер “не знает” ее, и только что созданная тема не появляется! Выберите пустой слот на самом верху, чтобы снова увидеть все темы, создайте ответ для новой темы, чтобы актер ее “узнал” — теперь можете снова включить фильтр, если хотите.