Wikia
Gaming

Request a new wiki

Connect

Представиться системе

Создайте учётную запись

ArmaCommandReference Wiki

Править

История

Следить

Статья

Обсуждение

Руководство по FSMправить

Материал из ArmaCommandReference Wiki

Содержание

1 Что такое FSM

1.1 Программа FSM Editor

1.1.1 Обзор программы

1.1.1.1 Интерфейс

1.1.2 Описание блоков

1.2 Настройка FSM

1.2.1 Управляющие настройки

2 Особенности FSM

3 Работа с FSM

4 Примеры работ

4.1 Пример 1

4.2 Пример 2

4.3 Пример 3

5 Часто возникающие ошибки

[править] Что такое FSM

FSM – расшифровывается, как Finite State Machine и означает «конечный автомат». По определению компании Bohemia Interactive, FSM – это набор состояний игровой логики, переходящих из одного состояния в другое по определенным правилам.
FSM можно использовать для различных ситуаций, вплоть от назначения музыки зависящей от ситуации (например во время боя одна, в спокойное время другая) и до указания ботам, как необходимо вести себя в той или иной ситуации.
Полёт мыслей, может ограничиваться только вашей фантазией.

[править] Программа FSM Editor

С выходом игры ArmA 2, компания Bohemia Interactive выпустила свой инструментарий для редактирования FSM файлов. Здесь я подробно, постараюсь, рассказать об этой программе.
Скачать программу можно по этим адресам:

[1]

[2]

[править] Обзор программы

[править] Интерфейс

Открывая первый раз эту программу, очень легко запутаться. Множество непонятных кнопок, настроек, параметров. Сейчас мы эту непонятливость, будем устранять.

Рассмотрим самую верхнюю панель настроек:

Обладая даже начальными знаниями английского языка, суть этих пунктов не окажется очень сложной. Я остановлю своё внимание только на пункте FSM Attributes, о котором поговорим чуть позже.

Следующее меню:

Это панель форматирования. Шрифт, цвет, подчёркивание, выравнивание, размер шрифта и пр.

Сейчас добрались до самого интересного. Панелей настройки состояний.
Описание будет сверху-вниз.

Создание нового состояния (New Box);

Перемещение выбранного состояния (Set mode to design);

Создание переходов от состояния к состоянию (Draw links);

Увеличить масштаб (Zoom);

Вернуть масштаб (Reset Zoom);

Изменить внешний вид блока (Change item to…);

Залить блок цветом (Set fill colour);

Изменить цвет границ (Set line colour);

Установить размер и стиль текста (Set line style and width);

Set transparent fill;

Set transparent line;

Редактировать текст в состоянии (Edit text and font properties);

[править] Описание блоков

Так же идёт сверху-вниз.

Начальное состояние. Активируется при запуске fsm;

Блок условие. Проверяет условия перехода от блока к блоку с учётом приоритета;

Блок состояние. В этом блоке пишутся скрипты;

Блок точка. Просто удобная штука, позволяет более грамотно распределять блоки;

Блок завершение. Блок, который завершает fsm файл;

[править] Настройка FSM

Наш .FSM перед работой необходимо настроить! Потому что если это не сделать, появляется вот такая ошибка при компиляции fsm:

Есть несколько программных настроек:

Настройки FSM

Каждая из них нужна для определённой работы. Описания этих настроек будут приведены ниже.

[править] Управляющие настройки

FSM Entity – управляющий файл entityFSM.cfg

Такая настройка используется для описания поведения определённых животных (бабочки, пчёлы, стрекозы);

FSM Scripted – управляющий файл scriptedFSM.cfg

Настройка, позволяющая использовать скриптовые команды и условия в fsm файлах.

Global Switch FSM – управляющий файл globalSwitchFSM.cfg

Compilation to the *.cpp code, using switch to navigate through FSM states. The compile uses many FSM attributes, to define function declaration, precondition codes etc. This FSM was first used in seagull.cpp to code autopilot functionality. So, opening seagull.cpp in FSMEditor.

Class Compile FSM – управляющий файл classFSMcompile.cfg

