- •8.1 Основные сведения 154
- •Предметные указатели по функциям (поиск и навигация) Предметный указатель по функциям Обливиона
- •Предметный указатель по консольным функциям
- •1. Предисловие к первому изданию
- •Немного о скриптах
- •Предпосылки для написания нового учебника - osfm
- •Реализация проекта osfm
- •Состав учебника osfm v1.2
- •Полезные ссылки на obse
- •Источники информации и проект
- •О нашей команде
- •Благодарности
- •И в заключение...
- •2. Введение
- •2.1 Как использовать это руководство.
- •2.2 Что такое скрипт?
- •2.3 Что могут скрипты?
- •2.4 Чего не могут скрипты?
- •2.5 Основные отличия в скриптинге tes 3 и tes 4
- •3. Обучающий курс
- •3.1 С чего начинать?
- •3.2 Редактор скриптов (Edit Scripts)
- •3.2.1 Основные сведения.
- •3.2.2 Пункт меню Script.
- •3.2.3 Пункт главного меню Edit.
- •3.2.4 Пункт главного меню Help.
- •3.2.5 Панель инструментов.
- •3.3 Назначение и главная цель вашего скрипта
- •3.4 Ваш первый скрипт
- •4. Основы скриптинга
- •4.1 Общая информация
- •4.2 Типы скриптов
- •4.2.1 Общие сведения о типах скриптов.
- •Локальные скрипты.
- •Нелокальные скрипты.
- •Именованные скрипты.
- •Объектные скрипты.
- •Квестовые скрипты.
- •Скрипты для магических эффектов.
- •Результирующие скрипты.
- •4.2.2 Как часто обрабатываются скрипты (Script Processing)
- •4.3 Команды (Commands)
- •4.3.1 Общие сведения о командах (Commands)
- •4.3.2 Команда Scriptname (название скрипта)
- •4.3.3 Команды объявления переменных (Declaring variables)
- •4.3.4 Команды Begin (начало блока) и End (конец блока)
- •4.3.5 Типы выполняемых блоков (BlockTypes).
- •GameMode
- •MenuMode
- •OnActivate
- •OnActorEquip
- •OnActorUnequip
- •OnAlarm
- •OnAlarmVictim
- •OnDeath
- •OnEquip
- •OnHitWith
- •OnKnockout
- •OnMagicEffectHit
- •OnMurder
- •OnPackageChange
- •OnPackageDone
- •OnPackageStart
- •OnReset
- •OnStartCombat
- •OnTrigger
- •OnTriggerActor
- •OnTriggerMob
- •OnUnequip
- •ScriptEffectFinish
- •ScriptEffectStart
- •ScriptEffectUpdate
- •4.3.6 Команда "." (точка - UseReference)
- •4.3.7 Команда Set (установить)
- •4.3.8 Команда Return (возврат)
- •4.3.9 Конструкция из команд If, ElseIf, Else, EndIf.
- •Синтаксис команд If, ElseIf, Else, EndIf
- •Операторы сравнения
- •Объединение сравнений
- •Сравнения и выражения
- •Примечания
- •4.4 Переменные (Variables)
- •4.4.1 Классификация переменных
- •Переменные
- •Классификация
- •4.4.2 Глобальные переменные (Globals)
- •Описание свойств диалогового окна Globals:
- •Глобальные переменные, обрабатываемые Oblivion.Exe:
- •Глобальные переменные, обрабатываемые в скриптах и диалогах:
- •Глобальная переменная pcVampire.
- •4.4.3 Специальные переменные (Special variables)
- •Специальные глобальные переменные:
- •Игровые месяцы:
- •4.4.4 Локальные переменные с особыми функциями:
- •4.4.5 Типы переменных
- •4.4.6 Целочисленные короткие переменные (Variable types: shortint)
- •4.4.7 Целочисленные длинные переменные (Variable types: longint)
- •4.4.8 Вещественные переменные (Variable types: floating point)
- •4.4.9 Переменные для хранения копий (Reference variable)
- •5. Ваш второй скрипт
- •5.1 Содержание
- •5.2 Введение
- •5.3 Информация о написании скриптов в Oblivion Что такое скрипт?
- •Что могут скрипты?
- •Чего не могут скрипты
- •5.4 Учебник скриптов: до написания кода.
- •Начинаем!
- •Окно редактирования скриптов
- •Что мы хотим?
- •Написание скрипта
- •5.5 Учебник скриптов: первые строки. Называем скрипт
- •Команды "Begin" и "End"
- •Выдача текстового сообщения и получение ответа от игрока.
- •Как выполняются объектные скрипты
- •5.6 Учебник скриптов: первый тест Сохранение и подготовка модификации.
- •Скрипт в игре
- •5.7 Учебник скриптов: выбор игрока, ошибки и исправления. Выбор игроком варианта ответа
- •Первые ошибки и исправления
- •5.8 Учебник скриптов: добавляем ловушку.
- •5.9 Как узнать больше.
- •5.10 Заключительные строки.
- •6. Функции в tes 4
- •6.1 Что такое функция? (Function)
- •6.2 Типы функций (Function Types)
- •6.3 Работа функций с копиями объектов
- •6.4 Описание функций tes 4 Oblivion
- •Activate
- •AddAchievement
- •AddFlames
- •AddItem
- •AddScriptPackage
- •AddSpell
- •AddTopic
- •AdvancePcLevel ( advLevel )
- •AdvancePcSkill ( advSkill)
- •CloseCurrentOblivionGate
- •CloseOblivionGate
- •CompleteQuest
- •CreateFullActorCopy
- •DeleteFullActorCopy
- •Disable
- •DisableLinkedPathPoints
- •DisablePlayerControls
- •DispelAllSpells
- •DuplicateAllItems
- •DuplicateNpcStats
- •EnableFastTravel
- •EnableLinkedPathPoints
- •EnablePlayerControls
- •EquipItem
- •EssentialDeathReload
- •EvaluatePackage ( evp)
- •ForceActorValue ( ForseAv )
- •ForceCloseOblivionGate
- •ForceFlee
- •ForceTakeCover
- •ForceWeather
- •Id погоды для консольного использования (Console iDs):
- •GetActionRef
- •GetActorValue (GetAv)
- •GetAlarmed
- •GetAmountSoldStolen
- •GetAngle
- •GetArmorRating
- •GetArmorRatingUpperBody
- •GetAttacked
- •GetBarterGold
- •GetBaseActorValue (GetBaseAv)
- •GetButtonPressed
- •GetClassDefaultMatch
- •GetClothingValue
- •GetCombatTarget
- •GetContainer
- •GetCrime
- •GetCrimeGold
- •GetCrimeKnown
- •GetCurrentAiPackage
- •GetCurrentAiProcedure
- •GetCurrentTime
- •GetCurrentWeatherPercent
- •GetDayOfWeek
- •GetDead
- •GetDeadCount
- •GetDestroyed
- •GetDetected
- •GetDetectionLevel
- •GetDisabled
- •GetDisease
- •GetDisposition
- •GetDistance
- •GetDoorDefaultOpen
- •GetEquipped
- •GetFactionRank
- •GetFactionRankDifference
- •GetFactionReaction
- •GetFatiguePercentage
- •GetForceRun
- •GetForceSneak
- •GetFriendHit
- •GetFurnitureMarkerId
- •GetGameSetting ( getGs )
- •GetGlobalValue
- •GetGold
- •GetHeadingAngle
- •GetIdleDoneOnce
- •GetIgnoreFriendlyHits
- •GetInCell
- •GetInCellParam
- •GetInFaction
- •GetInSameCell
- •GetInWorldSpace
- •GetInvestmentGold
- •GetIsAlerted
- •GetIsClass
- •GetIsClassDefault
- •GetIsCreature
- •GetIsCurrentPackage
- •GetIsCurrentWeather
- •GetIsGhost
- •GetIsId
- •GetIsSex
- •GetIsUsedItem
- •GetIsUsedItemType
- •GetItemCount
- •GetKnockedState
- •GetLevel
- •GetLockLevel
- •GetPcExpelled
- •GetPcFactionAttack
- •GetPcFactionMurder
- •GetPcFactionSteal
- •GetPcFactionSubmitAuthority
- •GetPcFame
- •GetPcInFaction
- •GetPcInfamy
- •GetPcIsClass
- •GetPcIsRace
- •GetPcIsSex
- •GetPcMiscStat
- •GetQuestVariable
- •GetRandomPercent
- •GetRestrained
- •GetScale
- •GetScriptVariable
- •GetSecondsPassed
- •GetSelf
- •GetShouldAttack
- •GetSitting
- •GetSleeping
- •GetStage
- •GetStageDone
- •GetStartingAngle
- •GetStartingPos
- •GetTalkedToPc
- •GetTalkedToPcParam
- •GetTimeDead
- •GetTotalPersuasionNumber
- •GetTrespassWarningLevel
- •GetUnconscious
- •GetUsedItemActivate
- •GetUsedItemLevel
- •GetVampire
- •GetWalkSpeed
- •GetWeaponAnimType
- •GetWeaponSkillType
- •GetWindSpeed
- •GoToJail
- •HasFlames
- •HasMagicEffect
- •HasVampireFed
- •IsActionRef
- •IsActor
- •IsActorAVictim
- •IsActorDetected
- •IsActorEvil
- •IsCloudy
- •IsContinuingPackagePcNear
- •IsCurrentFurnitureObj
- •IsCurrentFurnitureRef
- •IsEssential
- •IsFacingUp
- •IsGuard
- •IsHorseStolen
- •IsIdlePlaying
- •IsLeftUp
- •IsOwner
- •IsPlayersLastRiddenHorse
- •IsPleasant
- •IsRaining
- •IsRidingHorse
- •IsRunning
- •IsShieldOut
- •IsSneaking
- •IsSnowing
- •IsSpellTarget
- •IsSwimming
- •IsTalking
- •IsTimePassing
- •KillAllActors
- •LoopGroup
- •MenuMode (Function)
- •Message
- •MessageBox
- •ModActorValue
- •ModAmountSoldStolen
- •ModBarterGold
- •ModCrimeGold
- •ModDisposition
- •ModFactionRank
- •ModFactionReaction
- •ModPcAttribute
- •ModPcFame
- •ModPcInfamy
- •ModPcMiscStat
- •ModPcSkill
- •ModScale
- •MoveToMarker
- •PayFine
- •PayFineThief
- •PickIdle
- •PlaceAtMe
- •PlayBink
- •PlayGroup
- •PlayMagicEffectVisuals
- •PlayMagicShaderVisuals
- •PlaySound
- •PlaySound3d
- •PositionCell
- •PositionWorld
- •PreloadMagicEffect
- •RefreshTopicList
- •ReleaseWeatherOverride
- •RemoveAllItems
- •RemoveFlames
- •RemoveItem
- •RemoveMe
- •RemoveScriptPackage
- •RemoveSpell
- •Resurrect
- •SameFaction
- •ScriptEffectElapsedSeconds
- •SelectPlayerSpell
- •SendTrespassAlarm
- •SetActorAlpha
- •SetActorFullName
- •SetActorRefraction
- •SetActorValue
- •SetAlert
- •SetAllReachable
- •SetAllVisible
- •SetAngle
- •SetAtStart
- •SetBarterGold
- •SetCellFullName
- •SetCellOwnership
- •SetCellPublicFlag
- •SetClass
- •SetCombatStyle
- •SetCrimeGold
- •SetDestroyed
- •SetDoorDefaultOpen
- •SetEssential
- •SetFactionRank
- •SetFactionReaction
- •SetForceRun
- •SetForceSneak
- •SetGhost
- •SetIgnoreFriendlyHits
- •SetInCharGen
- •SetInvestmentGold
- •SetItemValue
- •SetLevel
- •SetNoAvoidance
- •SetNoRumors
- •SetOpenState
- •SetOwnership
- •SetPcExpelled
- •SetPcFactionAttack
- •SetPcFactionMurder
- •SetPcFactionSteal
- •SetPcFactionSubmitAuthority
- •SetPcFame
- •SetPcInfamy
- •SetPcSleepHours
- •SetPackDuration
- •SetQuestObject
- •SetRestrained
- •SetRigidBodyMass
- •SetScale
- •SetSceneIsComplex
- •SetShowQuestItems
- •SetSize
- •SetStage
- •SetUnconscious
- •SetWeather
- •ShowRaceMenu
- •ShowSpellMaking
- •SkipAnim
- •StartCombat
- •StartConversation
- •StartQuest
- •StopCombat
- •StopCombatAlarmOnActor
- •StopLook
- •StopMagicEffectVisuals
- •StopMagicShaderVisuals
- •StopQuest
- •StopWaiting
- •StreamMusic
- •ToggleActorsAi
- •TrapUpdate
- •TriggerHitShader
- •UnequipItem
- •VampireFeed
- •WakeUpPc
- •WhichServiceMenu
- •7. Console Functions
- •7.1 Общие сведения.
- •7.2 Полный перечень консольных функций.
- •7.3 Описания консольных функций (Console functions)
- •FlushNonPersistActors (Flush)
- •FreezeRenderAccumulation (fra)
- •OutputMemStats (oms)
- •PickRefById (prid)
- •PlayerSpellBook (psb)
- •PrintAiList (Pai)
- •PrintHdrParam (php)
- •PrintNpcDialog (pDialog)
- •PurgeCellBuffers (pcb)
- •SetCameraFov (fov)
- •SetClipDist
- •Отрицательные числа
- •Interior Cell Buffer: [int] (буфер интерьеров)
- •14 И выше…
- •8.1 Основные сведения
- •8.2 Различия в версиях.
- •8.3 Установка obse:
- •8.4 Диагностика и проблемы
- •8.5 Типы скриптовых функций obse
- •9. Заключение.
- •Дерзайте и да пребудет с вами удача!
Что могут скрипты?
Скрипты в Oblivion – способ, с помощью которого игра динамически реагирует на то, что делает игрок в игровом мире. Вы можете использовать скрипты для создания комплексных квестов. Вы можете использовать скрипты для создания особых предметов, которые будут выполнять действия, невозможные для обычного зачарования. Вы можете использовать скрипты для создания ловушек. Вы можете использовать скрипты для изменения поведения NPC или существ. Помните создание персонажа в Oblivion? Оно контролируется множеством скриптов. Выполнение квестов? Они также управляются скриптами. Так что если коротко ответить на этот вопрос: много.
Чего не могут скрипты
Скриптовый язык TES ограничен в своих возможностях – в нем большое количество функций, которые вы можете использовать, но иногда возможные варианты использования будут не все, которых бы вам хотелись. В большинстве случаев опытные скриптологи смогут найти специфику для очевидных ограничений, но не стоит ожидать чуда. Многие вещи запрограммированы и скрипты на них влияния не оказывают, а если и оказывают, то лишь косвенно.
5.4 Учебник скриптов: до написания кода.
Если вы новичок в скриптах и в программировании разбираетесь лишь в общих чертах, даже если уже ознакомились с учебником "Мой первый скрипт", углубленное скриптонаписание с использованием скриптов TES может немного напугать. Вот почему здесь представлен развернутый учебник, который постепенно подведет вас к созданию более сложного скрипта. По мере изучения вы получите объяснения основных элементов скриптового языка. Вам встретятся разнообразные пояснения, но ключевые инструкции и важная информация будут выделены жирным шрифтом.
Начинаем!
Начинаем мы с открытия редактора скриптов: Запустите TES Construction Set, откройте Oblivion.esm, затем выберите Edit Scripts в меню Gameplay, чтобы открыть окно редактирования скриптов.
Окно редактирования скриптов
Открыть окно редактора скриптов можно несколькими способами: выбрав Gameplay –> Edit Scripts; нажатием на кнопку редактора скриптов (карандаш) в правом верхнем углу панели инструментов; или в меню Object или NPC, активировав кнопку […], расположенную за редактируемым полем с названием скрипта. Давайте посмотрим на кнопки, расположенные на панели инструментов, слева направо:
Открыть - позволяет выбрать скрипт для редактирования.
Сохранить - проверяет текущий скрипт и компилирует его или выдает сообщения об ошибках. Примечание: в это время реального сохранения плагина на диск не происходит. При написании больших скриптов после сохранения скрипта вы должны периодически использовать команду "сохранить плагин" в главном окне TES CS, на случай "падения" конструктора. Также если при редактировании скрипта вы вдруг нажмете "сохранить плагин", изменения в скрипте при этом сохранены НЕ будут. Сначала вы должны сохранить вручную сам скрипт. Также, если просто закрыть скриптовое окно, это не значит, что скрипт сохранится. Вы должны позаботиться о его сохранении сами.
Стрелки Вперед и Назад открывают следующий или предыдущий скрипт соответственно (в алфавитном порядке). Если вы присвоите своим скриптам общее обозначение в начале их названий, то это облегчит переход между скриптами и их поиск в вашем проекте. Например, мой псевдоним - Grundulum, и он стоит в начале каждого моего скрипта "GR_ShortReferencetoProject_", а последующие две или три буквы образуют аббревиатуру для конкретного мода; это заставит все скрипты, над которыми вы работаете, расположиться аккуратно и по порядку.
Скомпилировать все – перекомпилирует все скрипты (для чего это нужно? Ни я, ни GhanBuriGhan не знаем). Это также добавит каждый скрипт из Oblivion в ваш мод - таким образом вы получите двухмегабайтный esp-файл, конфликтующий практически со всем, с чем только можно. Используйте это кнопку осторожно.
И, наконец, кнопка Удалить – удаляет скрипт, а последняя кнопка "Стрелка вниз" закрывает скриптовое окно.
В правом верхнем углу панели инструментов можно найти ниспадающий список под названием Тип Скрипта. Данный блок позволяет выбрать один из трех типов скриптов, под который подпадает ваш скрипт: Объект, Квест или Магический Эффект. Подробнее об этом позже, но в рамках введения - Объектные скрипты – это скрипты, привязанные к объектам игрового мира (также, как и к предметам или NPC), Квестовые скрипты – скрипты, контролирующие выполнение квестов (как генерация персонажа), и Магические скрипты – скрипты, контролирующие все особые магические эффекты (в особенности, cкриптовые эффекты).
