- •Скрипты Морровинда для чайников
- •Предисловие к восьмому изданию
- •Вступление Как использовать это руководство.
- •Что такое скрипт?
- •Что могут скрипты?
- •Чего не могут скрипты:
- •Обучающий курс
- •Поехали!
- •Окно редактора скриптов
- •Чего мы хотим?
- •Написание скрипта
- •Имя для скрипта: 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 не работает
- •Вылет при исполнении скрипта
- •Вылет при загрузке плагина
- •Приложение Новые функции Трибунала
- •Изменения / исправления скриптов Морровинда:
- •Список новых функций Трибунала:
- •Новые функции Бладмуна
- •Список новых функций и переменных Бладмуна:
- •Ранее недокументированные функции
- •Единицы измерения:
- •Список магических эффектов
- •Список консольных команд
- •Игровые установки
- •Алфавитный указатель
Вылет при исполнении скрипта
К сожалению, на то есть масса причин. Многое связано с неустановкой "do once"-условий (например, вызов определенной функции в каждом кадре). Другие известные проблемы: Удаление объектов со скриптом из этого же скрипта. Использование Equip на любой вещи, кроме зелий (исправлено Трибуналом). Чтение заклинаний с активатора (исправлено Трибуналом). Использование AIActivate на дверях, ведущих из активной ячейки. Попытка использовать PlaceItem с тем же Object ID, на котором и запущен скрипт. Использование SetDelete на неотключенных объектах.
Вылет при загрузке плагина
Одна из причин этого — слишком длинные вычисления: такое может произойти со слишком длинной цепочкой сложений (например, сложение более 20 переменных в одной строке кода), что приведет к вылету при загрузке мода. Если это происходит, разбейте вычисления на несколько строк.
Приложение Новые функции Трибунала
Трибунал привнес ряд новых функций, исправлений и расширений старых. При этом и вы и пользователь мода должны иметь Трибунал (или Бладмун, или версию GOTY), чтобы использовать их, так что уведомляйте о необходимых дополнениях. Функции сейчас отсортированы в основном документе, но этот список может служить вам простым справочником, чтобы узнать функции от Трибунала. (огромное спасибо Mike Lipari из Bethsoft за то, что поделился этой информацией)
Изменения / исправления скриптов Морровинда:
-
SetPos принимает переменные типа float.
-
SetAngle принимает переменные типа float.
-
Equip работает как задумано и NPC надевает броню и одежду.
-
AIActivate частично исправлен.
Список новых функций Трибунала:
AddToLevCreature
AddToLevItem
ClearForceJump
ClearForceMoveJump
ClearForceRun
DaysPassed (variable)
DisableLevitation
EnableLevitation
ExplodeSpell
ForceJump
ForceMoveJump
ForceRun
GetArmorType
GetCollidingActor
GetCollidingPC
GetForceJump
GetForceMoveJump
GetForceRun
GetPCJumping
GetPCRunning
GetPCSneaking
GetScale
GetSpellReadied
GetSquareRoot
GetWaterLevel
GetWeaponDrawn
GetWeaponType
HasItemEquipped
HurtCollidingActor
ModScale
ModWaterLevel
PlaceItem
RemoveFromLevCreature
RemoveFromLevItem
SetDelete
SetJournalIndex (?)
SetScale
SetWaterLevel
Новые функции Бладмуна
Второе дополнение к Морру, Bloodmoon, привносит еще немного функций. При этом и вы, и пользователь мода должны иметь Бладмун, чтобы использовать их, так что уведомляйте о необходимых дополнениях.
Список новых функций и переменных Бладмуна:
AllowWereWolfForceGreeting
BecomeWerewolf
GetPCInJail
GetPCTraveling
GetWerewolfKills
IsWerewolf
PCKnownWerewolf PlaceAtMe
SetWerewolfAcrobatics
TurnMoonRed
TurnMoonWhite
UndoWerewolf
Ранее недокументированные функции
Эти функции не документированы в хелпе. Я описал большинство из них выше в этом руководстве, однако, использование некоторых для меня неизвестно. Я подумал, что будет не лишним перечислить их здесь для упрощения обзора. Этот список составлен с помощью HEX-редактирования Morrowind.exe, поэтому, скорее всего, является полным. (спасибо Soralis-у, XPCagey и другим, кто помогал с этим).
Не документировано в хелпе:
PayFineThief
EnableStatReviewMenu
GetFactionReaction
ShowMap
EnableBirthMenu
EnableClassMenu
EnableRaceMenu
EnableNameMenu
RemoveEffects
EnableMagicMenu
EnableMapMenu
EnableInventoryMenu
EnableStatsMenu
GetInterior
GetLineOfSight (alias for GetLOS?)
GetWindSpeed
GetCurrentTime
ResetActors
OutputRefInfo
MenuTest
Функции с написанием, отличным от документированного (XPCagey):
getHealthRatio -> getHealthGetRatio
getInvisible -> getInvisibile
setInvisible -> setInvisibile
modInvisible -> modInvisibile
getSecundusPhase -> getSecundaPhase
(верное написание справа)
И которые не работают:
getPlayerViewSwitch -> (не используется)
OnRepair -> не в строковых таблицах
UsedOnMe -> не в строковых таблицах
name -> не в строковых таблицах
Также помните, что большинство консольных команд можно использовать в скриптах (см список ниже). Многие из них не указаны в хелпе.
Функции в виде переменных:
Это список всех функций, которые вы должны объявить внутри скрипта как локальные переменные для того, чтобы использовать их.
Локальные переменные, устанавливаемые игрой:
Short OnPCEquip
Short OnPCAdd
Short OnPCRepair
Short OnPCSoulGemUse
Short OnPCHitMe
Float minimumProfit (Tribunal)
Локальные переменные, которые могут быть установлены как флаг:
Short Companion (Tribunal)
Short PCSkipEquip
Особые глобальные переменные
Некоторые глобальные переменные содержат специальные значения, которые можно использовать в своих скриптах. Поскольку они являются глобальными, объявлять их не нужно.
Short NPCVoiceDistance (750) |
Используется как расстояние, на котором NPC окликают персонажа, когда не могут за ним угнаться (для примера посмотрите DandsaScript) |
Float GameHour |
Текущий час дня (0-23) |
Short Day |
Текущий день месяца (1-30) |
Short Month |
Текущий месяц года (0-11) |
Short Year (427) |
Текущий год |
Float TimeScale (30) |
Определяет соотношение игрового и реального времени |
Short Random100 |
Каждый раунд это число устанавливается в случайную позицию от 1 до 100 |
Short PCRace |
Содержит расу персонажа. (1=аргонианин, 2=бретон, 3=данмер, 4=альтмер, 5=имперец, 6= хаджит, 7=норд, 8=орк, 9=редгард, 10=босмер). |
Short PCVampire |
Статус вампиризма: 0=не был, 1=вампир, -1= излеченный |
Short VampClan |
Если игрок – вампир, эта переменная определяет его клан: 1=Аунда, 2=Берне, 3=Куарра |
Short DaysPassed |
Tribunal: Содержит число дней с начала игры Bloodmoon: частично сломана (Информация с форума / JOG) |
Short PCWerewolf |
Статус оборотня: 0=Человек, 1=Оборотень, -1=Излечившийся |
Float WerewolfClawMult (25.00) |
Увеличивается во время заданий Оборотня, чтобы сделать атаку когтями более мощной. |
Short PCHasGoldDiscount |
В диалогах. 1 – игрок имеет достаточно золота, чтобы заплатить штраф в Гильдии Воров. |
Short PCHAsTurnIn |
В диалогах. 1 – игрок имеет достаточно золота, чтобы заплатить штраф, когда сдается. |
Short PCHasCrimeGold |
В диалогах. 1 – игрок имеет достаточно золота, чтобы заплатить. |
Short CrimeGoldTurnIn |
Золота за уменьшенный штраф |
CrimeGoldDiscount |
Золото за штраф в Гильдии Воров |