Как FPI работает? FPI команды при запуске игры, преобразуются в быструю форму байтового кода. В общем плане, что бы не было указано в файле FPI: будь то мысли вашего компонента или, то какой у него должен быть вид, всё может быть выполнено с помощью этого файла. Скрипты контролируют всё, начиная с появления и исчезновения объекта, сбор предметов, поднятие оружия, взаимодействие с компонентами, эффекты и всё остальное, что используется или двигается в соответствии с логикой игры.
Язык FPI.
Стандартная строка события:
Code
:condition:action
*condition - событие или условие *action - действие
Любое событие или условие, начинается с двоеточия":":
Code
:condition,condition,condition
Для того, чтобы "отделить" действие от условия, так же используется двоеточие":":
Code
:condition,condition:action,action
Событий, условий, а так же действий, может быть несколько, для их разделения используется запятая",":
Code
:condition,condition:action,action
Для того, чтобы не запутаться в собственном коде, можно и даже нужно, использовать комментарии:
Code
;script commentary
Для строки комментария используется точка с запятой";", её можно ставить в любом месте строки, но лучше всего ставить в начале.
Стандартное условие:
Code
condition=X
Условия, есть двух видов: 1) condition=X - имеет свойство переменной и значением, которое необходимо указать 2) condition - хранит в себе глобальное значение, которое не возможно изменить
Стандартное действие:
Code
action=X
Так же как и условие, имеет два вида: 1) action=X - имеет свойство переменной и значением, которое необходимо указать 2) action - хранит в себе глобальное значение, которое не возможно изменить, за исключением некоторых действий изменяемых при помощи другого действия в этом же скрипте.
Стандартные AI скрипты(Artificial Intelligence Script).
►FPS Creator X9 v.1.05 ▼▼▼ Перемещение: passive.fpi - Стоит на месте и оглядывается, не агрессивен; follow.fpi - Просто следует по вей-пойнту, не агрессивен; coward.fpi - Следует по ближайшему пути (вей-пойнт) до выстрела, затем на какое-то время убегает; cautious.fpi - Стоит на страже, оглядываясь, убежит, в случае выстрела или приближения игрока, затем произведет выстрел, если игрок на подходящем расстоянии или герою некуда бежать; static.fpi - Будет стоять на страже, оглядываясь, затем произведет выстрел, если увидит игрока; pace.fpi - Следует по ближайшему пути (вей-пойнт), пока не увидит игрока, затем произведет выстрел; throwback.fpi - Внутренний скрипт для движения назад ; fthrowfore.fpi - Внутренний скрипт для движения вперед; throwleft.fpi - Внутренний скрипт для движения влево; throwright.fpi - Внутренний скрипт для движения вправо;
Стрельба: throw.fpi - Бросает оружейный снаряд в игрока из положения стоя; shoot.fpi - Стреляет в игрока из положения стоя; cover.fpi - Приседает и стреляет, когда игрок на линии огня; snipe.fpi - Лежа на животе, стреляет по игроку из низкой позиции; shootclose.fpi - Пытается получить до 100 единиц игрока, убегая перед стрельбой; chase.fpi - Преследует игрока и стреляет по нему, как только видит;
Уничтожение: Crumble.fpi - Конечный (завершающий) скрипт, используемый для разрушения компонента, проигрывает осыпающуюся анимацию; Fadecorpse.fpi - Конечный (завершающий) скрипт, используемый для медленного исчезновения компонента из игры; Flammable.fpi - Конечный (завершающий) скрипт, используемый для запуска взрыва компонента, когда он разрушен; Leavecorpse.fpi - Конечный (завершающий) скрипт, который оставляет компонент в игре в спокойном состояние как тело ; Window.fpi - Конечный (завершающий) скрипт, используемый для разбивания оконного стекла в месте расположения компонента;
Общие: Ammo.fpi - Главный скрипт, приписываемый к предметам, которые относятся к типу «боеприпасы»; Ammoglow.fpi - Идентичен скрипту ammo.fpi, за исключением того, что он создает надпись с эффектом свечения; Appear1.fpi - Запускающий скрипт, используемый для мгновенного появления компонента; Appear2.fpi - Запускающий скрипт, используемый, чтобы заставить компонент медленно появиться в игре; Autodoor.fpi - Главный скрипт, используемый для запуска анимации автоматической двери, срабатывающей при приближении; Decal.fpi - Используется для контроля свечения текстуры невидимого маркера компонента; Decalfixed.fpi - Идентичен decal.fpi, за исключением того, что текстуры не поворачиваются лицом к игроку; Decalflat.fpi - Идентичен decal.fpi, за исключением того, текстуры будут лежать в горизонтальной плоскости; Default.fpi - Пустой скрипт, используется, когда с компонентом не будет производиться никаких действий; Disappear1.fpi - Конечный (завершающий) скрипт, используемый для внезапного разрушения компонента; Disappear2.fpi - Конечный (завершающий) скрипт, используемый для уничтожения компонента, заставляет его медленно исчезнуть из игры; Door1.fpi - Главный скрипт, используемый для открывания и закрывания двери только приближением игрока; Doorkey.fpi - Главный скрипт, используемый для открывания и закрывания двери, когда игрок находит нужный ключ; Doorremote.fpi - Главный скрипт, используемый для открывания двери, когда она активируется дистанционным выключателем; Dooruse.fpi - Главный скрипт, используемый для открывания двери, когда игрок выполняет с ней действие USE(ИСПОЛЬЗОВАТЬ); Emission.fpi - Главный скрипт, используемый для создания кольцевых текстур на расположении невидимого компонента; Healthuse.fpi - Главный скрипт, используемый для снабжения игрока здоровьем при применении компонента; Lift1.fpi - Главный скрипт, используемый для автоматического подъема и спуска лифта, если в нем стоит игрок; Light1.fpi - Главный скрипт, используемый для контроля динамического света, по умолчанию горит, активирующие выключатели отключены; Pickup1.fpi - Главный скрипт, используемый предметами, которые должны быть подобраны во время игры; Pickuphealth.fpi - Идентичен pickup1.fpi за исключением того, что добавляет получение игроком очков (баллов) здоровья; Plrhealzone.fpi - Главный скрипт, дающий игроку здоровье, если он стоит в имеющей к этому отношение зоне; Plrhurtzone.fpi - Главный скрипт, забирающий у игрока здоровье, если он стоит в имеющей к этому отношение зоне; Plrinzone.fpi - Главный скрипт, который активирует названный компонент, если игрок входит в зону; Repeatsound.fpi - Запускающий скрипт, использующийся для запуска повторяющегося звука, исходящего от компонента; Switch2.fpi - Главный скрипт, активирующий назначенный компонент, если игрок USES (ИСПОЛЬЗУЕТ) его в непосредственной близости; Switch3.fpi - Идентичен switch2.fpi, за исключением того, что скрипт используется, чтобы контролировать анимированный выключатель ; Switch.fpi - Идентичен switch2.fpi, за исключением того, что выключатель может быть использован далеко от предмета Transportifused.fpi - Главный скрипт, используемый для телепортации игрока к компоненту, названному в поле IFUSED (ЕСЛИ ИСПОЛЬЗОВАН); Transporttoexit.fpi - Главный скрипт, используемый для телепортации игрока только к компоненту «Телепорт ВЫХОД»; Weapon.fpi - Главный скрипт, используемый для обращения с компонентом, который должен быть подобран и использован как оружие; Weaponglow.fpi - Идентичен Weapon.fpi за исключением того, что к компоненту добавлена светящаяся надпись; Zoneactivate.fpi - Главный скрипт, используемый для активации ВСЕХ компонентов зоны, когда игрок стоит в зоне;
►FPS Creator X9 v.1.17 DarkAI ▼▼▼ DECALPARTICLE.FPI – Главный скрипт отвечающий за отображение системы частиц; appear-ally-team1.fpi – Запускающий скрипт, отвечает за нахождение в команде с игроком; appear-enemy-team1 – Запускающий скрипт, отвечает за нахождение во вражеской команде; main-weapon.fpi – Главный скрипт, отвечает за поведение компонента, если Ваш союзник, то защищает Вас, если Враг, то атакует со своей командой вас и вашего союзника; greet player.fpi – Главный скрипт, запускает звук и анимацию приветствия игрока;
Создание своего FPI скрипта.
Теперь попробуем создать свой FPI скрипт. И так, давайте создадим скрипт, с помощью которого будет выключаться указанный источник света, если игрок находится в зоне запуска: 1. Откройте любой текстовый редактор, например Блокнот. 2. Теперь напишите этот код:
Code
:plrwithinzone=1:activateifused=1
3. Теперь разберём эту строчку кода по частям: В начале мы написали двоеточие":", тем самым мы указали начало условия, в нашем случае это plrwithinzone=1, с помощью данного условия мы проверяем, находится ли игрок в зоне запуска (=1), затем мы опять написали двоеточие":", отделив от условия - действие activateifused=1, которое отвечает за активацию указанного элемента. Вы наверное зададите вопрос "А почему activateifuse равно 1, когда мы хотим выключить свет?", а всё очень просто, мы же его активируем, а так как он уже активирован, то происходит всё наоборот, если бы мы создали отдельно скрипт для нашего источника света и указали бы в нём activate=0, то тогда действие было бы activateifused=0. 4. Теперь переходим к сохранению скрипта. Для этого сохраните текст в папку "scriptbank\user", которая находится в корневом каталоге FPS Creator, с любым названием, которое будет коротко обозначать действие вашего скрипта, я например назвал его "lightoff". После сохранения изменить ему формат, просто переписав, например ".txt" в ".fpi". 5. Запустите FPS Creator, создайте комнату, добавьте источник света, затем измените у него параметры: Name(Имя): point_light - (можно любое имя, но только запомните его) Static(Статический): No - (так как статический свет не реагирует на скрипты в силу того, что рендер просчитывает его параметры освещения и тени на объектах от него) 6. Теперь поместите маркер зоны запуска в комнату и настройте параметр Main(Главный), выбрав созданный скрипт. 7. Сохранив все действия, запустите проверку уровня. Примечание: Так же для более удобной работы с FPI скриптами, можно скачать программу FPI EditPad (16,1Mb). Программа позволяет быстро создавать скрипты, имеет подсветку и проверку синтаксиса, так же есть вкладки с доступными условиями и действиями. Скрипт - lightoff.fpi (220b)
Немного о STATE.
Если Вы уже смотрели стандартные fpi скрипты, то могли заметить там следующие условия и действия:
Так вот, это переменные использующиеся в качестве обозначения строки условия или действия. Тем самым указывается условие в виде проверки значения, для дальнейших действий, то есть Вы можите указать несколько разных строк, у которых будет разные условия и действия, при этом используя действие указывающее на следующее условие нужной строки:
В приведённом выше коде, присутствует два вида state: state=0 и state=1, так же видно, что в строках state=1, разные условия и действия, а в последней строчке скрипт зацикливается, указывая действием state равное 0, переходя на выполнение строки state=0. Проще говоря, state позволяет писать длинные скрипты с множеством условий и действий в том числе и с минимальным изменением условия или действия.