Compilation to the *.cpp, using Fsm class architecture. It creates %(stateName) functions for state initialization and check%(stateName functions for checking conditions. No FSM created by FSMEditor has been compiled and used in engine, but some were coded manually before FSMEditor existence.

Чтобы выбрать интересующую нас настройку, щёлкаем по выделенным пунктам:

Откроется меню:

Теперь надо выбрать путь, по которому установлена программа FSM Editor.

При правильном выборе должно появиться несколько файлов с расширением .cfg

Это конфигурационные файлы настройки .FSM

Выбираем нужную и начинаем с ней работать.

Настройки FSM

[править] Особенности FSM

Кириллица запрещена в описаниях блоков, но разрешена в самих блоках (UTF-8).

Передача аргументов в FSM файл не отличается от передачи аргументов в SQF файл.

http://community.bistudio.com/wiki/argument

Все локальные переменные, описанные в .FSM файле, будут доступны во всех блоках.

FSM не будет выполнятся дальше, пока какое-либо условие не будет выполнено.

Команда sleep в FSM запрещена, вместо этого используется метод засечки времени. Чтобы сделать задержку, нужно запомнить время (_wait = time) и поставить условный блок, в котором обозначить условие: (time > (_wait + 10), например для 10 секундного ожидания.

[править] Работа с FSM

Каждый .fsm файл должен начинаться с начального состояния (Start State) и заканчиваться конечным состоянием (End State). Чтобы выбрать тип блока, нужно всего-то щёлкнуть правой кнопкой мыши на интересующем блоке.

Выбор типа блока

Начальный блок отмечается красным цветом. Конечный – оранжевым.
Рабочим полем для нас будет являться закладка initCode

Инициализирующий код

В этом поле мы будем писать наши скрипты.

[править] Примеры работ

Все примеры работы с fsm файлами я буду производить с настройкой - FSM Scripted.

[править] Пример 1

Ветвление

Пример 1

В миссии я захотел обработать два события. Для этого написал простенький .fsm скрипт.

Блок «начало» (Start State) инициализирует вход в .fsm файл. Затем идёт разветвление на два условия. Первое: Игрок убил человека, второе – игрок сел в машину. Инициализация .fsm происходит в скрипте init.sqf

FSM становится _активным_ и ждёт реакции по событиям. Что из этого получилось, смотрите в примере.

Скачать архив

[править] Пример 2

Приоритет FSM

Пример 2

Сейчас я вам покажу зависимость выполнения fsm от приоритета.

FSM - скрипт представляет собой блок состояний с разветвлением с учётом приоритета.

Инициализация FSM так же происходит в скрипте init.sqf.

Условие «Убит юнит 1» имеет приоритет 0, условие «Убит юнит 2» имеет приоритет 1.

Следовательно, если будет убит только юнит 1, fsm пойдёт по одной ветке с выводом первой подсказки, описанной в коде. Если будет убит только юнит 2, fsm пойдёт по второму пути, с выводом второй подсказки. Если же оба юнита будут убиты одновременно, fsm пойдёт всё по тому же второму пути (условие: убит юнит 2), так как, оно имеет больший приоритет и выведет третью подсказку.

Можете поиграться с приоритетом, внутри fsm файла.

Скачать архив

[править] Пример 3

Поиск статических орудий

Пример 2

Это уже более сложный пример. В нём я попытался имитировать поведение солдат, при поиске свободных статических орудий.

Скачать архив

[править] Часто возникающие ошибки

1) Вопрос: При компиляции у меня появляется такая ошибка:

Ответ: Эта ошибка вызвана из-за того, что вы не настроили свой fsm файл.
Как избежать возникновения данной ошибки, читайте выше, в пункте «Настройка ФСМ»

2) Вопрос: При компиляции возникает след. ошибка:

Ошибка при компиляции FSM

Ответ: Данная ошибка связана с размещением блоков. Скорей всего вы поставили два одинаковых состояния, о чём программа в логе и сообщила: <There is unspecified condition between two states>.

Выглядит это так:

Источник — «http://ru.armacomref.wikia.com/wiki/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_FSM»

Добавить категорию

Improve ArmaCommandReference Wiki by editing this page

Losd made an edit on марта 29, 2010

История

Связанные правки

Постоянная ссылка

Ссылки сюда

View random page

Сообщить о проблеме

Оцените:

0/5

1

2

3

4

5

Сбросить оценку

About | Jobs | Terms of Use | Create a wiki | Privacy Policy | CC-BY-SA | Community Guidelines | Contact | Advertise

ArmaCommandReference Wiki

Scripting Commands ArmA2›

Scripting Commands›

Сообщество

edit sidebar

Новая страница

Добавить изображение

Upload image

Справка

Случайная статья

Спецстраницы

Свежие правки

Ссылки сюда

Recent changesRandom page

Latest activity

1180 articles on this wiki

Briefing.html
6 секунд назад от Незарегистрированный вкладчик

List
4 часа назад от OTK-Wass

Редакторы кода
19 часов назад от DenVdmj

Dialog Control
1 день назад от OTK-Wass

Ceil
1 день назад от OTK-Wass

More