Глава 1. Введение.

Этот туториал предназначен для тех, кто только начал осваивать редактор миссий Flashpoint'а.
Здесь приведены подробные описания редактора в целом, команды для работы, начальный курс скриптописания, а так же раздел Hits & Tips полностью взятый с Flashpoint.ru

Здесь нет практически ничего нового, в этом туториале использованы статьи с Flashpoint.xaos.ru\fec и Flashpoint.ru , все это делалось для того чтобы хоть как то снизить число задаваемых "простеньких" вопросов на форуме flashpoint.ru и для удобной работы в офф-лайн.
Все предложения пожелания и исправления просьба слать мне на rinzzza@mail.ru .
ЗЫ. Так же принимаются предложения по дизайну.


Редактор миссий Operation Flashpoint

Управляющие клавиши

  • Keypad 8 - Переместиться по карте вверх
  • Keypad 2 - Переместиться по карте вниз
  • Keypad 4 - переместиться по карте влево
  • Keypad 6 - переместиться по карте вправо
  • Keypad + - увеличить карту
  • Keypad – - уменьшить карту
  • Keypad * - переключиться на стандартное увеличение
  • Keypad Enter - выполнить действие над выделенной кнопкой
  • F1 - Выбрать режим Unit
  • F2 - Выбрать режим Group
  • F3 - Выбрать режим Trigger
  • F4 - Выбрать режим Waypoint
  • F5 - Выбрать режим Synchronize
  • F6 - Выбрать режим Marker
  • Стрелка Up/Left - Выделить предыдущую кнопку
  • Стрелка Down/Right - Выделить следующую кнопку

Управляющие кнопки

Load (Загрузить):

Загрузить в редактор ранее сохраненную миссию. Для этого выберите остров, потом нужную миссию и кликните на кнопке OK.

Merge (Собрать):

Объединить юниты, группы, триггеры, waypoint`ы и маркеры двух миссий. Аккуратно используйте данную функцию! Она удобна для переноса юнитов из одной миссии в другую (например, при создании кампании), но следите, чтобы не было двух юнитов с одинаковым именем, или двух юнитов, обозначающих игрока! Вы можете даже объединить миссии, сделанные на различных островах, и юниты сохранят свои оригинальные координаты. Также следует внимательно проверять их расположение, чтобы они не появились в море!

Save (Сохранить):

Сохранение миссии. Дайте ей название и выберите тип:

  • User Mission (Пользовательская Миссия): Не запакованная миссия (будут отдельные файлы, которые смогут свободно изменять другие люди, используя обычный текстовый редактор).
  • Export to Single Missions (Экспорт в отдельную миссию): Запакованная миссия (.pbo) – не подлежит редактированию другими людьми, сохранится в папке Flashpoint/Missions/.
  • Export to Multiplayer Missions (Экспорт в сетевую миссию): Запакованная миссия (.pbo) – не подлежит редактированию другими людьми, сохранится в папке Flashpoint/MPMissions/. При экспортировании, уже созданный файл .pbo не заменяется более новым! Вам придется удалить его самостоятельно, перед тем как сохранят новую версию миссии.
  • Send by E-mail (Послать по E-mail): Запустит ваш почтовый клиент и к только что созданному письму прикрепит файл с миссией (.pbo).

Clear (Отчистить):

Удалить все юниты, группы, триггеры, waypoint`ы и маркеры с карты.

Меню выбора Script Type (под кнопкой Clear):

- Mission: Создавать основную миссию.

  • Intro: Создавать анимацию для вступительного ролика к миссии.
  • Outro – Win: Создавать анимацию для заключительного ролика к миссии, если вы успешно ее выполнили.
  • Outro – Lose: Создавать анимацию для заключительного ролика к миссии, если вы ее провалили.

Preview (Превью):

Предпросмотр миссии. Загружается ваша миссия, и вы сразу же можете начинать играть.

Continue (Далее):

Продолжить предпросмотр миссии с того места, на котором вы вышли обратно в редактор. Не доступно при создании миссии в режимах Intro и Outro.

Exit (Выход):

Выход из редактора. Вы вернетесь в главное меню игры.
Замечание: Создавайте все ваши миссии в режиме Advanced(Полный). Текущий режим отображается в верхнем правом углу экрана. Если там написано Easy(Легкий), кликните на этом слове, и вы перейдете в режим Advanced(Полный). Это даст вам больший контроль над процессом создания миссий.

Intel (Разведка)

Это меню выполнено в виде картинки с изображением тучи, расположенной под текущим режимом редактора (Easy или Advanced) в верхнем правом углу экрана. Это меню используется для указания имени и описания миссии, а также даты, времени и погоды. Чтобы попасть в этом меню дважды кликните на этой картинке.

Briefing (Брифинг):

- Name (Название): Название миссии (отображается в меню выбора миссий, либо на левой странице книги при выборе одиночных миссий, либо справа от списка островов при выборе сетевых миссий).
- Description(Описание): Короткое описание миссии (отображается в меню выбора миссий, либо на правой странице книги при выборе одиночных миссий, либо вверху экрана после выборе сетевых миссий).

Date (Дата)/Time (Время):

Кликните на соответствующих полях, чтобы изменить их значения.

Weather (Погода)/Forecast (Прогноз):

Передвигайте ползунки, чтобы изменить начальную и прогнозируемую (как она будет изменяться в течение миссии) погоду. В каждой из двух секций есть две полоски:
- Cloud (верхняя): Чем ближе к левому краю, тем больше туч и хуже погода.
- Fog (нижняя): Чем ближе к правому краю, тем больше тумана.

Resistance Friendly To (Сопротивление на стороне):

Nobody (Никого): Повстанцы будут стрелять и по войскам НАТО и по СССР.

  • West (Нато): Повстанцы будут стрелять только по войскам СССР.
  • East (СССР): Повстанцы будут стрелять только по войскам НАТО.
  • Everybody (Всех): Повстанцы не будут стрелять ни по кому.

Замечание: Картинка меню Intel отображает все настройки так:

  • Верхний левый угол: Начальная погода.
  • Верхний правый угол: Начальные координаты игрока.
  • В середине: Время.
  • Снизу: Дата.

Помните, что все свойства (во всех меню), которые вы не укажите, будут выставлены редактором автоматически в значения по умолчанию!


Units (F1)

Юниты – это все солдаты, гражданские, транспортные средства, и прочие объекты игрового мира. Дважды кликните в любом месте карты, чтобы поместить на нее какой-нибудь юнит. При этом отобразиться меню Insert/Edit Unit.

Кликните на юните и, зажав кнопку мыши, перетащите его в другое место на карте.

Выберите юнит, кликнув на нем, и, удерживая кнопку shift, вращайте курсор мыши вокруг этого юнита, изменяя его азимут.

Чтобы удалить существующий юнит, наведите на него курсор мыши и нажмите кнопку Delete на клавиатуре.

Чтобы отредактировать юниты, находящиеся под waypoint`ами, зажмите кнопку SHIFT и дважды кликните на нужном юните.

Как и в большинстве программ, редактор миссий позволяет копировать и вставлять юниты. Для этого нажмите и удерживайте кнопку Ctrl. Потом кликните на юните (или выделите группу юнитов квадратом), который хотите скопировать. Зажав кнопку мыши на выделенном юните, нажмите кнопки Crtl+C. Теперь передвиньте курсор в нужное вам место на карте и нажмите Ctrl+V. Вы получили точную копию выделенного юнита, за исключение того, что все юниты со свойствами Player и Playable будут замещены на свойство Non-Playable.

Дважды кликните на существующем юните, чтобы попасть в меню Edit Unit (Редактировать юнит) и изменить его параметры.

Меню Insert/Edit Unit:

Side (войска):
  • West: НАТО
  • East: СССР
  • Resistance: Повстанцы
  • Civilian: Гражданские
  • Game Logic*: Игровая логика (значение неизвестно)
  • Empty*: Пустые
Замечание: * - Юниты Player (игрок) или Playable (с возможностью управления игроком) должны быть размещены до того, как эти опции станут доступны. За более подробной информацией обращайтесь в подменю Control.

Class (тип юнита):
  • Men: Человек
  • Car: Небронированный транспорт (включая SCUD Launcher у СССР)
  • Armoured: Танки, БМП и БТР
  • Air: Воздушная техника – вертолеты, самолеты и парашютисты
  • Support: Техника поддержки, такая как передвижные госпитали и грузовики обеспечиния
  • Objects: Множество объектов, таких как посадочные площадки для вертолетов, стулья и т.п.
  • Ammo: Ящики с боеприпасами и вооружением
  • Sounds: Звуки, можно добавлять различные звуки (например, лай собаки), которые буду слышны в том месте, куда вы их добавили
  • Mines: Мины, можно создавать целые минные поля

Замечание: Этот список меняется в зависимости от выбранных войск (НАТО или СССР). Но типы Objects и Ammo доступны, если выбраны войска Civilian и Empty, а Sounds и Mines, только для Empty!

Control (Управление):
  • Player (Игрок): Юнит, управляемый игроком (применяется ТОЛЬКО в одиночных миссиях)
  • Playable (Доступен): Юнит, которым могут управлять игроки в сетевой игре, но которые контролируются компьютером в одиночных миссиях (или же в сетевых, если не все слоты заняты игроками)
  • Non-playable (Недоступно): Юнит всегда управляется компьютером.
Info Age (Датировка):
  • Actual
  • 5 Minutes
  • 10 Minutes
  • 15 Minutes
  • 30 Minutes
  • 1 Hour
  • 2 Hour
  • Unknown

Замечание: Всегда используйте значение Unknown, чтобы не возникло никаких проблем, так как я пока не могу сказать, на что влияет значение данного пункта!

Vehicle Lock (Статус):

Установить начальный статус блокировки, определяющий, смогут ли игроки (или компьютерные солдаты) использовать данную технику:

  • Unlocked (Не заперта): Техника всегда доступна для управления и любой солдат может ее использовать
  • Default (По умолчанию): Установка статуса блокировки по умолчанию
  • Locked (Заперта): Техника заблокирована навсегда. Никто не может управлять ей.

Rank (Ранг):

Ранг определяет, каким количество юнитов может управлять солдат, будучи лидером группы:

  • Private (Рядовой): ни одного, солдат данного ранга не может управлять никем и всегда находится в подчинении старшего по званию.
  • Corporal (Капрал): 1 юнит
  • Sergeant (Сержант): 2 юнита
  • Lieutenant (Лейтенант): 5 юнитов
  • Captain (Капитан): 7 юнитов
  • Major (Майор): 9 юнитов
  • Colonel (Полковник): 11 юнитов – это максимум.

Unit (Юнит):

Собственно юнит (солдат/техника/объект/звук). Список допустимых юнитов зависит от выбранных войск и типа юнита. Например, вертолет AH-1 Cobra доступен, только если выбраны войска НАТО и тип юнита Air.

Но стоит обратить внимание, что диверсант у НАТО называется Black OP (Диверсант) (если добавлена надпись Night, значит это диверсант для ночных операций), саперы у обоих сторон называются Engineer (Снайпер), а Captive (Пленный) – это солдат без оружия.

Однако не все юниты доступны в редакторе. Существует минимум два секретных, которые можно добавить только в ручную, открыв файл mission.sqm в текстовом редакторе. Достаточно изменить всего лишь одну строчку "vehicle" у уже созданного юнита на:
vehicle="Angelina"; //Женщина-солдат
vehicle="GeneralE"; //Генерал Губа

Special (Спец.):

  • None (Нет): Специфические свойства отсутствуют.
  • In cargo (В кузове): Данный юнит перевозится другим, например, солдат в грузовике
  • Flying (В воздухе): Юнит находится в воздухе (только для юнитов класса Air)
  • In Formation (В строю): Юнит находится в построении вместе в другими юнитами в группе (например, в колонне, линии и т.д.)
Замечание: Если установить вертолету значения NONE или Flying, он будет садитсья и взлетать, но не будет выключать двигатель, если же установить In Formation, то он даже садиться откажется. (Исправлено в Resistance)

Initialization (Инициализация):
Сюда можно вписать скриптовые команды, чтобы установить начальный статус юнита. Также можно использовать для замены оружия и экипировки юнита.

Health (Здоровье) /Armor (Боеприпасы), Fuel (Топливо), Ammunition:
Установка начальных значений количества жизней для людей и брони, топлива и вооружения для техники. Чем ближе к правому краю, тем больше значение данного параметра.

Azimuth (Азимут):
Сторона, в которую будет направлен юнит (если человек, он будет смотреть в ту сторону и т.д.):
  • 0: Север
  • 90: Восток
  • 180: Юг
  • 270: Запад

Probability of Presence (Возможность присутствия):
Передвигая ползунок, вы можете изменять процент возможного присутствия юнита на карте и создавать некий эффект случайности, чтобы миссию можно было проходить несколько раз и ситуация бы каждый раз менялась. Чем ближе к правому краю, тем больше процент. Если будет вплотную к правому краю, юнит будет появляться всегда (всегда ставьте 100% для юнитов, которыми управляет игрок!). И наоборот, если будет вплотную у левого края, то юнит никогда не появится на карте.

Condition of Presence (Условие присутствия):
Юнит появится на карте только в том случае, если записанные в этой строке условия (скрипт) удовлетворяют определенным требованиям:
  • True: верно, юнит будет присутствовать
    • False: ложь, юнит не появится
Placement Radius (Радиус размещения):
Установка радиуса (в метрах), в пределах которого в случайном порядке появляется юнит.


Groups (F2)

По умолчанию, каждый новый юнит прикрепляется к другому уже созданному юниту (или группе) тех же войск (то есть если оба принадлежат НАТО и т.д.), если они находятся достаточно близко друг к другу (если вблизи несколько юнитов, то он прикрепляется к ближайшему). Чтобы отделить его то группы, переключитесь в режим groups, кликните на голубой линии, соединяющей данный юнит с другими и, зажав кнопку мыши, перетащите ее в сторону этой группы.

Чтобы присоединить юнит к другой группе, кликните все на той же голубой линии и, зажав кнопку мыши, перетащите ее в сторону нужной группы.

Замечание: В группе может быть максимум 12 юнитов.

Также есть уже установленные группы, которые можно разместить, выбрав режим groups и дважды кликнув на карте в том месте, где должна находиться группа. Итак, вы можете выбрать их:

Side = West (НАТО):

Type = Armoured (Бронетехника).

- Name = M1Abrams Platoon: 4 танка M1A1.
- Name = M60A2 Platoon: 4 танка M60.

Type = Infantry (Пехота)

- Name = Infantry Squad: офицер, 2 пулеметчика, гранатометчик, боец ПТ взвода и 3 стрелка.
- Name = Mechanized Inf. Squad: офицер, 2 гранатометчика, боец ПТ взвода, пулеметчик, 2 стрелка и БТР M113.

Side = East (СССР):

Type = Armoured (Бронетехника).

- Name = T80 Platoon: 4 танка T80.
- Name = T72 Platoon 4 танка T72.

Type = Infantry (Пехота).

- Name = Infantry Squad: офицер, 2 пулеметчика, гранатометчик, боец ПТ взвода и 3 * стрелка.
- Name = Mechanized Inf. Squad: офицер, гранатометчик, боец ПТ взвода, пулеметчик, 3 стрелка и БМП.


Triggers (F3) или Sensors (переключатели)

На карте переключатели обозначаются синим флажком, окруженным синим кругом/квадратом (в зависимости от выбранной формы), определяющим зону их действия. Дважды кликните на карте в режиме triggers, чтобы вставить в миссию trigger (другими словами переключатель, с помощью которого можно ставить условия на выполнение определенных заданий и т.д.). Появится меню Insert/Edit Trigger.

Меню Insert/Edit Trigger

Trigger Area (зона действия):

Существует два типа переключателей – Local trigger и Global trigger. Local trigger – это переключатель, который активируется внутри определенного участка местности на карте. Для их установки требуется указать размер местности. Другой вид переключателей – это global trigger. Он может быть активирован в любой точке карты.

Зоны переключателей подразделяются на:

  • - Axis A (Ось А): Установка размера по горизонтали или радиуса зоны действия переключателя.
  • - Axis B (Ось Б): Установка размера по вертикали или радиуса зоны действия переключателя.
  • - Angle (Угол): Установка угловой зоны (значение неизвестно).
  • - Shape: Выбор формы для местности: Rectangle (квадрат) или Ellipse (круг).
Для global trigger можно установить значение Axis (и A, и B) равное 0, т.к. размер зоны не имеет значения. При этом данный переключатель будет занимать меньше места на карте (следовательно, меньше мешаться при расстановке других объектов). Global trigger можно расположить в любом месте карты, хоть в самом углу!

Trigger Activation Conditions (условия активации)

Установка условий для local trigger`а при который он активируется:

Activation (активация):

  • None: Не может быть активирован никаким юнитом (это превращает local trigger в global trigger).
  • East: Активируется юнитом СССР.
  • West: Активируется юнитом НАТО.
  • Resistance: Активируется юнитом повстанцев.
  • Civilian: Активируется гражданским юнитом.
  • Game Logic: Активируется игровой логикой (значение неизвестно).
  • Anybody: Активируется любым юнитом.
  • Radio Alpha а Hotel: Активируется по радиосигналу определенной группе (от Альфа до Хотел). При установке данного значения во время миссии на карте появится новый прибор – рация, на которой можно будет кликнуть на название отряда (оно будет соответствовать выбранному в вышеуказанном пункте). При клике на этом названии в зоне действия переключателя произойдут указанные в разделе Trigger Action действия. Данное условие отлично подходит для эмуляции вызова подкрепления или просьбы о помощи по рации. В текстовом поле должен содержаться текст, который вы хотите чтобы отображался в меню команд например, "Squad Bravo, Fire!").
Frequency (частота повторения):
- Once: Активируется только один раз по первому же удовлетворенному условию.
- Repeatedly: Активируется каждый раз, когда выполняется условие активации.

Activation Condition (условия активации):
  • Present (присутствие): Активируется, если определенный юнит находится в зоне переключателя. Можно использовать, например, для создания зоны эвакуации. Если использовать global trigger, то действие будет распространяться на всю карту.
  • Not present (отсутствие): Активируется, если определенный юнит покидает зону переключателя. Можно использовать, например, для создания условия победы, при котором в данном секторе не останется ни одного вражеского юнита (вы всех уничтожите или враг отступит). Если использовать global trigger, то действие будет распространяться на всю карту.
  • Detected by West (замечен войсками НАТО): Активируется, если данный юнит будет замечен юнитом НАТО. Можно использовать для поднятия тревоги на базе НАТО при появлении противника.
  • Detected by East (замечен войсками СССР): Активируется, если данный юнит будет замечен юнитом СССР. Можно использовать для поднятия тревоги на базе СССР при появлении противника.
  • Detected by Resistance (замечен Повстанцами): Активируется, если данный юнит будет замечен юнитом Повстанцев. Можно использовать для передачи информации о противнике какой-либо из сторон.
  • Detected by Civilian (замечен гражданскими): Активируется, если данный юнит будет замечен гражданским юнитом. Можно использовать для передачи информации о противнике какой-либо из сторон. Например, если гражданский заметит в городе солдат СССР, он может сообщить об этом командованию НАТО (сделать так, чтобы он из текущего района он отправлялся в район дислокации войск НАТО и, встретив первого же солдата, передал ему информацию, или же добравшись только до определенного тента).
Timing (Обратный отсчет):
  • Countdown : Время, по прошествии которого переключатель будет активирован. Устанавливается в полях Min, Max и Mid.
  • Timeout: Время, по прошествии которого переключатель перестанет действовать. Устанавливается в полях Min, Max и Mid.
  • Min: Минимальное время, ДО наступления которого переключатель будет активирован/отключен.
  • Max: Максимальное время, ДО наступления которого переключатель будет активирован/отключен.
  • Mid: Среднее время, ДО наступления которого переключатель будет активирован/отключен.

Trigger Information (информация о переключателе)

Установка типа переключателя, его имени, которое будет использоваться в скрипте, и описание, которое отображается на карте.

Type (тип):

  • None: Без типа (действует как обычный переключатель).
  • Guarded by East: Охраняется войсками СССР.
  • Guarded by West: Охраняется войсками НАТО.
  • Guarded by Resistance: Охраняется Повстанцами.
  • Switch: Переключатель(действует как обычный переключатель).
  • End #1: Успешное завершение миссии 1 (установите этот тип, если хотите, чтобы на данном переключателе была одна из возможных концовок миссии).
  • End #2: Успешное завершение миссии 2.
  • End #3: Успешное завершение миссии 3.
  • End #4: Успешное завершение миссии 4.
  • End #5: Успешное завершение миссии 5.
  • End #6: Успешное завершение миссии 6.
  • Loose: Провал миссии. (установите этот тип, если хотите, чтобы на данном переключателе была одна из возможных концовок миссии, в данном случае - неудачная).
Text (Текст):
Этот текст будет виден на карте при наведении курсора мышки на данный переключатель. Используйте описательное имя, чтобы упростить поиск данного переключателя на карте!

Name (Имя):
Имя, которое будет использоваться в скрипте, например, когда вы ссылаетесь на данный переключатель. Имя также должно быть понятное.

Trigger Action (Действие триггера)

Действия, которые выполняет переключатель. Они представлены в виде текстовых полей, в которые можно вписывать команды.

Condition (Условие):
По умолчанию, указано слово "this". Это значит, что используются условия из раздела Trigger Activation Conditions.

Эта строчка может содержать выражения, такие как "speed (vehicle <unit>) > 10" или же значение переменной, например "targetsDead".

Замечание: при проверке логических (boolean) результатов (то есть тех, которые возвращают значение true или false), вам не нужно писать "<var> = true", просто укажите <var>, чтобы получить true, или "not <var>" - для false.

Выражения и переменные могут комбинироваться при помощи логических операторов and, or и not.

Знак "!" может заменять слово not и использоваться для отрицания. Например, можно вместо "not <var>" указать !<var>

Знак "?" используется для задания условия.

Пример: Если переменная Arrested верна (true), выходим из скрипта:
?Arrested : exit

On Activation (По активации):
Это командная строка, которая выполняется, если все условия станут верными (то есть true).

On Deactivation (По деактивации):
Это командная строка, которая выполняется, если переключатель отключается. Например, когда переключатель, который активируется постоянно (Repeatedly) при удовлетворении определенных условий, отключится по истечении времени, указанного в графе Timeout.

Кнопка Effects (Эффекты):
Кликнув на кнопке Effects (Эфекты), вы попадете в меню Edit Effects (Редактировать эффекты). Это довольно большое меню, и оно рассмотрено в разделе Waypoints (F4).


Waypoints (F4)

Waypoint`ы определяют, по какому маршруту будут передвигаться управляемые компьютером юниты в миссии.

Для указания waypoint`ов группе, достаточно определить их только для лидера группы, так как при его смерти, вместе с правом управления, waypoint`ы переназначаются старшему по званию из оставшихся в живых бойцов.

При включенном режиме waypoints дважды кликните на карте, чтобы разместить waypoint`ы. Появится меню Insert/Edit Waypoint.

Меню Insert/Edit Waypoint

Select Type (Выбрать тип):

  • Move (Место назначения): Переместить юнит(ы) к waypoint`у (но они не будут реагировать на противника!).
  • Destroy (Уничтожить): Уничтожить юнит(ы) в указанном waypoint`е (например, если вам нужно, чтобы вертолет уничтожил танк, установите для вертолета waypoint этого типа на танке).
  • Get In (Посадка): Усадить юнит(ы) в транспортное средство в указанном waypoint`е (их waypoint`ы должны быть синхронизированы).
  • Seek and Destroy (Найти и уничтожить): Переместить юнит(ы) к waypoint`у, при этом, если на пути следования или на самом waypoint`е будет замечен враг, по нему откроют огонь. Когда все враги будут уничтожены, юниты пойдут к следующему waypoint`у.
  • Join (Присоединиться): В данном waypoint`е юнит должен присоединиться к другому юниту (или группе юнитов) в качестве подчиненного и образовать новую группу (их waypoint`ы должны быть синхронизированы).
  • Join and Lead (Возглавить): В данном waypoint`е юнит должен присоединиться к другому юниту (или группе юнитов) в качестве командира и образовать новую группу (их waypoint`ы должны быть синхронизированы).
  • Get Out (Место высадки): Указать юниту покинуть транспортное средство, в котором он перемещается, в данном waypoint`е (включая водителя, стрелка и командира).
  • Cycle (Цикл): Указать юниту, что при достижении данного waypoint`а, он должен вернуться к первому или ближайшему waypoint`у и повторять это действие постоянно. Полезно при создании патруля.
  • Load (Загрузить): Загрузить в указанном waypoint`е юниты, привязанные определенному к транспортному стредству в это самое транспортное средство.
  • Unload (Выгрузить): Выгрузить из транспортного средства в указанном waypoint`е все юниты, привязанные к этому транспортному средству и разорвать связь между ним и высаженными юнитами.
  • Transport Unload (Разгрузить машину): Разгрузить все транспортные средства в указанном waypoint`е.
  • Hold (Удержать): Юниты будут до последнего удерживать данный waypoint.
  • Sentry (Караул): Юниты будут нести караул в данном waypoint`е пока не заметят врага. Как только они его заметят они проследуют к следующему waypoint`у.
  • Guard (Стража): Юниты будут охранять данный waypoint.
  • Talk (Поговорить): В данном waypoint`е юниты будут говорить (необходимы дополнительные настройки с кнопкой Effects(Эффекты)).
  • Scripted (Скрипт): В данном waypoint`е будет выполняться скрипт, указанный в соответствующем поле, как только юниты дойдут до предыдущего waypoint`а и не пойдут дальше, пока скрипт не завершит свою работу.
  • Support (Поддержать): Данный тип действует только на автомобили снабжения и медиков. Если юниты один из них, то он остановится в этом waypoint`е и будет ждать, пока его не вызовут (чтобы его вызвать, вы должны являться его командиром) командой меню 5 - Status -> 1-Call support -> 1-Medic (Медик),2-Repair truck (Машина тех помощи), 3-rearm truck (Машина с аммуницией), или 4-refuel truck (Заправщик).
Замечание: Автомобили (грузовики и джипы) стараются следовать по маршруту, используя дороги, однако танкисты и не догадываются об их существовании и прут напролом!

Waypoint Order (Показ точки маршрута):

Изменение расположения waypoint`а в списке доступных waypoint`ов.

Description Описание):

Описание waypoint`а.

Combat Mode Режим боя):

  • No Change (Не изменяя): Не изменять свойства и оставить их такими же, как у прошлого waypoint`а.
  • Never Fire (Не стрелять): Юниты НЕ будут стрелять вообще.
  • Hold Fire (Прекратить огонь): Юниты не будут стрелять до тех пор, пока командир не укажет им цели.
  • Hold Fire, Engage at Will (Сдерживать огонь): Униты не будут стрелять, но начнут атаковать противника в зоне поражения (то есть если противник попадут в зону поражения огнем, например из М16 или из танка ).
  • Open Fire (Огневой контакт): Юниты начнут атаковать цели, указанные командиром.
  • Open Fire, Engage at Will (Атаковать): Юниты сами будут атаковать противника в зоне поражения.

Speed (Скорость):

  • No Change (Без изменения): Не изменять свойства и оставить их такими же, как у прошлого waypoint`а.
  • Limited (Ограниченная): Уменьшить скорость передвижения.
  • Normal (Нормальная): Обычная скорость передвижения.
  • Full (Полная): Максимальная скорость передвижения.

Formation (Построение):

  • No Change (Не изменяя): Не изменять свойства и оставить их такими же, как у прошлого waypoint`а.
  • Column (Колонна): Колонна по два.
  • Staggered Col. (Разбитая колонна): Широкая колонна (интервал между бойцами увеличен).
  • Wedge (Клин): Построение в виде /\ (вы в вершине угла).
  • Echelon L. (Левое звено): Взвод справа от вас.
  • Echelon R. (Правое звено): Взад слева от вас.
  • Vee (Обратный клин): Построение клином буква V (вы в вершине угла).
  • Line (Цепь): Шеренга (линия) по одному (вы в центре).

Behaviour (Поведение):

  • No Change (Без изменения): Не изменять свойства и оставить их такими же, как у прошлого waypoint`а.
  • Careless (Невнимательный): Юниты будут бездумно ломиться вперед.
  • Safe (Осторожный): Юниты будут передвигаться с оружием за спиной (т.е. спокойно идти).
  • Aware (Внимательный): Приказать юнитам быть наготове, так как враг где-то рядом.
  • Combat (Воинственный): Юниты будут передвигаться с оружием в руках и атаковать врага.
  • Stealth (Скрытный): Юниты будут стараться не выдавать своего присутствия.

Placement Radius (Радиус размещения):

Радиус окружности (в метрах) вокруг waypoint`а в которой могут находиться юниты (при этом их местонахождение выбирается случайно).

Timeout (Таймаут):

  • Min (Мин): Минимальное время, которое может потратить юнит перед началом передвижения к следующему waypoint`у.
  • Max (Макс): Максимальное время, которое может потратить юнит перед началом передвижения к следующему waypoint`у.
  • Mid (Сред): Среднее время, которое может потратить юнит перед началом передвижения к следующему waypoint`у.

Condition (Условие):

Условие (в виде скрипта) для юнита, при выполнении которого, он сможет продвинуться к следующему waypoint`у. То есть, юнит не сдвинется с места (в текущем waypoint`е) до тех пор, пока условие не будет выполнено, например, уничтожение всех противников в данном квадрате и т.п.

On Activation (При активации):

Если условия удовлетворены, то выполнится скрипт, прописанный в данной строке.

Show Waypoint (Отображение waypoint`а):

  • Never Show (Не показывать): Waypoint не будет отображен на карте во время миссии.
  • Show in Cadet Mode (Кадет): Waypoint будет отображаться на карте во время миссии только на уровне сложности Cadet.
  • Always Show (Всегда показывать): Waypoint всегда будет отображаться на карте во время миссии.

Script (Скрипт):

Выполнение указанного скрипта.

Кнопка Effects (Эффекты):

Кликнув на кнопке, Effects (Эффекты) появится меню Edit Effects (Редактировать эффекты). Оно доступно в меню Insert/Edit Trigger и Insert/Edit Waypoint, посредством клика на одноименной кнопке Effects в нижнем левом углу данным меню.

Это меню позволяет добавлять спецэффекты, активирующиеся на указанном переключателе или waypoint`е, и подразделено на 5 секций, указанных ниже.

Activation (Активация):

Условие (в виде скрипта) определяет, будут ли выполнены эффекты. Подобно полям в меню Insert\Edit waypoints или Insert\Edit triggers.

Camera (Камера):

Effect (выбор эффектов):

  • None (Нет): Никаких Эффектов.
  • TERMINATE (Прервать): Убирает все эффекты.
  • Terminate (Резко убрать): Убирает все эффекты.
  • Internal (Пройти сквозь): Переключиться на внутреннюю камеру (вид из глаз).
  • Zoom In (Приблизить): Приблизить камеру к позиции переключателя.
  • Zoom In Slow (Приблизить медленно): Плавно приблизить камеру к позиции переключателя.
  • Around (Обойти кругом): Вращать камеру вокруг позиции переключателя.
  • Around Slow (Обойти кругом медленно): Плавно вращать камеру вокруг позиции переключателя.
  • Zoom & Around (Приближение и вращение): Приблизить и вращать камеру вокруг позиции переключателя.
  • Around & Zoom Slow (Вращение и медленное приближение): Вращать и медленно приблизить камеру к позиции переключателя.
  • Zoom In S (Приближение S): Быстро приблизить камеру перемещая ее у земли.
  • Fixed (Фиксированная): Зафиксировать положение камеры.
  • Fixed (Zoom) (Фиксированная (Приближение)): Приблизить камеру и зафиксировать ее.
  • External (Внешняя): Использовать внешнюю камеру (от 3-го лица).
Position (Позиция):
  • Top (Вверху): Над юнитом.
  • Left (Слева): Слева от юнита.
  • Right (Справа): Справа от юнита.
  • Front (Фронтальная): Спереди юнита.
  • Back (Сзади): Сзади юнита.
  • Left Front (Левый фронт): Спереди слева от юнита.
  • Right Front (Правый фронт): Спереди справа от юнита.
  • Left Back (Слева и сзади): Сзади слева отюнита.
  • Right Back (Справа и сзади): Сзади справа от юнита.
  • Left Top (Слева вверху): Сверху слева от юнита.
  • Right Top (Справа вверху): Сверху справа от юнита.
  • Front Top (Фронтальная сверху): Сверху спереди юнита.
  • Back Top (Сзади вверху): Сверху сзади юнита.
  • Bottom (Снизу): Снизу юнита (камера будет находится ниже пояса, если юнит - человек).

Sounds (Звуки):

Звуки, которые будут воспроизводиться при срабатывании данного переключателя. Если использовать global trigger, то можно делать звуки, распространяемые по всей карте. А, например, можно сделать так, чтобы в данном waypoint`е были слышны звуки выстрелов или лай собаки.

  • Anonymous (Звук): Различные звуки и речь.
  • Environment (Окружение): Различные звуки окружающего мира.
  • Voice (Голос): Тот же выбор, что и в пункте Anonymous.
  • Trigger (Триггер): Различные животные и побочные звуки.
Как добавить собственные звуки описано в руководстве "Создание собственных звуков и музыки".

Titles (Заголовки):

Type (Тип):

  • None (Нет): Объект отсутствует.
  • Object (Объект): В появившемся снизу поле Text можно выбрать Sphere (Сфера), Bohemia Interactive (Bohemia Interactive) и TV Set (Телевизор).
  • Resource (Ресурс): В появившемся снизу поле можно выбрать огромное количество ресурсов (практически бесполезных).
  • Text (Текст): В появившемся снизу поле можно ввести текст, который будет отображаться в центре экрана.
Effect (Тип эффекта):
  • Plain (Обычный): Стандартные (текст/объект будет отображаться в центре экрана).
  • Bottom (Нижний регистр): Текст будет отображаться снизу экрана. Но объект опять окажется в центре экрана.
  • Black (Черный): Погасить экран и отобразить в его центре текст. Игровой вид снова НЕ включится (можно использовать для окончания миссии).
  • Black Faded (Черный полупрозрачный): Погасить экрна и отобразить текст в центре. Игровой экран восстановится примерно через 15 секунд.
  • Black Out (Черный контур): То же что и пункт Black.
  • Black In (Черное теснение): Черный экран постепенно проявляется в игровой.
  • White Out (Белый контур): То же что и Black Out, но экран белого цвета.
  • White In (Белое теснение): То же что и Black In, но экрана белого цвета.

Music (Музыка):

Можно выбрать саундтрэк из игры, который будет проигрываться в данном переключателе или waypoint`е:
- Track: Список множества саундтрэков (в том числе и Seventh).

Как добавить собственную музыку описано в руководстве "Создание собственных звуков и музыки".


Synchronize (F5)

Синхронизация действий. Вы можете синхронизировать активацию нескольких переключателей, waypoint`ов или их комбинации. Например, чтобы синхронизировать 2 waypoint`а, надо в режиме synchronize кликнуть и перетащить линию от одного waypoint`а к другому. Эти два waypoint`а соединяться голубой линией и станут синхронизированными. Юниты в первом waypoint`е будут ждать прибытия юнитов в другой (синхронизированный с ним) waypoint и лишь после этого отправятся к следующему waypoint`у.

Например, чтобы после загрузки первого солдата, грузовик не уехал и дождался, пока залезет весь взвод, необходимо синхронизировать waypoint грузовика Load (Загрузить) и waypoint взвода Get In(Посадка).

Вы также можете регулировать синхронизацию самостоятельно в скрипте.

Команды управления временем

Эти команды позволяют делать паузы в исполнении скрипта и изменять время в процессе игры.

Сделать паузу в 1.5 секунды:
~1.5

Чтобы проскачить 2 часа, укажите в поле Activation:
"skiptime 2"

Установка паузы в скрипте, пока глобальная переменная discovered не примет значение 1 (только после того, как discovered будет равнять 1, выполниться следующая строка скрипта):
@discovered == 1

Установка ускорения игрового времени (значение 1 – нормальная скорость. Можно использовать в скрипте для создания замедленных движений в видео-вставках):
setAcctime 0.050


Markers (F6)

Меню Маркеры позволяет сделать на карте пометки (например, район сборов или эвакуации, расположение противника и т.д.), которые будут видны во время миссии. Чтобы разместить марке, дважды кликните на карте в том месте, где вы хотите его разместить, при этом появится меню Insert/Edit marker.

Меню Insert/Edit marker

Name (Имя):

Имя маркера, которое используется в брифинге для ссылки на него.

Форма маркера:

Справа от пункта Name можно выбрать форму маркера:

  • Icon (Картинка): Маркер будет отображаться на карте в виде иконки.
  • Rectangle (Прямоугольник): Маркер будет отображаться на карте в виде квадрата/прямоугольника.
  • Ellipse (Элипс): Маркер будет отображаться на карте в виде окружности/эллипса.
Вид иконок (Значков):

Снизу в поле можно уточнить вид иконки. При выборе формы маркера Icon, данное поле будет также называться Icon:
Objective (задача) | Иконка в виде прицела.
Flag (флаг) | Иконка в виде флага
Dot (Точка) | Иконка в виде точки
Destroy (Уничтожить) | Иконка в виде двойного прицела
Start (Старт) | Иконка в виде кружка со стрелкой (место начала миссии)
End (Финиш) | Иконка в виде кружка со стрелкой (место окончания миссии)
Warning (Внимание) | Иконка в виде восклицательного знака (опасная зона)
Join (Присоединится) | Иконка в виде кружка с двумя стрелками (место объединения подразделений)
Pick Up (Подобрать) | Иконка в виде кружка со стрелкой внутри (зона эвакуации)
Unknown (Неизвестно) | Иконка в виде вопросительного знака (неизвестная зона)
Marker (Пометка) | Иконка в виде крестика (отметка)
Arrow (Стрела) | Иконка в виде стрелки (указание движения войск)
Empty (Пусто) | иконка в виде нуля (перечеркнутый кружок)

Квадратный маркер (Прямоугольник):

При выборе формы маркера Rectangle (Треугольник), данное поле будет называться Fill (Фон):

  • Solid (Монотонный): Квадрат будет заполнен цветом.
  • Horizontal (Горизонтальные линии): Квадрат будет состоять из горизонтальных полос.
  • Vertical (Вертикальные линии): Квадрат будет состоять из вертикальных полос.
  • Grid (Сетка): Квадрат будет состоять и из горизонтальных, и из вертикальных полос.
  • Forward diagonal (Наклонные линии): Квадрат будет состоять из диагональных (слева направо) полос.
  • Backward diagonal (Обратные наклонные линии): Квадрат будет состоять из диагональных (справа налево) полос.
  • Grid diagonal (Наклонная сетка): Квадрат будет состоять из диагональных полос обоих вышеперечисленных видов.
  • Cross (Кресты): Квадрат будет состоять из крестиков, расположенных по углам.
Круглый маркер (Эллипс):

При выборе формы маркера Ellipse (Элипс), данное поле также будет называться Fill (Фон) и иметь те же возможности выбора, что и у маркера Rectangle (Треугольник).

Color (Цвет):

Слева от поля Icon (Картинка)/Fill (Фон) расположено поле Color (Цвет), в котором можно выбрать цвет маркера:

  • Default (Обычный): Цвет маркера устанавливается по умолчанию.
  • Black (Черный): Черный цвет маркера.
  • Red (Красный): Красный цвет маркера.
  • Red Transparent (Красный полупрозрачный): Красный прозрачный цвет маркера.
  • Green (Зелёный): Зеленый цвет маркера.
  • Green Transparent (Зелёный полупрозрачный): Зеленый прозрачный цвет маркера.
  • Blue (Синий): Синий цвет маркера.
  • Yellow (Желтый): Желтый цвет маркера.
  • White (Белый): Белый цвет маркера.
Размер маркера:

Ниже следуют 3 поля (расположенные горизонтально):
Axis A (Ось А): Установка размера маркера по горизонтали в разах от размера по умолчанию (то есть прописав в данном поле цифру 2, маркер будет ровно в 2 раза шире стандартного). Axis B (Ось Б): Установка размера маркера по вертикали в разах от размера по умолчанию (то есть прописав в данном поле цифру 2, маркер будет ровно в 2 раза шире стандартного). Angle (Угол): Установка угла поворота маркера в градусах (маркер также можно вращать, зажав кнопку Shift и передвигая курсор мыши вокруг данного маркера).

Описание маркера:

И, наконец, самое нижнее поле называется Text (Текст), в котором можно указать описание к маркеру. Данное описание будет видно лишь при форме маркера Icon, и будет отображаться справа от самого маркера.

Чтобы изменить свойства маркера, дважды кликните в его центре (при этом высветится имя маркера). Чтобы переместить маркер, также необходимо первым делом попасть мышкой в его центр, а затем зажав кнопку, перетащить его в нужное место.

Команды управления маркерами

Эти команды позволяют динамически (во время игры) управлять маркерами. Чтобы изменить тип маркера "Start1" на "Destroy" во время игры, в поле Acvtivation пропишите:
"Start1" SetMarkerType "Destroy"

Замечание: Используйте именно двойные кавычки!

Также можно добавлять новые маркеры в процессе игры (например, при определении новых/последующих целей). Для этого создайте в файле mission.sqm маркер типа "Empty". При этом он не будет отображаться на карте. Потом в нужный момент измените его типа (например на "Destroy"), и он появится на карте.

Пример: Перемещение во время игры маркера "Start1" в координаты x=2000,y=5000 (последняя цифра "8" – высота маркера, не имеет значения):
"Start1" SetMarkerPos [2000,5000,8]


Глава 2. Команды.

Дальше следуют команды используемые в ОФП-редакторе для определенных действий, так же приведены команды анимации и команды действий.


Введение

Описание команд, операторов и ключевых слов, использующихся в скриптах

$ | - | + | = | == | !=
< | <= | > | >= | * | **
/ | % или mod | atan2 | sin | cos | tg
asin | acos | atg или atan | deg | rad | log
ln | abs | exp | sqrt | random | ;
() | and или && | or или || | not или ! | IsNull | select
In | ? | foreach | format | Local | PublicVariable
savevar | goto | exit | grpnull | null | objnull
pi | this | comment | do | if | then
else | then | while |  |  |

Данные команды прописываются в текстовый полях Condition, On Activation, Initialization и Deactivation. Можно также создать отдельный скрипт (обычный текстовый файл с расширением .sqs), который должен находиться в папке с вашей миссией. Для запуска скрипта в тех же самых полях пропишите команду:
[ARG1,ARG2,...] exec "scriptname.sqs"
Где scriptname.sqs - имя скрипта, а ARG1,ARG2 и т.д. - аргументы, передаваемые в скрипт.

Но есть одна хитрость. Если назвать файл со скриптом "init.sqs" и поместить его в папку с миссией, то этот скрипт будет выполняться автоматически при каждом запуске миссии (однако вы не сможете передать в него аргументы). Данный метод отлично подходит для добавления в миссию начальных видео-роликов.

Условные обозначения

UNIT - Название юнита, ресурса или объекта, например, SomeTruck
STRING - строка внутри кавычек, например, "Hello Guns!"
EXP - команда или последовательность команд, например, not alive myUnit
VAR - переменная, принимающая значение текстовой строки, числа или логическое значение, например, SomeVar=10
NUM - число, например, 10.0
ARG - аргумент, принимающий значения как юнита, ресурса или объекта, так и текстовой строки или числа
ARRAY - массив (набор однотипных или различных элементов), например, [MySoldier, "hi", 10]
T/F - логическое значение, то есть TRUE или FALSE

Операторы

$

Описание: Ссылается на строку в таблице stringtable.csv
Синтаксис1:
Синтаксис2:
Возвращаемое значение:
Пример: Hint localize "STRM_obj_enterleport1"
Замечание:

-

Описание: Вычитание (синтаксис1) или отрицание (синтаксис2)
Синтаксис1: VAR1 - VAR2
Синтаксис2: -VAR
Возвращаемое значение: Разницу между VAR1 и VAR2 (синтаксис1) или отрицательное значение VAR (синтаксис2)
Пример: Mynewcount = oldcount - 30
Замечание:

+

Описание: Сложение
Синтаксис: VAR1 + VAR2
Возвращаемое значение: Сумма VAR1 и VAR2
Пример: Mynewcount = oldcount + 30
Замечание:

=

Описание: Присваивание значения
Синтаксис1: VAR=NUM
Синтаксис2: VAR=STRING
Синтаксис3: VAR=T/F
Возвращаемое значение: Значение VAR равняется значению NUM, STRING или T/F
Пример: myCounter = 10
Замечание:

==

Описание: Сравнение значений
Синтаксис1: VAR==NUM
Синтаксис2: VAR==STRING
Синтаксис3: VAR==T/F
Возвращаемое значение: TRUE (если значение VAR равняется значению NUM, STRING или T/F) или FALSE (если нет)
Пример: ? myCounter == 10 : aP globalchat “I am a ten!”
Замечание: Сравнение строк происходит по символам (их коду и количеству)

!=

Описание: Отрицание значения
Синтаксис1: VAR!=NUM
Синтаксис2: VAR!=STRING
Синтаксис3: VAR!=T/F
Возвращаемое значение: TRUE (если значение VAR не равно значению NUM, STRING или T/F) или FALSE (если равно)
Пример: ? myCounter != 10 : aP globalchat “I am not a ten!”
Замечание: Сравнение строк происходит по символам (их коду и количеству)

<

Описание: Проверка значений, какое меньше
Синтаксис1: VAR<NUM
Синтаксис2: VAR<STRING
Возвращаемое значение: TRUE (если значение VAR меньше значения NUM или STRING) или FALSE (если больше или равно)
Пример: ? myAmmo < 10 : aP globalchat “I need more ammo”
Замечание: Сравнение строк происходит по символам (их коду и количеству)

<=

Описание: Проверка значений, какое меньше или равно
Синтаксис1: VAR<=NUM
Синтаксис2: VAR<=STRING
Возвращаемое значение: TRUE (если значение VAR меньше или равно значению NUM или STRING) или FALSE (если больше)
Пример: ? myAmmo <= 10 : aP globalchat “I need more ammo”
Замечание: Сравнение строк происходит по символам (их коду и количеству)

>

Описание: Проверка значений, какое больше
Синтаксис1: VAR>NUM
Синтаксис2: VAR>STRING
Возвращаемое значение: TRUE (если значение VAR больше значения NUM или STRING) или FALSE (если меньше или равно)
Пример: ? myAmmo > 10 : aP globalchat “I have enough ammo”
Замечание: Сравнение строк происходит по символам (их коду и количеству)

>=

Описание: Проверка значений, какое больше или равно
Синтаксис1: VAR>=NUM
Синтаксис2: VAR>=STRING
Возвращаемое значение: TRUE (если значение VAR больше или равно значению NUM или STRING) или FALSE (если меньше)
Пример: ? myAmmo >= 10 : aP globalchat “I still have enough ammo”
Замечание: Сравнение строк происходит по символам (их коду и количеству)

*

Описание: Умножение
Синтаксис: NUM1*NUM2
Возвращаемое значение: Произведение чисел NUM1 и NUM2
Пример: 2*3
Замечание:

**

Описание: Возведение в степень
Синтаксис: NUM1**NUM2
Возвращаемое значение: Число NUM1 в степени NUM2
Пример: 2**3
Замечание:

/

Описание: Деление
Синтаксис: NUM1/NUM2
Возвращаемое значение: Частное от деления чисел NUM1 и NUM2
Пример: 2/3
Замечание:

% или mod

Описание: Деление с остатком
Синтаксис1: NUM1%NUM2
Синтаксис2: NUM1 mod NUM2
Возвращаемое значение: Остаток от деления чисел NUM1 и NUM2
Пример: 2%3
Замечание:

atan2

Описание: Азимут вектора
Синтаксис: atan2(NUM1,NUM2)
Возвращаемое значение: Азимут вектора с координатами NUM1, NUM2
Пример: atan2(2,3)
Замечание:

sin

Описание: Синус
Синтаксис: sin(NUM)
Возвращаемое значение: Синус угла NUM
Пример: sin(2)
Замечание:

cos

Описание: Косинус
Синтаксис: cos(NUM)
Возвращаемое значение: Косинус угла NUM
Пример: Cos(2)
Замечание:

tg

Описание: Тангенс
Синтаксис: tg(NUM)
Возвращаемое значение: Тангенс угла NUM
Пример: tg(2)
Замечание:

asin

Описание: Арксинус
Синтаксис: asin(NUM)
Возвращаемое значение: Арксинус угла NUM
Пример: asin(2)
Замечание:

acos

Описание: Арккосинус
Синтаксис: acos(NUM)
Возвращаемое значение: Арккосинус угла NUM
Пример: acos(2)
Замечание:

atg или atan

Описание: Арктангенс
Синтаксис1: atg(NUM)
Синтаксис2: atan(NUM)
Возвращаемое значение: Арктангенс угла NUM
Пример: atg(2)
Замечание:

deg

Описание: Конвертирует радианы в градусы
Синтаксис: deg(NUM)
Возвращаемое значение: Градусная мера NUM радиан
Пример: deg(2)
Замечание:

rad

Описание: Конвертирует градусы в радианы
Синтаксис: rad(NUM)
Возвращаемое значение: Радианная мера NUM градусов
Пример: rad(2)
Замечание:

log

Описание: Логарифм
Синтаксис: log(NUM)
Возвращаемое значение: Логарифм NUM
Пример: log(2)
Замечание:

ln

Описание: Десятичный логарифм
Синтаксис: ln(NUM)
Возвращаемое значение: Десятичный логарифм NUM
Пример: ln(2)
Замечание:

abs

Описание: Модуль
Синтаксис: abs(NUM)
Возвращаемое значение: Абсолютное значение NUM (без знака минус)
Пример: abs(-2)
Замечание:

exp

Описание: Экспонента
Синтаксис: exp(NUM)
Возвращаемое значение: Число e (равно примерно 2.7) в степени NUM
Пример: exp(2)
Замечание:

sqrt

Описание: Извление корня
Синтаксис: sqrt(NUM)
Возвращаемое значение: Корень из NUM
Пример: sqrt(2)
Замечание:

random

Описание: Генерирует случайное число в пределах от 0 до NUM
Синтаксис: random NUM
Возвращаемое значение: случайное число в пределах от 0 до NUM
Пример: random 10
Замечание:

;

Описание: Разделитель команд
Синтаксис: EXP1; EXP2
Возвращаемое значение:
Пример: myVar=random 10; newVar=MyVar-10
Замечание: С данным символом несколько команд можно записывать в одной строке

()

Описание: Установка приоритета. Выражение EXP внутри скобок будет выполняться первым.
Синтаксис: (EXP)
Возвращаемое значение:
Пример: (random 10 + 2*2) - 15
Замечание: В вышеуказанном примере вначале будет рассчитано выражение в скобках, а потом из полученного значения вычтется 15

and или &&

Описание: Проверка истинности обоих выражений
Синтаксис1: EXP1 and EXP2
Синтаксис:2 EXP1 && EXP2
Возвращаемое значение: TRUE (если оба верны) FALSE (если хотя бы одно не верно)
Пример: ? (mycounter == 0) and (alive myUnit) : aP globalchat “Time ran out!”
Замечание:

or или ||

Описание: Логический оператор ИЛИ
Синтаксис1: EXP1 or EXP2
Синтаксис2: EXP1 || EXP2
Возвращаемое значение: TRUE (если хотя бы одно из выражений EXP1 или EXP2 верно) или FALSE (если ни одно не верно)
Пример1: ? (mycounter == 0) or (not alive myUnit) : aP globalchat “Ahhhh…too bad!”
Замечание: Можно использовать несколько операторов
Пример2: ? (mycounter ==0) or (alive myUnit) or (checkflag) : aP globalchat “hello”

not или !

Описание: Отрицание выражения или значения
Синтаксис1: not EXP
Синтаксис2: ! EXP
Возвращаемое значение: TRUE (если EXP отрицательное) или FALSE (если положительное)
Пример: ? (not alive myUnit) : aP globalchat “Ahhhh…too bad!”
Замечание:

IsNull

Описание: Проверяет, определен/существует ли юнит UNIT
Синтаксис: IsNull UNIT
Возвращаемое значение: TRUE (если юнит не определен) или FALSE (если определен)
Пример: IsNull MyUnit
Замечание:

select

Описание: Выбирает элемент под номером NUM из массива ARRAY
Синтаксис: ARRAY select NUM
Возвращаемое значение: элемент массива под номером NUM
Пример: myY = myCoords select 1
Замечание: Номера элементов массива начинаются с 1 (не с 0!)

In

Описание: Проверяет, находится ли указанное значение в массиве (синтаксис1), или юнит в технике (синтаксис2)
Синтаксис1: ARG In ARRAY
Синтаксис2: UNIT1 In UNIT2
Возвращаемое значение: TRUE (если находится внутри) или FALSE (если нет)
Пример1: aP in list // Проверяет наличие юнита aP в массиве list
Пример2: 20 in numarray // Проверяет наличие цифры 20 в массиве numarray
Пример3: myGuy in myJeep // Проверяет наличие солдата myGuy в технике myJeep
Замечание:

?

Описание: Постановка условия
Синтаксис: ? EXP1: EXP2
Возвращаемое значение: Выполняет выражение EXP2, если выражение EXP1 верно (TRUE)
Пример1: ? Arrested : exit
Замечание: Выражения можно комбинировать, используя логические операторы OR и AND
Пример2: ? (mycounter ==0) or (alive myUnit) and (checkflag) : aP globalchat “hello”

foreach

Описание: Выполнение команды EXP над каждым элементом массива ARRAY
Синтаксис: "_x EXP" foreach ARRAY
Возвращаемое значение: Измененный массив
Пример1: "_x Allowdamage false" ForEach (units group Mygroup)
Пример2: "_x setDir 0" ForEach SalutingSoldiersArray
Замечание: Переменная _x зарезервирована для обозначения текущего элемента массива

format

Описание: Форматирование текста STRING. Данный текст должен содержать ссылки %1, %2 и т.д. на аргументы в тех местах, куда будут вставлены аргументы ARG1, ARG2 и т.д. при форматировании
Синтаксис: format [STRING,ARG1,ARG2,...]
Возвращаемое значение: Отформатированная строка
Пример: MyString = format["Target Name/Pos: %1, %2", EnemyUnit, getpos EnemyUnit]
Замечание: Если EnemyUnit = BMP, а getpos EnemyUnit (это его координаты) = 4300, 5400, то в результате отформатированный текст будет иметь вид
"Target Name/Pos: BMP, 4300, 5400"

Local

Описание: Устанавливает тип переменной в локальный
Синтаксис: Local VAR
Возвращаемое значение:
Пример: local someVar
Замечание: Значение локальной переменной доступно только для той части скрипта, в которой она определена (данная часть скрипта должна быть выделена фигурными скобками {}). Также локальную переменную можно установить в любом условном поле (Condition, On Activation и т.д.), и она будет действительна только для этого поля. Например, создав переменную myVar и сделав ее локальной (local myVar=10) вы можете использовать переменную с таким же именем (myVar) в остальной части скрипта и ее значение НЕ будет равно 10, а будет равно null (то есть, не определено). Однако значение локальной переменной myVar будет оставаться равно 10 вне зависимости от значения другой локальной/глобальной переменной с таким же именем

PublicVariable

Описание: Установить глобальный тип для переменной VAR. Применяется в сетевой игре для того, чтобы значение переменной стало известно не только серверу, но и всем клиентам.
Синтаксис: PublicVariable VAR
Возвращаемое значение:
Пример: PublicVariable "houseDestroyedFlag"
Замечание: Глобальная переменная доступна во всем скрипте

savevar

Описание: Сохраняет значение переменной STRING и передает его из одной миссии в другую (в кампании). В следующей миссия данная переменная станет доступна автоматически
Синтаксис: savevar STRING
Возвращаемое значение: значение STRING
Пример: SaveVar "houseDestroyedFlag"
Замечание:

goto

Описание: Переход на метку STRING
Синтаксис: goto STRING
Возвращаемое значение: null
Пример: Если юнит находится в транспорте, возвращаемся на метку Update и выполняем проверку условия заново
# Update
? (_Unit in _Vehicle) : goto "Update"
Замечание: Метка прописывается в скрипте и должна начинаться со знака #, но этот символ не надо приписывать при ссылке на метку

exit

Описание: Выход из выполняемого скрипта
Синтаксис: exit
Возвращаемое значение: null
Пример: ?(counter ==10):Exit
Замечание:

Ключевые слова

grpnull

Описание: Ключевое слово, обозначающее отсутствие какой-либо группы. Его можно использовать, чтобы отсоединить юнит от группы (как это сделать, показано в примере)
Синтаксис: grpnull
Возвращаемое значение: null
Пример: UNIT Join GrpNull
Замечание:

null

Описание: Ключевое слово, обозначающее отсутствие какого-либо значения
Синтаксис: null
Возвращаемое значение: null
Пример: 1 SetRadioChannel "null"
Замечание:

objnull

Описание: Ключевое слово, обозначающее отсутствие какого-либо объекта. Его можно использовать во многих командах.
Синтаксис: objnull
Возвращаемое значение: null
Пример1: UNIT doFire objNull // прекратится огонь, т.к. цель отсутствует
Пример2: UNIT SetFlagOwner objNull // флаг не будет принадлежать никому, т.к. владелец отсутствует
Замечание:

pi

Описание: Число Пи
Синтаксис: pi
Возвращаемое значение: 3.1415926536
Пример: pi
Замечание:

this

Описание: Ключевое слово, указывающее на текущий юнит. Используется вместо имени самого юнита (синтаксис 1). Также используется для выбора одного конкретного элемента из массива юнитов, переданных как аргументы в скрипт с помощью команды exec. Если юнит является частью группы или техники, данная команда отобразит и их тоже
Синтаксис 1: this
Синтаксис 2: VAR = this select NUM
Возвращаемое значение: текущий юнит
Пример 1: leader this
Пример 2: JeepVariable = this select 0
Замечание: Аргументы в скрипт могут передаваться следующим образом:
[MyJeep, Trigger, MyGuy] exec "myscript.sqs";

Comment

Описание: Ничего не делает, используется для создания комментариев.
Синтаксис: Comment COMMENT
Возвращаемое значение: Нет
Пример: comment "This is comment"
Замечание:Требуется версия 1.85 и выше

Do

Описание: Повторяет выполнение цикла, пока условие ИСТИНА (TRUE).
Синтаксис: WHILE Do CODE
Возвращаемое значение: Нет
Пример: while "a>b" do {a=a+1}
Замечание: Цикл повторяется максимум 10000 раз. Если после этого условие все еще - ИСТИНА, то цикл прерывается и выдается сообщение об ошибке.
Требуется версия 1.85 и выше

if

Описание: Выполняется первая часть команды, если ИСТИНА.
Синтаксис: if CONDITION
Возвращаемое значение: If Type
Пример: if (a>b) then {a=b}
Замечание: Требуется версия 1.85 и выше

if then codeToExecute

Описание: Если условие "ИСТИНА", то код выполненяется, если нет, то пропускается.
Синтаксис: IF then CODETOEXECUTE
Возвращаемое значение: Любое
Пример 1: if (a>b) then {c=1}
Пример 1: if (a>b) then {c=1} else {c=2};if (a>b) then [{c=1},{c=2}]
Замечание: Требуется версия 1.85 и выше

else

Описание: Производит выбор команд, в зависимости от условия (ИСТИНА / ЛОЖЬ)
Синтаксис: IFCODE else ELSECODE
Возвращаемое значение: Array
Пример: if (a>b) then {c=0} else {c=1}
Замечание: Требуется версия 1.85 и выше

while

Описание: Пока условие ИСТИНА, выполняется цикл.
Синтаксис: while CONDITION
Возвращаемое значение: While Type
Пример: while "x<10" do {x=x+1}
Замечание: Требуется версия 1.85 и выше

$ | - | + | = | == | !=
< | <= | > | >= | * | **
/ | % или mod | atan2 | sin | cos | tg
asin | acos | atg или atan | deg | rad | log
ln | abs | exp | sqrt | random | ;
() | and или && | or или || | not или ! | IsNull | select
In | ? | foreach | format | Local | PublicVariable
savevar | goto | exit | grpnull | null | objnull
pi | this | comment | do | if | then
else | then | while |  |  |
<<<Назад <<< <<<Меню>>> >>> Далее>>>


Игровые команды: A - C

Acctime | Action | addaction | addEventHandler | addmagazine | addMagazineCargo
addMagazinePool | addrating | addscore | addweapon | addweaponcargo | addweaponPool
alive | allowdammage | allowfleeing | allowgetin | Ammo | animate
animationPhase | assignascargo | assignascommander | assignasdriver | assignasgunner | Benchmark
Buildingpos | buttonAction | buttonSetAction | Cadetmode | camcommand | camcommit
camcommitted | camcreate | Camdestroy | cameraeffect | camsetfov | camsetpos
camsetrelpos | camsettarget | canfire | canmove | canstand | clearmagazinecargo
clearweaponcargo | closeDialog | combatmode | Commander | Comment | CommandFire
commandfollow | CommandMove | CommandStop | CommandTarget | commandwatch | Count
CountEnemy | CountFriendly | CountSide | CountType | CountUnknown | CreateDialog
CreateUnit | CreateVehicle | ctrlEnable | ctrlEnabled | ctrlSetText | ctrlShow
ctrlText | ctrlVisible | cutobj | cutrsc | CutText |
Acctime

Описание: Текущий уровень акселерации времени
Синтаксис: Acctime
Возвращаемое значение: 1 (если скорость нормальная), <1 (если замедленная), >1 (если ускоренная)
Пример: AccTime 3
Замечание:

Action

Описание: Заставляет юнит UNIT выполнить действие STRING
Синтаксис: UNIT Action [STRING]
Возвращаемое значение:
Пример: aP action ["STROKEGUN"]
Замечание: Описание всех действий есть тут

addaction

Описание: Добавляет юниту UNIT новое действие STRING
Синтаксис: UNIT addaction STRING
Возвращаемое значение: UNIT removeAction id (id-индификатор, устанаввливается так: id = UNIT addAction STRING)
Пример: MySoldier Addaction ["Action,"doit.sqs"]
Замечание: doit.sqs - скрипт действия, требуется версия 1.1 и выше.

addEventHandler

Описание: Формат вызова [Событие, Команда]. Указанная команда будет выполнятся, после совершения указанного события.
Синтаксис: OBJECT addEventHandler HANDLER
Возвращаемое значение: Number
Пример: player addEventHandler ["killed",{_this exec "playerKilled.sqs"}]
Т.е. после смерти игрока выполнится этот скрипт "PlayerKiller.sqs".
Замечание: Требуется версия 1.85 и выше.

addmagazine

Описание: Добавляет юниту UNIT боеприпасы STRING
Синтаксис: UNIT addmagazine STRING
Возвращаемое значение:
Пример: MySoldier AddMagazine "M16"
Замечание: Описание всех оружий и боеприпасов есть тут

addMagazineCargo

Описание: Добавляет в технику или ящик с оружием UNIT боеприпасы STRING в количестве NUM штук
Синтаксис: UNIT addMagazineCargo [STRING,NUM]
Возвращаемое значение:
Пример: MyCrate AddMagazineCargo ["HK", 5]
Замечание: Описание всех оружий и боеприпасов есть тут

addMagazinePool

Описание: добавляет на "склад" магазины, которое потом можно расстрачивать в процессе прохождения миссии
Синтаксис: UNIT addMagazinePool [STRING,NUM]
Возвращаемое значение:
Пример: MyCrate AddMagazinePool ["WeaponName", 5]
Замечание: Требуется версия 1.75 и выше

addrating

Описание: Добавляет юниту UNIT к рейтингу NUM очков (только для сингла)
Синтаксис: UNIT addrating NUM
Возвращаемое значение:
Пример: player AddRating 1000
Замечание:

addscore

Описание: Добавляет юниту UNIT к счету NUM очков (только для сетевой игры)
Синтаксис: UNIT addscore NUM
Возвращаемое значение:
Пример: Player1 AddScore 10
Замечание:

addweapon

Описание: Добавляет юниту UNIT оружие STRING
Синтаксис: UNIT addweapon STRING
Возвращаемое значение:
Пример: MySoldier AddWeapon "HK"
Замечание: Прежде чем добавлять оружие, необходимо удалить старое командой removeweapon. Описание всех оружий и боеприпасов есть тут

addweaponcargo

Описание: Добавляет в технику или ящик с оружием UNIT оружие STRING в количестве NUM штук
Синтаксис: UNIT addweaponcargo [STRING,NUM]
Возвращаемое значение:
Пример: MyCrate AddWeaponCargo ["M16", 3]
Замечание: Описание всех оружий и боеприпасов есть тут

addweaponPool

Описание: добавляет на "склад" оружие, которое потом можно расстрачивать в процессе прохождения миссии
Синтаксис: UNIT addweaponPool [STRING,NUM]
Возвращаемое значение:
Пример: AddWeaponPool ["WeaponName", 3]
Замечание: Требуется версия 1.75 и выше. Описание всех оружий и боеприпасов есть тут

alive

Описание: Проверяет, жив ли юнит UNIT
Синтаксис: alive UNIT
Возвращаемое значение: TRUE (если юнит жив) или FALSE (если нет)
Пример: ?(alive MyPet): addscore 10
Замечание:

allowdammage

Описание: Разрешить (TRUE) или запретить (FALSE) повреждение юнита UNIT
Синтаксис: UNIT allowdammage T/F
Возвращаемое значение:
Пример: StrongGuy Allowdammage FALSE
Замечание: В примере юнит StrongGuy стал неуязвимым. Данная команда не работает в версии 1.10!

allowfleeing

Описание: Разрешить (1) или запретить (0) юниту UNIT возможность отступать
Синтаксис: UNIT allowfleeing 1/0
Возвращаемое значение:
Пример1: MySoldier allowfleeing 1
Пример2: group this allowfleeing 0
Замечание:

allowgetin

Описание: Определяет, могут ли (TRUE) юниты из массива ARRAY залезть в технику, или нет (FALSE)
Синтаксис: ARRAY allowgetin T/F
Возвращаемое значение:
Пример1: [MySolder] AllowGetIn TRUE
Пример2: (units group aP) AllowGetIn FALSE
Замечание: Данная команда не запрещает юнитам залазить куда-либо!

Ammo

Описание: Отображает, сколько патронов для оружия STRING осталось у юнита UNIT
Синтаксис: UNIT Ammo STRING
Возвращаемое значение:
Пример: ?(MyGuy ammo "M16" == 0):aP sidechat "Reload damn it!"
Замечание:

animate

Описание: Проводит анимацию объекта
Синтаксис: OBJECT animate STRING
Возвращаемое значение:
Пример: house animate ["doors1", 1] - открывает дверь дома
Замечание: требуется версия 1.75 и выше

animationPhase

Описание: Возвращает анимацию в начальный вид
Синтаксис: OBJECT animationPhase STRING
Возвращаемое значение:
Пример: house animationPhase "doors1"
Замечание: требуется версия 1.75 и выше

assignascargo

Описание: Привязывает юнит UNIT1 к юниту UNIT2 в качестве пассажира
Синтаксис: UNIT1 assignascargo UNIT2
Возвращаемое значение:
Пример1: MySoldier AssignAsCargo MyTruck
Пример2: "_x AssignAsCargo MyTruck" foreach (units group aP)
Замечание: Данная команда не сажает юнит UNIT1 внутрь юнита UNIT2! Для это используйте Waypoint типа GET IN или команду ordergetin

assignascommander

Описание: Привязывает юнит UNIT1 к юниту UNIT2 в качестве командира
Синтаксис: UNIT1 assignascommander UNIT2
Возвращаемое значение:
Пример: MyOff AssignAsCommander MyTank
Замечание: Данная команда не сажает юнит UNIT1 внутрь юнита UNIT2! Для это используйте Waypoint типа GET IN или команду ordergetin

assignasdriver

Описание: Привязывает юнит UNIT1 к юниту UNIT2 в качестве водителя
Синтаксис: UNIT1 assignasdriver UNIT2
Возвращаемое значение:
Пример: MyGuy AssignAsDriver MyJeep
Замечание: Данная команда не сажает юнит UNIT1 внутрь юнита UNIT2! Для это используйте Waypoint типа GET IN или команду ordergetin

assignasgunner

Описание: Привязывает юнит UNIT1 к юниту UNIT2 в качестве стрелка
Синтаксис: UNIT1 assignasgunner UNIT2
Возвращаемое значение:
Пример: MySoldier AssignAsGunner MyBMP
Замечание: Данная команда не сажает юнит UNIT1 внутрь юнита UNIT2! Для это используйте Waypoint типа GET IN или команду ordergetin

Benchmark

Описание: Отображает значение, определенное в конфигурационном файле игры в строке "CPU benchmark result"
Синтаксис: Benchmark
Возвращаемое значение: результат теста производительности компьютера
Пример: ?(benchmark < 1000):setviewdistance 400
Замечание: С помощью этой команды можно настраивать миссию под разные компьютеры, например, использовать в миссии меньше техники, если компьютер слабый (что и продемонстрировано в примере)

Buildingpos

Описание: Отображает координаты x,y,z здания UNIT. NUM может принимать значение 1 или 0
Синтаксис: UNIT BuildingPos NUM
Возвращаемое значение:
Пример: MyBuild BuildingPos 1
Замечание: Координаты постоянно различаются на 2-3 метра

buttonAction

Описание: Определяет действие кнопки при использовании "диалогов"
Синтаксис: _action = buttonaction 100
Возвращаемое значение:
Пример: _action = buttonaction 100;
Замечание: Требуется версия 1.5 и выше

buttonSetAction

Описание: Определяет действие кнопки при использовании "диалогов"
Синтаксис: buttonsetaction STRING
Возвращаемое значение:
Пример: buttonsetaction [100, "player exec ""reply.sqs"""];
Замечание: Требуется версия 1.5 и выше

Cadetmode

Описание: Проверяет, на каком уровне сложности запущена игра
Синтаксис: Cadetmode
Возвращаемое значение: TRUE (если на Cadet) или FALSE (если на Veteran)
Пример1: presenceCondition not cadetMode
Пример2: ?(cadetmode):EnemyBMP Setdammage .8
Замечание:

camcommand

Описание: Отправляет команду STRING камере UNIT. Доступные команды:

  • manual on - передает игроку управление камерой
  • manual off - запрещает игроку контролировать камеру
  • inertia on - камера может проходить сквозь объекты
  • inertia off - камера не может проходить сквозь объекты
Синтаксис: UNIT camcommand STRING
Возвращаемое значение:
Пример: _mycamera CamCommand "manual on"
Замечание:
camcommit

Описание: Вводит в силу все изменения, произведенные командой camcommand с камерой UNIT через NUM секунд
Синтаксис: UNIT camcommit NUM
Возвращаемое значение:
Пример: _mycamera CamCommit 3.5
Замечание: Никакие изменения, произведенные командой camcommand камерой, не вступят в силу, пока не выполнится эта команда!

camcommitted

Описание: Проверяет, вступили ли в силу все изменения, произведенные командой camcommand с камерой UNIT
Синтаксис: camcommitted UNIT
Возвращаемое значение: TRUE (если изменения вступили в силу) или FALSE (если нет)
Пример: CamCommitted _mycamera
Замечание: Совместно с этой командой можно использовать команду @ (@CamCommitted _mycamera). При этом скрипт приостановит выполнение, пока не вступят в силу все изменения для камеры (команда @ может использоваться с любыми другими командами). Также допустимо применение команды ~ , для задержки исполнения скрипта на определенное время

camcreate

Описание: Cоздает новую камеру типа STRING в позиции с координатами X=NUM1, Y=NUM2, Z=NUM3. Виды камеры:
camera - обычная камера
seagull - камера из глаз чайки
Также позволяет создавать прямо во время миссии технику, взрывы, выстрелы из танков, вертолетов и т.п. Для этого вместо STRING пропишите реальное обозначение нужной техники или снаряда
Синтаксис: STRING camcreate [NUM1,NUM2,NUM3]
Возвращаемое значение: Возвращает ID камеры, который используется как ссылка на определенную камеру во всех командах, связанных с камерами
Пример 1: _mycamera = "camera" camCreate [3000, 2500, 20]
Пример 2: tank = "M1Abrams" camCreate [500, 500, 0]
Замечание: Однако игрок не может управлять такой техникой, только АИ

Camdestroy

Описание: Удаляет камеру UNIT
Синтаксис: Camdestroy UNIT
Возвращаемое значение:
Пример: camDestroy _mycamera
Замечание:

cameraeffect

Описание: Устанавливает для камеры UNIT эффект STRING1 и позицию STRING2. Доступные эффекты:

  • TERMINATE - Отключить эффекты
  • TRANSITION - значение неизвестно
  • BOOMANDZOOM - значение неизвестно
  • ZOOMOUT - Отодвинуть камеру
  • ZOOMIN - Приблизить камеру
  • BOOMANDZOOM - значение неизвестно
  • ALIGNED - значение неизвестно
  • EXTERNAL_FIX - значение неизвестно
  • EXTERNAL - значение неизвестно
  • FOLLOW_FAR - Следовать за юнитом на удалении
  • FOLLOW_NEAR - Следовать за юнитом вблизи
  • TRACKING - Статичная камера с приближением
  • STATIC - Статичная камера
  • NONE - Без эффектов
  • TIMED - значение неизвестно
  • INTERNAL - значение неизвестно
  • INTERPOLATED - значение неизвестно
  • CHAINED - значение неизвестно
  • Доступные позиции:
  • BOTTOM - снизу
  • BACKTOP - сзади сверху
  • FRONTTOP - спереди сверху
  • RIGHTTOP - справа сверху
  • LEFTTOP - слева сверху
  • RIGHTBACK - справа сзади
  • LEFTBACK - слева сзади
  • RIGHTFRONT - справа спереди
  • LEFTFRONT - слева спереди
  • BACK - сзади
  • FRONT - спереди
  • RIGHT - справа
  • LEFT - слева
  • TOP - сверху
Синтаксис: UNIT cameraeffect [STRING1,STRING2]
Возвращаемое значение:
Пример: _mycamera cameraEffect ["internal","back"]
Замечание:
camsetfov

Описание: Устанавливает камере UNIT угол обзора NUM (1 - нормальный, <1 - приближение, >1 - удаление)
Синтаксис: UNIT camsetfov NUM
Возвращаемое значение:
Пример: _mycamera camSetFOV 0.538
Замечание:

camsetpos

Описание: Устанавливает камеру UNIT в координаты X=NUM1, Y=NUM2, Z=NUM3
Синтаксис: UNIT camsetpos [NUM1,NUM2,NUM3]
Возвращаемое значение:
Пример: _mycamera camSetPos [7960.74,5958.81,10.28]
Замечание:

camsetrelpos

Описание: Устанавливает камеру UNIT в координаты X=NUM1, Y=NUM2, Z=NUM3 относительно координаты ее цели
Синтаксис: UNIT camsetrelpos [NUM1,NUM2,NUM3]
Возвращаемое значение:
Пример: _mycamera camSetRelPos [245.34,-127.50,31.56]
Замечание:

camsettarget

Описание: Устанавливает для камеры UNIT1 цель юнит UNIT2 (синтаксис1) или цель в координатах X=NUM1, Y=NUM2, Z=NUM3 (синтаксис2)
Синтаксис1: UNIT1 camsettarget UNIT2
Синтаксис2: UNIT1 camsettarget [NUM1,NUM2,NUM3]
Возвращаемое значение:
Пример1: _mycamera camSetTarget myjeep
Пример2: _mycamera camSetTarget [-85002.95,-30899.97,182.26]
Замечание:

canfire

Описание: Проверяет, может ли юнит UNIT стрелять
Синтаксис: canfire UNIT
Возвращаемое значение: TRUE (если юнит может стрелять) или FALSE (если нет)
Пример: ?(!canfire MyTank):MyTank sidechat "Unable to fire!"
Замечание: Данная команда не учитывает количество боеприпасов у юнита. Для живых солдат всегда TRUE, поэтому лучше использовать эту команду для проверки техники

canmove

Описание: Проверяет, может ли юнит UNIT двигаться
Синтаксис: canmove UNIT
Возвращаемое значение: TRUE (если юнит может двигаться) или FALSE (если нет)
Пример: ?(!canmove MyTank):MyTank sidechat "Can't move!"
Замечание: Данная команда не учитывает количество топлива у техники. Для живых солдат всегда TRUE, поэтому лучше использовать эту команду для проверки техники

canstand

Описание: Проверяет, может ли юнит UNIT стоять
Синтаксис: canstand UNIT
Возвращаемое значение: TRUE (если юнит может стоять) или FALSE (если нет)
Пример: GuyCanWalk = canstand MyGuy
Замечание: Для техники всегда FALSE, поэтому лучше использовать эту команду для проверки солдат

clearmagazinecargo

Описание: Удаляет все боеприпасы из техники и ящиков с оружием UNIT
Синтаксис: clearmagazinecargo UNIT
Возвращаемое значение:
Пример: ClearMagazineCargo this
Замечание:

clearweaponcargo

Описание: Удаляет все оружие из техники и ящиков с оружием UNIT
Синтаксис: clearweaponcargo UNIT
Возвращаемое значение:
Пример: ClearWeaponCargo MyCrate
Замечание:

closeDialog

Описание: Закрывает диалоговое окно
Синтаксис: closeDialog STRING
Возвращаемое значение:
Пример: closeDialog 1
Замечание: Требуется версия 1.5 и выше

combatmode

Описание: Отображает текущий боевой режим юнитаUNIT. Доступные режимы:

  • BLUE - Никогда не стрелять
  • GREEN - Не стрелять до приказа
  • WHITE - Не стрелять до приказа, но атаковать врага в поле видимости
  • YELLOW - Открыть огонь (с того места где находится юнит)
  • RED - Открыть огонь, но оставаться рядом с командиром
Синтаксис: combatmode UNIT
Возвращаемое значение:
Пример: ?(combatmode aP == "GREEN"):aP sidechat "Request permission to fire!"
Замечание:

Commander

Описание: Отображает командира юнита UNIT
Синтаксис: Commander UNIT
Возвращаемое значение:
Пример: (commander myTank) globalchat "I was born to command"
Замечание:

Comment

Описание: Ничего не делает, используется для создания комментариев.
Синтаксис: Comment COMMENT
Возвращаемое значение: нет.
Пример: comment "This is comment"
Замечание: Требуется версия 1.85 и выше

CommandFire

Описание: Заставляет командира юнита/ов UNIT1 приказать своим подчиненным открыть огонь по юниту/ам UNIT2
Синтаксис: UNIT1 CommandFire UNIT2
Возвращаемое значение:
Пример1: MySoldier CommandFire EnemySoldier
Пример2: units group MySoldier CommandFire EnemySoldier
Замечание: Если использовать массив, приказ получат только юниты из первой встретившейся в этом массиве группы. То есть если юниты unit1 и unit2 входят в группу group1, а юниты unit3 и unit4 входят в группу group2, то атаковать начнут только юниты unit1 и unit2

commandfollow

Описание: Заставляет командира UNIT2 приказать своим подчиненным UNIT1 следовать за ним
Синтаксис: UNIT1 commandfollow UNIT2
Возвращаемое значение:
Пример1: MySoldier CommandFollow MyLeader
Пример2: [MySoldier1, MySolder2] CommandFollow leader MySolder1
Замечание: Можно использовать для эмуляции команды "Return to formation". При этом юниты не будут следовать ни за кем другим кроме лидера. Также используйте команду "Join". Но если использовать массив, приказ получат только юниты из первой встретившейся в этом массиве группы, то есть если юниты unit1 и unit2 входят в группу group1, а юниты unit3 и unit4 входят в группу group2, то последуют за лидером только юниты unit1 и unit2. Если в группе определен лидер, команда не будет работать!

CommandMove

Описание: Заставляет командира юнита/ов UNIT приказать своим подчиненным следовать в точку с координатами X=NUM1, Y=NUM2
Синтаксис: UNIT CommandMove [NUM1,NUM2]
Возвращаемое значение:
Пример1: Soldier1 CommandMove [1000,1000]
Пример2: [Soldier1, Soldier2] CommandMove GetMarkerPos "Marker1"
Замечание: Если использовать массив, приказ получат только юниты из первой встретившейся в этом массиве группы. То есть если юниты unit1 и unit2 входят в группу group1, а юниты unit3 и unit4 входят в группу group2, то направятся в указанные координаты только юниты unit1 и unit2. Если в массиве указан лидер, то только он выполнит приказ, а подчиненные пойдут за ним только если они находятся в состоянии "in formation"! Если же лидера убьют, новый лидер продолжит движение к следующему waypoint`у, а если waypoint`ов больше нет, то вернется к предыдущему

CommandStop

Описание: Заставляет командира юнита/ов UNIT приказать своим подчиненным остановиться (равнозначно приказу "Halt")
Синтаксис: CommandStop UNIT
Возвращаемое значение:
Пример1: CommandStop MySoldier
Пример2: CommandStop [Soldier1, Soldier2]
Замечание: Если использовать массив, приказ получат только юниты из первой встретившейся в этом массиве группы. То есть если юниты unit1 и unit2 входят в группу group1, а юниты unit3 и unit4 входят в группу group2, то остановятся только юниты unit1 и unit2. Если в массиве указан лидер, то только он выполнит приказ, а подчиненные остановятся только если они находятся в состоянии "in formation"! Если же лидера убьют, новый лидер продолжит движение к следующему waypoint`у, а если waypoint`ов больше нет, то вернется к предыдущему

CommandTarget

Описание: Заставляет командира юнита/ов UNIT1 назначить своим подчиненным цель UNIT2
Синтаксис: UNIT1 CommandTarget UNIT2
Возвращаемое значение:
Пример1: Soldier1 CommandTarget Enemy1
Пример2: units group Soldier1 CommandTarget Enemy1
Замечание: Если использовать массив, приказ получат только юниты из первой встретившейся в этом массиве группы. То есть если юниты unit1 и unit2 входят в группу group1, а юниты unit3 и unit4 входят в группу group2, то целеуказание получат только юниты unit1 и unit2

commandwatch

Описание: Заставляет командира юнита/ов UNIT1 приказать своим подчиненным следить за целью UNIT2
Синтаксис: UNIT1 commandwatch UNIT2
Возвращаемое значение:
Пример1: Soldier1 CommandWatch Civ1
Пример2: units group Soldier1 CommandWatch Civ1
Замечание: Если использовать массив, приказ получат только юниты из первой встретившейся в этом массиве группы. То есть если юниты unit1 и unit2 входят в группу group1, а юниты unit3 и unit4 входят в группу group2, то следить за целью будут только юниты unit1 и unit2

Count

Описание: Определят количество элементов в массиве ARRAY
Синтаксис: Count ARRAY
Возвращаемое значение: Количество элементов
Пример: BodyCount = count PeopleDeadArray
Замечание:

CountEnemy

Описание: Определят, о скольких врагах, указанных в массиве ARRAY, знает юнит UNIT
Синтаксис: UNIT CountEnemy ARRAY
Возвращаемое значение:
Пример: EnemyNumber = MyGuy CountEnemy ListOfAllUnits
Замечание: Данная команда перебирает массив всех известных данному юниту юнитов. И если юниты знают друг о друге, то проверяется, враги ли они и если да, то результат увеличивается на 1

CountFriendly

Описание: Определят, о скольких союзниках, указанных в массиве ARRAY, знает юнит UNIT
Синтаксис: UNIT CountFriendly ARRAY
Возвращаемое значение:
Пример: FriendsNumber = MyGuy CountFriendly ListOfAllUnits
Замечание: Данная команда перебирает массив всех известных данному юниту юнитов. И если юниты знают друг о друге, то проверяется, враги ли они и если да, то результат увеличивается на 1. Пустые юниты (EMPTY) всегда считаются союзниками. Если же в список попал сам юнит, выполняющий подсчет своих союзников, то он также будет учтен в данном списке как союзник (то есть значение будет на 1 больше действительного)

CountSide

Описание: Определят, сколько юнитов, указанных в массиве ARRAY, принадлежат к войскам STRING.
Доступные войска:

  • EAST - СССР
  • WEST - НАТО
  • CIV - Гражданские
  • GUER - Повстанцы
  • LOGIC - Игровая логика
Синтаксис: STRING CountSide ARRAY
Возвращаемое значение:
Пример: MyEnemies = WEST CountSide MyList
Замечание: Данная команда учитывает только живые юниты!
CountType

Описание: Определяет, сколько юнитов, указанных в массиве ARRAY, принадлежат к типу STRING
Синтаксис: STRING CountType ARRAY
Возвращаемое значение:
Пример: TanksLeft = "Tank" CountType ListOfMyUnits
Замечание: При подсчете юнитов, также учитываются подклассы и входящие в них юниты. Например, при указании класса "Tank" будут подсчитана вся бронетехника, включая БТР и БМП (т.к. "APC" - это подкласс "Tank")

CountUnknown

Описание: Определяет, сколько юнитов, указанных в массиве ARRAY, неизвестны юниту UNIT
Синтаксис: UNIT CountUnknown ARRAY
Возвращаемое значение:
Пример: ?(MyGuy CountUnknown [Tank1, Tank2] < 2):MyGuy SideChat "Tank spotted!"
Замечание: Если юнит что-то знает о другом юните, но не знает к каким войскам тот принадлежит, этот юнит не будет учитываться

CreateDialog

Описание: Создаёт диалог STRING, заранее указанный в файле description.ext , STRING - имя диалога
Синтаксис: createDialog STRING
Возвращаемое значение:
Пример: _ok=createDialog "RscDisplayGame"
Замечание: Требуется версия 1.5 и выше

CreateUnit

Описание: Создаёт юнита с определёнными характеристиками. [координаты, группа, инициализация, опыт(skill), ранг]
Синтаксис: TYPE createUnit UNITINFO
Возвращаемое значение:
Пример: "SoldierWB" createUnit [getMarketPos "barracks", groupAlpha]
Замечание: Требуется версия 1.34 и выше

CreateVehicle

Описание: Создаёт пустую технику в определённых координатах
Синтаксис: TYPE createVehicle POS
Возвращаемое значение:
Пример: _tank = "M1Abrams" createVehicle getmarkerpos "tankFactory"
Замечание: Требуется версия 1.34 и выше

ctrlEnable

Описание: Включает / Выключает какой-то контроль в диалогах.
Синтаксис: ctrlEnable [IDC, ENABLE]
Возвращаемое значение:
Пример: ctrlEnable [100, false]
Замечание: Требуется версия 1.5 и выше

ctrlEnabled

Описание: Возвращает контроль в диалогах.
Синтаксис: ctrlEnabled IDC
Возвращаемое значение:
Пример: Enabled = ctrlEnabled 100
Замечание: Требуется версия 1.5 и выше

ctrlSetText

Описание: Устанавливает текст в диалогах
Синтаксис: ctrlSetText [IDC, TEXT]
Возвращаемое значение:
Пример: ctrlSetText [100, "Hello, World!"]
Замечание: Требуется версия 1.5 и выше

ctrlShow

Описание: Показывает / Прячет кнопки в диалогах
Синтаксис: ctrlShow [IDC, SHOW]
Возвращаемое значение:
Пример: ctrlShow [100, true]
Замечание: Требуется версия 1.5 и выше

ctrlText

Описание: Определяет текст выводимый в диалогах, может использоватся для текста, кнопок, активного текста и т.д.
Синтаксис: ctrlText IDC
Возвращаемое значение:
Пример: _message = ctrlText 100
Замечание: Требуется версия 1.5 и выше

ctrlVisible

Описание: Делает видимым текст в диалогах
Синтаксис: ctrlVisible IDC
Возвращаемое значение:
Пример: _visible = ctrlVisible 100
Замечание: Требуется версия 1.5 и выше

cutobj

Описание: Отображает на экране объект UNIT в позиции STRING (значение NUM неизвестно). Допустимые позиции:
PLAIN DOWN - обычный текст в нижней части экрана
PLAIN - обычный текст в центре экрана
Синтаксис: cutobj [UNIT,STRING,NUM]
Возвращаемое значение:
Пример: cutobj ["tvset","plain down",100]
Замечание:

cutrsc

Описание: Отображает на экране ресурс UNIT в позиции STRING (значение NUM неизвестно). Допустимые ресурсы:

  • default - нормальный вид
  • binocular - вид из бинокля
  • creditsback - значение неизвестно
  • creditsbackBIS - кредиты BIStudio
  • creditsbackCM - кредиты Codemasters
  • Endof - значение неизвестно
  • foto - вид в рамке (как фотография)
Допустимые позиции:
PLAIN DOWN - обычный текст в нижней части экрана
PLAIN - обычный текст в центре экрана
Синтаксис: cutrsc [UNIT,STRING,NUM]
Возвращаемое значение:
Пример: cutrsc ["foto","plain down",100]
Замечание:
CutText

Описание: Отображает на экране текст STRING1 в позиции STRING2. NUM - время (в секундах), по истечении которого текст исчезнет с экрана. Допустимые позиции:
PLAIN DOWN - обычный текст в нижней части экрана
PLAIN - обычный текст в центре экрана
Синтаксис: CutText [STRING1,STRING2,NUM]
Возвращаемое значение:
Пример1: CutText ["Guns of Steel","PLAIN",10]
Пример2: CutText["Guns of Steel\nSon of a Gun","PLAIN",10]
Замечание: Можно также вставлять знаки перевода строки и разбивать текст на несколько строк, путем добавления символов "\n" в месте перевода строки (см. Пример2)

Acctime | Action | addaction | addEventHandler | addmagazine | addMagazineCargo
addMagazinePool | addrating | addscore | addweapon | addweaponcargo | addweaponPool
alive | allowdammage | allowfleeing | allowgetin | Ammo | animate
animationPhase | assignascargo | assignascommander | assignasdriver | assignasgunner | Benchmark
Buildingpos | buttonAction | buttonSetAction | Cadetmode | camcommand | camcommit
camcommitted | camcreate | Camdestroy | cameraeffect | camsetfov | camsetpos
camsetrelpos | camsettarget | canfire | canmove | canstand | clearmagazinecargo
clearweaponcargo | closeDialog | combatmode | Commander | Comment | CommandFire
commandfollow | CommandMove | CommandStop | CommandTarget | commandwatch | Count
CountEnemy | CountFriendly | CountSide | CountType | CountUnknown | CreateDialog
CreateUnit | CreateVehicle | ctrlEnable | ctrlEnabled | ctrlSetText | ctrlShow
ctrlText | ctrlVisible | cutobj | cutrsc | CutText |
<<<Назад <<< <<<Меню>>> >>> Далее>>>


Игровые команды: D - R

damage | daytime | deleteIdentity | deleteStatus | deleteVehicle | disableAI
direction | disableuserinput | distance | dofire | dofollow | domove
dostop | dotarget | dowatch | Driver | Drop | enableradio
estimatedTimeLeft | fademusic | fadesound | Fire | FillWeaponFromPool | FlagOwner
fleeing | flyinheight | Forceend | ForceMap | getdammage | getdir
getmarkerColor | getmarkerpos | getmarkerSize | getmarkerType | getpos | getWPPos
globalchat | globalradio | groupchat | groupradio | Group | Gunner
handsHit | hasWeapon | Hint | Hintc | HintCadet | InFlame
InFlamed | Join | KnowsAbout | Land | lbAdd | lbClear
lbColor | lbCurSel | lbData | lbDelete | lbPicture | lbSetColor
lbSetCurSel | lbSetData | lbSetPicture | lbSetValue | lbSize | lbText
lbValue | Leader | LeaveVehicle | lightsIsOn | List | loadFile
LoadIdentity | LoadStatus | Localize | lock | lockwp | magazines
mapAnimAdd | mapAnimClear | mapAnimCommit | mapAnimDone | markerColor | markerPos
markerSize | markerType | missionName | missionStart | moveincargo | moveincommander
moveindriver | moveingunner | musicvolume | nearestbuilding | nearestobject | Object
ObjStatus | OnBriefingGear | OnBriefingGroup | OnBriefingNotes | OnBriefingPlan | onMapSingleClick
OrderGetIn | playersNumber | playmove | playmusic | playsound | position
preprocessFile | primaryWeapon | private | publicVariable | rating | removeAction
removeAllEventHandlers | removeallweapons | removemagazine | removemagazines | removeEventHandler | removeweapon
requiredVersion | resize | reveal |  |  |
damage

Описание: Уничтожает объект
Синтаксис: damage UNIT
Возвращаемое значение:
Пример: damage Player
Замечание: Требуется версия 1.5 и выше

daytime

Описание: Отображает текущее время (в часах)
Синтаксис: daytime
Возвращаемое значение: Текущее время
Пример: MyTime1 = DayTime
Замечание: 2:30 дня будет отображено как 14.5

deleteIdentity

Описание: Удаляет личность созданную в процессе прохождения компании
Синтаксис: deleteIdentity STRING
Возвращаемое значение:
Пример: deleteIdentity "PlayerIdentity"
Замечание: Требуется версия 1.75 и выше

deleteStatus

Описание: Удаляет статус созданный в процессе прохождения компании
Синтаксис: deleteStatus STRING
Возвращаемое значение:
Пример: deleteStatus "PlayerState"
Замечание: Требуется версия 1.75 и выше

deleteVehicle

Описание: Удаляет любого юнита или технику
Синтаксис: deleteVehicle UNIT
Возвращаемое значение:
Пример: deleteVehicle Tank
Замечание: Игрока удалить нельзя. Требуется версия 1.75 и выше

disableAI

Описание: Отключает возможности STRING у юнита UNIT. Допустимые возможности:

  • TARGET - значение неизвестно
  • AUTOTARGET - запрещает целиться
  • MOVE - запрещает передвигаться
Синтаксис: UNIT disableAI STRING
Возвращаемое значение:
Пример: dude disableAI "move"
Замечание:
direction

Описание: Разворачивает юнит на 360 градусов =)
Синтаксис: direction STRING
Возвращаемое значение:
Пример: direction Player
Замечание: Требуется версия 1.5 и выше

disableuserinput

Описание: Отключает (TRUE) или включает (FALSE) обработку нажатий клавиш (даже ESC) на клавиатуре, мышке и джойстике
Синтаксис: disableuserinput T/F
Возвращаемое значение:
Пример: DisableUserInput TRUE
Замечание: Но игра всегда будет реагировать на Alt+Tab и Ctrl+Alt+Del (т.к. они перехватываются Windows)

distance

Описание: Отображает дистанцию (в метрах) между юнитом UNIT1 и юнитом UNIT2
Синтаксис: UNIT1 distance UNIT2
Возвращаемое значение:
Пример: ?(MyGuy Distance MyLeader > 300):MyLeader SideChat "Get over here!"
Замечание:

dofire

Описание: Заставляет юнит UNIT1 стрелять в юнит UNIT2 (должен быть врагом)
Синтаксис: UNIT1 dofire UNIT2
Возвращаемое значение:
Пример: Guy1 DoFire Leader Guy1
Замечание:

dofollow

Описание: Заставляет юнит UNIT1 следовать за юнитом UNIT2
Синтаксис: UNIT1 dofollow UNIT2
Возвращаемое значение:
Пример: MyGuy DoFollow leader MyGuy
Замечание: Данную команду можно использовать как эмулятор приказа "return to formation". Она похожа на команду CommandFollow, но лидер не подаст радио-команды. Однако юнит UNIT1 не будет следовать ни за кем кроме своего лидера (для этого используйте команду Join). На игрока не оказывает никакого влияния

domove

Описание: Заставляет юнит UNIT следовать в точку с координатами X=NUM1, Y=NUM2
Синтаксис: UNIT domove [NUM1,NUM2]
Возвращаемое значение:
Пример1: MyGuy DoMove getpos BadGuy
Пример2: MyGuy DoMove [4300, 5400]
Замечание:

dostop

Описание: Заставляет юнит UNIT остановиться
Синтаксис: dostop UNIT
Возвращаемое значение:
Пример: DoStop MyGuy
Замечание:

dotarget

Описание: Указать юниту UNIT1 цель юнит UNIT2
Синтаксис: UNIT1 dotarget UNIT2
Возвращаемое значение:
Пример: MyGuy DoTarget EnemyGuy
Замечание:

dowatch

Описание: Заставляет юнит UNIT1 наблюдать за юнитом UNIT2
Синтаксис: UNIT1 dowatch UNIT2
Возвращаемое значение:
Пример: MyGuy doWatch leader MyGuy
Замечание:

Driver

Описание: Отображает водителя техники UNIT
Синтаксис: Driver UNIT
Возвращаемое значение:
Пример: (driver myTruck) globalchat "Full speed ahead!"
Замечание:

Drop

Описание: С помощью этой команды можно создать какой либо эффект. Подробнее в статье "Команда Drop".
Синтаксис: Drop STRING
Возвращаемое значение:
Пример: Drop array
Замечание: Требуется версия 1.5 и выше

enableradio

Описание: Включает (TRUE) или отключает (FALSE) возможность игрока видеть и слышать радио-сообщения
Синтаксис: enableradio T/F
Возвращаемое значение:
Пример: EnableRadio FALSE
Замечание: Игрок в любом случае сможет посылать их сам (можно отключить только возможность их получения)

estimatedTimeLeft

Описание: Подсчитывает сколько времени осталось до конца игры
Синтаксис: estimatedTimeLeft STRING
Возвращаемое значение:
Пример: EstimatedTimeLeft Param1
Замечание: Требуется версия 1.34 и выше

fademusic

Описание: Изменяет громкость NUM2 (<1 - тише, >1 - громче) музыки через NUM1 секунд (укажите 0, если хотите изменить громкость немедленно)
Синтаксис: NUM1 fademusic NUM2
Возвращаемое значение:
Пример: 4 fadeMusic 0.5
Замечание:

fadesound

Описание: Изменяет громкость NUM2 (<1 - тише, >1 - громче) звуков через NUM1 секунд (укажите 0, если хотите изменить громкость немедленно)
Синтаксис: NUM1 fadesound NUM2
Возвращаемое значение:
Пример: 4 fadesound 0.5
Замечание:

Fire

Описание: Заставляет юнит UNIT стрелять из оружия STRING1 боеприпасами типа STRING2
Синтаксис: UNIT Fire [STRING1, STRING2]
Возвращаемое значение:
Пример: Soldier1 fire ["throw","SmokeShellRed","SmokeShellRed"]
Замечание:

FillWeaponFromPool

Описание: Добавляет юниту оружие из общего запаса, добавленного командой AddWeaponPool
Синтаксис: FillWeaponFromPool UNIT
Возвращаемое значение:
Пример: FillWeaponFromPool Mysol
Замечание: Требуется версия 1.75 и выше

FlagOwner

Описание: Отображает юнит, который владеет флагом UNIT
Синтаксис: FlagOwner UNIT
Возвращаемое значение:
Пример: WhoHas = FlagOwner usaFlag
Замечание:

fleeing

Описание: Проверяет, отступает ли юнит UNIT
Синтаксис: fleeing UNIT
Возвращаемое значение: TRUE (если отступает) или FALSE (если нет)
Пример: ?(Fleeing EnemyChopper):MyChopper SideChat "He's bugging out."
Замечание:

flyinheight

Описание: Устанавливает высоту NUM (в метрах), на которой должен лететь юнит UNIT
Синтаксис: UNIT flyinheight NUM
Возвращаемое значение:
Пример: MyHeli FlyInHeight 100
Замечание: Возможно, данная команда действует только на вертолеты, а высоту можно указывать только в перделах 110 метров. Вертолеты изменят высоту полета только между waypoint`ами. Эта команда не действует на вертолеты, зависшие в воздухе или находящиеся на земле

Forceend

Описание: Завершает миссию
Синтаксис: Forceend
Возвращаемое значение:
Пример: ?(not alive MySoldier): Forceend
Замечание:

ForceMap

Описание: Показать / Убрать карту в скриптовых сценах
Синтаксис: ForceMap STRING
Возвращаемое значение:
Пример: ForceMap true
Замечание: Требуется версия 1.27 и выше

getdammage

Описание: Отображает ущерб (1 - уничтожен, 0 - нет повреждений), нанесенный юниту UNIT
Синтаксис: getdammage UNIT
Возвращаемое значение:
Пример: ?(Getdammage MyGuy > .5):MyGuy SideChat "I don't think I'm gonna make it."
Замечание:

getdir

Описание: Отображает направление (в градусах от 0 до 360), в которое повернут юнит UNIT. Доступные направления:

  • 0 - Север
  • 90 - Восток
  • 180 - Юг
  • 270 - Запад
Синтаксис: getdir UNIT
Возвращаемое значение:
Пример: MyDir = GetDir MyGuy
Замечание:
getmarkerColor

Описание: Отображает цвет маркера STRING
Синтаксис: getmarkerColor STRING
Возвращаемое значение:
Пример: getMarkerColor "MarkerOne"
Замечание: Требуется версия 1.21 и выше

getmarkerpos

Описание: Отображает координаты (X, Y, Z) маркера STRING
Синтаксис: getmarkerpos STRING
Возвращаемое значение:
Пример: MyMarkerCoords = GetMarkerPos "MyMarker"
Замечание:

getmarkerSize

Описание: Отображает размер маркера STRING
Синтаксис: getmarkerSize STRING
Возвращаемое значение:
Пример: getMarkerSize "MarkerOne"
Замечание: Требуется версия 1.21 и выше

getmarkerType

Описание: Отображает тип маркера STRING
Синтаксис: getmarkerType STRING
Возвращаемое значение:
Пример: getMarkerType "MarkerOne"
Замечание: Требуется версия 1.21 и выше

getpos

Описание: Отображает координаты (X, Y, Z) юнита UNIT
Синтаксис: getpos UNIT
Возвращаемое значение:
Пример: MyCoords = GetPos MyGuy
Замечание:

getWPPos

Описание: Отображает координаты вэйпоинта STRING
Синтаксис: getWPPOS STRING
Возвращаемое значение:
Пример: getWPPos [group1, 1]
Замечание: Требуется версия 1.21 и выше

globalchat

Описание: Заставляет юнит UNIT сказать фразу STRING в общем канале
Синтаксис: UNIT globalchat STRING
Возвращаемое значение:
Пример1: MyIdiot GlobalChat "I'm the King of the World!"
Пример2: MyGuy GlobalChat MyString
Замечание: Требуется версия 1.34 и выше

globalradio

Описание: Заставляет юнит UNIT отправить радио-команду STRING в общем канале
Синтаксис: UNIT globalradio STRING
Возвращаемое значение:
Пример: off GlobalRadio "RFallback";
Замечание: В строке STRING указывается имя класса CfgRadio, который необходимо определить заранее в файле description.ext (этот файл должен находиться в одной папке с миссией)

groupchat

Описание: Заставляет юнит UNIT сказать фразу STRING в канале своей группы
Синтаксис: UNIT groupchat STRING
Возвращаемое значение:
Пример: MyGuy groupchat MyString
Замечание: Требуется версия 1.34 и выше

groupradio

Описание: Заставляет юнит UNIT отправить радио-команду STRING в канале своей группы
Синтаксис: UNIT groupradio STRING
Возвращаемое значение:
Пример: off groupradio "RFallback";
Замечание: В строке STRING указывается имя класса CfgRadio, который необходимо определить заранее в файле description.ext (этот файл должен находиться в одной папке с миссией)

Group

Описание: отображает группу, в которой находится юнит UNIT
Синтаксис: Group UNIT
Возвращаемое значение:
Пример: MyGroup = group MyGuy
Замечание:

Gunner

Описание: Отображает стрелка в технике UNIT
Синтаксис: Gunner UNIT
Возвращаемое значение:
Пример: (gunner myTank) globalchat "Out of ammo sir!"
Замечание:

handsHit

Описание: Проверяет, ранен ли в руки солдат UNIT
Синтаксис: handsHit UNIT
Возвращаемое значение: 0 (если нет ранений в руки) и 1 (если ранен в руки)
Пример: ?(HandsHit MyGuy == 1):MyGuy sidechat "Can't aim, think my arm's broke!"
Замечание:

hasWeapon

Описание: Проверяет, есть ли у юнита UNIT оружие STRING
Синтаксис: UNIT hasWeapon STRING
Возвращаемое значение: TRUE (если указанное оружие есть) или FALSE (если нет)
Пример: aP hasWeapon "M16"
Замечание:

Hint

Описание: Отображает подсказку STRING в левом верхнем углу во время игры
Синтаксис: Hint STRING
Возвращаемое значение:
Пример1: Hint "Move to the next waypoint!"
Пример2: Hint "Move to the next waypoint! \n And it’s the next line."
Замечание: Можно также вставлять знаки перевода строки и разбивать текст на несколько строк, путем добавления символов "\n" в месте перевода строки (см. Пример2)

Hintc

Описание: Отображает подсказку STRING в левом верхнем углу во время игры. При этом игра встанет на паузу до тех пор, пока игрок не нажмет на клавиатуре какую-нибудь клавишу
Синтаксис: Hintc STRING
Возвращаемое значение:
Пример1: Hintc "Move to the next waypoint!"
Пример2: Hintc "Move to the next waypoint! \n And it’s the next line."
Замечание: Можно также вставлять знаки перевода строки и разбивать текст на несколько строк, путем добавления символов "\n" в месте перевода строки (см. Пример2)

HintCadet

Описание: Отображает подсказку STRING в левом верхнем углу во время игры. Данная подсказка отобразиться только в том случае, если выбран уровень сложности Cadet
Синтаксис: HintCadet STRING
Возвращаемое значение:
Пример1: HintCadet "Move to the next waypoint!"
Пример2: HintCadet "Move to the next waypoint! \n And it’s the next line."
Замечание: Можно также вставлять знаки перевода строки и разбивать текст на несколько строк, путем добавления символов "\n" в месте перевода строки (см. Пример2)

InFlame

Описание: Зажигает (TRUE) или тушит (FALSE) источник огня UNIT
Синтаксис: UNIT InFlame T/F
Возвращаемое значение:
Пример1: this InFlame true
Пример2: MyFire InFlame false
Замечание:

InFlamed

Описание: Проверяет горит ли костер UNIT
Синтаксис: InFlamed UNIT
Возвращаемое значение:
Пример: InFlamed fireplaceone
Замечание: Требуется версия 1.04 и выше

Join

Описание: Заставляет юнит UNIT1 присоединиться к группе UNIT2
Синтаксис: [UNIT1] Join UNIT2
Возвращаемое значение:
Пример1: [MyGuy] Join BigGroup
Пример2: [MyGuy] Join group OtherGuy
Пример3: [MyGuy1, MyGuy2, MyGuy3] Join MyGroup
Замечание: Значение UNIT1 должно указываться в квадратных скобках (даже если это всего 1 солдат), т.к. данная команда воспринимает только массивы.

KnowsAbout

Описание: Проверяет, что знает юнит UNIT1 о юните UNIT2
Синтаксис: UNIT1 KnowsAbout UNIT2
Возвращаемое значение: от 0 (UNIT1 ничего не знает о UNIT2) до 4 (UNIT1 точно знает, кто такой UNIT2 и где он находится)
Пример: ?(MyEnemy KnowsAbout MyGuy > 2): exec "soundalarm.sqs"
Замечание: Значение уменьшается по прошествии времени и с увеличением расстояния между юнитами (или если UNIT1 не видит UNIT2, например, за преградой)

Land

Описание: Заставляет воздушный юнит UNIT приземлиться
Синтаксис: UNIT Land STRING
Возвращаемое значение:
Пример: MyHeli land "LAND" - заставить вертушку сесть и выключить двигатель
MyHeli land "GET IN" - заставить вертушку опуститься на высоту для посадки (можно и высадки) посажиров, но вертушка висит над самой землёй
MyHeli land "GET OUT" - заставить вертушку опуститься на высоту для высадки (можно и посадки) посажиров, но вертушка висит над самой землёй в принципе эффект такой же как и у "GET IN"
Замечание:

lbAdd

Описание: Добавляет индификатор в диалогах
Синтаксис: lbAdd STRING
Возвращаемое значение:
Пример: _index = lbAdd [101, "FirstItem"]
Замечание: Требуется версия 1.5 и выше

lbClear

Описание: Удаляет все индификаторы в листе диалога
Синтаксис: lbClear STRING
Возвращаемое значение:
Пример: lbClear 101
Замечание: Требуется версия 1.5 и выше

lbColor

Описание: Возвращает цвет текста данный в диалоге
Синтаксис: lbColor STRING
Возвращаемое значение:
Пример: _color = lbColor [101, 0]
Замечание: Требуется версия 1.5 и выше

lbCurSel

Описание: Возвращает указатель выбранного действия в диалогах
Синтаксис: lbCurSel STRING
Возвращаемое значение:
Пример: _index = lbCurSel 101
Замечание: Требуется версия 1.5 и выше

lbData

Описание: Возвращает добавленный текст (невидимый) в лист диалога
Синтаксис: lbData STRING
Возвращаемое значение:
Пример: _data = lbData [101, 0]
Замечание: Требуется версия 1.5 и выше

lbDelete

Описание: Удаляет определённую часть из диалога
Синтаксис: lbDelete STRING
Возвращаемое значение:
Пример: lbDelete [101, 0]
Замечание: Требуется версия 1.5 и выше

lbPicture

Описание: Возвращает имя картинки в диалогах
Синтаксис: lbPicture STRING
Возвращаемое значение:
Пример: _picture = lbPicture [101, 0]
Замечание: Требуется версия 1.5 и выше

lbSetColor

Описание: Устанавливает цвет любой части диалога
Синтаксис: lbSetColor STRING
Возвращаемое значение:
Пример: lbSetColor [100, 0, [0, 1, 0, 0.5]]
Замечание: Требуется версия 1.5 и выше

lbSetCurSel

Описание: Выбирает указанную часть диалога
Синтаксис: lbSetCurSel STRING
Возвращаемое значение:
Пример: lbSetCurSel [101, 0]
Замечание: Требуется версия 1.5 и выше

lbSetData

Описание: Устанавливает невидимый текст, добавляемый командой lbData
Синтаксис: lbSetData STRING
Возвращаемое значение:
Пример: lbSetData [101, 1, "#1"]
Замечание: Требуется версия 1.5 и выше

lbSetPicture

Описание: Устанавливает картинку для диалога
Синтаксис: lbSetPicture STRING
Возвращаемое значение:
Пример: lbSetPicture [101, 0, "picturename"]
Замечание: Требуется версия 1.5 и выше

lbSetValue

Описание: Устанавливает добавляемый тэг в диалогах
Синтаксис: lbSetValue STRING
Возвращаемое значение:
Пример: lbSetValue [101, 0, 1]
Замечание: Требуется версия 1.5 и выше

lbSize

Описание: Возвращает число частей в диалоговом окне
Синтаксис: lbSize STRING
Возвращаемое значение:
Пример: _n = lbSize 101
Замечание: Требуется версия 1.5 и выше

lbText

Описание: Показывает спрятанный текст в диалогах
Синтаксис: lbText STRING
Возвращаемое значение:
Пример: _text = lbText [101, 0]
Замечание: Требуется версия 1.5 и выше

lbValue

Описание: Показыват добавленный тэг в диалогах
Синтаксис: lbValue STRING
Возвращаемое значение:
Пример: _value = lbValue [101, 0]
Замечание: Требуется версия 1.5 и выше

Leader

Описание: Отображает командира юнита UNIT
Синтаксис: Leader UNIT
Возвращаемое значение:
Пример: LeaderGuy = leader MyGuy
Замечание:

LeaveVehicle

Описание: Заставляет командира группы UNIT1 приказать подчиненным высадиться (равнозначна команде disembark) из техники UNIT2
Синтаксис: UNIT1 LeaveVehicle UNIT2
Возвращаемое значение:
Пример: group MyGuy LeaveVehicle vehicle Myguy
Замечание: Данная команда не заставляет солдат выпрыгивать (eject) из техники (на лету или на ходу). Если игрок - командир, то команда не действует. Если игрок находится в группе UNIT1 и не является командиром, то после выхода из техники игрок не сможет в нее снова залезть. Если приказ отдан группе, которая не находится в указанной технике, то из этой техники вылезут те, кто в ней сидел, а потом сразу же залезут обратно

lightsIsOn

Описание: Проверяет состояние лампы, ON - включена, OFF - выключена, AUTO - автоматически
Синтаксис: lightsIsON UNIT
Возвращаемое значение:
Пример: lightsIsOn nearestObject [player, "StreetLamp"] != "OFF"
Замечание: Требуется версия 1.04 и выше

List

Описание: Отображает список всех юнитов в массиве ARRAY (синтаксис 1) или в радиусе триггера STRING (синтаксис 2)
Синтаксис 1: List ARRAY
Синтаксис 2: List STRING
Возвращаемое значение: Массив с юнитами
Пример 1: NewArray = List MyArray
Пример 2: "_x DoFire Enemy" ForEach List EAST_BASE
Замечание: Если используется синтаксис 2, то эффективно только для юнитов, на которых активируется триггер

loadFile

Описание: Возвращает содержание данного файла.
Синтаксис: loadFile FILENAME
Возвращаемое значение: String
Пример: loadFile "myFunction.sqf", Результат: "if a>b then {a} else {b}"
Замечание: Требуется версия 1.82 и выше.

LoadIdentity

Описание: Загрузить индификацию героя, созданную в процессе прохождения компании
Синтаксис: UNIT LoadIdentity STRING
Возвращаемое значение:
Пример: player LoadIdentity "playerIdentity"
Замечание: Требуется версия 1.75 и выше

LoadStatus

Описание: Загрузить пропорции объектов из файла objects.sav, созданного в процессе прохождения компании
Синтаксис: UNIT LoadStatus STRING
Возвращаемое значение:
Пример: player LoadStatus "playerState"
Замечание: Требуется версия 1.75 и выше

Localize

Описание: Отображает текст в соответствии с идентификатором STRING
Синтаксис: Localize STRING
Возвращаемое значение:
Пример: aP globalchat localize "STR_SAYHELLO"
Замечание: Данная команда проверяет, с поддержкой какого языка установлена игра и возвращает строчку на соответствующем языке. Идентификатор STRING и текст на различных языках определяется в файле stringtable.csv (идентификатор указан в первом столбце). В примере показано, как в зависимости от языка игры можно отобразить "Hello" на английском или "Привет" на русском (если введут поддержку русского языка, хотя в лицензионной локализации это очень возможно)

Lock

Описание: Разрешает (FALSE) или запрещает (TRUE) использовать технику UNIT
Синтаксис: UNIT lock T/F
Возвращаемое значение:
Пример: Truck lock false
Замечание: Можно использовать для запрещения игроку покидать данную технику

lockwp

Описание: Разрешает (FALSE) или запрещает (TRUE) юниту UNIT двигаться к следующему waypoint`у
Синтаксис: UNIT lockwp T/F
Возвращаемое значение:
Пример: aP lockWP false
Замечание:

magazines

Описание: Отображает тип магазинов имеющихся у UNIT
Синтаксис: magazines UNIT
Возвращаемое значение:
Пример: magazines Mytank
Замечание: Требуется версия 1.75 и выше

mapAnimAdd

Описание: Добавляет анимацию карты в скриптовых сценах
Синтаксис: MapAnimAdd STRING
Возвращаемое значение:
Пример: MapAnimAdd [продолжительность, зум, координаты]
Замечание: Требуется версия 1.27 и выше

mapAnimClear

Описание: Убирает всю анимацию карты
Синтаксис: MapAnimClear
Возвращаемое значение:
Пример: MapAnimClaer
Замечание: Требуется версия 1.27 и выше

mapAnimCommit

Описание: Запускает анимацию карты
Синтаксис: MapAnimCommit
Возвращаемое значение:
Пример: MapAnimCommit
Замечание: Требуется версия 1.27 и выше

mapAnimDone

Описание: Возвращает значение True, если анимация уже выполнена
Синтаксис: MapAnimDone
Возвращаемое значение:
Пример: ?MapAnimDone = [] exec "finish.sqs"
Замечание: Требуется версия 1.27 и выше

markerColor

Описание: Отображает цвет маркера UNIT
Синтаксис: MarkerColor UNIT
Возвращаемое значение:
Пример: MarkerColor "NameOfMarker"
Замечание: Действует, как команда getMarkerColor. Требуется версия 1.5 и выше

markerPos

Описание: Отображает позицию маркера UNIT
Синтаксис: MarkerPos UNIT
Возвращаемое значение:
Пример: MarkerPos "NameOfMarker"
Замечание: Действует, как команда getMarkerPos. Требуется версия 1.5 и выше

markerSize

Описание: Отображает размер маркера UNIT
Синтаксис: MarkerSize UNIT
Возвращаемое значение:
Пример: MarkerSize "NameOfMarker"
Замечание: Действует, как команда getMarkerSize. Требуется версия 1.5 и выше

markerType

Описание: Отображает тип маркера UNIT
Синтаксис: MarkerType UNIT
Возвращаемое значение:
Пример: MarkerType "NameOfMarker"
Замечание: Действует, как команда getMarkerType. Требуется версия 1.5 и выше

missionName

Описание: Возвращает название текушей миссии.
Возвращаемое значение: String
Пример:
Замечание: Требуется версия 1.80 и выше

missionStart

Описание: Возвращает время, когда была запушена миссия в формате [Год, Месяц, День, Час, Минута, Секунда].
Возвращаемое значение: Array
Пример:
Замечание: Требуется версия 1.80 и выше

moveincargo

Описание: Мгновенно помещает юнит UNIT1 в юнит UNIT2 в качестве пассажира
Синтаксис: UNIT1 moveincargo UNIT2
Возвращаемое значение:
Пример: aP MoveInCargo mytank
Замечание:

moveincommander

Описание: Мгновенно помещает юнит UNIT1 в юнит UNIT2 в качестве командира
Синтаксис: UNIT1 moveincommander UNIT2
Возвращаемое значение:
Пример: aP moveincommander mytank
Замечание:

moveindriver

Описание: Мгновенно помещает юнит UNIT1 в юнит UNIT2 в качестве водителя
Синтаксис: UNIT1 moveindriver UNIT2
Возвращаемое значение:
Пример: aP moveindriver mytank
Замечание:

moveingunner

Описание: Мгновенно помещает юнит UNIT1 в юнит UNIT2 в качестве стрелка
Синтаксис: UNIT1 moveindriver UNIT2
Возвращаемое значение:
Пример: aP moveingunner mytank
Замечание:

musicvolume

Описание: Устанавливает громкость музыки NUM
Синтаксис: musicvolume NUM
Возвращаемое значение:
Пример: musicvolume 2
Замечание:

nearestbuilding

Описание: Отображает ближайшее к юниту UNIT здание
Синтаксис: nearestbuilding UNIT
Возвращаемое значение:
Пример: TargetBuilding = NearestBuilding MyGuy
Замечание:

nearestobject

Описание: Отображает ближайший к юниту UNIT объект
Синтаксис: nearestobject UNIT
Возвращаемое значение:
Пример: TargetObject = NearestObject MyGuy
Замечание:

Object

Описание: Отображает объект с индификационным номером STRING
Синтаксис: Object STRING
Возвращаемое значение:
Пример: (object 3053) switchLight "off"
Замечание: Узнать ID объектов вы можете нажав на кнопку "ShowID", в редакторе. Требуется версия 1.75 и выше

ObjStatus

Описание: Устанавливает заданию NUM статус STRING в миссии. Доступный статус:

  • DONE - задание выполнено
  • FAILED - задание провалено
  • HIDDEN - данное задание вообще не будет отображаться
Синтаксис: NUM ObjStatus STRING
Возвращаемое значение:
Пример: "0" objstatus "DONE"
Замечание: Задания определяются в файле briefing.html
OnBriefingGear

Описание: Определяет звук (голос) проигрываемый в брифинге, при выполнении одной его части
Синтаксис: onBriefingGear STRING
Возвращаемое значение:
Пример: onBriefingGear "GearVoiceOver"
Замечание: Требуется версия 1.75 и выше

OnBriefingGroup

Описание: Определяет звук (голос) проигрываемый в брифинге, при выполнении группы его частей
Синтаксис: onBriefingGroup STRING
Возвращаемое значение:
Пример: onBriefingGroup "GroupVoiceOver"
Замечание: Требуется версия 1.75 и выше

OnBriefingNotes

Описание: Определяет звук (голос) проигрываемый в брифинге, при записи его частей
Синтаксис: onBriefingNotes STRING
Возвращаемое значение:
Пример: onBriefingNotes "NotesVoiceOver"
Замечание: Требуется версия 1.75 и выше

OnBriefingPlan

Описание: Определяет звук (голос) проигрываемый в брифинге, при выполнении плана
Синтаксис: onBriefingPlan STRING
Возвращаемое значение:
Пример: onBriefingPlan "PlanVoiceOver"
Замечание: Требуется версия 1.75 и выше

onMapSingleClick

Описание: Определяет действие, которое происходит в тот момент, когда игрок кликает по карте.
Синтаксис: onMapSingleClick COMMAND
Передаваемые параметры:
_pos array position
_units array selected units
_shift,_alt bool key state
Если шелчок обрабатывается, то команда возврашает ИСТИНА.
Возвращаемое значение: Нет
Пример: onMapSingleClick {"SoldierWB" createUnit [_pos,group player];true}
Замечание: Требуется версия 1.85 и выше

OrderGetIn

Описание: Заставить (TRUE) юниты из массива ARRAY залезть в технику, которая была им назначена ранее
Синтаксис: ARRAY OrderGetIn T/F
Возвращаемое значение:
Пример: [Officer,Soldier,Civilian] ordergetin true
Замечание: Прежде чем использовать эту команду, необходимо назначить указанным юнитам технику, в которую они должны сесть и их роль в технике. Для этого используйте команды assignascargo (пассажир), assignascommander (командир), assignasdriver (водитель) или assignasgunner (стрелок)

playersNumber

Описание: Возвращает количество игроков, играюших на данной стороне.
Синтаксис: playersNumber SITE
Возвращаемое значение: Number
Пример:
Замечание: Список анимаций тут.

playmove

Описание: Заставить юнит UNIT воспроизвести анимацию STRING
Синтаксис: UNIT playmove STRING
Возвращаемое значение:
Пример: aP playmove "EffectStandSitDown"
Замечание: Список анимаций тут.

playmusic

Описание: Воспроизвести аудиотрэк STRING, который должен быть заранее определен в классе CfgMusic в файле description.ext
Синтаксис: playmusic STRING
Возвращаемое значение:
Пример: playMusic "HellsBells";
Замечание:

playsound

Описание: Воспроизвести звук STRING, который должен быть заранее определен в классе CfgSounds в файле description.ext
Синтаксис: playsound STRING
Возвращаемое значение:
Пример: playSound "ScreamingPeople";
Замечание:

position

Описание: Определяет позицию объекта UNIT
Синтаксис: position UNIT
Возвращаемое значение:
Пример: position player;
Замечание: Требуется версия 1.5 и выше

preprocessFile

Описание: Обрабатывает содержимое данного файла. Подобно языку С, потдерживаются коментарии, константы и макросы. (#Define)
Синтаксис: preprocessFile FILENAME
Возвращаемое значение: String
Пример: preprocessFile "myFunction.sqf", результат если "if a > b then { a } else { b }"
Замечание: Требуется версия 1.80 и выше

primaryWeapon

Описание: Определяет имя вторичного оружия техники
Синтаксис: primaryWeapon UNIT
Возвращаемое значение:
Пример: primaryWeapon Mytank
Замечание: Требуется версия 1.75 и выше

private

Описание: Убедитесь, что данная переменная локальна. Если некоторая переменная с тем же именем существует, то она станет недоступна.
Синтаксис: private VARIABLENAME
Возвращаемое значение: Нет
Пример 1: private "_i"
Пример 2: private ["_i","_j","_k"]
Замечание: Требуется версия 1.85 и выше

publicVariable

Описание: Определяет широкий выброс ценностей для всех компьютеров, используется в сетевой игре
Синтаксис: publicVariable STRING
Возвращаемое значение:
Пример: publicVariable "CTFscoreOne";
Замечание: Требуется версия 1.34 и выше

rating

Описание: Определяет текущий рейтинг (количество очков) юнита UNIT
Синтаксис: rating UNIT
Возвращаемое значение:
Пример: Rating MySoldier
Замечание:

removeAction

Описание: Удаляет действие из меню в правом нижнем углу экрана
Синтаксис: UNIT removeAction STRING
Возвращаемое значение:
Пример: player removeAction 0
Замечание: Требуется версия 1.11 и выше

removeAllEventHandlers

Описание: Удаляет все события, присвоенные командой addEventHandler данному объекту.
Синтаксис: OBJECT removeAllEventHandlers HANDLER
Возвращаемое значение: нет
Пример: player removeAllEventHandlers "killed"
Замечание: Требуется версия 1.85 и выше

removeallweapons

Описание: Удаляет все оружие у юнита UNIT
Синтаксис: removeallweapons UNIT
Возвращаемое значение:
Пример: RemoveAllWeapons aP
Замечание:

removeEventHandler

Описание: Удаляет событие, созданое функцией addEventHandler. Формат вызова [Событие, Индекс]
Синтаксис: OBJECT removeEventHandler HANDLER
Возвращаемое значение: нет
Пример: player removeEventHandler ["killed",0]
Замечание: Требуется версия 1.85 и выше

removemagazine

Описание: Удаляет один магазин STRING у юнита UNIT
Синтаксис: UNIT removemagazine STRING
Возвращаемое значение:
Пример: aP removeMagazine "M16"
Замечание:

removemagazines

Описание: Удаляет все боеприпасы STRING у юнита UNIT
Синтаксис: UNIT removemagazines STRING
Возвращаемое значение:
Пример: aP removeMagazines "M16"
Замечание:

removeweapon

Описание: Удаляет оружие STRING у юнита UNIT
Синтаксис: UNIT removeweapon STRING
Возвращаемое значение:
Пример: aP removeweapon "Binocular"
Замечание:

requiredVersion

Описание: Устанавливает, какая версия игры нужна для запуска миссии
Синтаксис: requiredVersion STRING
Возвращаемое значение:
Пример: requiredVersion "1.30"
Замечание: Требуется версия 1.21 и выше

resize

Описание: Меняет размер массива UNIT на число STRING
Синтаксис: UNIT resize STRING
Возвращаемое значение:
Пример: array resize 2
Замечание: Требуется версия 1.75 и выше

reveal

Описание: Заставиляет юнит UNIT1 обнаружить местоположение юнита UNIT2
Синтаксис: UNIT1 reveal UNIT2
Возвращаемое значение:
Пример: MySoldier reveal enemy
Замечание: Если игрок находится в одном отряде с юнитом UNIT1, то он получит целеуказание на UNIT2 в виде желтого квадрата. Если юнит UNIT2 находится в поле видимости юнита UNIT1, то юнит UNIT1 откроет огонь по нему

damage | daytime | deleteIdentity | deleteStatus | deleteVehicle | disableAI
direction | disableuserinput | distance | dofire | dofollow | domove
dostop | dotarget | dowatch | Driver | Drop | enableradio
estimatedTimeLeft | fademusic | fadesound | Fire | FillWeaponFromPool | FlagOwner
fleeing | flyinheight | Forceend | ForceMap | getdammage | getdir
getmarkerColor | getmarkerpos | getmarkerSize | getmarkerType | getpos | getWPPos
globalchat | globalradio | groupchat | groupradio | Group | Gunner
handsHit | hasWeapon | Hint | Hintc | HintCadet | InFlame
InFlamed | Join | KnowsAbout | Land | lbAdd | lbClear
lbColor | lbCurSel | lbData | lbDelete | lbPicture | lbSetColor
lbSetCurSel | lbSetData | lbSetPicture | lbSetValue | lbSize | lbText
lbValue | Leader | LeaveVehicle | lightsIsOn | List | loadFile
LoadIdentity | LoadStatus | Localize | lock | lockwp | magazines
mapAnimAdd | mapAnimClear | mapAnimCommit | mapAnimDone | markerColor | markerPos
markerSize | markerType | missionName | missionStart | moveincargo | moveincommander
moveindriver | moveingunner | musicvolume | nearestbuilding | nearestobject | Object
ObjStatus | OnBriefingGear | OnBriefingGroup | OnBriefingNotes | OnBriefingPlan | onMapSingleClick
OrderGetIn | playersNumber | playmove | playmusic | playsound | position
preprocessFile | primaryWeapon | private | publicVariable | rating | removeAction
removeAllEventHandlers | removeallweapons | removemagazine | removemagazines | removeEventHandler | removeweapon
requiredVersion | resize | reveal |  |  |
<<<Назад <<< <<<Меню>>> >>> Далее>>>


Игровые команды: S - V

Savegame | SaveIdentity | SaveStatus | say | Score | scudState
secondaryWeapon | selectWeapon | set | setAccTime | SetAmmoCargo | setbehaviour
setcaptive | SetCombatMode | setdammage | setdir | setface | SetFlagOwner
SetFlagSide | setflagtexture | setfog | SetFormation | SetFormDir | setfuel
setgroupid | setidentity | setmarkerColor | setmarkerpos | setmarkerSize | setmarkertype
setmimic | setObjectTexture | setovercast | setpos | SetRadioMsg | SetRain
SetSkill | setspeedmode | setTerrainGrid | setunitpos | setVelocity | setviewdistance
setWPPos | showcinemaborder | showncompass | showngps | shownmap | shownpad
shownwarrant | shownwatch | Side | sidechat | sideradio | skill
skiptime | someammo | soundvolume | speed | speedmode | stop
Stopped | switchCamera | switchmove | switchlight | select | titlecut
Titleobj | titlersc | titlersc | titletext | Unassignvehicle | Units
vehiclechat | vehicleradio | velocity | waypointPosition | weapons |
Savegame

Описание: Автосохранение игры (autosave)
Синтаксис: Savegame
Возвращаемое значение:
Пример: ?(Getdammage MyGuy < .5): Savegame
Замечание: Очень полезно для длинных миссий

SaveIdentity

Описание: Сохраняет данные о личности, используемой в кампании, в фаил objects.sav
Синтаксис: UNIT SaveIdentity STRING
Возвращаемое значение:
Пример: player SaveIdentity "PlayerIdentity"
Замечание: Требуется версия 1.75 и выше

SaveStatus

Описание: Сохраняет пропорции объектов, используемые в кампании, в фаил objects.sav
Синтаксис: UNIT SaveStatus STRING
Возвращаемое значение:
Пример: player SaveStatus "PlayerState"
Замечание: Требуется версия 1.75 и выше

say

Описание: Заставляет юнит UNIT воспроизвести фразу STRING, которая должна быть определена в классе CfgSound в файле description.ext
Синтаксис: UNIT say STRING
Возвращаемое значение:
Пример: off say "Fallback";
Замечание:

Score

Описание: Отображает количество очков у юнита UNIT
Синтаксис: Score UNIT
Возвращаемое значение: количество очков
Пример: Totalscore = score MyPlayer
Замечание:

scudState

Описание: Указывает действия для ScudLauncher'а
1 - подготовка к запуску, 2 - готовность к запуску, 3 - зажигание, 4 - запуск
Синтаксис: scudState UNIT
Возвращаемое значение:
Пример: ScudState scudOne>=4
Замечание: Требуется версия 1.28 и выше

secondaryWeapon

Описание: Определяет имя вторичного оружия техники
Синтаксис: secondaryWeapon UNIT
Возвращаемое значение:
Пример: secondaryWeapon Mytank
Замечание: Требуется версия 1.75 и выше

selectWeapon

Описание: Заставляет UNIT сменить оружие на вторичное и наоборот
Синтаксис: UNIT selectWeapon STRING
Возвращаемое значение:
Пример: MySoldier selectWeapon "LAWLauncher"
Замечание: Требуется версия 1.27 и выше

set

Описание: Изменяет отдельные эллементы в данном массиве
Синтаксис: ARRAY set STRING
Возвращаемое значение:
Пример: array set [100, "Hello"]
Замечание: Требуется версия 1.75 и выше

setAccTime

Описание: Устанавливает акселерацию времени. По умолчанию равно 1.0, <1 - время замедляется, >1 - время ускоряется.
Синтаксис: setAccTime NUM
Возвращаемое значение:
Пример: setAccTime 1.0
Замечание: Отлично подходит для создания спецэффектов типа Матрицы в видео-роликах.

SetAmmoCargo

Описание: Помещает в грузовое отделение техники UNIT боеприпасы и оружие типа STRING
Синтаксис: UNIT SetAmmoCargo [STRING,NUM]
Возвращаемое значение:
Пример: MyTruck SetAmmoCargo ["AT4Launcher",4]
Замечание:

setbehaviour

Описание: Устанавливает юниту UNIT боевое поведение STRING. Доступные поведения:

  • SAFE - все спокойно, можно идти не спеша, оружие за спину
  • AWARE - будь на чеку, передвигайся ползком (но не заставляет искать укрытие)
  • COMBAT - к бою, враг наступает, передвигаться ползком или бегом
  • CARELESS - не обращать внимания ни на что, даже если рядом приземлиться граната
  • STEALTH - укрыться и передвигаться ползком
Синтаксис: UNIT setbehaviour STRING
Возвращаемое значение:
Пример: Soldier SetBehaviour "CARELESS"
Замечание:
setcaptive

Описание: Сделать юнит UNIT пленным (TRUE) или обычным солдатом (FALSE)
Синтаксис: UNIT setcaptive T/F
Возвращаемое значение:
Пример: Soldier SetCaptive true
Замечание: По пленным враги (то есть те, кто его захватил) не стреляют, зато стреляют свои. Однако если у пленного есть оружие, то он сам будет стрелять по своим. Можно использовать эту команду для создания миссий с переодетыми разведчиками

SetCombatMode

Описание: Устанавливает режим боя STRING для юнита UNIT. Доступные режимы:

  • BLUE - Никогда не стрелять
  • GREEN - Не стрелять до приказа
  • WHITE - Не стрелять до приказа, но атаковать врага в поле видимости
  • YELLOW - Открыть огонь (с того места где находится юнит)
  • RED - Открыть огонь, но оставаться рядом с командиром
Синтаксис: UNIT SetCombatMode STRING
Возвращаемое значение:
Пример: Soldier SetCombatMode "GREEN"
Замечание:
setdammage

Описание: Устанавливает повреждения NUM (от 1 до 0: 1 - уничтожен, 0 - нет повреждений) юниту UNIT
Синтаксис: UNIT setdammage NUM
Возвращаемое значение:
Пример: Soldier Setdammage 0.5
Замечание: Уничтоженному юниту можно прописать setdammage 0, и он оживет (таким образом можно восстанавливать уничтоженную технику)

setdir

Описание: Устанавливает направление взгляда юнита UNIT в NUM градусов. Доступные направления:

  • 0 - север
  • 90 - восток
  • 180 - юг
  • 270 - запад
Синтаксис: UNIT setdir NUM
Возвращаемое значение:
Пример: Soldier SetDir 90
Замечание:
setface

Описание: Устанавливает юниту UNIT текстуру лица STRING. Доступные текстуры:

  • face1 - Peter P.
  • face2 - Victor B.
  • face3 - Bohous
  • face4 - Mirek
  • face5 - Peter S.
  • face6 - Charles
  • face7 - Peter V.
  • face8 - Richard B.
  • face9 - Charles M.
  • face10 - Ian O'Hara
  • face11 - Vojta N.
  • face12 - Adam B.
  • face13 - Peter B.
  • face14 - Francesco F.
  • face15 - Bill O.
  • face16 - Colin F.
  • face17 - Darren I.
  • face18 - Eric J.
  • face19 - Phill D.
  • face20 - Graham U.
  • face21 - Henry G.
  • face22 - Ivan B.
  • face23 - Ghulam K.
  • face24 - Kevin B.
  • face25 - Robert
  • face26 - Martin
  • face27 - John A.
  • face28 - Bill G.
  • face29 - Peter O.
  • face30 - Henry H.
  • face31 - William G.
  • face32 - Arnold T.
  • face33 - Michael H.
  • face34 - John Fox
  • face35 - George MacArthur
  • face36 - Peter Sun
  • face37 - Robert S.
  • face38 - John Way
  • face39 - Jack C.
  • face40 - J.C.
  • face41 - Mel D.
  • face42 - John M.
  • face43 - Jirka M.
  • face44 - Honza K.
  • face45 - John A.
  • face46 - Ondrey N.
  • face47 - Ondrey S.
  • face48 - Gabriel K.
  • face49 - Oliver S.
  • face50 - Radan D.
  • face51 - George J.
  • face52 - Ota B.
custom - Дополнительное лицо
Resistance
Мужские
  • FaceR01-Виктор Трошка
  • FaceR02-Томас
  • FaceR03-Влад
  • FaceR04-"Fehy"
Женские
  • Eva - Ева
  • Kamila - Камила
  • Lada - Лада
  • Lucie - Люська
  • Marketa - Маркета
  • Nada - Надя
Синтаксис: UNIT setface STRING
Возвращаемое значение:
Пример: Setface "face10"
Замечание: Пока не известно, как добавлять собственные текстуры, чтобы задействовать слово custom
SetFlagOwner

Описание: Сделать UNIT2 владельцем флага UNIT1
Синтаксис: UNIT1 SetFlagOwner UNIT2
Возвращаемое значение:
Пример: usaFlag setFlagOwner "aP"
Замечание: Применяется для изменения владельца флага. Действует только в сетевой игре

SetFlagSide

Описание: Сделать войска STRING владельцем флага UNIT. Доступные войска:
WEST - НАТO
EAST - CCCP
Синтаксис: UNIT SetFlagSide STRING
Возвращаемое значение:
Пример: usaFlag setFlagSide east
Замечание: Применяется для изменения владельца флага. Действует только в сетевой игре

setflagtexture

Описание: Устанавливает текстуру STRING для флага UNIT. Доступные текстуры:
usa_valjka.pac - флаг США
west_vlajka.pac - флаг НАТО
rus_vlajka.pac - флаг СССР
Синтаксис: UNIT setflagtexture STRING
Возвращаемое значение:
Пример: usaFlag setFlagTexture "usa_vlajka.pac"
Замечание: Для того, чтобы флаг (а не пустой флагшток) был виден в миссии, необходимо указать для него текстуру данной командой

setfog

Описание: Устанавливает уровень туманности NUM2 (0 - чисто, 1 - сплошной туман) через NUM1 секунд в миссии
Синтаксис: NUM1 setfog NUM2
Возвращаемое значение:
Пример: 20 SetFog 0.8
Замечание:

SetFormation

Описание: Устанавливает построение STRING для группы UNIT. Доступные построения:

  • LINE - линия, лидер в центре
  • STAG COLUMN - широкая колонна по двое
  • WEDGE - развернутый угол, лидер в вершине
  • ECH LEFT - линия, лидер слева
  • ECH RIGHT - линия, лидер справа
  • VEE - клин, лидер в вершине
  • COLUMN - колонна по двое
Синтаксис: UNIT SetFormation STRING
Возвращаемое значение:
Пример: myGrp setformation "WEDGE"
Замечание:
SetFormDir

Описание: Устанавливает направление STRING (в градусах), куда смотрит группа UNIT. Доступные направления:

  • 0 - север
  • 90 - восток
  • 180 - юг
  • 270 - запад
Синтаксис: UNIT SetFormDir STRING
Возвращаемое значение:
Пример: myGrp setformdir 90
Замечание:

setfuel

Описание: Устанавливает уровень топлива NUM (от 0.0 - пустой бак, до 1.0 - полный бак) для техники UNIT
Синтаксис: UNIT setfuel NUM
Возвращаемое значение:
Пример: myTruck SetFuel 0.5
Замечание:

setgroupid

Описание: Устанавливает для группы UNIT позывной STRING1 и цвет STRING2. Доступные позывные:
Alpha, Bravo, Charlie, Delta, Echo, Foxtrot, Golf, Hotel
Доступные цвета:

  • GroupColor1 - черный
  • GroupColor2 - красный
  • GroupColor3 - зеленый
  • GroupColor4 - синий
  • GroupColor5 - желтый
  • GroupColor6 - оранжевый
  • GroupColor7 - розовый
Синтаксис: UNIT setgroupid [STRING1,STRING2]
Возвращаемое значение:
Пример: mygrp SetGroupID ["Alpha","GroupColor5"]
Замечание:

setidentity

Описание: Устанавливает юниту UNIT личность STRING, которая должны быть определена в классе CfgIdentity в файле description.ext
Синтаксис: UNIT setidentity STRING
Возвращаемое значение:
Пример: MySoldier SetIdentity "Cool"
Замечание: Личность необходимо определять для всех юнитов, которые будут использовать в миссии команды say и radioMsg

setmarkerColor

Описание: Устанавливает цвет маркера UNIT, доступные цвета:
"Default", "ColorBlack", "ColorRed", "ColorRedAlpha", "ColorGreen", "ColorGreenAlpha", "ColorBlue", "ColorYellow", "ColorWhite"
Синтаксис: UNIT setmarkerColor STRING
Возвращаемое значение:
Пример: MarkerOne setmarkerColor "ColorBlack"
Замечание: Требуется версия 1.21 и выше

setmarkerpos

Описание: Устанавливает маркер STRING в координаты X=NUM1, Y=NUM2, Z=NUM3
Синтаксис: STRING setmarkerpos [NUM1,NUM2,NUM3]
Возвращаемое значение:
Пример: attackMarker SetMarkerPos [2000,3000,0]
Замечание:

setmarkerSize

Описание: Устанавливает размер маркера UNIT
Возвращаемое значение:
Пример: "MarkerOne" setMarkerSize [100, 200]
Замечание: Требуется версия 1.21 и выше

setmarkertype

Описание: Изменяет форму иконки STRING2 маркеру STRING1. Доступные иконки:

  • START - стрелка, выходящая из круга
  • END - стрелка, входящая внутрь круга
  • PICKUP - стрелка внутри круга
  • EMPTY - перечеркнутый круг
  • MARKER - крест
  • DESTROY - прицел
  • ARROW - стрелка
  • FLAG1 - флаг
  • WARNING - восклицательный знак
  • DOT - точка
  • JOIN - две стрелки, объединяющиеся в круге
  • UNKNOWN - вопросительный знак
Синтаксис: STRING1 setmarkertype STRING2
Возвращаемое значение:
Пример: attackMarker SetMarkerType "Destroy"
Замечание: Иконки доступны только для маркеров типа ICON. См. также здесь.
setmimic

Описание: Устанавливает юниту UNIT выражение лица STRING. Доступные выражения:

  • angry - злой
  • smile - улыбающийся
  • suprise - удивленный
  • hurt - чувство боли
  • sad - обида
  • ironic - ироническая улыбка
  • cynic - циническая ухмылка
  • agresive - агрессивный
  • normal - нормальный
Синтаксис: UNIT setmimic STRING
Возвращаемое значение:
Пример: MySoldier SetMimic "angry"
Замечание:
setObjectTexture

Описание: Устанавливает любую текстуру на технику. Работает только на БМП, Т72 и Т80. Number - ставте ноль, значение неизвестно.
Синтаксис: UNIT setObjectTexture STRING
Возвращаемое значение:
Пример: VehicleName SetObjectTexture [Number, "PictureName"]
Замечание: Требуется версия 1.75 и выше

setovercast

Описание: Устанавливает количество NUM2 (от 0.0 - ясное небо, до 1.0 - сплошные тучи) туч на небе через NUM1 секунд
Синтаксис: NUM1 setovercast NUM2
Возвращаемое значение:
Пример: 20 SetOverCast 0.8
Замечание: Только при пасмурной погоде вы сможете увидеть удивительно красивую молнию

setpos

Описание: Немедленно перемещает юнит UNIT в координаты X=NUM1, Y=NUM2, Z=NUM3
Синтаксис: UNIT setpos [NUM1,NUM2,NUM3]
Возвращаемое значение:
Пример: MySoldier SetPos [3000,2000,0]
Замечание: Если Z>0, то юнит окажется в воздухе

SetRadioMsg

Описание: Установливает текст STRING радио-команды позывного NUM в радио-меню. Доступные позывные:

  1. - Alpha
  2. - Bravo
  3. - Charlie
  4. - Delta
  5. - Echo
  6. - Foxtrot
  7. - Golf
  8. - Hotel
Синтаксис: NUM SetRadioMsg STRING
Возвращаемое значение:
Пример: 1 SetRadioChannel "Call in Air Strike"
Замечание: Если установить значение STRING = "null", то данный позывной не будет отображаться в радио-меню. Чтобы использовать радио-команду, необходимо создать Триггер с соответствующим позывным (Alpha - Hotel)
SetRain

Описание: Делается дождь, через time (время) со значением STRING (0-нет дождя, 1- есть дождь)
Синтаксис: TIME setRain STRING
Возвращаемое значение:
Пример: 20 setRain 0.8
Замечание: Требуется версия 1.75 и выше

SetSkill

Описание: Устанавливает скил для бойца UNIT от 0 до 1
Синтаксис: UNIT SerSkill STRING
Возвращаемое значение:
Пример: MySol setSkill 0.8
Замечание: Требуется версия 1.75 и выше

setspeedmode

Описание: Установливает скоростной режим STRING для юнита UNIT. Доступные режимы:

  • FULL - полная скорость
  • NORMAL - обычная
  • LIMITED - медленная
Синтаксис: UNIT setspeedmode STRING
Возвращаемое значение:
Пример: MyJeep SetSpeed "FULL"
Замечание:

setTerrainGrid

Описание: Устанавливает разрешение ландшавта в метрах. Доступные значения:
50, 25, 12.5, 6.25, 3.125
Синтаксис: SetTerrainGrid STRING
Возвращаемое значение:
Пример: setTerrainGrid 12.5
Замечание: Требуется версия 1.75 и выше

setunitpos

Описание: Заставить юнит UNIT принять положение STRING. Доступные положения:

  • UP - стоя
  • DOWN - лежа
  • AUTO - позволить юниту самому выбрать наилучшее положение
Синтаксис: UNIT setunitpos STRING
Возвращаемое значение:
Пример: MySoldier SetUnitPos "DOWN"
Замечание:

setVelocity

Описание: Устанавливает скорость (вектор ускорения) машины.
Синтаксис: VEHICLE setVelocity [x, z, y]
Возвращаемое значение: Нет
Пример:
Замечание: Требуется версия 1.80 и выше

setviewdistance

Описание: Устанавливает для игрока максимальную зону видимости в NUM метров
Синтаксис: setviewdistance NUM
Возвращаемое значение:
Пример: setViewDistance 2000
Замечание: Уменьшив данное значение, можно уменьшить нагрузку на процессор и увеличить FPS в игре

setWPPos

Описание: Устанавливает позицию вэйпоинта UNIT
Синтаксис: UNIT setWPPos STRING
Возвращаемое значение:
Пример: [groupOne, 1] setWPPos getMarkerPos "MarkerOne"
Замечание: Требуется версия 1.21 и выше

showcinemaborder

Описание: Включает (TRUE) или отключиает (FALSE) черные полосы сверху и снизу экрана
Синтаксис: showcinemaborder T/F
Возвращаемое значение:
Пример: ShowCinemaBorder false
Замечание: Данная команда действует, только когда у камеры включен вид не из глаз игрока

showncompass

Описание: Проверяет, доступен ли компас в миссии
Синтаксис: showncompass
Возвращаемое значение: TRUE (если компас доступен) или FALSE (если нет)
Пример: showncompass
Замечание: Данную команду нельзя проверить в редакторе, для этого необходимо запустить миссию в игре. Включить/отключить отображение компаса можно командой showcompass в файле description.ext

showngps

Описание: Проверяет, доступен ли GPS в миссии
Синтаксис: showngps
Возвращаемое значение: TRUE (если GPS доступен) или FALSE (если нет)
Пример: showngps
Замечание: Данную команду нельзя проверить в редакторе, для этого необходимо запустить миссию в игре. Включить/отключить отображение GPS можно командой showgps в файле description.ext

shownmap

Описание: Проверяет, доступна ли карта в миссии
Синтаксис: shownmap
Возвращаемое значение: TRUE (если карта доступна) или FALSE (если нет)
Пример: shownmap
Замечание: Данную команду нельзя проверить в редакторе, для этого необходимо запустить миссию в игре. Включить/отключить отображение карты можно командой showmap в файле description.ext

shownpad

Описание: Проверяет, доступен ли блокнот (на нем отображается задание) в миссии
Синтаксис: shownpad
Возвращаемое значение: TRUE (если блокнот доступен) или FALSE (если нет)
Пример: shownpad
Замечание: Данную команду нельзя проверить в редакторе, для этого необходимо запустить миссию в игре. Включить/отключить отображение блокнота можно командой showpad в файле description.ext

shownwarrant

Описание: Проверяет, доступны ли приказы в миссии
Синтаксис: shownwarrant
Возвращаемое значение: TRUE (если приказы доступны) или FALSE (если нет)
Пример: shownwarrant
Замечание: Данную команду нельзя проверить в редакторе, для этого необходимо запустить миссию в игре. Включить/отключить отображение приказов можно командой showwarrant в файле description.ext

shownwatch

Описание: Проверяет, доступны ли часы в миссии
Синтаксис: shownwatch
Возвращаемое значение: TRUE (если часы доступны) или FALSE (если нет)
Пример: shownwatch
Замечание: Данную команду нельзя проверить в редакторе, для этого необходимо запустить миссию в игре. Включить/отключить отображение часов можно командой showwatch в файле description.ext

Side

Описание: Отображает войска, к которым принадлежит юнит UNIT. Доступные войска:

  • EAST - СССР
  • WEST - НАТО
  • GUER - Повстанцы
  • CIV - Гражданские
Синтаксис: Side UNIT
Возвращаемое значение:
Пример: ? side player == east : player globalchat "I am soviet!"
Замечание:
sidechat

Описание: Заставляет юнит UNIT сказать фразу STRING в канале своих войск
Синтаксис: UNIT sidechat STRING
Возвращаемое значение:
Пример: MyGuy sidechat MyString
Замечание:

sideradio

Описание: Заставляет юнит UNIT отправить радио-команду STRING в канале своих войск
Синтаксис: UNIT sideradio STRING
Возвращаемое значение:
Пример: off sideradio "RFallback";
Замечание: В строке STRING указывается имя класса CfgRadio, который необходимо определить заранее в файле description.ext (этот файл должен находиться в одной папке с миссией)

skill

Описание: Сбрасывает скил юнита UNIT
Синтаксис: skill UNIT
Возвращаемое значение:
Пример: Skill Player
Замечание: Требуется версия 1.75 и выше

skiptime

Описание: Немедленно переводит часы на NUM часов вперед
Синтаксис: skiptime NUM
Возвращаемое значение:
Пример: skiptime 5
Замечание: Можно использовать для ускорения смены дня и ночи

someammo

Описание: Проверяет, остались ли у юнита UNIT какие-нибудь боезапасы
Синтаксис: someammo
Возвращаемое значение: TRUE (если боезапасы остались) или FALSE (если нет)
Пример: someAmmo aP
Замечание:

soundvolume

Описание: Устанавливает громкость звука в NUM
Синтаксис: soundvolume NUM
Возвращаемое значение:
Пример: soundvolume 2
Замечание:

speed

Описание: Отображает скорость юнита UNIT
Синтаксис: speed UNIT
Возвращаемое значение:
Пример: SpeedOfUnit = speed MyTank
Замечание:

speedmode

Описание: Отображает скоростной режим юнита UNIT. Доступные режимы:

  • FULL - полная скорость
  • NORMAL - обычная
  • LIMITED - медленная
Синтаксис: speedmode UNIT
Возвращаемое значение:
Пример: speedmode aP
Замечание:
stop

Описание: Заставляет юнит UNIT приостановить какое-то действие (TRUE) или возобновить его (FALSE)
Синтаксис: UNIT stop T/F
Возвращаемое значение:
Пример: aP stop true
Замечание:

Stopped

Описание: Проверяет, остановился ли юнит UNIT
Синтаксис: Stopped UNIT
Возвращаемое значение: TRUE (если юнит остановился) или FALSE (если нет)
Пример: stopped aP
Замечание:

switchCamera

Описание: Меняет вид STRING камеры. Доступные виды:
INTERNAL - внутренний
EXTERNAL - внешний
Синтаксис: UNIT switchCamera STRING
Возвращаемое значение:
Пример: _mycamera SwitchCamera "EXTERNAL"
Замечание:

switchmove

Описание: Устанавливает юниту UNIT анимацию движений STRING
Синтаксис: UNIT switchmove STRING
Возвращаемое значение:
Пример: aP switchmove "EffectStandSitDown"
Замечание: Список анимаций тут.

switchlight

Описание: Включает или выключает осветительные приборы на объектах
Синтаксис: UNIT switchlight T/F
Возвращаемое значение:
Пример: Пример: nearestObject [player, "StreetLamp"] switchLight "Off"
Замечание: Включает/выключает лампы на улице! С техникой не только не работает нои приводит к вылет. Возможные значения "ON", "OFF", "AUTO". "AUTO" это значение по умолчанию

select

Описание: Используется в скрипте для того, чтобы выбрать массив с юнитами, переданный из миссии в качестве аргументов команды exec (синтаксис 1). Это не тоже, что и list. Также может использоваться для отображения всех юнитов в текущем триггере (синтаксис 2)
Синтаксис 1: VAR = thislist select NUM
Синтаксис 2: thislist
Возвращаемое значение: Массив с юнитами
Пример 1: MyTriggerList = thislist select 0
Пример 2: MyTankList = thislist select 1
Пример 3: MyUnitList = thislist select 2
Замечание: Аргументы могут передаваться в скрипт так:
[trigger, tank2, MyGuy] exec "myscript.sqs";
При этом массив MyTriggerList будет содержать список всех юнитов в триггере trigger, MyTankList - в танке tank2, а MyUnitList - в группе MyGuy

titlecut

Описание: Затенить экран или выйти из затенения. Данный эффект будет сопровождаться текстом STRING1. STRING2 – эффект затенения:

  • BLACK - Погасить экран и отобразить в его центре текст. Игровой вид снова НЕ включится (можно использовать для окончания миссии)
  • BLACK OUT - То же, что и BLACK
  • BLACK IN - Черный экран постепенно проявляется в игровой
  • BLACK FADED - Погасить экран и отобразить текст в центре. Игровой экран восстановится примерно через 15 секунд
  • WHITE OUT - То же что и Black Out, но экрана белого цвета
  • WHITE IN - То же что и Black In, но экрана белого цвета
  • NUM - продолжительность затенения (в секундах)
Синтаксис: titlecut [STRING1,STRING2,NUM]
Возвращаемое значение:
Пример: TitleCut ["Guns of Steel","BLACK IN",2.5]
Замечание:
Titleobj

Описание: Помещает на экран объект UNIT в позицию STRING. Доступные позиции:
PLAIN DOWN - внизу экрана
PLAIN - в центре экрана
Синтаксис: Titleobj [UNIT,STRING]
Возвращаемое значение:
Пример: titleobj ["tvset","plain down"]
Замечание:

titlersc

Описание: Помещает на экран ресурс UNIT в позицию STRING. Доступные ресурсы:

  • default - обычный вид
  • binocular - вид из бинокля
  • creditsback - значение неизвестно
  • creditsbackBIS - кредиты BIStudio
  • creditsbackCM - кредиты Codemasters
  • Endof - значение неизвестно
  • foto - рамка фотографии
Доступные позиции:
  • PLAIN DOWN - внизу экрана
  • PLAIN - в центре экрана
Синтаксис: titlersc [UNIT,STRING]
Возвращаемое значение:
Пример: titlersc ["foto","plain down"]
Замечание:
titletext

Описание: Помещает на экране текст STRING1 в позиции STRING2. Доступные позиции:
PLAIN DOWN - внизу экрана
PLAIN - в центре экрана
Синтаксис: titletext [STRING1,STRING2]
Возвращаемое значение:
Пример1: TitleText ["Guns of Steel","PLAIN"]
Пример2: TitleText ["Guns of Steel\nSon of a Gun ","PLAIN"]
Замечание: Можно также вставлять знаки перевода строки и разбивать текст на несколько строк, путем добавления символов "\n" в месте перевода строки (см. Пример2)

Unassignvehicle

Описание: Отсоединяет юнит UNIT от техники, за которой он был закреплен
Синтаксис: Unassignvehicle UNIT
Возвращаемое значение:
Пример: unassign aP
Замечание: Если юнит находится в закрепленной за ним технике в момент исполнения данной команды, то он вначале вылезет из нее, а потом уже отсоединится от этой техники

Units

Описание: Отображает список всех юнитов в группе UNIT
Синтаксис: Units UNIT
Возвращаемое значение:
Пример: MyUnits = units group MyGuy
Замечание:

vehiclechat

Описание: Заставляет юнит UNIT сказать фразу STRING в канале пассажиров техники, в которой он находится
Синтаксис: UNIT vehiclechat STRING
Возвращаемое значение:
Пример: MyGuy vehiclechat MyString
Замечание:

vehicleradio

Описание: Заставляет юнит UNIT отправить радио-команду STRING в канале пассажиров техники, в которой он находится
Синтаксис: UNIT vehicleradio STRING
Возвращаемое значение:
Пример: off VehicleRadio "RFallback";
Замечание: В строке STRING указывается имя класса CfgRadio, который необходимо определить заранее в файле description.ext (этот файл должен находиться в одной папке с миссией)

velocity

Описание: Возвращает вектор скорости машины в виде массива [] [x, z, y].
Синтаксис: velocity VEHICLE
Возвращаемое значение: Array
Пример:
Замечание: Требуется версия 1.80 и выше

waypointPosition

Описание: Отображает позицию вэйпоинта UNIT
Синтаксис: waypointPosition UNIT
Возвращаемое значение:
Пример: waypointPosition [groupOne, 1]
Замечание: Требуется версия 1.5 и выше

weapons

Описание: Отображает названия всего оружия техники UNIT
Синтаксис: weapons UNIT
Возвращаемое значение:
Пример: weapons Mytank
Замечание: Требуется версия 1.75 и выше

Savegame | SaveIdentity | SaveStatus | say | Score | scudState
secondaryWeapon | selectWeapon | set | setAccTime | SetAmmoCargo | setbehaviour
setcaptive | SetCombatMode | setdammage | setdir | setface | SetFlagOwner
SetFlagSide | setflagtexture | setfog | SetFormation | SetFormDir | setfuel
setgroupid | setidentity | setmarkerColor | setmarkerpos | setmarkerSize | setmarkertype
setmimic | setObjectTexture | setovercast | setpos | SetRadioMsg | SetRain
SetSkill | setspeedmode | setTerrainGrid | setunitpos | setVelocity | setviewdistance
setWPPos | showcinemaborder | showncompass | showngps | shownmap | shownpad
shownwarrant | shownwatch | Side | sidechat | sideradio | skill
skiptime | someammo | soundvolume | speed | speedmode | stop
Stopped | switchCamera | switchmove | switchlight | select | titlecut
Titleobj | titlersc | titlersc | titletext | Unassignvehicle | Units
vehiclechat | vehicleradio | velocity | waypointPosition | weapons |
<<<Назад <<< <<<Меню>>> >>> Далее>>>


Игровые команды: Resistance

Здесь указаны команды не вошедшие в предыдущие разделы, все остальные команды Резистэнс вы найдёте в других разделах.
BombName = "Bomb" CreateVehicle Position; BombName SetDammage 1
В Резисте появился новый объект BOMB.. соответственно бомба, теперь не нужно делать скрипты с подрывом гранат или снарядов от танка.
unitname addweapon "phone"
Юнит берёт в руку телефон...


Анимация персонажей

Здесь указана различная анимация персонажей, которую вы можете использовать с помощью команды Playmove (проигрывает анимацию) или Switchmove (мгновенное движение). В большинстве случаев название анимации описывает ее действие, но если это не так, возле вы найдете описание. Так как движений очень много, то и описания есть не у всех. В связи с этим я надеюсь, что вы поможете с описанием анимации и пришлете описания уже известных вам движений.
Замечание: Команды анимации лучше прописывать в ините Вэйпоинтов.
Женская анимация ходьбы и стоек Резистэнс Техническая анимация из RESISTANCE Старая анимация

Анимация из Resistance

  • FXexecution - ставит руки за голову и встаёт на колени
  • FXexecutionDead - умирает стоя на коленях
  • FXdismay - резко оборачивается назад
  • FXToKneel - садится на корточки
  • FXInKneel - сидит на корточках
  • FXFromKneel - встаёт из этого положения
  • FXshow1 - показывает руками
  • FXshow2 - показывает руками
  • FXshow3 - показывает руками
  • FXshow4 - показывает руками
  • FXshow5 - показывает руками
  • FXCivilLookaround -- оглядывается
  • FXCivilLookaround2 -- оглядывается
  • FXCivilLookback - оглядывается назад
  • FXCivilHandMouth - разговаривает подводя руку ко рту
  • FXCivilFoldOnesArms -- скрестив руки в локтях задумался
  • FXCivilArmsAkimboR - оглядывается поставив правую руку на пояс
  • FXCivilArmsAkimboL - оглядывается поставив левую руку на пояс
  • FXFromTable - встаёт из-за стола
  • FXToTable - садится за стол
  • FXSitLeftHandDown - сидя за столом опускает левувую, затем правую руку на колени
  • FXSitRightHandDown - сидя за столом опускает правую, затем левую руку на колени
  • FXSitHandsOnTable - сидя за столом облокачивается на локоть
  • FXToHand - скрещивает руки в локтях и оглядывается
  • FXInHand - скрестив руки в локтях оглядывается
  • FXInHandStat - стоит скрестив руки в локтях
  • FXFromHand - принимает обычную стойку скрестив руки в локтях
  • FXNewcivil - стоит оперевшись на правую ногу
  • FXWomanSur - женщина сдается

Женская анимация ходьбы и стоек Резистэнс:

  • Civil
  • CivilStillV1
  • CivilWalkLF
  • CivilWalkRF
  • CivilWalkL
  • CivilWalkR
  • CivilWalkLB
  • CivilWalkRB
  • CivilWalkB
  • CivilRunF
  • CivilRunLF
  • CivilRunRF
  • CivilRunL
  • CivilRunR
  • CivilRunLB
  • CivilRunRB
  • CivilRunB
Тут всё понятно ходьба, бег, назад 45, 90, 135, 180 градусов, тоже самое и с ползаньем.
Символы в конце: F,B,L,R -Вперёд, назад, влево, вправо (front, back, left, right)

Техническая анимация из RESISTANCE, т.е. перезарядка пистолетов и т.д.

  • HandGunMedicActions
  • HandGunPutDownActions
  • HandGunTakeFlagActions
  • HandGunLyingPutDownActions
  • busDriver
  • busDriverV1
  • busDriverDying
  • busDriverDead
  • busCargo
  • busCargoV1
  • busCargoDying
  • busCargoDead
  • jawaCoDriver
  • jawaDriver
  • HandGunCrouch
  • HandGunCrouchBase
  • HandGunCrouchVar2
  • HandGunCrouchToHandGunStand
  • HandGunCrouchToHandGunLying
  • HandGunCrouchReloadMagazine
  • HandGunCrouchToBinocHandGunCrouch
  • BinocHandGunCrouch
  • BinocHandGunCrouchToHandGunCrouch
  • HandGunCrouchDying
  • HandGunCrouchDyingVer2
  • HandGunCrouchDead
  • HandGunCrouchDeadVer2
  • HandGunLying
  • HandGunLyingVar2
  • HandGunLyingToHandGunCrouch
  • HandGunLyingReloadMagazine
  • HandGunLyingThrowGrenade1
  • HandGunLyingThrowGrenade2
  • HandGunLyingNoAim
  • HandGunLyingCrawlF
  • HandGunLyingFastCrawlF
  • HandGunLyingCrawlLF
  • HandGunLyingCrawlRF
  • HandGunLyingCrawlL
  • HandGunLyingCrawlR
  • HandGunLyingCrawlB
  • HandGunLyingCrawlLB
  • HandGunLyingCrawlRB
  • HandGunLyingTurnL
  • HandGunLyingTurnR
  • HandGunLyingToBinocHandGunLying
  • BinocHandGunLying
  • BinocHandGunLyingToHandGunLying
  • HandGunLyingDying
  • HandGunLyingDead
  • HandGunStand
  • HandGunStandBase
  • HandGunStandVar2
  • HandGunStandToHandGunCrouch
  • HandGunStandReloadMagazine
  • HandGunStandThrowGrenade1
  • HandGunStandThrowGrenade2
  • HandGunStandWalkF
  • HandGunStandWalkLF
  • HandGunStandWalkRF
  • HandGunStandWalkL
  • HandGunStandWalkR
  • HandGunStandWalkB
  • HandGunStandWalkLB
  • HandGunStandWalkRB
  • HandGunStandRunF
  • HandGunStandRunLF
  • HandGunStandRunRF
  • HandGunStandRunL
  • HandGunStandRunR
  • HandGunStandRunB
  • HandGunStandRunLB
  • HandGunStandRunRB
  • HandGunStandTurnL
  • HandGunStandTurnR
  • HandGunStandRelaxed
  • HandGunStandRelaxedStill
  • HandGunStandTurnLRelaxed
  • HandGunStandTurnRRelaxed
  • HandGunStandToBinocHandGunStand
  • BinocHandGunStand
  • BinocHandGunStandToHandGunStand
  • HandGunStandDying
  • HandGunStandDyingVer2
  • HandGunStandDead
  • HandGunStandDeadVer2
  • HandGunCrouchWalk
  • HandGunCrouchWalkLF
  • HandGunCrouchWalkRF
  • HandGunCrouchWalkL
  • HandGunCrouchWalkR
  • HandGunCrouchWalkB
  • HandGunCrouchWalkLB
  • HandGunCrouchWalkRB
  • HandGunCrouchRunF
  • HandGunCrouchRunLF
  • HandGunCrouchRunRF
  • HandGunCrouchRunL
  • HandGunCrouchRunR
  • HandGunCrouchRunB
  • HandGunCrouchRunLB
  • HandGunCrouchRunRB
  • HandGunCrouchTurnL
  • HandGunCrouchTurnR
  • CombatToHandGunStand1
  • CombatToHandGunStand2
  • HandGunStandToCombat1
  • HandGunStandToCombat2
  • StandToHandGunStand1
  • StandToHandGunStand2
  • HandGunStandToStand1
  • HandGunStandToStand2
  • CivilToHandGunStand1
  • CivilToHandGunStand2
  • HandGunStandToCivil1
  • HandGunStandToCivil2
  • CrouchToHandGunCrouch1
  • CrouchToHandGunCrouch2
  • HandGunCrouchToCrouch1
  • HandGunCrouchToCrouch2
  • LyingToHandGunLying1
  • LyingToHandGunLying2
  • HandGunLyingToLying1
  • HandGunLyingToLying2
  • CivilLyingToHandGunLying1
  • CivilLyingToHandGunLying2
  • HandGunLyingToCivilLying1
  • HandGunLyingToCivilLying2
  • WeaponToHandGunCrouch1
  • WeaponToHandGunCrouch2
  • HandGunCrouchToWeapon1
  • HandGunCrouchToWeapon2
  • HandGunGetInCar
  • HandGunGetInTank
  • HandGunGetOutTank
  • HandGunStandToHandGunMedic
  • HandGunMedic
  • HandGunMedicToHandGunStand
  • HandGunStandToHandGunPutDown
  • HandGunPutDown
  • HandGunPutDownToHandGunStand
  • HandGunStandToHandGunTakeFlag
  • HandGunTakeFlag
  • HandGunTakeFlagToHandGunStand
  • HandGunLyingToHandGunLyingPutDown
  • HandGunLyingPutDown
  • HandGunLyingPutDownToHandGunLying

Старая анимация

  • 5TCoDriver
  • 5TCoDriverV1
  • 5TCoDriverDead
  • 5TCoDriverDying
  • 5TDriver
  • 5TDriverV1
  • 5TDriverDead
  • 5TDriverDying
  • A10Pilot
  • A10PilotV1
  • A10PilotDead
  • A10PilotDying
  • AH1Gunner
  • AH1GunnerV1
  • AH1GunnerDead
  • AH1GunnerDying
  • AH1Pilot
  • AH1PilotV1
  • AH1PilotDead
  • AH1PilotDying
  • BinocCrouchToCrouch
  • BinocLyingToLying
  • BinocStandToStand
  • BinocToCombat
  • BMPCommander
  • BMPCommanderV1
  • BMPCommanderOut
  • BMPCommanderOutV1
  • BMPCommanderOutDead
  • BMPCommanderOutDying
  • BMPDriver
  • BMPDriverV1
  • BMPDriverOut
  • BMPDriverOutV1
  • BMPDriverOutDead
  • BMPDriverOutDying
  • BMPGunner
  • BMPGunnerV1
  • BMPGunnerOut
  • BMPGunnerOutV1
  • BMPGunnerOutDying
  • BMPGunnerOutDead
  • Cargo
  • CargoDead
  • CargoDying
  • CargoVer1
  • CargoVer2
  • CargoVer3
  • CargoVer4
  • CargoVer5
  • CesnaCargo
  • CesnaCargoV1
  • CesnaCargoDead
  • CesnaCargoDying
  • CesnaPilot
  • CesnaPilotV1
  • CesnaPilotDead
  • CesnaPilotDying
  • CivilDead
  • CivilDeadVer2
  • CivilDying
  • CivilDyingVer2
  • CivilLying
  • CivilLyingCrawlF
  • CivilLyingCrawlL
  • CivilLyingDying
  • CivilLyingNoAim
  • CivilRunF
  • CivilStillV1
  • CivilWalkF
  • CombatDead
  • CombatDeadVer2
  • CombatDeadVer3
  • CombatDying
  • CombatDyingVer2
  • CombatDyingVer3
  • CombatOptics
  • CombatOpticsF
  • CombatRelaxedDeadVer2
  • CombatRelaxedDying
  • CombatRelaxedDyingVer2
  • CombatRelaxedStill
  • CombatReloadMortarEnd
  • CombatRunB
  • CombatRunBDead
  • CombatRunBDeadVer2
  • CombatRunBDying
  • CombatRunBDyingVer2
  • CombatRunDeadVer2
  • CombatRunDying
  • CombatRunDyingVer2
  • CombatRunF
  • CombatRunFToLying
  • CombatRunL
  • CombatRunLB
  • CombatRunLF
  • CombatRunNF
  • CombatRunR
  • CombatRunRB
  • CombatRunRF
  • CombatRunThrowGrenadeEnd
  • CombatSprintF
  • CombatSprintLF
  • CombatSprintRF
  • CombatStillPlayer
  • CombatStillV1
  • CombatStrokeGunEnd
  • CombatThrowGrenadeEnd
  • CombatToBinoc
  • CombatToCrouch
  • CombatToLying
  • CombatToMedic
  • CombatToPutDown
  • CombatToStand
  • CombatToTreated
  • CombatToWeapon
  • CombatTurnL
  • CombatTurnR
  • CommandEngageAtWill - подаёт команду руками: атаковать по выбору
  • CommandFireAtWill - то же самое
  • CommandFormation - махает рукой по кругу
  • CommandForward - подаёт команду: вперёд
  • CommandHoldFire - подаёт команду: остановить огонь
  • CommandStop - подаёт команду: остановиться
  • Commander
  • Crouch
  • CrouchDying
  • CrouchToBinocCrouch
  • CrouchToCombat
  • CrouchToCrouchSprintF
  • CrouchToLying
  • CrouchToWeapon
  • Driver
  • EffectCombatStand - боевая стойка с оружием (топчется на месте)
  • EffectStandmove - топчется на месте держа оружие за спиной
  • EffectStandSitDown - присесть
  • EffectStandSitDownVer1 - сидеть
  • EffectStandSitDownVer2 - сидеть
  • EffectStandSitDownStill - похоже на EffectStandTalk
  • EffectStandSalute - отдает честь
  • EffectStandSaluteEnd - отдаёт честь и встаёт в обычную позу
  • EffectStandTalk - говорит
  • EffectWeaponPanic - паникует с оружием в руках
  • FXangel - стоит по стойке смирно =)
  • FXangel2 - то же самое только прикрыв пах
  • FXStandAtt - стоит руки за спину и раздвинув ноги
  • FXStandAttVar1 - возмущается ;)
  • FXStandBug - стоит раздвинув ноги и разговаривает
  • FXStandDangle - сидя, похоже что, пьёт из бутылки =)
  • FXStandDip - отжимается
  • FXStandDropTel - кладёт трубку после разговора
  • FXStandEndTable - стоит за столом поставив на него руки, показывает вперёд и отворачивается
  • FXStandFromDip - встаёт после отжимания
  • FXStandFromTable - встает со стула
  • FXStandhip - возмущается
  • FXStandRotateTable - стоит за столом облокотившись на него руками и разглядывает его поверхность
  • FXStandShowTable - показывает что-то на столе
  • FXStandStraight - дёргает плечами
  • FXStandSur - ставит руки за голову
  • FXStandSurDead - умирает из этого положения
  • FXStandSurDown - сдается в плен
  • FXStandSurUniv - сдается в плен
  • FXStandToDip - ложится в упор лёжа
  • FXStandToTel - снимает телефонную трубку
  • FXStandTelLoop - сидя говорит по телефону
  • FXStandToTelHand - поднимает трубку и садится на стул
  • FXStandToTable - садится на стул
  • FXStandUnivTable - сидит на стуле
  • Gunner
  • HRLGunner
  • HRLGunnerV1
  • HRLGunnerDead
  • HRLGunnerDying
  • JeepCoDriver
  • JeepCoDriverV1
  • JeepCoDriverDead
  • JeepCoDriverDying
  • JeepCoDriverBack
  • JeepCoDriverBackV1
  • JeepCoDriverBackDead
  • JeepCoDriverBackDying
  • JeepGunner
  • JeepGunnerV1
  • JeepGunnerDead
  • JeepGunnerDying
  • JeepDriver
  • JeepDriverV1
  • JeepDriverDead
  • JeepDriverDying
  • LyingCrawlF
  • LyingCrawlL
  • LyingDying
  • LyingNoAim
  • LyingStillV1
  • LyingThrowGrenadeEnd
  • LyingToBinocLying
  • LyingToCombat
  • LyingToCombatRun
  • LyingToCrouch
  • LyingToPutDownLying
  • LyingToTreatedLying
  • LyingToWeapon
  • M113Driver
  • M113DriverV1
  • M113DriverOut
  • M113DriverOutV1
  • M113DriverOutDead
  • M113DriverOutDying
  • M113Gunner
  • M113GunnerV1
  • M113GunnerDead
  • M113GunnerDying
  • M113Medic
  • M113MedicV1
  • M1A1Commander
  • M1A1CommanderV1
  • M1A1CommanderOut
  • M1A1CommanderOutV1
  • M1A1CommanderOutDead
  • M1A1CommanderOutDying
  • M1A1Gunner
  • M1A1GunnerV1
  • M1A1DriverOut
  • M1A1DriverOutV1
  • M1A1DriverOutDead
  • M1A1DriverOutDying
  • M2Gunner
  • M2GunnerV1
  • M2GunnerDead
  • M2GunnerDying
  • M60Commander
  • M60CommanderV1
  • M60CommanderOut
  • M60CommanderOutV1
  • M60CommanderOutDead
  • M60CommanderOutDying
  • M60Driver
  • M60DriverV1
  • M60DriverOut
  • M60DriverOutV1
  • M60DriverOutDying
  • M60DriverOutDead
  • M60Gunner
  • M60GunnerV1
  • Mi17Pilot
  • Mi17PilotV1
  • Mi17PilotDead
  • Mi17PilotDying
  • Mi24Gunner
  • Mi24GunnerV1
  • Mi24GunnerDead
  • Mi24GunnerDying
  • Mi24Pilot
  • Mi24PilotV1
  • Mi24PilotDead
  • Mi24PilotDying
  • MedicToCombat
  • OnChair - сидит на стуле
  • Para
  • ParaV1
  • ParaDead
  • ParaDying
  • PBRDriver
  • PBRDriverV1
  • PBRDriverDead
  • PBRDriverDying
  • PBRGunner
  • PBRGunnerV1
  • PBRGunnerDead
  • PBRGunnerDying
  • Pilot
  • PutDownLyingToLying
  • PutDownToCombat
  • ScudCoDriver
  • ScudCoDriverV1
  • ScudCoDriverDead
  • ScudCoDriverDying
  • ScudDriver
  • ScudDriverV1
  • ScudDriverDead
  • ScudDriverDyingScudCoDriver
  • ScudCoDriverV1
  • ScudCoDriverDead
  • ScudCoDriverDying
  • ScudDriver
  • ScudDriverV1
  • ScudDriverDead
  • ScudDriverDying
  • SkodaCoDriver
  • SkodaCoDriverV1
  • SkodaCoDriverDead
  • SkodaCoDriverDying
  • SkodaCoDriverBack
  • SkodaCoDriverBackV1
  • SkodaCoDriverBackDead
  • SkodaCoDriverBackDying
  • SkodaDriver
  • SkodaDriverV1
  • SkodaDriverDead
  • SkodaDriverDying
  • SitDownToStand
  • SitDownDying
  • Stand
  • StandBase
  • StandDead
  • StandDeadVer2
  • StandDyingVer2
  • StandToBinocStand
  • StandToCombat
  • EffectStandmove
  • EffectStandSitDown
  • EffectStandSitDownVer1
  • EffectStandSitDownVer2
  • EffectStandSitDownStill
  • EffectStandSalute
  • EffectStandSaluteEnd
  • StandGetOutTank
  • StandStrokeFist
  • StandStrokeFistEnd
  • StandWalkF
  • T55Commander
  • T55CommanderV1
  • T55CommanderOut
  • T55CommanderOutV1
  • T55CommanderOutDead
  • T55CommanderOutDying
  • T55DriverOut
  • T55DriverOutV1
  • T55DriverOutDead
  • T55DriverOutDying
  • T55Gunner
  • T55GunnerV1
  • T72Commander
  • T72CommanderV1
  • T72CommanderOut
  • T72CommanderOutV1
  • T72CommanderOutDead
  • T72CommanderOutDying
  • T72DriverOut
  • T72DriverOutV1
  • T72DriverOutDead
  • T72DriverOutDying
  • T72Gunner
  • T72GunnerV1
  • T72GunnerOut
  • T72GunnerOutV1
  • T72GunnerOutDead
  • T72GunnerOutDying
  • T80CommanderOut
  • T80CommanderOutV1
  • T80CommanderOutDead
  • T80CommanderOutDying
  • T80GunnerOutV1
  • T80GunnerOutDead
  • T80GunnerOutDying
  • TractorDriver
  • TractorDriverV1
  • TractorDriverDead
  • TractorDriverDying
  • TreatedLyingToLying
  • TreatedToCombat
  • UazCoDriver
  • UazCoDriverV1
  • UazCoDriverDead
  • UazCoDriverDying
  • UazDriver
  • UazDriverV1
  • UazDriverDead
  • UazDriverDying
  • UH60Gunner
  • UH60GunnerV1
  • UH60GunnerDead
  • UH60GunnerDying
  • UH60Pilot
  • UH60PilotV1
  • UH60PilotDead
  • UH60PilotDying
  • UralCoDriver
  • UralCoDriverV1
  • UralCoDriverDead
  • UralCoDriverDying
  • UralDriver
  • UralDriverV1
  • UralDriverDead
  • UralDriverDying
  • V3SCoDriver
  • V3SCoDriverV1
  • V3SCoDriverDead
  • V3SCoDriverDying
  • V3SDriver
  • V3SDriverV1
  • V3SDriverDead
  • V3SDriverDying
  • Weapon
  • WeaponDead
  • WeaponDying
  • WeaponDyingVer2
  • WeaponToCombat
  • WeaponToCrouch
  • WeaponToLying
  • ZSUCommander
  • ZSUCommanderV1
  • ZSUCommanderOut
  • ZSUCommanderOutV1
  • ZSUCommanderOutDead
  • ZSUCommanderOutDying
  • ZSUDriver
  • ZSUDriverV1
  • ZSUDriverDead
  • ZSUDriverDying
  • ZSUGunner
  • ZSUGunnerV1
  • ZSUGunnerOut
  • ZSUGunnerOutV1
  • ZSUGunnerOutDead
  • ZSUGunnerOutDying


Действия

Здесь указаны действия, которые вы можете заставить выполнять солдат с помощью команды action.
Пример: Unit action ["EJECT", heli], где heli имя техники из которой выпрыгивает Unit

  • GETIN_COMMANDER - Залезть в технику %s в качестве командира
  • GETIN_DRIVER - Залезть в технику %s в качестве водителя
  • GETIN_PILOT - Залезть в технику %s в качестве пилота
  • GETIN_GUNNER - Залезть в технику %s в качестве стрелка
  • GETIN_CARGO - Залезть в технику %s в качестве пассажира
  • HEAL - Вылечиться у медика (в госпитале) %s
  • REPAIR - Отремонтрироваться у грузовика (на станции) %s
  • REFUEL - Заправиться у бензовоза (на станции) %s
  • REARM - Пополнить боезапас у грузовика (на станции) %s
  • GETOUT - Вылезти из техники
  • LIGHTON - Включить внешние осветительные приборы на технике
  • LIGHTOFF - Выключить внешние осветительные приборы на технике
  • ENGINEON - Завести двигатель
  • ENGINEOFF - Остановить двигатель
  • WEAPON - Переключиться на оружие %s
  • MAGAZINE - Перезарядить оружие %s
  • TAKEWEAPON - Взять оружие %s
  • DROPTAKEWEAPON - Взять оружие %s (выбросить оружие %s)
  • TAKEMAGAZINE - Взять боеприпасы %s
  • DROPTAKEMAGAZINE - Взять боеприпасы %s (выбросить боеприпасы %s)
  • TAKEFLAG - Взять флаг
  • RETURNFLAG - Вернуть флаг
  • TURNIN - Высунуться из техники
  • TURNOUT - Убрать голову внутрь техники
  • WEAPONINHAND - Взять в руки оружие %s
  • WEAPONONBACK - Убрать оружие %s за спину
  • SITDOWN - Сесть
  • EJECT - Выпрыгнуть из техники на ходу или на лету с парашютом
  • LAND - Включить посадочный автопилот в самолете
  • CANCEL_LAND - Отключить посадочный автопилот в самолете
  • TO_DRIVER - Пересесть на место водителя, если уже находишься внутри техники
  • TO_PILOT - Пересесть на место пилота, если уже находишься внутри техники
  • TO_GUNNER - Пересесть на место стрелка, если уже находишься внутри техники
  • TO_COMMANDER - Пересесть на место командира, если уже находишься внутри техники
  • TO_CARGO - Пересесть на место пассажира, если уже находишься внутри техники
  • HIDE_BODY - Спрятать труп (для диверсантов)
  • TOUCH_OFF - Взорвать бомбу/ы %d
  • START_TIMER - Установить таймер для бомбы
  • SET_TIMER - Прибавить к таймеру 30 секунд
  • DEACTIVATE - Отключить бомбу
  • TAKEOFF_GOGGLES - Отключить очки ночного видения
  • TAKEON_GOGGLES - Активировать очки ночного видения
  • MANUAL_FIRE - Переключиться на ручное управление огнем в технике
  • MANUAL_FIRE_CANCEL - Отключить ручное управление огнем в технике
  • HOVER - Включить авто-зависание (для вертолетов)
  • HOVER_CANCEL - Отключить авто-зависание (для вертолетов)
  • STROKEFIST - Бить кулаком (подробнее смотрите в теме "Часто задаваемые вопросы", стр. 2)
  • STROKEGUN - Бить прикладом оружия (подробнее смотрите там же)
  • LADDERUP - Взбираться вверх по лестнице
  • LADDERDOWN - Спускаться вниз по лестнице
  • LADDERON - Залезть на лестницу
  • LADDEROFF - Слезть с лестницы
  • FLAPS DOWN - Опустить закрылки на самолете
  • FLAPS UP - Поднять закрылки на самолете

Ниже приведены команды действий с описанием и примером, чтобы понятнее было:

Замечание: Перед скобками нужно вписать: unit action (unit - имя юнита)
  • ["DROP WEAPON",unit,0,0,"m16"] - Бросить оружие, Unit имя юнита
  • ["DROP MAGAZINE",unit,0,0,"m16"] - Бросить магзин, Unit имя юнита
  • ["FIRE INFLAME", flame] - Unit зажигает костёр с именем flame
  • ["FIRE PUT DOWN", flame] - Unit тушит костёр c именем flame
  • ["LADDERUP", (object 23311)] - Подняться по лестнице, Unit тот кто поднимается, 23311 номер обьекта с лестницей.
  • ["LADDERDOWN", (object 23311)] - Спуститься по лестнице Unit тот кто подымается, 23311 обьект с лестницей-?
  • ["LADDEROFF", (object 23311)] - Взять лестницу
  • ["LADDERON", (object 23311)] - Бросить лестницу
  • ["HIDEBODY", trup] - Спрятать тело, Unit имя того кто прячет тело, trup - труп того кого прячут
  • Unit fire ["put", "PipeBomb"] - Unit закладывает взрывчатку
  • ["SETTIMER",-30] - Уменьшить таймер на взрывчатке на 30 секунд
  • ["STARTTIMER",30] - Увеличить таймер на взрывчатке на 30 секунд
  • Scud action ["SCUD Launch"] - Поднять ракету, Scud - имя Скада
  • Scud action ["SCUD Start"] - Запустить ракету, Scud- имя Скада
  • ["TAKE FLAG", VlajkaRUS] - Взять флаг, VlajkaRUS - имя флага
  • tank1 action ["REFUEL",super] - Заправка, tank1 - имя техники, super - машина с топливом
  • tank1 action ["REPAIR",super] - Починка, tank1 - имя техники, super - машина с техпомощи
  • tank1 action ["REARM",super] - Перезарядка, tank1 - имя техники, super - машина с с амуницией
  • ["HEAL",gosp] - Лечиться, unit - кто лечится, gosp - в чем будет лечиться
  • ["TAKE WEAPON",ammbox,0,0,"ak74"] - Unit взять оружие "ak74" из ammbox, где ammbox имя ящика с оружием
  • ["Take MAGAZINE",ammbox,0,0,"ak74"] - Unit взять магазин "ak74" из ammbox, где ammbox имя ящика с оружием
  • ["REARM", NameOfCrate] - Перевооружиться (взять боеприпасы для оружия) у юнита должно быть оружие, пусть даже без патронов
  • commander tank action ["TURNOUT", tank] - прикажет командиру танка под именем tank открыть люк (чтобы приказать водителю не зная его имени пишите вместо commander driver)

Добавление собственных действий

Эта возможность появилась в версии 1.10. Теперь можно добавлять свои действия, которые можно будет выбрать из меню действий в левом правом углу.Синтаксис команды следующий: player addAction ["Action","doit.sqs"] Это добавит в меню пункт Action, по нажатии которого игрок выполнит действия, определенные в скрипте doit.sqs. Действия можно добавлять только игрокам, но не солдатам компьютера.

Если вы хотите использовать эту функцию в сетевой игре, то вместо слова player укажите имя игрока, которому хотите добавить новое действие.

Вы также можете удалять добавленные действия. Но для этого при добавлении необходимо указать идентификатор для действия следующим образом: id = player addAction ["Action,"doit.sqs"] где id - это переменная, в которой хранится идентификатор добавленного действия.

Теперь, чтобы удалить ваше действие, воспользуйтесь командой: player removeAction id Однако нормальному удалению собственных действий мешает, баг, из-за которого удаляется только первое добавленное действие.
<<<Назад <<< <<<Меню>>> >>> Далее>>>


Неизвестные команды

camsetbank | camsetdir | camsetdive | camsetfovrange | civilian | commandline
debuglog | enableenddialog | formleader | Light | Name | NextWaypoint
position | setfaceanimation | setfuelcargo | setrepaircargo | textlog |
camsetbank

Описание: Возможно, меняет угол наклона камеры
Синтаксис: UNIT camsetbank NUM

camsetdir

Описание: Возможно, меняет направление объектива камеры
Синтаксис: UNIT camsetdir NUM

camsetdive

Описание: Возможно, меняет положение камеры
Синтаксис: UNIT camsetdive NUM

camsetfovrange

Описание: Возможно, меняет положение камеры
Синтаксис: UNIT camsetfovrange NUM

civilian

Описание: Возможно, проверяет принадлежность юнита к гражданским
Синтаксис:

commandline

Описание: Возможно, проверяет, с какими параметрами, указанными в командой строке в ярлыке, запущена игра
Синтаксис:

debuglog

Описание: Возможно, включает запись событий в лог-файл
Синтаксис:

enableenddialog

Описание:
Синтаксис:

formleader

Описание:
Синтаксис:

Light

Описание:
Синтаксис:

Name

Описание:
Синтаксис:

NextWaypoint

Описание:
Синтаксис:

position

Описание: Возможно, отображает координаты юнита
Синтаксис: position UNIT

setfaceanimation

Описание:
Синтаксис: UNIT setfaceanimation STRING

setfuelcargo

Описание:
Синтаксис: UNIT setfuelcargo NUM

setrepaircargo

Описание:
Синтаксис: UNIT setrepaircargo NUM

textlog

Описание:
Синтаксис:

camsetbank | camsetdir | camsetdive | camsetfovrange | civilian | commandline
debuglog | enableenddialog | formleader | Light | Name | NextWaypoint
position | setfaceanimation | setfuelcargo | setrepaircargo | textlog |
<<<Назад <<< <<<Меню>>> >>> Далее>>>


Глава 3. Объекты.

В разделе "Объекты - Основные" указаны названия всех объектов которые можно разместить на карте вручную.
Внимание! Требуется список объектов Resistanse. Всю инфу слать мне на rinzzza@mail.ru

Ниже следует список оружия ОФП.


Объекты

Здесь указаны все объекты, присутствующие в игре. Вы можете использовать команду counttype, чтобы определить тип юнита в миссии. Например, можно проверить, есть ли в группе медик. Если же объект имеет подклассы, то команда counttype отобразит и их.
В большинстве случаев название объекта указывает на его предназначение. Но есть и такие описание которых непонятно, или же просто похожи названия (например, здания). В связи с этим я надеюсь, что вы поможете с описанием объектов и пришлете описания уже известных вам.
Замечание: Чтобы поставить дом, необходимо в редакторе поставить пустой джип, сохранить миссию, открыть вручную файл mission.sqm и в строке vehicle="jeep" вместо jeep вписать название дома.
Цифра в скобках означает, можно ли входить в дом, 0=нет 1=да
Дома Resistanse:

  • Dum01 - 2-х этажный белый дом с 4 квартирами и лестничной площадкой (1)
  • Dum02 - туалет типа: сортир =) (1)
  • Dum03 - завод (1)
  • Dum04 - охранка =) (1)
  • Dum05 - белый трёхкомнатный домик (1)
  • Dum06 - маленькая деревянная вышка (1)
  • Dum07 - желтый дом с двумя комнатами, кухней и ванной (1)
  • Dum08 - радио вышка (1)
  • Dum09 - дом главного героя кампании Resistance =) (1)
  • Dum10 - большой, серый, трёхэтажный дом с часами (1)
  • Dum11 - 4-х этажный белый дом с лестничной площадкой (1)
  • Dum12 - 8-и этажный белый дом с лестничной площадкой (1)
  • Dum13 - леса
  • Dum14 - форт 1
  • Dum15 - форт 2
  • Dum16 - домик на дереве =)
  • Dum17 - ?
  • Vec03 - кубик сена =)
  • FountainNew - Новый фонтан
  • ResHousedomek01 - 3-х этажный белый домик с лестницей (0)
  • ResHousedomek02 - 2-х этажный белый домик с лестницей (0)
  • ResHousedomek03 - 2-х этажный белый домик с лестницей и каким-то бассейном =) (0)
  • ResHousedomek04 - 2-х этажный белый домик с лестницей и перилами (0)
  • ResHousedomek05 - 2-х этажный белый домик с розовыми обоями (1(только 1 этаж))
  • ResHousedum_podloubi - 2-х этажный белый дом с колоннами и маленьким болконом (0)
  • ResHousedum_podloubi02 - по-моему тоже самое (0)
  • ResHousedum_podloubi03 - по-моему тоже самое (0)
  • ResHousedum_podloubi03klaster - почти тоже самое, только побольше (0)
  • ResHousestodola - сарай с кучей сена внутри (1)
  • ResHousestodola2 - тоже самое, только почти нет стен (1)
  • ResHousestodola3 - сарай, но только побольше (0)
  • ResHousekostelin - новая церковь (1)
  • ResHousezluty_statek - дом главного героя кампании Resistance =) (0)
  • ResHousedomek_kovarna - небольшой желтый домик с подвесом (0)
  • ResHousedomek_rosa - 2-х этажный розовый домик с лестницей (0)
  • ResHousedomek_hospoda - небольшой желтый ресторан (0)
  • ResHousedomek_sedy_bez - одноэтажный белый домик (0)
  • ResHousedomek_zluty_bez - одноэтажный желтый домик (0)
  • ResHousedomek_vilka - 2-х этажный красный дом с лестницей (0)
  • ResHousedomek_ruina - одноэтажный желтый домик с проломленной крышей (0)
  • ResHousedomek_podhradi_1 - одноэтажный белый домик с навесом (0)
  • ResHousedum_patr_nizky_prujezd - 2-х этажный белый дом с аркой и балконом (0)
  • ResHousedum_patrovy01prujezd - 3-х этажный белый дом с аркой и 2 балкоами (0)
  • ResHousedum_patrovy01 - 2-х этажный белый дом с балконом (0)
  • ResHousedum_patrovy01c - 3-х этажный белый дом с 2 балконами (0)
  • ResHousedum_patrovy01d - 3-х этажный белый дом с 2 балконами, двери посередине (0)
  • ResHousedum_patrovy02 - 2-х этажный белый дом с "аркой" (0)
  • ResHousedum_patrovy03 - 2-х этажный желтый дом буквой Г (0)
  • ResHousedum_patrovy04 - 2-х этажный белый дом (0)
  • ResHousedum_patrovy05 - 2-х этажный белый дом буквой Г (0)
  • ResHousedum_patrovy06 - 2-х этажный белый дом (0)
  • ResHouseskola - большой 2-х этажный желтый дом (0)
  • ResHouseruiny_obvod_2 - ?
  • ResHouseruiny_obvod_3 - почти разрушенные стены дома (1)
  • ResHouseruiny_obvod_kompl - ?
  • ResHouseruiny_3_dvere - небольшая часть стены с дверным проёмом
  • ResHouseruiny_3_roh - небольшая часть стены, угол
  • ResHouseruiny_3_prasklina - небольшая часть стены с оконным отверстием
  • ResHousehangar_2 - большой ангар (1)
  • ResHousebouda_plech - небольшой ржавый гараж (0)
  • ResHouseaut_zast - автобусная остановка (1)
  • ResHouseinvisible_house - невидимый дом =)
  • ResHousedrevo_hromada - склад дров
  • ResHouseChata6 - небольшой деревянный домик с бочкой (1)
  • ResHouseOrlHot - 2-х этажный желтый дом с двумя болконами (Г) (0)
  • ResHouseZalChata - маленький деревянный дом с лестницей (0)
  • ResHousehasic_zbroj - небольшой красный гараж (1)
  • Houseleseni2x - леса
  • Housepumpa - водяная колонка
Дома Cold war crisis:
  • Barracks - бараки (1)
  • Chapel001 - часовня (0)
  • Church001 - маленькая цековь (0)
  • Church002 - большая церковь с часами (0)
  • Church003 - большая церковь с часами 2 (0)
  • Fountain - фонтан
  • FuelStation - заправочная станция
  • FuelStationNew - заправочная станция
  • FuelStationNew2 - заправочная станция с навесом
  • Hangar_Hall - самолётный ангар (1)
  • Houseryb_domek - маленький белый домик (0)
  • Housemajak - маяк (0)
  • Houseplechbud - будка (0)
  • Housedeutshe_mini - белый дом с разбитыми окнами и выломанными дверями (1)
  • Housebouda2_vnitrek - черный дом с ящиками (1)
  • Housedeutshe - 2-х этажный белый дом (0)
  • Housedum_mesto - 2-х этажный белый дом с красной крышей (0)
  • Housedum_mesto2 - 2-х этажный белый дом с выломонной дверью (1)
  • Housedum_rasovna - дом с дырой в стене (1)
  • Housebouda2 - маленький черный домик (0)
  • Housebouda3 - черный дом с белыми окнами (0)
  • Housedumruina_mini - белый дом с коричневой крышей (0)
  • Housedum_mesto3 - 2-х этажный белый дом с красной крышей и большой дверью (0)
  • Housestodola_open - сарай с кучкой сена внутри (1)
  • Housestatek_kulna - маленький белый домик с красной крышей
  • Housedum_mesto2l - 2-х этажный белый дом с коричневой крышей "Г" (0)
  • Housecihlovej_dum_mini - коричневый дом с заколоченными окнами (1)
  • Housebudova5 - желтый дом блок-пост (0)
  • Housedumruina - 2-х этажный белый дом с коричневой крышей (0)
  • Housedum01 - белый домик с заколоченными окнами (0)
  • Housecihlovej_dum - 2-х этажный, коричневый, кирпичный дом (0)
  • Housecihlovej_dum_in - то же самое только открытый (1)
  • Housebudova1 - желтые бараки (0)
  • Housebudova2 - желтые бараки (0)
  • Housebudova3 - желтые бараки (0)
  • Housebudova4 - желтые бараки (0)
  • Housebudova5 - желтые бараки (0)
  • Housegaraz - белый гараж (0)
  • Housegaraz_bez_tanku - танковый гараж (0)
  • Housegaraz_s_tankem - танковый гараж с танком (0)
  • Houserepair_center - станция ремонта техники (0)
  • Housedum02 - 2-х этажный дом, 1 этаж белый, 2 этаж желтый (0)
  • Houseafdum_mesto2 - сгоревший дом (0)
  • Househospoda_mesto - 2-х этажный дом с баром (1)
  • Housestanice - желтый дом (0)
  • Housedum_m2 - белый дом (0)
  • Housebouda1 - 2-х этажный домик, 2 этаж деревянный (0)
  • Housestodola - большой кирпичный амбар (0)
  • Housestatek_hl_bud - белый дом с красной крышей (0)
  • Househospital - военный госпиталь (0)
  • Housemesto_dum - 2-хэтажный белый дом (0)
  • Housedum_rasovna_in - дом с дырой в стене (1)
  • Househelfenburk - башня замка (1)
  • Housedum_olezlina - 2-х этажный серый дом (0)
  • Houseafdum_mesto3 - сгоревший дом с аркой (0)
  • Houseafhospoda_mesto - сгоревший дом "Г" (0)
  • Housedulni_bs - меленький дом без крыши (0)
  • Housekostel_trosky - разрушенная церковь (1)
  • Houseafdum_mesto2l - сгоревший дом (0)
  • Housedum_mesto_in - дом "Губы" =) (1)
  • Houseafbarabizna - 2-х этажный дом с закрытым балконом (0)
  • Househruzdum - 2-х этажный дом с чердаком (1)
  • Houseammostore2 - танковый гараж, одна секция (0)
  • ViewTower - большая смотровая вышка
  • ViewTower2 - смотровая вышка поменьше
Остальные объекты
All
AllVehicles
Land
Man
Soldier
SoldierLAW
SoldierWB
SoldierEFakeW
SoldierWG
SoldierW
SoldierWMortar
SoldierWMedic
SoldierWNOG
SoldierWCrew
SoldierWPilot
SoldierWMG
SoldierWLAW:
SoldierWAA
SoldierWAT
SoldierWSniper:
SoldierWLAWSniper
SoldierWSaboteur:
SoldierWSaboteurPipe
SoldierWSaboteurDay
SoldierWMiner
OfficerW
OfficerWNight
SoldierWCaptive
SoldierEB
SoldierGFakeE
SoldierWFakeE
SoldierEG
SoldierE
SoldierEMedic
SoldierENOG
SoldierECrew
SoldierEPilot
SoldierEMG
SoldierELAW
SoldierEAT
SoldierEAA
SoldierEMiner
OfficerE
OfficerENight
GeneralE
Angelina
SoldierESniper
SoldierESaboteur
SoldierESaboteurPipe
SoldierGB
SoldierGMedic
SoldierGCrew
SoldierGPilot
SoldierGG
SoldierG
SoldierGNOG
SolderGMG
SoldierGLAW
SoldierGAT
SoldierGAA
OfficerG
OfficerGNight
Civilian
SoldierGFakeC
Civilian2
SoldierGFakeC2
Civilian3
LandVehicle
Car
Jeep
JeepMG
SkodaHelper
SkodaBase
Rapid
RapidY
Skoda
SkodaBlue
SkodaRed
SkodaGreen
Tractor
Truck
Truck5T
Truck5tRich
Truck5tOpen
Truck5tRepair
Truck5tReammo
Truck5tRefuel
Ural
UralRepair
UralReammo
UralRefuel
Scud
TruckV3SG
TruckV3SCivil
TruckV3SGRefuel
TruckV3SGRepair
TruckV3SGReammo
UAZ
PaperCar
GUAZ - Определен только один раз
UAZG
SGUAZG
GJeep
Tank
APC
M113
M113Ambul
M2StaticMG
M2StaticMGE
BMP
BMPAmbul
M1Abrams
M1AbramsAuto
M60 - Определен только один раз
RussianTank
T72
T80
ZSU
T55G
Air
Helicopter
Cobra
Parachute
UH60
UH60MG
Mi24
Mi17
Plane
A10
Cessna
Ship
SmallShip
BoatW
BoatWAuto
BoatE
BigShip
CarrierW
Logic
Static
Fortress
Building
NonStrategic
Fire
Fence
FenceWood
Wire
WireFence
FpLogo
Forest001T1
Forest001T2
Forest002
Forest003
Forest004
HeliH
HeliHEmpty
TargetTraining
TargetGrenade
Strategic
ReammoBox
ReammoBoxWest
ReammoBoxEast
ReammoBoxGuer
HeavyReammoBox
HeavyReammoBoxWest
HeavyReammoBoxEast
HeavyReammoBoxRes
MachineGunBox
FlagCarrier
Danger
Target
TargetE
Camp
Cube
CampEmpty
CampEast
CampEastC
Grave
GraveCross1
GraveCross2
GraveCrossHelmet
ACamp
MASH
Crawling
ExcerciseTrack
ExcerciseTrack2
ExcerciseTrack3
JeepWreck1
JeepWreck2
JeepWreck3
M113Wreck
UralWreck
Body
Fortress1
Fortress2
Thing
Table
Tablemap
Chair
PhoneBase
Camera1
Computer
ChairHangar
ChairX
VideoTable
TablePub
Radio
ChairSmall
ThingEffect
FxExploGround1
FxExploGround2
FxExploArmor1
FxExploArmor2
FxExploArmor3
FxExploArmor4
BarrelHelper
BarrelBase
Barrels
Barrel1
Barrel2
Barrel3
Barrel4
TestObject4
PaletaHelper
PaletaBase
Paleta1
Paleta2
Sound
Owl
Stream
Frog
Frogs
Alarm
BirdSinging
Crickets1
Crickets2
Crickets3
Crickets4
Chicken
Cock
Cow
Crow
Wolf
Dog
BadDog
SorrowDog
LittleDog
Music
MineGeneric
MineMine


Оружие и боеприпасы

Вначале представлена сводная таблица оружия и боеприпасов, которыми вы можете экипировать (и удалать) солдат при помощи команд addweapon и addmagazine (removeweapon и removemagazine). А ниже вы найдете полный список всего оружия и боеприпасов (включая технику).

Сводная таблица
НАТО - Солдаты
Оружие | Боеприпасы | Описание
HK | HK |
M4 | M4 |
M16 | M16 |
M16GrenadeLauncher | GrenadeLauncher |
M60 | M60 |
M21 | M21 |
LAWLauncher | LAWLauncher |
CarlGustavLauncher | CarlGustavLauncher |
AALauncher | AALauncher |
MM1 | MM1Magazine |
Steyr | SteyrMag |
G36a | G36aMag |
XMS | M4 |
Glock | GlockMag |
GlockS | GlockSMag |
UZI | UZIMag |
Beretta | BerettaMag |
Revolver | Revolver |
HKG3 | HKG3Mag |
FAL | FALMag |
НАТО - Техника
Оружие | Боеприпасы | Описание
MaverickLauncher | MaverickLauncher | Ракеты на A10
MachineGun30A10 | MachineGun30A10 | Пушка на A10
HellfireLauncherCobra | HellfireLauncherCobra | ПТУР на AH-1
HellfireLauncherApach | HellfireLauncherApach | Hellfire на AH-64
LaserGuidedBombLauncher | LaserGuidedBombLauncher |
MachineGun30 | MachineGun30 |
ZuniLauncher38 | ZuniLauncher38 |
Browning | Browning |
ZuniLauncherOH | ZuniLauncherOH |
LaserDesignatorOH | LaserDesignatorOH |
VulcanCannon | VulcanCannon |
Cannon25HE | Cannon25HE |
MachineGun7_6 | MachineGun7_6 |
HellfireLauncherM2A2 | MM1Magazine |
СССР
Оружие | Боеприпасы | Описание
AK74SU | AK74 |
AK74 | AK74 |
AK74GrenadeLauncher | GrenadeLauncher |
PK | PK |
SVDDragunov | SVDDragunov |
RPGLauncher | RPGLauncher |
9K32Launcher | 9K32Launcher |
6G30 | 6G30Magazine |
Tokarev | TokarevMag |
Bizon | BizonMag |
Scorpion | ScorpionMag |
СССР - Техника
Оружие | Боеприпасы | Описание
Ch29TLauncher | Ch29TLauncher |
Rocket57x64 | Rocket57x64 |
Cannon30 | Cannon30HE |
HellfireLauncherKamov | HellfireLauncherKamov |
Rocket57x40Kamov | Rocket57x40Kamov |
MachineGun7_6 | MachineGun7_6 |
HellfireLauncherBMP2 | HellfireLauncherBMP2 |
Повстанцы
Оружие | Боеприпасы | Описание
Kozlice | KozliceShell и KozliceBall |
AK47CZ | AK47 |
AK47 | AK47 |
AK47GrenadeLauncher | GrenadeLauncher |
AT4Launcher | AT4Launcher |
CZ75 | CZ75Mag |
HuntingRifle | HuntingRifleMag |
Экипировка
Оружие | Боеприпасы | Описание
StrokeGun | StrokeGun |
StrokeFist | StrokeFist |
Binocular |  |
NVGoggles |  |
Flare | Flare |
FlareRed | FlareRed |
FlareGreen | FlareGreen |
FlareYellow | FlareYellow |
SmokeShell | SmokeShell |
SmokeShellRed | SmokeShellRed |
SmokeShellGreen | SmokeShellGreen |
HandGrenade | HandGrenade |
Pipebomb | Pipebomb |
Timebomb | Timebomb |
Mine | Mine |
Полный список

Gun73 - Shell73, Heat73
Gun105 - Heat105, Shell105
Gun120 - Heat120, Shell120
Gun125 - Heat125, Shell125
MGun
Riffle
M16 - M16
Mortar - Mortar
Single
Burst
M4
Single
FullAuto
Kozlice
Shell - KozliceShell
Ball - KozliceBall
AK47 - AK47
Single
Burst
FullAuto
AK47CZ - AK47
Single
Burst
FullAuto
AK74 - AK74
Single
Burst
FullAuto
AK74SU - AK74
Single
Burst
FullAuto
HK - HK
Single
FullAuto
SniperRiffle
M21 - M21
SVDDragunov - Dragunov
MachineGun7_6
MachineGun7_6Manual
M60 - M60
PK - PK
MachineGun12_7 - Bullet12_7
Browning - Bullet05cal
MachineGun30 - Bullet30
MachineGun30A10
ZsuCannon - Bullet4x23
GrenadeLauncher - Grenade
Flare - Flare, FlareGreen, FlareRed, FlareYellow
Throw - HandGrenade, SmokeShell, SmokeShellRed, SmokeShellGreen
RiffleGrenadeLauncher (Riffle + Grenade Launcher)
Riffle
RiffleMuzzle - Riffle
GrenadeLauncher
GrenadesMuzzle - GrenadeLauncher, Flare, FlareGreen, FlareRed, FlareYellow
M16GrenadeLauncher (M16 + M203)
M16
M16Muzzle - M16
GrenadeLauncher
M203Muzzle - GrenadeLauncher, Flare, FlareGreen, FlareRed, FlareYellow
AK47GrenadeLauncher (AK47 + Grenades)
AK47
AK47 Muzzle - AK47
GrenadeLauncher
GrenadesMuzzle - GrenadeLauncher, Flare, FlareGreen, FlareRed, FlareYellow
AK74GrenadeLauncher (AK74 + Grenades)
AK74
AK74Muzzle - AK74
GrenadeLauncher
GrenadesMuzzle - GrenadeLauncher, Flare, FlareGreen, FlareRed, FlareYellow
Binocular
NVGoggles
Phone
Put - Timebomb, Mine, Pipebomb
Touchoff
LAWLauncher - LAW
RPGLauncher - RPG
AALauncher - AA
AT3Launcher - AT3
HellfireLauncher - Hellfire
HellfireLauncherCobra
HellfireLauncherHind - AT6
MaverickLauncher - Maverick
ZuniLauncher38 - Zuni
Rocket57x64 - Rocket57
Rocket57x192 - Rocket57
CarHorn
TruckHorn
SportCarHorn


Оружие и боеприпасы от Mailman'а и Kegetys'а

Оружие и боеприпасы 2

Здесь представлено оружие и боеприпасы из популярных паков советского/российского оружия производства Mailmain'а и Kegetys'а.

Mailman
название оружия | боеприпасы к нему | пояснение
RFAK74M | RFAK74Mmag | АК74М
RFAK74MGp | RFAK74Mmag | АК74 с подствольником
RFAKSU | RFAK74Mmag | АК74СУ
 | Koster | граната к подствольнику
RFRPK74M | RFRPK74mag | РПК74
RFAKM | RFAKMmag | АКМ
RFAKMN | RFAKMmag | АКМ с оптикой
RFAKMS | RFAKMmag | АКМ для десантуры
RFAKMSgp | RFAKMmag | АКМС с подствольником
RFAKMB | RFAKMBmag | АКМ с глушаком (АКМБ)
RFTishina | RFAKMBmag | Тишина (АКМ с глушаком и бесшумным гранатометом)
 | BS1 | бесшумная граната для Тишины
mAbakan | mAbakanMag | АН94 Абакан
MAbakanGp | mAbakanMag | Абакан с подствольником
MVSS | MVSSmag | ВСС Винторез
MAS | MASmag | АС Вал (подходят магазины от ВСС)
RFSVD | SVDDragunov | СВД
RFSVUa | RFSVUAmag | СВУ-А
Kegetys
KEGak103 | KEGak103Mag | АК103
KEGak107 | KEGak107Mag | АК107
KEGrpk74 | KEGrpk74Mag | РПК74
KEGrpk47 | KEGrpk47Mag | РПК47
KEGmakarov | KEGmakarovMag | ПМ
KEGRPG7Launcher | KEGRPG7LauncherMag | РПГ-7 морковка (планка)
KEGRPG7vLauncher | KEGRPG7vLauncherMag | РПГ-7В морковка (оптика)


Глава 4. Скрипты.

Этот раздел ознакомит вас с основами скриптописания.
По возможности научит что, где, куда и зачем надо писать и вставлять.


Введение: SQS-скрипты

Соответствие обозначений текстовых полей в скрипте и в редакторе:

  • init = поле Initialization
  • expCond = поле Condition
  • expActiv = поле On Activation
  • expDesActiv = поле Deactivation
Если вы не помните или не знаете, для чего предназначено конкретное поле, просто кликните на нем. В отображенной подсказке будет указано предназначение данного поля.

Запомните: текст внутри кавычек, который уже находился внутри других кавычек, обязательно нужно помещать во вторые кавычки! Например:
expActiv="aP globalChat ""Nice work Bravo, they are all dead." "; ""0"" objstatus ""DONE""";
Файлы с расширением .sqs – скрипты, которые исполняются во время миссии. Во время исполненения скрипта игра не останавливается.
Вы можете запустить скрипт из файла mission.sqm, добавив туда команду:
exec ""
где: - список аргументов, передающихся из миссии в скрипт, а - имя скрипта, который вы хотите запустить.
Пример 1: Передадим в скрипт donothing.sqs один аргумент aP (имя какого-то юнита). В строке Initilization напишем:
aP exec "donothing.sqs"
Пример 2: Передадим несколько (массив) аргументов:
[aP,5,true] exec "dosomething.sqs"

Использование переданных в скрипт аргументов

Локальная переменная "_this" зарезервирована для ссылки на список аргументов, переданных в скрипт из файла mission.sqm. Это может быть как один оаргумент, так и массив.
Пример 1: Получение одиночного аргумента и сохранение его в локальной переменной _vehicle:
_vehicle = _this
Пример 2: Получение нескольких аргументов и сохранение их в локальных переменных _vehicle, _id и _alive:
_vehicle = _this select 0
_id = _this select 1
_alive = _this select 2
Список переменных начинается с 0. Поэтому чтобы получить первый аргумент, нужно использовать команду _this select 0.

Работа с переменными

Вы можете создавать свои собственные переменные в миссии. Их значения проверяются в поле Condition и задаются в поле Activation.

Глобальные и локальные переменные

Есть два вида переменные в игре: глобальные и локальные. Локальные переменные начинаются со знака "_", например, "_gvar" (без кавычек). Глобальные переменные доступны во всей миссии, любые поля ввода команд и скрипты могут работать с ними. Локальные же переменные имеют ограниченное действие, влиять на них могут только команды внутри скрипта, в котором они установлены. При каждом запуске скрипта локальные переменные создаются заново. Например, если локальная переменная "_test" установлена в файле testmission.sqm, то ее можно использовать только в рамках данного файла миссии. Если же в этом файле установлена глобальная переменная "test", то ее можно использовать и в файле testscript.sqs (передав ее туда в качестве аргумента), который запускается из миссии testmission.sqm.

Операции со строками

Текстовые строки также используются в скрипте. Можно складывать отдельные строки для получения более длинных строк. Например команда globalchat позволяет говорить игроку. Так вот эту фразу можно динамически генерировать в зависимости от условий:
aP globalchat ("Platoon " + "Bravo " + "is destroyed")
aP globalchat ("Platoon " + currentPlatoonName + " is destroyed")

Одномерные массивы

Вы можете одномерные массивы переменных в игре. Массив имеет несколько элементов одного типа (например, только числа, или только слова) или разных типов (одновременного и числа, и слова).
Пример 1: Определение одномерного массива с одинаковым типом переменных:
favbands = ["Led Zeppelin","Aerosmith","Pink Floyd"];
Пример 2: Определение одномерного массива с различными типами переменных:
ledinfo = ["Led Zeppelin",1.0,false];
Пример 3: Получение третьего элемента из массива ledinfo и сохранение его в переменной stilltouring:
stilltouring = ledinfo select 2
Пример 4: Определение количества элементов в массиве favbands и сохранение результата в переменную numelements:
numelements = count favbands
Пример 5: Отображение всех элементов массива favbands в цикле foreach (aP – имя солдата в миссии, а _x – переменная цикла):
"aP globalchat _x" foreach favbands;
Вы также можете складывать и вычитать элементы различных массивов:
MyArray1 = ["One", "Two"]
MyArray2 = ["Three","For"]
GroupingArray = MyArray1 + MyArray2
Массив GroupingArray будет содержать элементы "One", "Two","Three","For".
MyArray1 = ["One", "Two","Three"]
MyArray2 = ["One"]
GroupingArray = MyArray1 - MyArray2
Массив GroupingArray будет содержать элементы "Two","Three".

Также можно производить операции с переменными элементами массивов. Допустим, массив PlayersArray содержит переменное число игроков:
_Player = _this select 0
?!(_Player in PlayersArray):PlayersArray = PlayersArray + [_Player]
_Player = _this select 0
?(_Player in PlayersArray): PlayersArray - [_Player]
Удалять элементы из массива можно также и таким способом:
MyArray = MyArray - [MyArray select 2]

Многомерные массивы

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

Пример 1: Создание многомерного массива squadInfo:
squadInfo = [["aP","trooper1","trooper2"],5.0,true];
Пример 2: Получение значения третьего саб-элемента первого элемента массива squadInfo (то есть, "trooper2"):
troopername = (ledinfo select 0) select 2

Команды случайного выбора

Команда random позволяет генерировать числа случайным образом. В отличие от массивов она работает с числами начиная с 1! Чтобы она использовала и число 0, необходимо из условия генерации вычитать 0.5 (по какой-то причине вычет 1 приводит к ошибке деления на ноль!).

Пример 1: Генерация случайного числа от 1 до 10:
"random 10"
Пример 2: Выбор случайного элемента из массива mylist и присвоение его переменно nextelement (с учетом 0-го элемента!):
"nextelement = (random (count mylist)) - 0.5;"


Скриптописание

Самое простое.

Внимательно всмотритесь в следующий текст:
_unit = _this select 0
_unittwo = _this select 1

_unit DoWatch _unittwo
_unittwo DoWatch _unit
~2
_unit playmove "effectstandsalute"
_unittwo playmove "effectstandsalute"
 У новичков в "науке" :) скриптописания возникнет вопрос - "ЧТО ЭТО?" Если вы хотя бы чуть-чуть знаете английский, то вы поймёте. Вот как это выглядит в переводе на русский:
_юнит = _это выбирает 0
_юнитдва = _это выбирает 1

_юнит смотрит_на _юнитдва
_юнитдва смотрит_на _юнит
~2 (проходит 2 секунды)
_юнит играет_движение "ОтдатьЧесть"
_юнитдва играет_движение "ОтдатьЧесть"
Это очень простой скрипт - Salute.sqs. Если понять это правильно, то сразу понимаешь о чём речь:
"1 юнит смотрит в сторону 2-го , 2-й смотрит в сторону 1-го и они оба отдают друг другу честь".
Правильно.
Обратите внимание на знак " _ "! Такое встречается в большинстве скриптов. Например, скрипт взрывающихся бочек Немца (В папке "ПРИМЕРЫ"). Там есть такая строка:
_bochka = _this select 0
В тестовой миссии, для правильной активации скрипта нужно в init (инициализации) бочки с ЛЮБЫМ НАЗВАНИЕМ написать:
[unit-Bochka-name] exec "Bum.sqs"
Без этого никуда. А особенно посмотрите порядок вписывания имён. _this select 0 - на первом месте, _this select 1 - на втором и т.д. Потренируйтесь в написании похожих простеньких скриптов и только потом переходите к следующей главе...

Знак ~.

В примере, приведённом выше вы заметили знак ~ (там даже было пояснение) Этот знак (~) обозначает промежуток времени, который разделяет два действия. Зубрить это НЕ надо. Можно привести огромное количество примеров, но мне кажется всё и так понятно. Время можно также уточнять вплоть до не знаю каких чисел. Например:
~0.32466484232884568931
Конечно, такая точность не требуется в скриптах. Самые часто употребляемые числа: это 1 - 20 и 1 - 0.01. Другие числа редко используются в скриптах. Ну ... может быть в видеороликах (?) ... Идём дальше.

Условия.

Очень часто нужно написать условие в скрипте. Вариантов условий очень много.
Условия бывают 2-х видов:
1) ?(условие): эффект
2) @(условие)
Первый вариант используется в том случае, если нужно написать один эффект или часть скрипта (см. ниже) Например:
?(not(alive _Man)):goto "Trevoga"
или ещё:
?(_aP distance _Target < 100):aP sidechat "Ya uzhe blizko!"
Второй вариант используется реже, совершенно противоположен первому. Если нужно написать несколько эффектов или "вживить" в это условие часть скрипта. Иногда используется вместе с первым вариантом.
Бывает также главным условием скрипта, при активации которого скрипт активизируется. Вот пример употребления второго варианта:
#Presledovanie
_enemy move getpos _Player
@(unitready _enemy)
~2
?(alive _Player):goto "Presledovanie"
В этом примере используется оба варианта условия. Получается так:
#Преследование
_враг бежит к _игроку
@(юнит готов "_враг")
~2
?(живой _игрок):активировать "Преследование"
 Это простой скрипт Follow.sqs. Могу также привести ещё пример главного условия, при активации которого скрипт активизируется:
@(_Man distance _AntiInfantryMine < 2)
~0.5
_Bum = "MortarShell" camcreate getpos _AntiInfantryMine
exit
 Всё элементарно, Ватсон! Потренируйтесь в написании скриптов с условиями и переходите к следующей главе под названием...

Эффекты.

Эффекты бывают разные - простые, средние, сложные ... Ну, в общем, это развёрнутая тема, она же одна из самых важных. В качестве эффектов используются действия, т.е. движение юнита, взрывы на земле, в воздухе, перемещение объектов, координаты, появление на карте объектов, сохранение игры, и т.д. и т.п.
Вот возможные движения людей.
Для тех, у кого нет стажа по картостроению пишу пример:
@(_Man in _UAZ)
~0.5
_Man move getpos _T
~10
_UAZ setdammage 0.6
_Man setdammage 0.8
_Man switchmove "UazDriverDying"
Последняя строчка и является действием. Некоторые говорят, что разницы в playmove и switchmove нет. И не правильно говорят. Дело в том, что switchmove - моментальное действие, а playmove - действие с анимацией.
Кстати, строчка _Man move getpos _T командует юниту идти (бежать, лететь, ехать ...) к нужному объекту или координатам.

Эффекты: взрывы.

Как сделать взрыв?
Просто.
chto_hochesh = "imia_vzriva" camcreate [x,y,z]
Можно также сделать взрыв относительно какого-либо объекта, например:
chto_hochesh = "imia_vzriva" camcreate getpos Unit
Тогда взрыв произойдёт на месте определённого юнита (объекта)
Только надо знать название этого взрыва. Не пытайтесь для взрыва писать стандартное название боеприпасов, типа ZsuCannon, Rocket57x192 и т.д Вот, что можно писать на месте "imia_vzriva":

  • Bullet12_7 - крупнокалиберная пуля от танка;
  • Bullet7_6 - малокалиберная пуля от танка;
  • Bullet4x23 - снаряд Шилки;
  • Bullet30 - крупнокалиберный пулемёт от АН-1 или Ми-24;
  • Flare
  • FlareGreen
  • FlareRed
  • FlareYellow - разные осветительные ракеты;
  • MortarShell - мина к миномёту;
  • Shell73
  • Shell120
  • Shell125 - фугасные танковые снаряды (разный калибр);
  • Heat73
  • Heat120
  • Heat125 - обычные танковые снаряды (тоже разный калибр);
  • Grenade - граната к подствольнику
  • Mine - мина
  • PipeBomb - бомба спецназовцев. Не взрывается и не переходит не под чей контроль. Можно использовать как декорацию (сумка возле дороги :) и т.д);
  • TimeBomb - тоже самое, только с взведенным таймером :) 30 секунд;
  • LAW - снаряд LAW;
  • RPG - снаряд РПГ;
  • AT3 - управляемая ракета БМП;
  • AT6 - управляемая ракета Ми-24;
  • Maverick - ракета А-10 "Маверик";
  • Hellfire - TOW от UH-60 (не уверен, но мощность та же);
  • HellfireLauncherCobra - TOW от АН-1;
  • HellfireLauncherApach - TOW от Апачи;
  • Zuni - аналог ракеты 57мм;
  • Rocket57 - неуправляемая ракета 57мм.
Вроде все варианты боеприпасов, которые при взаимодействии с camcreate создаются в определённом месте. Хочу также добавить, что если повесить танковый снаряд в воздухе - получится имитация бомбы, т.е. снаряд полетит в сторону земли. Если эта ракета, то если её повесить в воздухе она полетит. Очень интересная вещь - пули и снаряды 23 или 30 мм. Если повесить эти боеприпасы в воздухе на высоте не более 30 метров - то они полетят в сторону земли , и по виду начнут напоминать лазер :) . Да , ещё один важный момент . Если строка выглядит как та , т.е chto_hochesh = "imia_vzriva" camcreate , то тогда chto_hochesh становится объектом. И с ним можно делать, то же, что и с обыкновенным юнитом: устанавливать азимут (градус), координаты и т.д.
Все боеприпасы класса Flare должны появляться в воздухе, иначе они вообще не появятся.
Если взрыв надо сделать в воздухе, то тогда надо сделать два снаряда/пули/ракеты и т.д. в одном и том же месте, так, чтобы они соприкоснулись (столкнулись). Тогда вы добьетесь желанного эффекта - взрыв произойдёт в воздухе (если только это не пули). Есть ещё вариант создания взрывов, который работает только в скрипте. Например:
"Shell125" camcreate [x,y,z] ; "Shell125" camcreate getpos Unit
Произойдёт то же самое, только это не будет являться объектом. Т.е появится под углом 0 градусов, и этот боеприпас нельзя будет переместить.
Есть ещё один интересный момент: после эффекта взрыва боеприпас перемещается в координаты 0,0,0 . Я в этом не уверен, но если сделать камеру, которая будет следить за полётом снаряда - после взрыва камера окажется далеко в океане. Про взрывы пожалуй всё.

Эффекты: движение/перемещение юнитов.

Есть ещё много разных эффектов.
Например, чтобы как бы сделать WayPoint "MOVE" (Указатель "движение") нужно в скрипте или в On activation ("при активации") триггера писать:
Unit_name move [x,y,z]
Опять же, если надо сделать перемещение объекта относительно другого - надо добавить getpos:
Unit_name move getpos Other_unit
Если надо моментально "телепортировать" юнит куда нибудь, то тогда пишите в скрипте или в On activation ("при активации") триггера:
Unit_name setpos [x, y, z]; Unit_name setpos ( getpos Other_unit)
Есть ещё несколько вариантов перемещений юнитов, которые описаны тут. Там также описываются большинство эффектов.

Эффекты: сохранение игры.

Как сохранить игру скриптом или триггером?
Очень просто: нужно только в скрипте или в On activation ("при активации") триггера писать:
savegame
Употребляйте эту команду по назначению. Не советую её часто использовать в скриптах или миссиях - теряется играбельность . А вот перед "большой дракой" или второй частью миссии его (savegame) как раз лучше использовать, для удобства. Если вы делаете сложно проходимую миссию, то тогда вообще забудьте про команду savegame.

Эффекты: создание юнитов в процессе игры.

Cоздать юнит в процессе игры?
Это немного сложно. Тоже делается через команду camcreate, которая используется при взрывах. Тогда, пишите в скрипте или в On activation ("при активации") триггера:
chto_hochesh = "Nazvanie_unita" camcreate [x,y,z]; chto_hochesh = "Nazvanie_unita" camcreate getpos Other_unit
Например:
US_IFV = "M113" camcreate getpos X_unit
Правда это весьма неудобно тем, что объект не двигается, ко всему относится скептически (даже если в него пущена ракета :)) не имеет ни союзников, ни врагов, в него нельзя влезть (если это танк или машина) и т.д.
В общем, юнит получается бесполезным. Правда, если писать это в On activation ("при активации") триггера, то тогда он перейдёт на ту сторону, которая активировала триггер. AI созданного в процессе игры юнита можно немного расшевелить используя некоторые команды, которые описаны тут.

Эффекты: включение звуков и музыки.

В скрипте пишите:
playmusic "music_name"
Большинство названий музыки - от "track1" до "track16". И ещё "7thlifeless" и "7thdecide". Есть также несколько названий, но я их не помню (хотя они реже употребляются. Для большей информации о музыке зайдите сюда. Чтобы сделать музыку громче или тише - пишите: 10 fademusic 1
Где 10 - это время, за которое громкость повышается/понижается, а 1 - это громкость музыки. Соответственно 0 - выключенный звук, а 1 - полная громкость. Если потом надо вставить другую музыку, то не забывайте опять написать fademusic но с 1 вместо нуля, это включит звук.
Звуки включаются так:
playsound "sound_name"
Звуки чаще всего употребляются с помощью триггеров в меню (нижний правый угол) "эффекты". Там и настраиваются звуки. Названия звуков можно определить так:
Делаете любой триггер и устанавливаете в меню "эффекты" нужный звук. Сохраняете миссию под любым названием. Выходите из игры или нажимаете на клавиатуре Alt+Tab . Открываете блокнот (NotePad) . Ищете свою миссию (*.sqm файл в папке с её названием) и открываете блокнотом. Ищете тот триггер в тексте. И внимательно читаете все его эффекты. Затем копируете (выделяйте , затем нажмите Ctrl+C )название этого звука в playsound "sound_name", то есть вместо sound_name (для вставки нажмите Ctrl+V). Это, пожалуй, всё по звукам.


Глава 5. Камеры.

В этом разделе приведена статья основ управления камерой.
Еще кое что вы можете найти в разделе Hits & Tips (Flashpoint.ru)


Руководство по созданию видео-роликов

Различие видео-роликов, сделанных с помощью редактора и в виде скрипта

Команды для заскриптованных видео-роликов находятся в скрипте, а для созданных в редакторе - в триггерах и waypoint`ах. Вы не можете настолько эффективно управлять камерой в редакторе, насколько это позволяет скрипт, однако их и сложнее создавать.

Основные команды для создания видео-роликов (подробнее смотрите в разделе "Команды"):

  • CamCreate - создать камеру
  • CameraEffect - указать эффекты камеры
  • CamSetPos - указать позицию камеры
  • CamSetTarget - указать цель камеры
  • CamSetRelPos - указать позицию камеры относительно ее цели
  • CamCommit - выполнить изменения
  • CamDestroy - удалить камеру

Создание заскриптованных видео-роликов

Видео-ролики в виде скрипта - это набор последовательных команд, работающих с камерой и имеющих временные интервалы. Используя лишь указанные выше команды можно сделать отличное видео.

Рассмотрим пример небольшого скрипта, в котором камера пролетает справа от игрока в начале миссии. Данный скрипт вызывается из строки Initialization игрока. Также скрипт требует еще один объект (на расстоянии 20 метров от игрока), чтобы сделать видео более зрелищным.

Откройте редактор миссий и создайте миссию на острове Desert с двумя юнитами: игроком и еще каким-нибудь объектом. Назовем этот объект (не игрока) object2. Сохраните миссию под названием testcam.

Нажмите Alt+Tab, с помощью проводника (или другого файлового броузера) зайдите в папку только что созданной миссии (flashpoint\users\yourusername\missions\testcam.Intro). Создайте в ней текстовый файл с именем testcam.sqs. Теперь будем редактировать именно его (для этого можно воспользоваться обычным блокнотом).

В начале создадим камеру с эффектами internal, back в координатах 0,0,0 (помните, что все нижеуказанные строчки кода надо прописывать в файле testcam.sqs):

_cam = "camera" camcreate [0,0,0]
_cam cameraeffect ["internal", "back"]

 Теперь необходимо установить камеру так, чтобы он снимала игрока. Поставим ее на расстоянии 10 метров спереди от игрока, 2 метра влево и 3 вверх (от земли). Команду CamCommit установим в 0, т.к. мы хотим, чтобы данные изменения были произведены немедленно:

; направляем камеру на игрока: 2 м слева, 10 спереди и 3 вверх
_cam camsettarget player
_cam camsetrelpos [-2,10,3]
_cam camcommit 0
 Сделаем выход камеры из затенения, чтобы переход к видео был более приятным и плавным. Данный процесс будет длиться 2 секунды. Если вы хотите, чтобы в это время на экране отображался какой-то текст (как это сделано в данном примере), пропишите его между кавычек " " до "BLACK IN" (то есть вместо слова Hello). Чтобы текста небыло вообще, оставьте кавычки пустыми.

; затенение на 2 секунды
titlecut ["Hello","BLACK IN",2]
; ждем 2 секунды, пока пройдет затенение
~2

Пора придать нашему видео немного движения. Передвинем камеру на 5 метров за игрока, на 2 метра влево и полметра вверх (считая от земли). Данное изменение полностью завершится через 5 секунд. Необходимо выделить время на это (иначе сразу же выполнится другая команда), поэтому мы и ждем 5 секунд (~5 ). Далее после каждой команды управления камерой будет стоять аналогичная команда задержки времени, чтобы дать ей выполниться до конца.

; перемещаем камеру через 5 секунд и делаем паузу еще на 5 секунд
_cam camsetrelpos [-2,-5,0.5]
_cam camcommit 5
~5

Чудненько, теперь изменим цель нашей камеры на другой объект (как вы помните, мы назвали его object2). Кроме этого передвинем камеру относительно этого объекта на 3 вперед, 1 влево и 2 над землей. Передвижение будет длиться 2 секунды.

; выбираем цель object2, передвигаем камеру относительно нее и делаем паузу
_cam camsettarget object2
_cam camsetrelpos [-1,3,2]
_cam camcommit 2
~2
 Близится финал, пора делать прощальную сцену. Опять применим затенение, но теперь это будет уже обратный эффект - из игры в темноту. Не забудем растянуть это действие на пару секунд, чтобы сделать переход плавным. Здесь есть одна хитрость, все эффекты затенения кроме Black Faded НЕ возвращаются к игровому экрану, то есть их можно применять только для начальной и конечной заставки. Но сам Black Faded для возвращения к игре делает паузу в 13 секунд, поэтому необходимо подождать и не давать игроку управление во время затенения. Это и делает команда "~24" (почему то, чтобы обождать 13 секунд, мне пришлось устанавливать значение 24...), после выполнения которой сразу же удаляется камера со всеми эффектами, и управление передается игроку.

; затенение
titlecut ["Bye\nPlease wait 13 seconds","black faded",2]
; ждем завершения затенения
~24

Вот и все, осталось завершить видео, удалить камеру и выйти из скрипта:

_cam cameraeffect ["terminate", "Back"]
camdestroy _cam
exit

Готово, теперь по окончании ролика управление передастся игроку. Кстати в эффекте затенения можно было использовать также "WHITE IN" и "WHITE OUT", если вам больше нравится белый цвет. Сохраните данный скрипт (testcam.sqs) и вернитесь в редактор миссий (Alt+Tab). Дважды кликните на игроке и в его поле Initialization пропишите:

[] exec "testcam.sqs"

Нажмите OK, а потом Preview и наслаждайтесь своим первым фильмом. Поэкспериментируйте со значениями команды setrelpos, а также с другими эффектами. Попробуйте изменить угол обзора с помощью команды camsetfov. Заставьте второй объект двигаться (для этого вначале расставьте на карте waypoint`ы), а в это время пусть игрок наблюдает за ним с помощью команды dowatch. Добавьте в видео музыку посредством команды playmusic (не забудьте плавно завершить ее воспроизведение командой fademusic). Отличного эффекта в стиле матрицы с замедлением времени можно добиться, используя команду setAccTime, а команда skiptime позволит моментально пропустить некоторое количество часов, например, чтобы ускорить приближение вечера. Для сцен с крупным планом игроков не плохо бы поиграться с командой setmimic, дабы изменять выражение лица персонажу. Все это позволит вам лучше разобраться в данном вопросе и научиться делать по настоящему захватывающие видео-ролики.

А под конец, советы от BIStudio:

  • 1. Если хотите нацелить камеру на какой-нибудь юнит и сделать крупный план, достаточно в строке Initialization этого юнита прописать:
    this exec "camera.sqs"
    Скрипт camera.sqs является стандартным для игры и входит в набор скриптов из файла Flashopint/DTA/scripts.pbo.
  • Чтобы получить текущие координаты камеры (и некоторые другие параметры), нажмите клавишу Ctrl. После этого нужная вам информация сохраниться в файле Flashopint/clipboard.txt.
  • Чтобы уничтожить камеру во время игры, достаточно просто нажать клавишу включения оптического прицела (по умолчанию V).

В принципе это все, что вам нужно знать для освоения профессии режиссера. Видео-ролики могут проигрываться в любой момент миссии и делают ее только более интересной и красивой, так что не избегайте их.

Пример скрипта лежит в папке "ПРИМЕРЫ" с названием "Камера".

Создание Интро

Интро - это видео-ролики, проигрывающиеся вначале миссии еще до появления экрана с картой и заданием. Чтобы создать такое видео, надо выбрать пункт Intro в редакторе вместо Mission (меню выбора расположено над кнопкой Preview). При этом с карты пропаду ВСЕ добавленные вами юниты, триггеры и waypoin`ы - так и должно быть. Видео придется делать с нуля.

Возьмем, к примеру, уже созданную ранее миссию testcam. Загрузите ее в редактор и выберите пункт Интро, снова добавьте игрока и второй объект с именем object2. А в поле Initialization игрока опять пропишите:
[] exec "testcam.sqs"
Сохранив полученное, и загрузив эту миссию из меню Single Missions, видео будет проиграно перед миссией. Точно также создаются и финальные заставки, только из меню надо выбрать не Intro, а Outro.


Глава 6. Остальное.

Все что не попало в предыдущие главы =).
Раздел будет регулярно пополнятся, особенно "Часто задаваемые вопросы", все предложения по этому разделу шлите мне на rinzzza@mail.ru


Создание собстенных звуков и музыки

Создание собственных звуков и музыки

Вся музыка и звуки в OFP выполнены в формате .ogg. Звуки хранятся в в папке с миссией в поддиректории /sound, а музыка - в поддиректории /music. Подробнее о формате .ogg (Ogg Vorbis фирмы Xiphophorus software) можно узнать на сайте http://www.vorbis.com/.

Вот небольшое описание:
Ogg Vorbis это бесплатный, сжатый формат аудио-файлов высокого качества (44.1-48.0kHz, 16+ bit, битрейт от 16 до 128 kbps/channel) с открытими исходными комадми.

Чтобы иметь возможность прослушивать аудио-файлы формата .ogg вне игры, вам потребуется WinAmp и плагин для него.

Чтобы иметь возможность создавать ogg-файлы, установите программу dBPowerAMP Music Convertor. Также вам потребуется специальный ogg-кодек для этой программы. dBPowerAMP Music Convertor позволяет конвертировать звуковые файлы из одного формата в другой. Например, можно конвертировать mp3-файл (или wav) в формат .ogg. Для записи wav воспользуйтесь какой-нибудь звуковой программой (например, CoolEdit) и микрофоном.

Конвертирование аудио-файлов в формат .ogg

  1. Запустите dBPowerAMP Music Convertor. Вас попросят указать имя файла для конвертирования. Выберите нужный звуковой файл (mp3, wav, или другой формат) и кликните на кнопке "Open".
  2. В появившемся маленьком окошке будет отображено, в какой формат необходимо произвести конвертирование. Мышкой выберите OggVorbis (эта опция будет доступна, если вы правильно установили ogg-кодек).
  3. В появившемся большом окне необходимо указать параметры конвертирования. Для воспроизведения в OF звуковой файл должен отвечать следующим требованиям:
    • Кодирование должно быть в постояяном бит-рейте (Constant Bit Rate)
    • Бит-рейт может варьироваться, однако 56k подходит больше других, сочетая в себе приемлемое качество и малый размер.
    • Каналы для звуков должны быть установлены в Mono, для музыки можно использовать как Mono, так и Stereo.
    • Частота должна быть равна 44100Hz.
    • Пункт "Preserve ID tags" должен быть выделен галочкой.
    • Пункт "Volume Normalization" не должен быть отмечен.
  4. В этом же окне уазывается директория, куда вы хотите сохранить получившийся файл. После указания пути жмите кнопку "Convert". В появившемся маленьком окошке будет отображаться текущий статус процесса перекодировки. Когда он завершится, жмите кнопку "Finish".
  5. Все, файл готов, можете проверить его в WinAmp.

Добавление звуков в игру

Создайте в папке с вашей миссией директорию /sound/ и перепишитие в нее необходимые звуковые файлы формата .ogg. Чтобы иметь возможность проигрывать звуки, необходимо описать их (создать класс CfgSounds) в файле description.ext. Например, нижеприведенный кусок кода из файла description.ext определяет аудиофайл \sound\scream.ogg:
class CfgSounds
{
  sounds[] =
  {
    scream
  };
  class scream
  {
    // Имя, которое будет отображаться в редакторе при выборе звуков
    name = "Scream";
    // Звуковые файлы. Необходимо указать полное имя. Длаее указывается громкость
    // воспроизведения (db+0) и еще что-то
    sound[] = {"scream.ogg", db+50, 1.0};
    titles[] =
    {
    };
  };
}

В строке "titles[] =" указывается текст, который будет отображаться при воспроизведении звука. Например:

class CfgSounds
{
  sounds[] =
  {
    scream
  };
  class scream
  {
    // Имя, которое будет отображаться в редакторе при выборе звуков
    name "Scream";
    // Звуковые файлы. Необходимо указать полное имя. Длаее указывается громкость
    // воспроизведения (db+0) и еще что-то
    sound[] {"scream.ogg", db+50, 1.0};
    titles[] =
    {
      0, $STRM_scream
    };
  };
}
 Цифра 0 (секунд) указывает, на какое время следует отображать текст на экране, определенный в переменной $STRM_scream. Эта строка определяется в файле stringtable.csv в папке с вашей миссией.
Добавить новые определения звуков можно методом копирования, вставки и редактирования класса.

Пример: Воспроизведение звука scream:
playsound ""scream"" //(именно с двойными кавычками!!!)

Добавление музыки в игру

Создайте в папке с вашей миссией директорию /music/ и перепишитие в нее необходимые звуковые файлы формата .ogg. Чтобы иметь возможность проигрывать музыку, необходимо описать ее (создать класс CfgMusic) в файле description.ext. Например, нижеприведенный кусок кода из файла description.ext определяет аудиотрэк \music\test.ogg:
class CfgMusic
{
  tracks[]=
  {
    // Ссылка на класс
    test
  };
  class test
  {
    // Имя, которое будет отображаться в редакторе при выборе аудиотрэков
    name "Test";
    // Звуковые файлы. Необходимо указать полное имя. Длаее указывается громкость
    // воспроизведения (db+0) и еще что-то
    sound[] {\music\test.ogg, db+50, 1.0};
  };
};
 Добавить новые определения звуков можно методом копирования, вставки и редактирования класса.

Если все проделано верно, трэк будет доступен в редакторе миссий в меню "Trigger" или "Waypoint" после нажатия на кнопку "Effects". Появится подменю "Edit effect", в котором в строчке "Track" можно будет выбрать только что добавленный аудиотрэк (ищите по имени, указанному в файле description.ext в строчке "name").

Пример: Воспроизведение аудиотрэка test:
playMusic ""test"" //(именно с двойными кавычками!!!)
Заглушить проигрываемую музыку:
4 fadeMusic 0.5 //(4 - через сколько секунд произвести операцию, 0.5 - уменьшить звук на половину)
Первая цифра (4) – время (в секундах), через которое необходимо заглушить музыку (0 – музыка сразу же заглушается). Последняя цифра (0.5) – процент от текущего уровня звука, на который стоит заглушить музыку. Если это значение больше 1, тогда звук увеличивается.


Синхронизация речи и движения губ

Файлы Lip предназначены для синхронизации движения губ говорящего с произносимой фразой. Когда персонаж что-то говорит, вы можете озвучить данный текст звуковым файлом формата .ogg. А в дополнение к этому можно также создать файл Lip.
Файлы Lip должны находиться в папке Sound вместе со звуками. Каждый файл lip соответствует определенному звуковому файлу и должны иметь одинаковое имя (но разные расширения, .lip вместо .ogg). Например, если звуковой файл имеет имя lustyswearing.ogg, то файл lip должен называться lustyswearing.lip. Для более подробного ознакомления с процессом озвучивания персонажей обращайтесь к руководству "Использование речи и радио".
Губы персонажа двигаются только если используется команда say! При использовании радио- и чат-команд рот остается закрытым.

Описание формата Lip

Так что же представляет собой этот файл? Ниже приведен пример. Первая строка "frame=0.040" указывает на скорость анимации для губ (в демоверсии всегда 0.040). Остальные строчки состоят из пар [время], [позиция губ]. То есть в каждой строчке указывается, в какой время [время] звукового файла персонаж должен менять позицию губ на [позиция губ]. Значение [time] определяет время в секундах, а значение [mouth position] может меняться в пределах от 0 до 7.
Необходимо выделить достаточно времени для анимации речи, но и уложиться во временные рамки звукового файла! Например, представленный ниже файл lip соответствует звуковому файлу, имеющему длину около 1.5 секунды. Если вы выделите меньше времени в вашем lip файле, то в части фразы рот говорящего будет закрыт.
Заметьте, что в последней строчке в качестве значения [mouth position] стоит -1. Это означает, что анимация должна остановиться. Если вы забудите указать -1 в последней строчке, губы персонажа под конец фразы начнут трястись, создавая впечатление бормотания.
frame = 0.040
0.000, 1
0.040, 3
0.080, 2
0.120, 0
0.160, 1
0.240, 2
0.280, 1
0.360, 0
0.400, 1
0.440, 2
0.480, 3
0.640, 2
0.680, 1
0.760, 2
0.800, 1
0.920, 2
1.000, 5
1.040, 2
1.120, 0
1.320, 3
1.360, 2
1.480, 1
1.560, 0
1.600, -1

При значении 0 губы персонажа плотно сжаты, при 7 - широко открыты. Движок игры позволяет также использовать анимацию для каждой позиции губ, которая добавляется автоматически, и вы не можете это контролировать. Персонаж может улыбаться, злиться и т.д.

Выражение лица

Однако вы можете менять выражение лица персонажа используя команду setmimic, например, чтобы заставить персонаж злиться во время разговора. Подробнее об использовании данной команды смотрите в разделе Команды.


Создание CTF миссии

Вступление

В силу определенной специфики данной миссии мы начнем ее создание с файла description.ext, который должен располагаться в директории с миссией. В первую очередь, создадим папку и файл миссии, сохранив в редакторе пустую карту. После чего, переключившись в Windows, создадим в любом текстовом редакторе файл description.ext и сохраним его в ту же папку с миссией. Ниже вы можете найти полный текст данного файла с описанием его частей.

respawn=3
respawndelay=30

onLoadMission="Capture the Flag Tutorial"

titleParam1 = "Time:";
valuesParam1[] = {10000, 300, 600, 900, 1200, 1500, 1800, 2700, 3600, 7200};
defValueParam1 = 1800;
textsParam1[] = {"Unlimited", "5 min", "10 min", "15 min", "20 min", "25 min",
"30 min", "45 min", "1 hour", "2 hours"};

titleParam2 = "Score to win:";
valuesParam2[] = {10000, 5, 7, 10, 15, 20, 25, 30};
defValueParam2 = 5;
textsParam2[] = {"Unlimited", 5, 7, 10, 15, 20, 25, 30};

class CfgSounds
{
sounds[] =
{ WScore, EScore, WCapture, ECapture
};
class WScore
{
name = "WScore";
sound[] = {"WScore.ogg", 1, 1.0};
titles[] = { };
};
class EScore
{
name = "EScore";
sound[] = {"EScore.ogg", 1, 1.0};
titles[] = { };
};
class WCapture
{
name = "WCapture";
sound[] = {"WCapture.ogg", 10, 1.0};
titles[] = { };
};
}
class ECapture
{
name = "ECapture";
sound[] = {"ECapture.ogg", 10, 1.0};
titles[] = { };
};

В первых двух строчках настраивается характеристики респауна в миссии:
respawn=3
respawndelay=30

Тип респауна 3 обозначает, что игроки будут "рождаться" в предопределенной зоне, а значение respawndelay задает задержку между моментом "смерти" и моментом "рождения" игроков в 30 секунд.

В третьей строке файла указывается текст, который будет отображаться на экране в момент загрузки миссии.
onLoadMission="Capture the Flag Tutorial"

Затем идут "опции хоста", такие как лимиты на время игры и на максимальное количество очков.
titleParam1 = "Time:";
valuesParam1[] = {10000, 300, 600, 900, 1200, 1500, 1800, 2700, 3600, 7200};
defValueParam1 = 1800;
textsParam1[] = {"Unlimited", "5 min", "10 min", "15 min", "20 min", "25 min",
"30 min", "45 min", "1 hour", "2 hours"};

titleParam2 = "Score to win:";
valuesParam2[] = {10000, 5, 7, 10, 15, 20, 25, 30};
defValueParam2 = 5;
textsParam2[] = {"Unlimited", 5, 7, 10, 15, 20, 25, 30};

Последняя часть файла описывает собственные звуковые файлы, используемые в миссии. После того как вы добавите описание ваших звуков в description.txt, они появятся в окне Effects в поле Sounds при создании вами триггера или вэйпоинта.
class CfgSounds
{
{
sounds[] =
{
WScore, EScore, WCapture, ECapture
};
class WScore
{
name = "WScore";
sound[] = {"WScore.ogg", 1, 1.0};
titles[] = { };
};
class EScore
{
name = "EScore";
sound[] = {"EScore.ogg", 1, 1.0};
titles[] = { };
};
class WCapture
{
name = "WCapture";
sound[] = {"WCapture.ogg", 10, 1.0};
titles[] = { };
};
class ECapture
{
name = "ECapture";
sound[] = {"ECapture.ogg", 10, 1.0};
titles[] = { };
};
};

После того как вы набрали весь необходимый текст файла description.txt, сохраните его и закройте ваш текстовый редактор.
Теперь в директории с миссией создайте поддиректорию "Sound" и поместите в нее 4 звуковых файла (WScore.ogg; EScore.ogg; WCapture.ogg; ECapture.ogg). Они прилагаются к данному руководству (см. окончание).

Размещение необходимых объектов

Для создания CTF миссии нам понадобятся следующие вещи:

  • Очевидно, два флага.
  • Инициализирующий триггер.
  • Система накопления очков, которая будет добавлять по 1 очку каждой команде каждый раз, когда данная команда захватывает флаг, а так же будет добавлять очки к рейтингу каждого игрока этой команды.
  • Сеть триггеров, которая будет отслеживать текущий статус обоих флагов.
  • Система триггеров, которая будет автоматически завершать миссию, если будет достигнуто одно из условий - превышение лимита времени игры или максимального количества очков.
  • "Респаун" система, которая будет заставлять игроков рождаться в определенном месте на карте, называемое называть домашней базой.
Флаги:

Начнем с установки двух флагов. На данном этапе создания миссии нам пока нет дела до установки различных объектов и триггеров, по этому вы можете просто установить флаги в том месте карты где открыл ее редактор. Нажмите F1 и установите юнит "Player" со свойствами по умолчанию. Затем установите рядом с плеером юнит флаг (Side: Empty, Class: Objects, Unit: Flag) со следующими свойствами:

Name: FlagW
Initialization (Init): this setflagtexture "usa_vlajka.pac"; this setflagside west
И второй флаг со свойствами:
Name: FlagE
Init: this setflagtexture "rus_vlajka.pac"; this setflagside east
Если вы не добавите в поле Init указанный выше скрипт, то флаг будет выглядеть просто как флагшток.

Инициализирующий триггер

Данный триггер используется для установки всех переменных миссии в их первоначальное значение. Вот его параметры:
Axis a: 0
Axis b: 0
Text: Init
Condition: true
On Activation: WScore=0; EScore=0; ownerW=objnull; ownerE=objnull; WFlagTaken=false; EFlagTaken=false; TimeEnd=0

Система накопления очков

Нам необходимо создать систему триггеров, которая будет автоматически добавлять 1 очко команде, захватившей флаг, и несколько очков (указанных в дебрифинге) к личному рейтингу каждого игрока этой команды. Ниже приведены все триггеры и их свойства, которые нам нужно будет установить в миссии (установим их на карте пока рядом с флагами):

Trigger 1:
Axis a: 0
Axis b: 0
Set to Repeatedly
Text: FlagscoreW
Condition: (ownerE in list FlagSwitchW) and not WflagTaken
On Activation: Flagcarrier=ownerE; ownerE=objNull; FlagE setFlagOwner objNull; WScore = WScore + 1; titletext[format ["One point for NATO\nScore : NATO %1 - Soviet %2", WScore, EScore],"Plain down"]; EFlagTaken=false; "_x addScore 5" forEach units group Flagcarrier
Effects: Sounds: Anonymous: WScore
Trigger 2:
Axis a: 0
Axis b: 0
Set to Repeatedly
Text: FlagscoreE
Condition: (ownerW in list FlagSwitchE) and not EflagTaken
On Activation: Flagcarrier=ownerW; ownerW=objNull; FlagW setFlagOwner objNull; EScore = EScore + 1; titletext[format ["One point for Soviet\nScore : NATO %1 - Soviet %2", WScore, EScore], "Plain down"]; WFlagTaken=false; "_x addScore 5" forEach units group Flagcarrier
Effects: Sounds: Anonymous: EScore
Trigger 3:
Axis a: 0
Axis b: 0
Activation: Radio Alpha
Set to Repeatedly
Text: Score
Condition: this
On Activation: titletext[format ["Score : NATO %1 - Soviet %2", WScore, EScore], "Plain down"]

Статус флагов

Поскольку флаг - это основной объект в CTF миссии, нам необходимо создать систему, которая будет проверять текущее состояние флагов обоих сторон в любой момент времени. Флаг может находится на флагштоке на основной базе, его может нести игрок, он может быть брошен в результате гибели игрока который его нес. Для того, чтобы создать такую систему нам потребуется 3 пары триггеров. Вот список триггеров и их свойств:

Trigger 4 (устанавливается в месте расположения флага НАТО):
Axis a: 10
Axis b: 10
Activation: West
Set to Repeatedly
Text: West Flag Switch
Name: FlagSwitchW
Condition: this

 Trigger 5 (устанавливается в месте расположения флага СССР):
Axis a: 10
Axis b: 10
Activation: East
Set to Repeatedly
Text: East Flag Switch
Name: FlagSwitchE
Condition: this

 Trigger 6 :
Axis a: 0
Axis b: 0
Set to Repeatedly
Text: Returned NATO
Condition: (isnull flagowner flagW) and WflagTaken
On Activation: WFlagTaken = false; titletext["The NATO flag was returned","Plain down"]

 Trigger 7:
Axis a: 0
Axis b: 0
Set to Repeatedly
Text: Returned Soviet
Condition: (isnull flagowner flagE) and EflagTaken
On Activation: EFlagTaken = false; titletext["The Soviet flag was returned","Plain down"]

 Trigger 8:
Axis a: 0
Axis b: 0
Set to Repeatedly
Text: NATO flag taken
Condition: (not isnull flagowner FlagW) and flagowner FlagW != ownerW
On Activation: ownerW = flagowner FlagW; titletext[format ["%1 has the NATO flag", name ownerW], "Plain down"]; WFlagTaken=true

 Trigger 9:
Axis a: 0
Axis b: 0
Set to Repeatedly
Text: Soviet flag taken
Condition: (not isnull flagowner FlagE) and flagowner FlagE != ownerE
On Activation: ownerE = flagowner FlagE; titletext[format ["%1 has the Soviet flag", name ownerE], "Plain down"]; EFlagTaken=true

Триггеры окончания игры

Данные триггеры используются для того, что бы дать возможность хосту закончить игру при превышении каких-либо пределов. Например, оговоренного лимита времени или количества набранных очков. Триггеры проверяют, когда будет превышен лимит времени или по очкам и завершают игру.

Trigger 10:
Axis a: 0
Axis b: 0
Text: Time1
Condition: (Param1<10000) and (Param1>=120) and ((Param1-time)<=120)
On Activation: hint "2 minutes left"

 Trigger 11:
Axis a: 0
Axis b: 0
Text: Time2
Condition: (Param1<10000) and (Param1>=300) and ((Param1-time)<=300)
On Activation: hint "5 minutes left"

 Trigger 12:
Axis a: 0
Axis b: 0
Text: Time3
Condition: (Param1<10000) and (Param1>=600) and ((Param1-time)<=600)
On Activation: hint "10 minutes left"

 Trigger 13:
Axis a: 0
Axis b: 0
Text: Time4
Condition: (Param1<10000) and (Param1>=1200) and ((Param1-time)<=1200)
On Activation: hint "20 minutes left"

 Trigger 14:
Axis a: 0
Axis b: 0
Text: Time5
Condition: (Param1<10000) and (Param1>=1800) and ((Param1-time)<=1800)
On Activation: hint "30 minutes left"

 Trigger 15:
Axis a: 0
Axis b: 0
Text: Time6
Condition: (Param1<10000) and (Param1>=3600) and ((Param1-time)<=3600)
On Activation: hint "1 hour left"

 Trigger 16:
Axis a: 0
Axis b: 0
Type: End#1
Text: Ending after Outro.sqs
Condition: TrueEnd
On Activation: ForceEnd

 Trigger 17:
Axis a: 0
Axis b: 0
Text: Ending when time is up or score is maximum
Condition: (param1<10000 and ((time >= param1) or (TimeEnd >= param1))) or (param2<10000 and ((WScore>=param2) or (EScore>=param2)))
On Activation: TimeEnd=time; publicVariable "TimeEnd"; titletext[format ["Mission over\nFinal score : NATO %1 - Soviet %2", WScore, EScore], "Plain"]; player exec "Outro.sqs"

Респаун

Поскольку в файле descrption.txt мы указали. что игроки будут "рождаться" в предопределенной зоне, то нам необходимо создать данные зоны для обеих команд. Это делается установкой двух маркеров на карте со следующими свойствами:

Marker 1:
Name: Respawn_west
Set to Ellipse
Color: Green
Fill: Grid Diagonal
Axis a: 20
Axis b: 20
 Marker 2:
Name: Respawn_east
Set to Ellipse
Color: Red
Fill: Grid Diagonal
Axis a: 20
Axis b: 20

 Игроки будут оживать в участках карты, помеченных маркерами каждой стороны.

Установка юнитов, вэйпоинтов и объектов

Для того чтобы полностью создать работающую миссию, вам необходимо добавить в нее сколько-нибудь юнитов и вэйпоинтов. В мультиплеерной игре мы часто находим несколько игровых слотов, которые заполняются AI игроками. По этому нам необходимо заставить такие юниты не только сражаться между собой, но и собирать флаги. Используйте следующий список юнитов/объектов с их свойствами. Также переустановите все триггеры и оба флага.
# | Side | Class | Control | Unit | Rank | Skill | Init | Azimut | Name
НАТО:
1 | West | Men | Player | Officer | Colonel | 75% | GroupW = group this | 90 | CommanderWest
2 | West | Men | Playable | Machine gunner | Corporal | 50% | GroupW = group this | 90 | West2
3 | West | Men | Playable | Grenadier | Corporal | 50% | GroupW = group this | 90 | West3
4 | West | Men | Playable | Black Op | Private | 50% | GroupW = group this | 90 | West4
5 | West | Men | Playable | Soldier | Private | 50% | GroupW = group this | 90 | West5
6 | West | Men | Playable | LAW soldier | Lieutenant | 50% | GroupW = group this | 90 | West6
7 | West | Men | Playable | Sniper | Corporal | 50% | GroupW = group this | 90 | West7
СССР:
8 | East | Men | Playable | Officer | Colonel | 75% | GroupE = group this | 0 | CommanderEast
9 | East | Men | Playable | Machine gunner | Corporal | 50% | GroupE = group this | 0 | East2
10 | East | Men | Playable | Grenadier | Corporal | 50% | GroupE = group this | 0 | East3
11 | East | Men | Playable | Sniper | Corporal | 50% | GroupE = group this | 0 | East4
12 | East | Men | Playable | Soldier | Private | 50% | GroupE = group this | 0 | East5
13 | East | Men | Playable | RPG soldier | Lieutenant | 50% | GroupE = group this | 0 | East6
14 | East | Men | Playable | Spetz Natz | Private | 75% | GroupE = group this | 0 | East7

Техника:
# | Side | Class | Unit | Unlocked
15 | Empty | Car | Jeep | Unlocked
16 | Empty | Car | 5t Truck | Unlocked
17 | Empty | Car | UAZ | Unlocked
18 | Empty | Car | Ural | Unlocked

Техника:
# | Side | Class | Unit
19 | Empty | Ammo | Ammo Crates (West)
20 | Empty | Ammo | Ammo Crates (West)
21 | Empty | Ammo | Ammo Crates (West)
22 | Empty | Ammo | Ammo Crates (West)
23 | Empty | Ammo | Ammo Crates (Eest)
24 | Empty | Ammo | Ammo Crates (Eest)
25 | Empty | Ammo | Ammo Crates (Eest)
26 | Empty | Ammo | Ammo Crates (Eest)

Вэйпоинты:

Свойства объектов, которые мы не устанавливаем явно, устанавливаются в значение по умолчанию или в значение "без изменений" (NO CHANGE).

WP1W / WP1E:
WP type: Move
Combat mode: Open fire, Engage at will

WP2W:
WP type: Move
Description: Get flag
Condition: (local this) and this != player and (this distance FlagE < 6)
On Activation: this action ["TAKE FLAG", FlagE]
Set to Show in Cadet mode

WP2E:
WP type: Move
Description: Get flag
Condition: (local this) and this != player and (this distance FlagW < 6)
On Activation: this action ["TAKE FLAG", FlagW]
Set to Show in Cadet mode

WP3W / WP3E:
WP type: Move

WP4W / WP4E:
WP type: Cycle

Написание briefing и overview

Брифинги, которые вы видите в игре - это обычные HTML файлы как, например, интернет страницы. Шаблоны доступны в разделе Утилиты. Откройте шаблон брифинга в броузере если вы не знакомы с языком HTML. Очень важно оставить как есть части файла, которые отображаются не красным цветом и редактировать только те, которые отображаются красным. Откройте текстовый редактор и загрузите в него шаблон для брифинга. Сравните два экрана (броузер и редактор), что бы видеть какую часть текста можно редактировать, а какую нет. После того как вы добавите собственный текст брифинга, сохраните этот файл с именем briefing.html в директории миссии.

Следующий шаг- это подготовка файла overview, который описывает миссию в игре в экране выбора миссии. Просто повторите те же действия, что и с briefing.html, сохранив при этом overview в файле overview.html в директории с миссией.

Дополнительные пояснения:
<a href="marker:FlagWest">NATO flag</a>: вы можете вставить свое имя маркера (одного из миссии) в место слова "FlagWest". "NATO flag" это ссылка, которая будет отображаться в окне брифинга. Она будет ссылаться на ваш маркер на карте.

Добавление небольшого вступления и концовки

Уже сейчас миссия вполне играбельна и готова к экспорту, однако добавим к ней кое-что дополнительное: вступительную и заканчивающую последовательности. Мы хотим, что бы миссия начиналась с постепенного появления из затемнения и заканчивалась плавным приближением к флагу НАТО, пока отображается счет игры. Это можно сделать используя внешние скрипт-файлы. Для некоторых из вас это будут первые шаги в написании собственных скриптов для OFP миссий, однако мы не будем сейчас останавливаться на серьезном их описании, а сделаем это в будущих руководствах по написанию скриптов для OFP.

Для создания заставки мы сделаем текстовый файл init.sqs в директории с миссией, в котором напишем следующую строку: titleCut ["”,"BLACK IN", 3] Это заставит миссию начаться с темного экрана, постепенно просветляющегося в течение 3 секунд. Между первыми двумя символами кавычек мы могли бы добавить строку текста, которая отображалась бы на экране в момент выполнения этой сцены. Однако сейчас мы не будем этого делать. Мы можем не беспокоиться о выполнении данного скрипта, поскольку скрипт с именем init.sqs, если таковой имеется, выполняется всегда при старте миссии.

Концовка будет чуть сложнее поскольку нам понадобиться "создать" камеру, котрую сфокусируем на флаге НАТО. Ниже приведен полный текст, который мы для этого использовали:

enableRadio false

_camera = "camera" camCreate [1300.443237,5970.769540,10]
_camera cameraEffect ["internal","back"]
_camera camSetTarget FlagW
_camera camSetFOV 0.700
_camera camCommit 0
@camCommitted _camera

~5

TrueEnd=true

~2

player cameraEffect ["terminate","back"]
camDestroy _camera
Теперь осталось только сохранить миссию и экспортировать для сетевой игры. Вот что (161 кб) должно было у вас получиться.


Добавление флага

Чтобы добавить свой флаг, надо сделать картинку формата .jpg (не в progressive mode), где длина каждой стороны равна степени 2 (например, высота равна два в квадрате, т.е. 4, а длина - два в кубе, т.е. 8). Скопируйте ее в папку вашей миссии. А в самой миссии в строке инициализации флага пропишите:
this setFlagTexture "name_of_flag.jpg"

где name_of_flag.jpg - имя файла с флагом.


Внешние файлы: Briefing, Overview и Description

Задание и описание можно написать, только выйдя из игры. Они оформляются в виде стандартных html-документов.

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

Создайте в папке, где находится миссия, файлы briefing.html и overview.html. Для начала советую скопировать эти файлы из другой миссии и изменять их (образцы для редактирования лежат в папке "ПРИМЕРЫ", а также обязательно скачайте генератор этих файлов). Также можно добавить картинку: скопируйте какую-нибудь из другой миссии, переименуйте ее в pic.paa и поместите в папку с вашей миссией.

Когда вы полностью завершите и сохраните вашу миссию, она окажется в папке Flashpoint/Users/yourname/Missions, где yourname – это имя вашего игрока в игре (не любого, а под которым вы делали эту миссию). Чтобы поиграть в нее, перепишите ее в папку Flashpoint/Missions (если миссия для сингла), или в Flashpoint/MPMissions (если для сетевой игры). Кстати ни задание, ни описание миссии нельзя проверить в редакторе, единственный способ – это сохранить ее в нужной папке и поиграть.

В описании и задании можно использовать картинки формата .jpg. Пока не знаю как, наверно достаточно поместить ее в папку с миссией, а в файлах briefing.html и overview.html добавить ссылку на картинку.

Описание файла briefing.html

Файл briefing.html – это обычный html-документ, использующийся для описания целей и задач миссии. Он состоит из следующих секций:

Background

Здесь указывается общая информация. Также в эту секцию включена ссылка "file:///briefing.html#Intel" на руководство Not Getting Hit, кликнув на которой, отображаются советы по вышеуказанной тематике.

Not getting hit

Советы, как выжить в бою. В эту секцию включена обратная ссылка "file:///briefing.html#Main" на секцию Background с общей информацией.

Objectives

Здесь указываются цели и задачи миссии. В эту секцию также включены ссылки на различные типы маркеров, определенных при создании миссии в файле missions.sqm. Они имеют вид:
Текст ссылки в задании

Где markername – это имя того маркера, на который ссылается данный текст.

Mission Over

Самой последней секцией является определение страничка отчета о результатах миссии, содержащее текст для различных концовок (например, для успешного выполнения миссии и для провала). Ссылки каждую из концовок выглядят так:

Где X – номер возможного варианта завершения миссии.

Использование начальных целей и результата в миссии

Ниже приводится описание того, как определять цели в миссии и как их достигать. Также приведено несколько советов по использованию результатов и основных и второстепенных задач.

Замысел

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

Определение целей для миссии

Если вы уже определили цели, укажите их на экране заданий миссии (они определяются почти в самом конце файла briefing.html). Начальная цель должна определяться строчкой:
<p><a name = "OBJ_START">You are here</a></p><hr>
Для каждой последующей цели в этот файл необходимо добавить строчку:
<p><a name = "OBJ_0">Kill all snipers</a></p><hr>
Где OBJ_0 определяет данную задачу как цель номер 0. Номера целей начинаются с 0 и увеличиваются на 1 для каждой новой цели. Если вы используете вышеуказанную строчку для определения цели, то на экране с задачами миссии (в блокноте) вы увидите строчку:
Objective 0: Kill all snipers

Выполненные задания

Если задание выполнено, на экране задач его необходимо пометить соответствующим образом. Для этого необходимо использовать команду OBJSTATUS, указываемую в поле Activation меню Triggers или Waypoints. Синтаксис команды следующий:
"objective_number" OBJSTATUS "DONE"
Где objective_number - реальный номер цели.
Например, используя нижеприведенный код, будет проверяться условие смерти всех снайперов и, если оно выполняется, задание 0 будет отмечено как выполненное (будет выделено зеленым кружком).
// Проверка смерти всех снайперов
class item2
{
  position[]={8165,8,3160}; //Не имеет значения
  age="UNKNOWN";
  expCond="count units sniperFodderGrp == ""not alive _x"" count units sniperFodderGrp";
  expActiv="aP globalChat ""Nice work Bravo, they are all dead." "; ""0"" objstatus ""DONE""";
  class Effects
    {
    };
  synchronizations[]={};
};

Завершение миссии, если выполнены все задания

Для каждого задания в нижеприведенной миссии определены переменные (objectiveX, где X – номер цели, однако вы можете использовать любые удобные вам имена). Если какое-то задание выполнено, то соответствующая переменная принимает значение TRUE:
// Проверка смерти всех снайперов
class item2
{
  position[]={8165,8,3160}; // Не имеет значения
  age="UNKNOWN";
  expCond="count units sniperFodderGrp == ""not alive _x"" count units sniperFodderGrp";
  expActiv="aP globalChat ""Nice work Bravo, they are all dead." "; ""0"" objstatus ""DONE""; objective1=true";
  class Effects
    {
    };
  synchronizations[]={};
};
Теперь, чтобы миссия завершилась (если требования выполнены) добавляем следующее:
// Завершение игры
class item5
{
 position[]={5583,8,4065};
  timeoutMin=6;
  timeoutMid=6;
  timeoutMax=6;
  age="UNKNOWN";
  type="END1";
  expCond="objective0 and objective1 and objective2";
  expActiv="aP sideChat ""Objectives all complete""";
  class Effects
    {
    };
  synchronizations[]={};
};
Конец END1 – это первый вариант завершения данной миссии (их может быть несколько). Поля тайм-аутов установлены в 6. Это означает, что миссия завершиться через 6 секунд после выполнения всех задач.

Использование результатов по завершении миссии

Для каждой цели можно добавить определенное количество очков, которое будет получать игра при ее достижении. Например, цель "Убить всех снайперов" в файле briefing.html может быть определена так:
<p><a name = "OBJ_0">Kill all snipers (1000 pts)</a></p><hr>
Хотя можно и не указывать на экране заданий количество получаемых очков.

Наконец, при выполнении задания игроку должны начисляться очки. Для этого используется команд addRating. Ее синтаксис:
"playerID" addRating "score"
Где "playerID" - обозначение игрока, указываемое в текстовом поле в редакторе, а "score" - количество добавляемых очков (оно также может быть и отрицательным числом, чтобы вычитать очки у игрока, например, за убийство своих или гражданских).
Например, вышеупомянутую миссию можно переделать так:
// Проверка смерти всех снайперов
class item2
{
  position[]={8165,8,3160}; // Не имеет значения
  age="UNKNOWN";
  expCond="count units sniperFodderGrp == ""not alive _x"" count units sniperFodderGrp";
  expActiv="aP globalChat ""Nice work Bravo, they are all dead." "; ""0"" objstatus ""DONE""; objective1=true; aP addRating 1000";
  class Effects
    {
    };
  synchronizations[]={};
};
Где aP - обозначение игрока, указываемое в текстовом поле в редакторе.
Последнее, что осталось сделать – определить поля результатов в файле description.ext, отображающие минимальный, средний и максимально возможный рейтинг.

Завершение миссии при провале

Иногда могут потребоваться условия, невыполнение которых приводит к провалу миссии и ее немедленному завершению. Например, можно определить условие: "Все грузовики должны добраться до Le Port". И если этого не произойдет (хотя бы один грузовик уничтожат), миссия должна завершиться с надписью о провале. Для этого потребуется переключатель, проверяющий наличие грузовиков и завершающий миссии при невыполнении вышеуказанного условия.

Основные и второстепенные задачи

Другим интересным моментом является определение основных и второстепенных задач. Основные задачи выполнять обязательно (только выполнив их все, вы сможете успешно завершить миссию), а второстепенные - лишь желательно, получая при этом какой-то бонус (дополнительные очки, техника и прочее).
Для этого в файле briefing.html необходимо определить, какие цели будут основными, а какие второстепенными, используя ключевые слова PRIMARY и SECONDARY.
Например, условие "Уничтожить БМП" может быть определено в файле briefing.html, как основная задача, а условие "Убить всех снайперов", как второстепенная:
<p><a name = "OBJ_0">Primary :Destroy the BMP (1000 pts)</a></p><hr>
<p><a name = "OBJ_1">Secondary : Kill all snipers (500 pts)</a></p><hr>
 Переключатель не будет учитывать условие "Убить всех снайперов" для завершения миссии, т.к. оно второстепенное и его не обязательно выполнять (то есть миссия завершиться сразу же после выполнения основных задач).

Описание файла description.ext

Данный файл также необходимо создавать (в обычном блокноте) самостоятельно в папке с вашей миссией. В нем описываются различные детали, касающиеся миссии и игрока:
// Вид респауна (только юниты типа "playable" могут респауниться!):
//NONE - нет респауна.
//BIRD - игрок после смерти вселяется в чайку (устанавливается по умолчанию).
//INSTANT - игрок после смерти появляется в том же месте, где его убили.
//BASE - игрок после смерти появляется в указанном маркере. Для этого в самой миссии
// создайте маркер вида окружности (ellipse) и назовите его
// "Respawn_East" (для СССР), "Respawn_West" (для НАТО), "Respawn_Guer" (для Повстанцев)
//и "Respawn_Civi" (для Гражданских).
//SIDE - игрок после смерти вселяется в оставшихся в живых солдат его войск, при условии,
// что ими управляет компьютер (если это люди, то игрок вообще не оживает).
//GROUP - игрок после смерти вселяется в оставшихся в живых солдат его отряда, при условии,
// что ими управляет компьютер (если это люди, то игрок вообще не оживает).
respawn="INSTANT"

// Время (в секундах), по истечении которого игрок оживет
respawndelay=5

// Количество очков, которое может заработать игрок (минимальное,
// среднее и максимальное соответственно)
minScore=200
avgScore=2500
maxScore=6000

//Установка доступного времени для звершения игры в меню создания сервера.
//Работает только в сетевой игре.
titleParam1 = "Time:";
//Все возможные значения (в секундах)
valuesParam1[] = {10000, 300, 600, 900, 1200, 1500, 1800, 2700, 3600, 7200};
//Значение по умолчанию
defValueParam1 = 1800;
//Описательный текст для каждого значения
textsParam1[] = {"Unlimited", "5 min", "10 min", "15 min", "20 min", "25 min", "30 min", "45 min", "1 hour", "2 hours"};

//Установка доступного счета для звершения игры в меню создания сервера.
//Работает только в сетевой игре.
titleParam2 = "Score to win:";
//Все возможные значения
valuesParam2[] = {10000, 5, 7, 10, 15, 20, 25, 30};
//Значение по умолчанию
defValueParam2 = 5;
//Описательный текст для каждого значения
textsParam2[] = {"Unlimited", 5, 7, 10, 15, 20, 25, 30};

// Данная надпись появляется на экране задания
onLoadIntro="Hi there"

// Данная надпись появляется на экране перед началом миссии
onLoadMission="Central part of Malden, near the camp in Lolisse"

// Отображать или нет экран результатов после миссии (0 = нет, 1 = да)
debriefing = 0

// Отображать или нет часы в игре (0 = нет, 1 = да)
showWatch = 1

// Отображать или нет компас в игре (0 = нет, 1 = да)
showCompass = 1

// Отображать или нет радио в игре (0 = нет, 1 = да)
showRadio = 1

// Отображать или нет приказы в игре (0 = нет, 1 = да)
showWarrant = 1

// Отображать или нет блокнот (где указывается само задание) в игре (0 = нет, 1 = да)
showNotepad = 1

// Отображать или нет GPS в игре (0 = нет, 1 = да)
showGPS = 1

// Отображать или нет карту в игре (0 = нет, 1 = да)
showMap = 1

// Отображать или нет время перед загрузкой заставки (false = нет, true = да)
onLoadIntroTime = true

// Данный класс позволяет определить уникальность игроков
class CfgIdentities
{
  // Имя данного класса ссылается на ID солдата, указанный в файле missions.sqm
  class Officer
  {
    // Имя, отображающееся в командах
    name = "My Soldier";

    // Лицо
    face = "Face33";

    // Наличие очков. Доступные значения:
    // "none" = без очков
    // "spectacles" = обычные очки
    // "sunglasses" = темные очки
    glasses = "none";

    // Голос. Доступные значения:
    // Adam
    // Dan
    // George
    // Greg
    // John
    // Jonah
    // Marc
    // Patrick
    // Paul
    // Peter
    // Rich
    // Rob
    // Ted
    // Tom
    speaker = "Adam";

    // Тональность голоса
    // 1.0 = обычный
    // < 1.0 = низкий
    // > 1.0 = высокий
    pitch = 1.00;
  };
};

// Дополнительные звуки
class CfgSounds
{
  // Здесь перечисляются все файлы формата .ogg (без расширения .ogg)
  sounds[] =
  {
    S02v01, S02v02
  };
  // Определение отдельного звука. Данное имя будет использоваться в
  // файле mission.sqm (например, say ""S02v01"")
  class S02v01
  {
    // Имя, которое будет отображаться в редакторе при выборе звуков
    name = "S02v01";

    // Звуковые файлы. Необходимо указать полное имя. Длаее указывается громкость
    // воспроизведения (db+10) и еще что-то
    sound[] = {"S02v01.ogg", db+10, 1.0};

    // Текст, который появляется во время воспроизведения данного звука.
    // Ссылается на файл stringtable.csv
    titles[] =
    {
      0, $STRM_S02v01
    };
  };
}

// Определение звуковых эффектов
class CfgSFX
{
  sounds[] = {};
};

// Определение звуков окружающей среды
class CfgEnvSounds
{
  sounds[] = {};
};

// Определение радио-команд
class CfgRadio
{
  // Здесь перечисляются все файлы формата .ogg (без расширения .ogg)
  sounds[] =
  {
    S02r16, S02r17
  };

  // Данное имя будет использоваться в файле mission.sqm (например, sideRadio ""S02r16"")
  class S02r16
  {
    // Имя, которое будет отображаться в редакторе при выборе радио-команд
    name = "S02r16";

    // Звуковые файлы. Необходимо указать полное имя. Далее указывается громкость
    //воспроизведения (db-10) и еще что-то
    sound[] = {"S02r16.ogg", db-10, 1.0};

    // Текст, который появляется во время воспроизведения данного звука.
    // Ссылается на файл stringtable.csv
    title = $STRM_S02r16;
 };
};

// Дополнительные аудиотрэки
class CfgMusic
{
  // Здесь перечисляются все файлы формата .ogg (без расширения .ogg)
  tracks[]=
  {
    01demo, 05demo
  };

  // Данное имя будет использоваться в файле mission.sqm (например, track="01demo")
  class 01demo
  {
    // Имя, которое будет отображаться в редакторе при выборе аудиотрэков
    name = "Demo 01";

    // Звуковые файлы. Необходимо указать полное имя. Далее указывается громкость
    // воспроизведения (db+0) и еще что-то
    sound[] = {\music\01demo.ogg, db+0, 1.0};
  };
};

// Определяет оружие, которое может выбрать игрок (для использования в миссии)
// на экране с заданием. count - количество единиц оружия
class Weapons
{
  class M16
  {
    count = 1;
  };
};

// Определяет боеприпасы (патроны, гранаты, заряды, мины и бомбы), которые может выбрать
// игрок(для использования в миссии) на экране с заданием. count - количество боеприпасов
class Magazines
{
  class M16
  {
    count = 10;
  };
};
<<<Назад <<< <<<Меню>>> >>> Далее>>>


Как собрать отдельные миссии в кампанию

Писать в файле description.ext, потом паковать вместе с миссиями.
Замечание: Для запаковки кампании лучше всего использовать программу
MakePbo, а для распаковки используйте UnPbo.
// Описание говорящих юнитов. Формат точно такое же, что и для сингл миссий
class CfgIdentities
{

}

// Определение наград, которые игрок может получить во время прохождения кампании
class Awards
{
// Определение отдельной награды. Их имена расположены с Award01 и до AwardXX
class Award01
{
// установка рейтинга игрока, по достижении которого он получит данную награду
limit = 12;

// Определяет видео-ролик для проигрывания на каждом из островов, если получена
//награда. Данные миссии должны находиться в поддиректории Missions кампании
abel = XXREWARD1.ABEL;
cain = XXREWARD1.CAIN;
eden = XXREWARD1.EDEN;
};
};

// Определение наказаний
class Penalties
{
// Определение отдельного наказания, начиная с Penalty01 и до PenaltyXX
class Penalty01
{
// установка рейтинга игрока, по достижении которого он получит данное наказание
limit = -1;

// Определяет видео-ролик для проигрывания на каждом из островов, если получено
//наказание. Данные миссии должны находиться в поддиректории Missions кампании
abel = XXPUNISH1.ABEL;
cain = XXPUNISH1.CAIN;
eden = XXPUNISH1.EDEN;
};

// Определение неудачного завершения игры
class PenaltyGameOver
{
// установка рейтинга игрока, по достижении которого кампания завершится
//(плохой финал)
limit = -15;

// Определяет миссию для проигрывания на каждом из островов, если кампания
//провалена. Данные миссии должны находиться в папке Missions кампании
abel = XXGAMEOVER.ABEL;
cain = XXGAMEOVER.CAIN;
eden = XXGAMEOVER.EDEN;
};
};

// установка рейтинга игрока при неудачном завершении игры
exitScore = -15;

// Определение класса миссии по умолчанию. Все миссии наследуют свойства
//данного класса
class MissionDefault
{
lives = -1;

lost = ;
end1 = ;
end2 = ;
end3 = ;
end4 = ;
end5 = ;
end6 = ;
};

// Определение самой кампании
class Campaign
{
// Название кампании, которое отображается в блокноте при выборе
name = "1985 - Cold War Crisis";

// Определяет первую битву (не миссию!) в кампании. Это название класса,
//определенного ниже. Битв может быть несколько
firstBattle = Prologue;

// Определение класса битвы
class Prologue
{
// Название битвы
name = "PROLOGUE";

// Определение заставки, которая будет проиграна перед битвой. Ссылается
//на имя каталога с миссией, находящегося в папке Missions кампании. Можно
//оставить пустым, чтобы не проигрывать видео-ролик
cutscene = x00Grounds.Abel;

// Определяет первую миссию в данной битве. Ссылается на имя класса миссии,
//определенного ниже
firstMission = Training;

// Данные поля указывают на следующую битву, которая будет загружена в
//зависимости от того, как пройдена текущая битка. Если поля end1-end6 или lost
//внутри самой миссий текущей битвы пустые, тогда вместо них будут
//использованы значения, указанные ниже. В завершающих битвах кампании
//данные поля должны быть пустыми
end1 = Part1;
end2 = Part1;
end3 = Part1;
end4 = Part1;
end5 = Part1;
end6 = Part1;
lost = Part1;

// Определят миссию в данной битве
class Training: MissionDefault
{
// Отменяет награды
noAward=true;

// Определение следующую миссию для игры, в зависимости от прохождения
//текущей. Если какое-то из полей пустое, то будет использовано соответствующее
//значение из определения класса битвы
end1 = IansOffice;
end2 = IansOffice;
end3 = IansOffice;
end4 = IansOffice;
end5 = IansOffice;
end6 = IansOffice;
lost = Training;

// Ссылка на поддиректорию миссии в папке Missions кампании, которая будет
//использоваться для текущей миссии
template = 00Training.Abel;
};
};
};

// Определение звуков кампании. Формат точно такой же что и в сингл миссиях.
//Указанные ниже звуки должны находится в файле Flashpoint/DTA/sound.pbo или же
//в папке DtaExt/Sound кампании. Все локализованные диалоги прописаны в файле
//stringtable.csv, находящимся в поддиректории миссии папки Missions кампании
class CfgSounds
{
}

// Определение радио команд кампании. Формат точно такой же что и в сингл
//миссиях. Указанные ниже радио команды должны находится в файле
//Flashpoint/DTA/sound.pbo или же в папке DtaExt/Sound кампании. Все
//локализованные диалоги прописаны в файле stringtable.csv, находящимся в
//поддиректории миссии папки Missions кампании
class CfgRadio
{
};


Использование речи и радио

Вы можете заставить юнит произнести какую-либо фразу.

Во время разговора текст фразы будет отображаться в середине экрана. Для этого необходимо:

  1. В файле stringtable.csv нужно создать строку, определяющую текст фразы, которую по вашему замыслу должен будет произнести персонаж. В строке установите идентификатор фразы (назовем его STRM_hello), текст фразы и комментарий. Поле комментария не используется, но в нем можно указывать имя того, кто произносит речь, чтобы было легче работать в дальнейшем.
  2. Для разговоров вам не нужно определять экземпляр CfgIdentities в файле descriptions.ext.
  3. В файле descriptions.ext нужно создать экземпляр класса CfgSounds для речи, которую вы хотите услышать от персонажа. Дайте классу идентификатор (назовем его VHello). В определении класса необходимо задать имя звука (в demo всегда пустое), используемый .ogg файл со звуком, и идентификаторы текстовых строк, которые вы хотите увидеть, из файла stringtable.csv (например, STRM_hello из шага 1). Более подробное описание файла descriptions.ext лежит здесь. А научиться использовать собственные .ogg файлы можно, прочитав статью Создание собственных звуков и музыки.
  4. Убедитесь, что вы добавили имя .ogg файла в файл descriptions.ext (без расширения .ogg) в массив sounds[], который находится сразу после строки класса CfgSounds.
  5. Дайте говорящему юниту ярлык (tag), используя его поле text (назовем его truckdriver).
  6. Чтобы заставить юнит truckdriver сказать фразу VHello в поле expActiv,expDesActiv или init добавьте:
    truckdriver say ""VHello"";
    где VHello - это имя класса CfgSounds из файла description.ext (см. шаг 3)

Как научить юниты говорить по радио.

Данная процедура аналогична вышеописанной. Но текст фразы при этом будет отображаться в нижней части экрана.

  1. В файле stringtable.csv надо создать строку, определяющую текст произносимой персонажем по радио фразы. В строке вы задаете идентификатор (назовем его STRM_fallback), собственно текст фразы и комментарий. Строка комментария также обычно используется для обозначения автора реплики и не является обязательной.
  2. Для радио-переговоров вам не нужно определять экземпляр класса CfgIdentities в файле descriptions.ext.
  3. В файле descriptions.ext надо будет создать экземпляр класса CfgRadio для реплики, которую вы хотите услышать в исполнении персонажа. Дайте классу уникальный идентификатор (назовем его RFallback). В определении класса вы задаете название звука (в demo всегда пустое), используемый звуковой .ogg файл, и идентификаторы отображаемых текстовых строк из файла stringtable.csv (например, STRM_fallback из шага 1). Для дополнительной информации обратитесь к описанию формата файла descriptions.ext. Для обучения использованию своих собственных .ogg файлов прочитайте статью Как добавлять свои звуки и музыку.
  4. Убедитесь, что вы добавили имя .ogg файла в файл descriptions.ext (без расширения .ogg) в массив sounds[], который находится сразу после строки класса CfgRadio.
  5. В файле missions.sqm вам нужно прописать идентификацию (identity) юнита, который, по вашему мнению, должен произнести желаемую фразу. Для этого добавьте этому юниту в поле init строчку:
    this setidentity ""Officer"";
    где Officer - это имя класса идентификации в файле descriptions.ext (см. шаг 2)
    Кроме того, не забудьте присвоить юниту ярлык с помощью его поля text (назовем его off).
  6. Чтобы юнит off произнес по радио фразу RFallback, обращаясь ко всем своим (юниты с идентичным значением side) в полях expActiv, expDesActiv или init добавьте строчку: off sideRadio ""RFallback"";
    где RFallback - это имя класса CfgRadio в файле description.ext (см. шаг 3).
  7. Чтобы юнит off произнес по радио фразу RFallback, обращаясь ко всем юнитам из своей группы в полях expActiv,expDesActiv или init добавьте строчку:
    off groupRadio ""RFallback"";
    где RFallback - это имя класса CfgRadio в файле description.ext (см. шаг 3).
  8. Чтобы юнит off произнес по радио фразу RFallback, обращаясь ко всем юнитам, находящимся в том же транспортном средстве, что и он сам в полях expActiv,expDesActiv или init добавьте строчку:
    off vehicleRadio ""RFallback"";
    где RFallback - это имя класса CfgRadio в файле description.ext (см. шаг 3).
  9. ы юнит off произнес по радио фразу RFallback, обращаясь ко всем юнитам в игре в полях expActiv,expDesActiv или init добавьте строчку:
    off globalRadio ""RFallback"";
    где RFallback - это имя класса CfgRadio в файле description.ext (см. шаг 3).
Вы можете также включить/выключить радио, прописав в полях expActiv,expDesActiv или init строчку:
EnableRadio true;//включить
EnableRadio false;//выключить

Как научить юниты общаться в чате.

Кроме всего прочего, вы также можете заставить персонаж говорить в чате (то есть чтобы надпись отображалась в нижнем левом углу экрана). В принципе, эта функция предназначена для обмена текстовыми сообщениями в режиме многопользовательской игры, но это работает и с персонажами в однопользовательском режиме. Текст сообщения будет появляться вместе с именем юнита там же, где и радио-сообщения. Достоинство этого способа состоит в том, что вам не нужно предварительно определять строку в файле stringtable.csv! Недостаток - вы не сможете связать фразу со звуковым файлом. Для реализации этой возможности необходимо сделать следующее:

  1. Для чата НЕ нужно определять строку в файле stringtable.csv.
  2. Для чата НЕ нужно определять экземпляр CfgIdentities в файле descriptions.ext.
  3. Для чата НЕ нужно добавлять класс в файл descriptions.ext.
  4. Необходимо в файле missions.sqm прописать идентификацию для юнита, который будет использовать чат. В поле юнита init добавьте строчку:
    this setidentity ""Officer"";
    где Officer - это имя класса identity в файле descriptions.ext (см. шаг 2).
    Не забудьте присвоить юниту ярлык при помощи поля text (назовем его off).
  5. Чтобы юнит off выдал в чат фразу "My advice...drink heavily", адресованную всем своим, в полях expActiv,expDesActiv или init добавьте строчку:
    off sideChat ""My advice...drink heavily"";
  6. Чтобы юнит off произнес в чат реплику "Fat drunk and stupid is no way to go through life son", адресованную всем юнитам в своей группе, в полях expActiv,expDesActiv или init добавьте строчку:
    off groupChat ""Fat drunk and stupid is no way to go through life son"";
  7. Чтобы юнит off сказал всем, кто сидит в ним в одном транспортном средстве, фразу "Premed...prelaw...whats the difference?", в полях expActiv,expDesActiv или init добавьте строчку:
    off vehicleChat ""Premed...prelaw...whats the difference?"";
  8. Чтобы юнит off сообщил всем юнитам, участвующим в игре, следующее "Mind if we dance with your dates?", в полях expActiv,expDesActiv или init добавьте строчку:
    off globalChat ""Mind if we dance with your dates?"";

Для чего нужен класс CfgIdentities?

Он используется для обеспечения уникальности персонажей:

  1. Поле name используется, когда нужен встроенный звук для определения имени говорящего. Например, если для персонажа, отдающего приказ на mount (залезть в транспортное средство), определить имя "Dude", то вы увидите "Dude" вместо обычного имени в появившейся строке с приказом в игре.
  2. Поля face и glasses позволят вам обеспечить определенную уникальность персонажей, заменив заданные изначально лица.
  3. Поля voice и pitch дают вам возможность использовать разные голоса, когда персонаж произносит одну из встроенных фраз (например mount). В демо был единственный голос - "Adam". У поля pitch значение 1.0 задается по умолчанию. Меньше 1.0 - более низкий голос, а больше 1.0 - более высокий.
  4. Чтобы прописать идентификацию персонажа, в файле missions.sqm нужно прописать идентификацию юниту, который вы бы хотели заставить говорить. Для этого в поле юнита init добавьте строку:
    this setidentity ""Driver"";
    где Driver - имя класса CfgIdentity (а не имя в поле name) в файле descriptions.ext.


Добавление лица

Лица можно изменять как в сингле, так и в сетевой игре.

Чтобы добавить лицо в игру, поместите картинку с лицом в папку Flashpoint\Users\yourname\ (где yourname - имя вашего персонажа) и переименуйте её в face.jpg. Далее в самой игре в главном меню нажмите на имя вашего персонажа в левом верхнем углу. В появившемся окне выберите ник нужного вам персонажа и нажмите кнопку Edit. В пункте "Face" выберите значение "custom" и ваше новое лицо тут же отобразится на экране.

Чтобы сделать собственное лицо, создайте файл face.jpg размера 256х256 (или 128х128, или 64х64, это зависит от ваших установок, которые можно проверить, запустив файл opflashpreferences.exe, нажав кнопку Advanced и выбрав закладку Textures - смотрите поле Objects) с цветностью 24 бит и поместите его в папку Flashpoint\Users\yourname\ (где yourname - имя вашего персонажа).

В верхней половине данного файла расположена фотография лица (старайтесь сохранять пропорции :)), в нижней части слева - вид головы сбоку и сзади, с внижней части справа - изображение кистей рук (см. рис1). Как выглядит готовое лицо, показано на рисунке 2:

Самый простой путь изменить себе лицо, это взять рисунок 1 (тот, что по ссылке) и вставить в него свою фотографию. Для этого необходимо урезать фото до размера 128х256 (если используются текстуры размером 256х256, для остальных размеров также первое значение должно быть в 2 раза меньше второго), а при вставке повернуть на 90 градусов (т.е. положить горизонтально).


Команда DROP

Присказка
С помощью команды Drop можно создавать разные эффекты, связанные с дымом, огнём, водой и др. Она создаёт некую огненную или дымовую частицу, которая потом улетает, или падает, или ещё что в зависимости от заданных параметров.

Формат
Drop
[

  1. ShapeName,
  2. AnimationName,
  3. Type,
  4. TimerPeriod,
  5. LifeTime,
  6. Position,
  7. MoveVelocity,
  8. RotationVelocity,
  9. Weight,
  10. Volume,
  11. Rubbing,
  12. Size,
  13. Color,
  14. AnimationPhase,
  15. RandomDirectionPeriod,
  16. RandomDirectionIntensity,
  17. OnTimer,
  18. BeforeDestroy,
  19. Object
]

Описание

:

Глобальные параметры:
  • 1) ShapeName - Название модели, определяющей частицу (путь к *.p3d файлу). Есть, например, "cl_fire", "cl_basic", "cl_water". Последнюю можно использовать для создания воды (скажем, водопада), первую - для создания огня. Ещё есть "kouleSvetlo" для создания эффектов света, фонарей, осветительных/сигнальных ракет. (Модели можно посмотреть в папке DTA, файл Data3D.pbo).
  • 2) AnimationName - Название анимации частицы.
  • 3) Type Тип частицы ("Billboard" - плоский или "SpaceObject" - объёмный). Плоский тип - тип для частиц, одинаковых со всех сторон (например, огонь, вода). А объёмный - это для танков, вертолётов и т.п.
  • 4) TimerPeriod - Период таймера частицы, с. Каждые несколько секунд, указанных в этом параметре, запускается скрипт, указанный в параметре OnTimer. Например, если указать TimerPeriod = 2, а OnTimer = "script.sqs", то скрипт "script.sqs" будет запускаться каждые 2 секунды.
  • 5) LifeTime - Время жизни частицы, с. Время в течение которой частица витает в воздухе, при завершении которого она исчезает (растворяется).

Физические параметры:
  • 6) Position - Координаты [x, y, z]. Координаты, откуда стартует частица. Это могут быть просто координаты точки (x,y,z) или, если указать в 19-ом параметре объект, то в этом параметре будут указаны координаты относительно этого объекта (также как при команде camSetRelPos для камер, например). 7) MoveVelocity - Вектор [x, y, z] (относительно объекта) направления частицы.
    Направление и скорость движения частицы. Например, [0,10,10] направит частицу вперёд и вверх со скоростью 10 м/с, или [0,100,0] прямо вперёд по горизонтали с большой скоростью 100 м/с. (Когда будете экспериментировать, не забывайте про другие параметры, способные изменить направление, например rubbing или weight).
    Кстати, про координаты относительно объекта. Допустим, есть солдат. Относительно его ось x направлена от лица вперёд, ось y направлена вправо, z - вверх. Так, например, [0,100,0] отправит частицу от лица солдата не на север, а вперёд, как если бы он эту частицу выплюнул. Или [0,-100,5] отправит частицу из затылка назад и вверх.
  • 8) RotationVelocity - Частота вращения частицы, в Гц.
  • 9) Weight - Масса частицы (в кг).
  • 10) Volume - Объём частицы (в кубических метрах).
    Если вы знаете физику, то вам известно, что вес и объём связаны формулой плотность=масса/объём. Если плотность частицы будет равна плотности воздуха, то она зависнет в воздухе. В OFP плотность воздуха равна 1.275 кг/(м в кубе), тогда если объём равен 1, то, если массу указать 1.275, частица зависнет в воздухе. Плотность прямо пропорциональна массе, поэтому если указать массу > 1.275, то частица начнёт падать (плотность частицы больше плотности воздуха), в обратном случае - взлетать.
  • 11) Rubbing - Взаимодействие окружающей среды и частицы. 0 - нет взаимодействия. Например, зависимость частицы от направления ветра. Дунет ветер и понесёт по своему направлению частицу с силой, пропорциональной этому параметру. И не удивляйтесь потом, почему MoveVelocity кривит.

Render-параметры:
Обратите внимание, что все эти параметры установлены как массивы, чтобы показать их развитие. Т.е., если вы устанавливаете размер [1,2], тогда вначале жизни размер частицы будет 1 и в конце жизни её размер увеличится до 2.
  • 12) Size - Размер частицы (м). 13) Color - Цвет частицы (RGBA).
    "RGB" - это палитра цветов RGB, а "A" - это альфа-свойство, т.е. уровень прозрачности. 0 - полностью прозрачен, 1 - непрозрачен. Например, в фотошопе RGB [255,0,0] означает ярко-красный цвет (можете проверить в фотошопе, палитра color (Window=>Color), покрутите ползунки). В команде drop это же будет выглядеть так: [1,0,0,1]. 1 означает макимальную насыщенность данного цвета. Все значения от 0 до 1.
  • 14) AnimationPhase - Фаза анимации. 0 - начало анимации, 1 - конец. Если написать [0,1] то частица будет анимировать (т.е. клубиться как дымок).

Параметры случайных чисел:
  • 15) RandomDirectionPeriod - Период изменения вектора скорости, с. 16) RandomDirectionIntensity- Величина случайного изменения.
    Например, параметры RandomDirectionPeriod = 1 и RandomDirectionIntensity = 2 будут каждую секунду изменять скорость и направление частицы на 2 м/с.
  • 17) OnTimer - Имя запускаемого скрипта (см. параметр TimerPeriod). При этом коордиаты частицы будут передаваться в скрипт через переменную _this. Т.е. в запускаемом скрипте переменная _this будет массивом, содержащим координаты частицы во время вызова этого скрипта. Например, Hint Format ["%1, %2, %3", (_this select 0), (_this select 1), (_this select 2)] в запускемом скрипте выведет подсказку с координатами частицы.
  • 18) BeforeDestroy - Имя скрипта, вызываемого сразу после уничтожения частицы (в конце жизни). Здесь точно как в параметре OnTimer координаты места смерти частицы будут передаваться в скрипт через переменную _this.
  • 19) Object - Объект, связанный с частицей (пишите без кавычек), см. параметр Position.

Примерчики

Эту команду используют кондоры или вити-4000/5000/6000... в их скриптах "ядрёный взрыв" или "бочки" (помните такие?). На самом деле ничего здесь сложного нет.
Вот пример. Допустим, нам нужен синий костёр. Ставим костёр, обзываем его, скажем "koster". В ините пишем [] exec "drop.sqs". И создаём файл "drop.sqs". В нём и пишем:

~2
drop ["cl_basic", "", "Billboard", 1, 0.5, getpos koster, [0, 0, (random 10)+2], 1, 1, 1, 2, [0.5,2], [[0,0,1,1]], [0,1], 1, 1, "", "", ""]

Итак,
1 - cl_basic,
2 - пропускаем, ставим "",
3 - пишем "Billboard",
4 - ставим 1,
5 - время жизни, нам хватит 0.5 секунд,
6 - ставим координаты костра (и верно, из него же дымить должно),
7 - направление частиц, здесь мы ставим x=0, y=0, высоту ставим (random 10)+2 (+2 - чтоб снизу не толстело); если бы ветер не дул (rubbing=0), то был бы вертикальный столб с переменной высотой.
8 - частоту ставим 1 Гц,
9 - ставим 1 (меньше 1.275, см. параметр volume). Дым должен улетать в небо,
10 - ну объём ставим 1,
11 - зависимость от окр. среды, т.е. от ветра, для костра это конечно надо, поэтому ставим 2,
12 - размер; у нас написано [0.5,2]; это значит, что у самого низа размер будет 0.5, а вверху уже растолстеет до 2, как и подобает дыму от костра; можно написать и так [0.5, 2, 0.5] тогда получится что-то типа клизмочки и т.д.,
13 - цвет [[0,0,1,1]] - синий; думаю я вам толком объяснил про цвета в команде drop; здесь тоже как с размером можно писать и так: [ [0,0,1,1], [1,0,0,1] ], тогда в начале жизни частица будет синей, а к концу плавно перейдёт в красный цвет, это можно применять для создания огня, снизу оранжевый, а к верху черный (в смысле дым),
14 - давайте поставим [0,1],
15, 16 - поставим по 1. Скрипты нам вызывать не надо, поэтому 17, 18 - "". Объект тоже не нужен - "".
Короче, через 2 сек. после запуска вылетит из костра наша синяя частица. Вроде всё. Ан нет, не всё. Нам же костёр нужен, а не дымок одиночный. Поэтому засунем всё это в цикл:

#loop
drop ["cl_basic", "", "Billboard", 1, 0.5, getpos koster, [0, 0, (random 10)+2], 1, 1, 1, 2, [0.5,2], [[0,0,1,1]], [0,1], 1, 1, "", "", ""]
~0.01
goto "loop"

И тогда у нас костёр задымится синим дымом.

Или вот ещё:

_Target=_this select 0
@(getDammage _Target != 0)
_bumba="Heat73" camCreate getpos _Target
_i=6
#loop
?(_i < 0.1): goto "next"
? ((getpos _Target select 2) < 1): _i=_i-0.03
drop ["cl_fire", "", "Billboard", 1, 0.7, getpos _Target, [sin(random 360)*2,cos(random 360)*2,random _i/2], 1, 1, 3, 2, [_i/5,_i], [[1,1,1,1], [0.5,0.5,0.5,1], [0.1,0.1,0.1,1]], [1,1,1], 0.5, 0.5, "", "", ""]
~0.00001
goto "loop"
#next
exit

Бочку ставите, в ините пишите [this] exec "bochka.sqs". Ну и файл bochka.sqs с этим скритом делаем, запускаем и стреляем по бочке.

Вот так, используя эту команду, можно делать и костры, и горящую технику, и бочки угорелые, ну и ядерные взрывы конечно. Так что поэкспериментируйте побольше с этой командой. Всё вроде.

<<<Назад <<< <<<Меню>>> >>> Далее>>>


Распростроненные вопросы

  1. Как заставить AI кинуть гранату:
     UNIT fire ["Throw", "GRENADE"],
    где UNIT - название солдата, GRENADE - название гранаты или флареса.
    Направление броска пока не определено.
  2. Как посадить солдата на вышку (точно также можно ставить любой предмет поверх другого, прописывается в строке Initialization):
    this setPos [getPos this select 0, getPos this select 1, (getPos this select 2) + 0.5]; this setunitpos "UP";
    Что это означает? Мы устанавливаем координаты для юнита. Пеервые два берутся такими же (getPos this select 0, getPos this select 1), они выбираются методом select из массива трехмерных координат [X,Y,Z]. А третья координата (высота) подстраивается под высоту вышки (в данном случае 0.5), ее можно менять в зависимости от объекта. Ну а в конце мы просим солдата встать (setunitpos "UP").
  3. Как сделать так, чтобы триггер срабатывал на определенный юнит.
    Легко, и причем даже без скрипта. Создайтке Триггер. Создайте Юнит. Кликните на пункте меню GROUPS и перетащите курсор от Триггера к Юниту. Вот и все!
  4. Как заставить реагировать Триггер на несколько юнитов.
    Рассмотрим пример для двух юнитов:
    Вместо указания ключевого слова this в поле условия Триггера пропишите следующее:
    TRIGGER distance UNIT1 <50 AND TRIGGER distance UNIT2 <50
    где TRIGGER - имя Триггера, а UNIT1 и UNIT2 - имена юнитов. 50 - это расстояние, на котором будет срабатывать Триггер.
  5. заставить танк выстрелить.
    Пример с М60:
    _tank fire ["gun105", "shell105", shell105"]
    Примечания:
    • нужно около 15 секунд для первого выстрела, но далее будет стрелять быстрее;
    • в группе будет стрелять только лидер;
    • используйте для тестирования команду "dowatch"(dotarget) для прицеливания танка.
  6. Как сделать взрыв?
    Просто.
    snar = "tipsnarada" camcreate [x,y,z] или
    snar = "tipsnarada" camcreate getpos Unit     (можно геймложик или еще что угодно)
    Типы снарядов
    • Bullet12_7 - крупнокалиберная пуля от танка;
    • Bullet7_6 - малокалиберная пуля от танка;
    • Bullet4x23 - снаряд Шилки;
    • Bullet30 - крупнокалиберный пулемёт от АН-1 или Ми-24;
    • Flare
    • FlareGreen
    • FlareRed
    • FlareYellow - разные осветительные ракеты;
    • MortarShell - мина к миномёту;
    • Shell73
    • Shell120
    • Shell125 - фугасные танковые снаряды (разный калибр);
    • Heat73
    • Heat120
    • Heat125 - обычные танковые снаряды (тоже разный калибр);
    • Grenade - граната к подствольнику
    • RPG - граната РПГ;
    • AT3 - управляемая ракета БМП;
    • AT6 - управляемая ракета Ми-24;
    • Maverick - ракета А-10 "Маверик»;
    • Hellfire - TOW от UH-60 (не уверен, но мощность та же);
    • HellfireLauncherCobra - TOW от АН-1;
    • HellfireLauncherApach - TOW от Апачи;
    • Zuni - аналог ракеты 57мм;
    • Rocket57 - неуправляемая ракета 57мм.
    Но еще легче сделать так:
    Ставишь триггер (х=0,у=0),называешь допустим VZRIV и в ините прописываешь:
    ex = "mortarshell" camcreate getpos VZRIV ; ex setPos [getPos ex select 0, getPos ex select 1, (getPos ex select 2) +20];
    +20 - это высота на которой изначально будет находится снаряд.
  7. Как бить кулаком?
    Удары кулаком и прикладом:
    action ["STROKEFIST"]
    action ["STROKEGUN"]
    В инициализации солдата,например НАТО,пишете
    init="this removemagazines ""M16""; this removemagazines ""HandGrenade""; this addweapon ""StrokeGun""; this addmagazine ""StrokeGun""; this addweapon ""StrokeFist""; this addmagazine ""StrokeFist""";
    И заместо стрельбы бьёт прикладом или кулаком.

Присылайте свои вопросы мне, буду здесь размещать

<<<Назад <<< <<<Меню>>> >>> Далее>>>


Hits & Tips (Flashpoint.ru) - Меню

Hits & Tips (Flashpoint.ru)
EventHandler
Groups. Присваивание имен группам.
А как сделать активацию тригера на высоте вы знаете
А что если PC слабенький ? Всё дёргается ...
Активная карта
Активный текст
Активный текст - часть II.
Активный текст - часть III (EDIT)
Активный текст - часть IV (COMBO)
Бегущий человек
Бессмертные солдаты
Блокирование Waypoints
Бомбардировщик вызывали?
Вариант РАЗГОНА миссий или "Рожаем на лету"
Вертолёт вызывали ?
Воин Камикадзе... Вах Вах!!! :)
Воинское приветствие! Как это делается?
Всех посадим, высадим и СНИМЕМ
Вы мечтали покататься на танках?
Где брать музыку из ОФП в формате МР3 (на холяву)
Добавление домов и построек на карту БЕЗ ГЕМОРРОЯ.
Дополнительные флаги
Другой вариант получения точных координат камеры и её цели
Если врача убили...
Искусственное падение тел
Использование команды list&thislist
Как быстро узнать какое у юнита оружие
Как включать и выключать лампы
Как вставлять снайперский прицел в ролик
Как выбросить группу из вертолета
Как делать красивое ОВЕРВЬЮ со скриншотом.
Как делать разговор по рации?
Как добавить анимированные 3d объекты часть I
Как добавить анимированные 3d объекты часть II
Как добавить русского генерала
Как заставить AI расстрелять пленного
Как заставить солдата бросить дымовую шашку
Как заставить солдата занять позицию у окна в доме
Как заставить юнит посадить самолёт!
Как заставить юнита сдать задним ходом
Как изменить радиус видимости ?
Как изменить угол поворота объекта не заходя в его опции?
Как менять погоду и туман в процессе игры с помощью триггера
Как менять текстуры в файле p3d
Как отвести стингер или стрелу от вертолётов
Как очищать ammo crates от амуниции и добавлять туда свое оружие и боеприпасы
Как перевести сразу всю группу в опр. behaviour
Как поместить всю группу в технику
Как поместить всю группу в технику 2ч.
Как поместить всю группу в технику 3ч.
Как проверить кол-во солдат в группе.
Как распаковать "чужую" миссию?
Как сделать Respawn
Как сделать "взрывоопасную" технику...
Как сделать себе педерастичный голос и лицо из Резиста без едиторапдейта
Как сделать пленного
Как сделать сигнальную ракету
Как сделать телепортацию
Как сделать часовую бомбу?
Как сделать чтоб AI запускал СКАД.
Как сделать чтоб спецназ закладывал бомбы и потом их взрывал.
Как сделать чтобы на базе поднялась тревога
Как сделать хитрую растяжку
Как сделать, чтобы в радиосообщениях заменить "Альфы" и "Бравы" на "Ромашки"
Как сделать, чтобы камера сопровождала движущийся объект
Как создавать взрывы
Как создать бомбу срабатывающая на скорости...
Как создать дымовую завесу у танка
Как создать зависящие от игрока вейпоинты.
Как создать противопехотную мину ?
Как удалять объекты в игре?
Как узнать высоту юнита
Камеры в массы или получаем координаты.
Короткая лекция по созданию скриптов!!!
Карта, компас...
Летайте вертолётами АЭРОФЛОТА
На море или на суше
Обычные ошибки при распаковке файлов PBO.
Окончание-Создание мультиков через скрипты(для новичков)
Определение Координат
Основы: как организовать конвой
Основы: как организовать погрузку и высадку
Перенос оружия из одной миссии в другую в кампании
Перехват световых гранат
Подробное описание : редактирование *.sqm файлов
Полный туториал по брифингам
Почти оптимальный скрипт
Прикрепление флага к юнитам
Продолжение темы Создание мультиков через скрипты.
Птичка
Разговор по телефону
Ролики. Урок1
Самый лёгкий принцип посадки группы в технику
Самый простой способ - как сделать чтобы солдаты стреляли по гражданским!
Скрипт для отладки миссий
Скрипты, активирующиеся в зависимости от их имени
Скрипты: Запретная зона
Скрытые задания
Создание брифингов
Создание мультиков через скрипты(для новичков)
Создание своего аддона с музыкой
Техника с небес
Транспортировка грузов по воздуху.
Удары кулаком и прикладом
Хотите взрыв?
Хотите управлять 32 юнитами?
Хто не знает как копировать юниты вам сюда!


Благодарности

Хочу поблагодарить следующих людей:

Cyrix
DAN965
deniz
Filin
Gunslinger
Intelligent
nero12
psyKKe
targa
Кондор

А так же за раздел Hits & Tips:

[NFG]Ripper
[RN] Deer
^MORBID^
=CA= SniPro
Alero
Alex_from_MD
AlexandrIII
Armor
bang bang
Cobra
Darkick
deniz
DimaG
Eagle Sam
Elite_Solder
eXorsits
Fan_OFP
FideL
Finsternis
FlashDemon
Goodspeed
LIS
LOGIN
Maniac.sqs
MiXeR
nero12
Prorok
rnd
S_I_D
Shadow Dragon
Upminder
Vitja3000
Werst
Wolk
Барс
Гвардеец.
Гробовщик
Иосиф Сталин
Кислый
Кондор
Михалычъ
Немец

Отдельное спасибо:
Darin'у за то что все время подталкивал меня и терпеливо ждал выхода туториала =)

Если кого забыл извиняйте.


История

Версия 1.80
Добавлено 19 команд редактора для версии игры 1.80 и выше
Изменен стиль и оформление
Обновлен раздел Drop Tutorial
Исправлено несколько нерабочих ссылок и ошибок

Версия 1.71
Добавлен поиск по всему тексту

Версия 1.7
Исправлено несколько нерабочих ссылок
Исправлено несколько ошибок

Версия 1.6
Добавлено содержание
Добавлен поиск по ключевым словам
Добавлен список оружия боеприпасов из паков Mailman'а и Kegetys'а

Версия 1.5
Теперь руководство одним файлом (*.CHM)
Добавлено:
Женская анимация ходьбы и стоек из Resistance
Техническая анимация из Resistance т.е. перезарядка пистолетов и т.д.
Несколько команд действий, а так же их описание и примеры
Drop tutorial (огонь, вода, дым) как это сделать
В список лиц добавлены лица Resistance
23 темы раздела Hits & Tips (Flashpoint.ru)
Поставил обои =)
Сделал ссылки "назад" в конце страниц Hits & Tips (Flashpoint.ru)
Исправлено:
Ошибки в описании команд: setcaptive (SetFlagOwner), switchlight и Land

Версия 1.2
Добавлено:
Раздел "Как собрать отдельные миссии в кампанию"
Раздел "Использование речи и радио"
Раздел "Добавление лица"
Описание анимаций FX и Effect
Дополнительные ссылки в конце страниц.
Исправлены некоторые нерабочие ссылки.

Версия 1.0
Добавлено:
Добавлено в список 34 оружия Резистэнс
91 команда редактора, из них 26 Резистэнсовские
Описание построек ColdWarCrisis
Список построек Резистэнс с описанием
5 тем раздела Hits & Tips (Flashpoint.ru)
Первоначальная версия 0.9 бета
Made by Rinza


Drop tutorial (огонь, вода, дым) как это сделать

Reference
Drop [ShapeName, AnimationName, Type, TimerPeriod, LifeTime, Position, MoveVelocity, RotationVelocity, Weight, Volume, Rubbing, Size, Color, AnimationPhase, RandomDirectionPeriod, RandomDirectionIntensity, OnTimer, BeforeDestroy, Object]

Variable
ShapeName | Этот параметр определяет модель которая будет использоваться для эффектов | String (Путь к p3d-файлу)
Type | Тип частицы плоский или нет ("Billboard" или "SpaceObject") | String (Тип частицы)
AnimationName | Определяет используемую анимацию для частицы | String (имя класса анимации)
TimerPeriod | Период времени | Любое значение
LifeTime | Время, после которого частица будет разрушена | Любое значение
Position | Расположение частицы относительно карты, или объекта если он указан | Вектор(3-Array)
MoveVelocity | Вектор скорости частицы | Вектор(3-Array)
RotationVelocity | Скорость вращения частицы в секунду | Любое значение
Weight | Масса частицы | Любое значение
Volume | Обьём | Любое значение
Rubbing | Трение | Любое значение
Size | Размер частицы | Array
Color | Цвет частицы | Array
AnimationPhase | Фаза анимации | Array
RandomDirectionPeriod | Параметр устанавливает случайные отклонения для частицы | Любое значение
RandomDirectionIntensity | Интенсивность отклонения частицы | Любое значение
OnTimer | Скрипт, который будет выполнен после того как частица будет создана командой | String (Путь к скрипту)
BeforeDestroy | Скрипт, который будет выполнен после того как частица будет разрушена командой LifeTime | String (Путь к скрипту)
Object | Объект от которого берутся координаты | Object

Первое это ShapeName

У вас наверное сразу возник вопрос какие модели могут использоваться для частиц, любые! Но они будут выглядеть не как знакомый вам объект а, его плоская проекция, вот наиболее подходящие модели для частиц но вы можете экспериментировать с ними.
cl_water.p3d: хорошо подходит для частиц дыма
cl_fire.p3d: хорошо подходит для частиц огня
cl_water.p3d: хорошо подходит для частиц воды
И ещё одна подходящая моделька - kouleSvetlo.p3d хорошо подходит для частиц типа сигнальных ракет.
Если вы используете cl_water.p3d или cl_water.p3d для мелких частиц то разницы практически не видно, но у больших частиц различия очень большие. Вы не должны писать расширения файла.
Пример: ShapeName = "cl_basic"

Второе это Type

Если вы используете частицу в качестве простого эффекта воды или огня то ставим тип частицы "Billboards", плоские частицы это частицы при просмотре которых они с любой стороны одинаковые (плоские)!
Есть и не плоские объекты типа там Т-80 или калашик, т.е при просмотре с различных углов они не одинаковой формы, вот к таким объектам чтоб они не были плоские и надо применять параметр "SpaceObject"!
Пример: Type = "Billboard"

Третье это AnimationName

Вы можете оживлять p3d-модели при помощи програм Maya (Plugin) или (OFPAnim). Вызывается анимация из класса прописанного в config.cpp.
Теперь про фазу анимации если 0 то начало если 1 конец
Пример: AnimationPhase = [0, 1, 0]
В этом примере три параметра фазы как их понять. Допустим время жизни этой частицы равно 2 сек. Тогда в начале её жизни начальная фаза анимации 0 (дверь закрыта). Через сеунду (середина времени жизни) фаза1 (дверь открыта), через 2 секунды (конец времени жизни частицы) снова фаза 0 и (дверь закрыта).

Четвёртое это Timer Event

Частицы имеют так называемый таймер, вызываемый периодически. После того, как этот таймер был вызван, указанный скрипт выполнен.
Но остерегайтесь: ни когда не ставьте значение 0 это приведёт к постоянному зацикливанию и как следствие вылет из игры. Пример показывает что скрипт “spark.sqs” будет выполнен каждые 1.5 секунд
TimerPeriod = 1.5
OnTimer = "spark.sqs"
Естественно мы должны определить срок службы жизни большее чем 2 секунды, или наш таймер не будет вызываться!

Пятое это Origin and velocity

Есть два способа определения координат это относительно кары и относительно объекта, если вы решили что вам не нужно делать частицы относительно кокого-то объекта то просто не пишете имя объекта, и частица будет создана относительно координат карты, Слиже вам нужно чтоб частица появлялась строго на месте объекта то пишите имя объекта а смещение относительно его ставите на ноль вот так Position = [0,0,0]; Object = "MyT80".
Этот пример: показывает что частица строится не относительно объекта а, относительно координатной плоскости, и появится в точке с координатами X=1000 и Y=1000 и Z=50 (высота над землёй)
Object = ""
Position = [1000, 1000, 50]
Этот пример: показывает что частица строится относительно объекта под именем MyT80 по осям с координатами X=0 и Y=0 и Z=1 (высота над объектом)
Object = "MyT80"
Position = [0, 0, 1]
Это параметр вектора скорости, то есть куда будет лететь частица в примере показано что частица будет лететь со скорость 10 м\с на север.
MoveVelocity = [0, 10, 0]

Шестое это направление

Координатная сетка
Чтобы дать предмету определенный угол надо этот угол указать примерно так MyT80 SetDir 0, а проверить вот как (getDir MyT80 == 0) при этом объект будет повёрнут на север.
MyT80 SetDir 45, а проверить вот как (getDir MyT80 == 45) при этом объект будет повёрнут на Северо-Восток.

Седьмое это Mass, Volume, Friction

Много раз, при написании подобных скриптов вы наверное себя спрашивали, как сделать чтобы частица летела не вниз а, вверх?
Так вот, в OFP это рассчитывается как из курса физики вы наверное знаете формулу:
p = m /V
P-Плотность воздуха
m-Масса объекта
V-0бьем объекта
В книжке по физике я нашел, что плотность для сухого воздуха состовляет 1,29 кг/м. В OFP это - 1,275 кг/м, так, если ваша частица имеет объем 1 м тогда, Вы нуждаетесь в массе 1.275 (1,275 кг), частица будет висеть в воздухе. Если масса большая чем 1.275, то частица падает, - если масса меньшая, частица будет лететь в небо.
Weight = 1.275
volume = 1

Rubbing это сила трения давайте её не брать во внимание

Rubbing = 0

Восьмое это Цвет и размер

В OFP при создании частиц можно использовать сразу несколько цветов тоесть сначала частица красная, потом зелёная и затем синия.
color = [ [1, 0, 0, 1], [0, 1, 0, 1], [0, 0, 1, 1] ]
Цвет формируется по типу RGBA т.е [красный, зелёный, синий, прозрачность] [RED, GREEN, BLUE, ALPHA]
Все цвета смешиваются а, ALPHA- это прозрачность если 1 то не прозрачно 0 полностью прозрачно (невидима)
Тот же принцип и с размером в примере ниже показано что сначало частица создаётся с размером 0.3 м затем меняется на 7 м и затем 0!
size = [0.3, 7, 0]

Девятоё это случайные отклонения

Некоторые частицы в Реальной Жизни, подобно искрам, перемещаются очень не равномерно, так что есть возможность брать те случайные скоростные изменения во внимание!
Есть два параметра, один в течение какого периода это будет происходить и один для нтенсивности изменений.
RandomDirectionPeriod = 1
RandomDirectionIntensity = 0.5
В этом случае наша частица изменяет скорость каждую секунду (RandomDirectionPeriod = 1) и скоростной вектор с различием 0,5 м/с.

И десятое это открытие скриптов после уничтожения частицы

Наша частица живёт 5 сек и уничтожается
LifeTime = 5
Через 5 сек после того как частица будет уничтожена будет вызван скрипт и координаты этой частицы автоматически будут переданы в скрипт myScript.sqs вы получаете координаты с _this переменной в своём скрипте пример _pos = _this
beforeDestroy = "myScript.sqs"


А что если PC слабенький ? Всё дёргается ...

Команда Setviewdistance уменьшает радиус видимости и тем самым облегчает машине обработку информации текстур и т.д Но миссию качать будут разные люди . У кого процессор отличный, а у кого старенький. Тогда люди с крутыми PC, если вписать setviewdistance 500 не смогут довольствоваться миссией .

Чтобы помочь и тем и тем предлагаю следующие :
В скрипте пишете :
?(benchmark <1000):setviewdistance 400
Можно также вместо значка "<" писать ">"


Активный текст

Всем привет.
Наверное, каждый, кто играл в кампанию Resistance, видел, что теперь появилась возможность выводить текст различными цветами и шрифтами.
Однако не так то просто было разобраться в дебрях файла Description.ext

Этой статьей я начинаю новый раздел под названием «Активный текст»
Начну с самого простого, постепенно добавляя новые возможности.
Итак, приступим.

Первое, что надо сделать, это в папке с вашей миссией создать файл Description.ext и открыть его в блокноте.
Что бы Вам было легче разбираться, все замечания я пишу после //
Что знаком с языком программирования C, тот вполне быстро освоится и может попускать некоторые комментарии.
А для остальных объясняю.
Строка:
#define CT_STATIC 0
Присваивает константе CT_STATIC значение 0, это нужно для того, чтобы было легче разобраться в программе.
Так, например, если бы было написано:
ВЫРАВНИВАНИЕ = 32: то непонятно, толи по центру, толи по краю и т.п.
А когда:
ВЫРАВНИВАНИЕ = ST_LEFT; сразу все ясно.

Итак
// Определяем управляющий тип.
// в данном случае СТАТИК, поскольку будем выводить СТАТИЧЕСКИЙ текст.
#define CT_STATIC 0

// «Форматирование текста»
#define ST_HPOS 0x0F
#define ST_LEFT 0 // По левому краю
#define ST_RIGHT 1 // По правому краю
#define ST_CENTER 2 // По центру
#define ST_UP 3 // Текст по вертикали (Сверху - вниз)
#define ST_DOWN 4 // Текст по вертикали (Снизу – вверх)
#define ST_VCENTER 5

#define ST_TYPE 0xF0
#define ST_SINGLE 0 // Просто текст
#define ST_MULTI 16 // Текст в рамке
#define ST_TITLE_BAR 32
#define ST_PICTURE 48
#define ST_FRAME 64
#define ST_BACKGROUND 80
#define ST_GROUP_BOX 96
#define ST_GROUP_BOX2 112
#define ST_HUD_BACKGROUND 128
#define ST_TILE_PICTURE 144
#define ST_WITH_RECT 160
#define ST_LINE 176

#define ST_SHADOW 256
#define ST_NO_RECT 512

#define ST_TITLE ST_TITLE_BAR + ST_CENTER

// Перечислим ВСЕ имеющиеся у нас шрифты:
#define FontS "tahomaB24"
#define FontM "tahomaB36"
#define FontHTML "courierNewB64"
#define FontHTMLBold "courierNewB64"
#define FontMAP "courierNewB64"
#define FontMAIN "SteelfishB64"
#define FontMAINCZ "SteelfishB64CE"
#define FontTITLE "SteelfishB128"
#define FontTITLEHalf "SteelfishB64"
#define FontBOOK "garamond64"
#define FontNOTES "AudreysHandI48"

// А так же примерный шаблон для цвета букв
// Значения в квадратных скобках можно варьировать от 0 до 1
#define TextColor 0.08, 0.08, 0.12

// Определим класс, который будет содержать основные установки шрифтов.
class RscText
{
  type = CT_STATIC; // Тип СТАТИК, значит исп. Для вывода текста.
  idc = -1; // Идентификатор, используется только для элементов управления
  // Кнопки, Выпадающие списки и т.п.
  style = ST_LEFT; // Выравнивание по левому краю.
  h = 0.04; // Точно не знаю.
  colorBackground[] = {0, 0, 0, 0}; // Цвет фона.
  colorText[] = {TextColor, 0.75}; // Цвет текста,
  font = FontS; // Шрифт
  sizeEx = 0.02; //
};
// Вот в принципе и все, дальше нам остается только определить, что же выводить на экран и по каким координатам
// Этот класс отвечает за вывод текста.
class RscTitles
{
  // Создаем собственный подкласс.
  class MainText
  {
    name = "ColorText"; // Для того чтобы наш класс был виден в редакторе, // присваиваем ему имя
    duration = 8; // Это задержка, в течении которой будет отображаться текст.
    idd = -1; // Всегда -1
    movingEnable = false; // Нельзя перемещать

    controls[]= // А вот здесь перечисляем все классы, которые будут выводить текст
    {
      name1,
      name2
    };

    // Этот класс Name1 наследует RscText, то есть ему автоматически добавляются все поля класса
    // RscText, так что вам, к примеру, не нужно каждый раз писать цвет текста.
    class Name1 : RscText
    {
      // Задаем стиль текста, как вы видите, стили можно комбинировать.
      // смело экспериментируйте !
      style = ST_MULTI + ST_CENTER + ST_NO_RECT + ST_SHADOW;
      lineSpacing = 2.0;
      text = “Shadow Dragon”; // Это собственно строка
      x = 0.05; // Координаты для вывода текста
      y = 0.1; // означают пропорции экрана.
      w = 0.95; // так X = 0 – левый край.
      h = 0.3; // X = 1 – правый край.
      colorText[] = {0.75, 0.75, 1.0, 1}; // Цвет текста
      font = FontNOTES; // Шрифт
      sizeEx = 0.5 * 0.05; // ?
      size = 2; // Размер букв
    };

    class Name2 : RscText
    {
      style = ST_MULTI + ST_CENTER + ST_NO_RECT + ST_SHADOW;
      lineSpacing = 1.0;
      text = $STR_CREDITS01; // Вы можете задавать строки, находящиеся в файле stringtable.csv
      x = 0.05; y = 0.70; w = 0.95; h = 0.3;
      colorText[] = {1, 0, 0, 1};
      font = FontHTML;
      sizeEx = 0.5 * 0.05;
      size = 1.8;
    };
  };
};

 ВСЕ

Для того чтобы использовать наш текст, можно:

  1. Используя триггер. Создайте триггер, Щелкните на кнопку Effect (Эффекты), далее в разделе Titles выберите тип (Type) эффекта – Resource (Ресурсы), а в поле Text(текст) найдите строку CoolText. Вот и все.
  2. А это можно использовать в скрипте: cutRsc ["MainText", "PLAIN"]
Если у вас возникли вопросы, задавайте их в «Основном» разделе форума или пишите мне: ShadowDragon_Fil@mail.ru

Вот гораздо более простое описание дискрипшена для создания текста.

#define FontHTML "courierNewB64"
#define CT_STATIC 0
#define ST_LEFT 0
#define ST_CENTER 2
#define ST_MULTI 16
#define ST_SHADOW 256
#define ST_NO_RECT 512

class RscText
{
  type = CT_STATIC;
  idc = -1;
  style = ST_LEFT;
  h = 0.04;
  colorBackground[] = {0, 0, 0, 0};
  colorText[] = {1, 0, 1, 0};
  font = FontHTML;
  size = 1;
};

class RscTitles
{
  class r01 // Это класс. Назовите его как хотите.
  {
    name = "r01"; // Это название будет отображаться в триггере в закладке эффектах (назовите как хотите).
    duration = 6;
    idd = -1;
    movingEnable = false;

    controls[]=
    {
      name1
    };

    class name1 : RscText
    {
      style = ST_MULTI + ST_CENTER + ST_NO_RECT + ST_SHADOW;
      lineSpacing = 1.0;
      text = Ваш текст сдесь;
      x = 0.05; y = 0.50; w = 0.95; h = 0.3;
      colorText[] = {1, 0, 0, 1};
      font = FontHTML;
      sizeEx = 1.5 * 0.1;
      size = 1.5;
    };
  };
};
<<<Назад <<<


Активный текст - часть II.

Тема нашего сегодняшнего поста – обеспечить обратную связь с приложением.
Для этого добавим кнопку “BUTTON” и ссылку, т.е. текст, произведя щелчок по которому выполнится какое то действие.

// Определяем используемые шрифты
#define FontM "tahomaB36"
#define FontNOTES "AudreysHandI48"
#define FontHTML "CourierNewB64"

// Стиль вывода текста
#define ST_LEFT 0
#define ST_RIGHT 1
#define ST_CENTER 2
#define ST_FRAME 64

// Используемые элементы. Статические типы
#define CT_STATIC 0 // Простой текст
#define CT_BUTTON 1 // Кнопка
#define CT_ACTIVETEXT 11 //Ссылка

// Определение класса текста
class RscText
{
  type = CT_STATIC;
  idc = -1;
  style = ST_LEFT;
  colorBackground[] = {0, 0, 0, 0};
  colorText[] = {1, 1, 1, 1};
  font = FontM;
  sizeEx = 0.04;
};

// Определяем класс ссылки
class RscActiveText
{
  type = CT_ACTIVETEXT;// Тип - активный текст
  idc = -1; // Поскольку это своего рода шаблон, то
  // идентификатор = -1.
  style = ST_LEFT; // Выравнивание по левому краю
  color[] = {1, 1, 1, 1}; // Цвет - белый.
  colorActive[] = {1, 0, 0, 1}; // Цвет при выделении - красный.
  font = FontM;
  sizeEx = 0.04;
  soundEnter[] = {"ui\ui_over", 0.2, 1}; // Это звук щелчка
  soundPush[] = {, 0.2, 1};
  soundClick[] = {"ui\ui_ok", 0.2, 1};
  soundEscape[] = {"ui\ui_cc", 0.2, 1};
  default = false; // Не выделяется по умолчанию (Всегда FALSE)
};

// Определение класса Кнопка
classRscButton
{
  type = CT_BUTTON;// Тип - кнопка стандартная.
  idc = -1; // Параметры теже.
  style = ST_CENTER;
  colorText[] = {0, 0, 0, 1};
  font = FontHTML;// Шрифт, которым будет отображена надпись
  sizeEx = 0.025;
  soundPush[] = {, 0.2, 1};
  soundClick[] = {"ui\ui_ok", 0.2, 1};
  soundEscape[] = {"ui\ui_cc", 0.2, 1};
  default = false;
};

// Пользовательский класс, здесь мы создаем СВОИ классы.
class DlgTutorial
{
  idd = -1;
  movingEnable = true; // Диалог можно перемещать.

  // Классы "фона"
  controlsBackground[] =
  {
    MY_BACKGROUND,
    MY_FRAME
  };

  // Строим прямоугольник в центре экрана
  class MY_BACKGROUND: RscText
  {
    colorBackground[] = {0.5, 0.5, 1, 1}; // Цвет - пурпурный !
    // можно и стандартный - серый 0.4, 0.4, 0.4, 0.75
    text = ; // Без надписи
    x = 0.2; // Смещение по горизонтали.
    y = 0.1; // Смещение по вертикали.
    w = 0.6; // Ширина.
    h = 0.7; //Высота.
  };

  // Этот класс выведет текст "Мой диалог" в рамке
  class MY_FRAME: RscText
  {
    idc = 103;
    style = ST_FRAME; // Стиль - текст в рамке
    colorText[] = {0, 0, 0, 1}; // Цвет - черный
    text = "Мой диалог"; // Надпись
    font = FontHTML; // Тип шрифта
    sizeEx = 0.025;
    x = 0.22;
    y = 0.12;
    w = 0.56;
    h = 0.66;
  };

  objects[] = { };

  // Описываем классы, отвечающие за создание ссылки и кнопки.
  controls[] =
  {
    HELLO_WORLD,
    CLICK_ME,
    EXIT_BUTTON
  };

  // Просто текст в центре рамки - Hello Word
  class HELLO_WORLD : RscText
  {
    idc = 100; // Присваиваем идентификатор - 100
    style = ST_CENTER; // Центрируем текст
    x = 0.4;
    y = 0.45;
    w = 0.2;
    h = 0.1;
    text = "Hello World!";
    font = FontNOTES;
    size = 1;
  };

  // А вот и наша ссылка с надписью "Кликни по мне !"
  class CLICK_ME : RscActiveText
  {
    idc = 101; // Поскольку ей присвоено действие, то задаем идентификатор
    style = ST_CENTER;
    x = 0.35;
    y = 0.65;
    w = 0.3;
    h = 0.05;
    text = "Кликни по мне !";
    // Меняем текст, для этого элементу управления с идентификатором 100, присваиваем текст
    // Привет!
    action = "ctrlSetText [100, ""Привет!""]";
    default = true; // ссылка выделена по умолчанию
  };

  // Это кнопка.
  class EXIT_BUTTON : RscButton
  {
    idc = 102;
    x = 0.35;
    y = 0.25;
    w = 0.3; // Длина кнопки
    h = 0.04; // высота кнопки
    text = "Закрыть диалоговое окно";
    action = "closeDialog 0"; // Закрываем окно.
  };
};

 Что бы вызвать окно диалога пропишите следующую команду в скрипте.
ok = createDialog "DlgTutorial"
<<<Назад <<<


Активный текст - часть III (EDIT)

А теперь давайте еще разнообразим наше диалоговое окно, добавив поле для ввода текста (EDIT).
Для этого к файлу description.ext из предыдущего раздела добавим вот что, выделено красным цветом.

//------------------ Description.ext ----------------------
// Определение шрифтов
#define FontM "tahomaB36"
#define FontHTML "CourierNewB64"

// Форматирование текста
#define ST_LEFT 0
#define ST_RIGHT 1
#define ST_CENTER 2
#define ST_FRAME 64

// Тип
#define CT_STATIC 0
#define CT_BUTTON 1
#define CT_EDIT 2
#define CT_ACTIVETEXT 11

// Определение класса для вывода обычного текста.
class RscText
{
  type = CT_STATIC;
  idc = -1;
  style = ST_LEFT;
  colorBackground[] = {0, 0, 0, 0};
  colorText[] = {1, 1, 1, 1};
  font = FontM;
  sizeEx = 0.04;
};

// Определение класса для создания активного текста (ссылок)
class RscActiveText
{
  type = CT_ACTIVETEXT;
  idc = -1;
  style = ST_LEFT;
  color[] = {1, 1, 1, 1};
  colorActive[] = {1, 0, 0, 1};
  font = FontM;
  sizeEx = 0.04;
  soundEnter[] = {"ui\ui_over", 0.2, 1};
  soundPush[] = {, 0.2, 1};
  soundClick[] = {"ui\ui_ok", 0.2, 1};
  soundEscape[] = {"ui\ui_cc", 0.2, 1};
  default = false;
};

// Определение класса для создания кнопок
class RscButton
{
  type = CT_BUTTON;
  idc = -1;
  style = ST_CENTER;
  colorText[] = {0, 0, 0, 1};
  font = FontHTML;
  sizeEx = 0.025;
  soundPush[] = {, 0.2, 1};
  soundClick[] = {"ui\ui_ok", 0.2, 1};
  soundEscape[] = {"ui\ui_cc", 0.2, 1};
  default = false;
};

// А вот и наш класс - создания полей для ввода текста
class RscEdit
{
  type = CT_EDIT; // Тип - поле для ввода текста.
  idc = -1; // Сдесь идентификатор всегда -1
  style = ST_LEFT; // По умолчанию выравнивание по левому краю
  font = FontHTML; // Шрифт по умолчанию "CourierNewB64"
  sizeEx = 0.02;
  colorText[] = {0, 0, 0, 1}; // Цвет текста - черный
  colorSelection[] = {0.5, 0.5, 0.5, 1}; // Цвет выделенного текста - серый.
  autocomplete = False;
  text = ;
};

// Это наш класс
class DlgDialog
{
  idd = -1;
  movingEnable = True;
  // Созданные нами классы, статичны
  controlsBackground[] =
  {
    MY_BACKGROUND,
    MY_FRAME
  };

  // Задний фон - прямоугольник серого цвета
  class MY_BACKGROUND : RscText
  {
    colorBackground[] = {0.4, 0.4, 0.4, 0.75};
    text = ;
    x = 0.2;
    y = 0.1;
    w = 0.6;
    h = 0.7;
  };

  // Статический текст, заголовок диалогового окна - Main Dialog
  class MY_FRAME : RscText
  {
    idc = 103;
    style = ST_FRAME;
    colorText[] = {0, 0, 0, 1};
    text = "Main Dialog";
    font = FontHTML;
    sizeEx = 0.025;
    x = 0.22;
    y = 0.12;
    w = 0.56;
    h = 0.66;
  };

  objects[] = { };

  // Эти классы отвечают за обработку действий
  controls[] =
  {
    HELLO_WORLD,
    CLICK_ME,
    MY_BUTTON,
    MY_EDIT
  };

  // Вывод строки Hello Word на экран, с последующим изменением
  class HELLO_WORLD : RscText
  {
    idc = 100;
    style = ST_CENTER;
    x = 0.4;
    y = 0.45;
    w = 0.2;
    h = 0.1;
    text = "Hello World!";
  };

  // Это ссылка, кликнув на которую строка "Helo Word" заменится текстом, который вы ввели.
  class CLICK_ME : RscActiveText
  {
    idc = 101;
    style = ST_CENTER;
    x = 0.4;
    y = 0.65;
    w = 0.2;
    h = 0.05;
    text = "Click Click";
    action = "ctrlSetText [100, ctrlText 104]";
    // Функция ctrlText 104 получает строку, которую ввел пользователь, т.к. мы присвоили
    // идентификатор 104 именно классу MY_EDIT.
    // Далее функция ctrlSetText [100, ctrlText 104] полученную строку выводит на экран,
    // используя класс HELLO_WORD, с идентификатором 100
    default = true;
  };

  // Эта кнопка закрываем окно диалога
  class MY_BUTTON : RscButton
  {
    idc = 102;
    x = 0.4;
    y = 0.25;
    w = 0.2;
    h = 0.04;
    text = "Close Dialog.";
    action = "closeDialog 0";
  };

  // А вот и наше поле для ввода текста
  class MY_EDIT : RscEdit
  {
    idc = 104; // Присваиваем идентификатор 104 этому компаненту.
    x = 0.3;
    y = 0.3;
    w = 0.4;
    h = 0.04;
  };
};
 Что бы вызвать окно диалога, используйте команду: OK = CreateDialog "DlgDialog"

<<<Назад <<<


Активный текст - часть IV (COMBO)

Создадим в директории с миссией файл Description.ext. И откроем его в блокноте.

Примечание:
Рекомендую прочесть все предыдущие статьи, т.к. коментарии из них я не переносил сюда, что бы не загромождать место.

// Определяем используемые шрифты
#define FontM      "TahomaB36"
#define FontHTML "CourierNewB64"

// Стили форматирования текста
#define ST_LEFT 0
#define ST_RIGHT 1
#define ST_CENTER 2
#define ST_FRAME 64

// Элементы управления
#define CT_STATIC 0
#define CT_BUTTON 1
#define CT_EDIT 2
#define CT_COMBO 4
#define CT_ACTIVETEXT 11

// Создаем шаблоны для ВСЕХ элементов управления
// Статический текст
class RscText
{
type         = CT_STATIC;
idc         = -1;
style         = ST_LEFT;
colorBackground[]     = {0, 0, 0, 0};
colorText[]         = {1, 1, 1, 1};
font         = FontM;
sizeEx         = 0.04;
};

// Ссылка
class RscActiveText
{
type         = CT_ACTIVETEXT;
idc         = -1;
style         = ST_LEFT;
color[]     = {1, 1, 1, 1};
colorActive[]     = {1, 0, 0, 1};
font         = FontM;
sizeEx         = 0.04;
soundEnter[]     = {"ui\ui_over", 0.2, 1};
soundPush[]     = {, 0.2, 1};
soundClick[]     = {"ui\ui_ok", 0.2, 1};
soundEscape[]     = {"ui\ui_cc", 0.2, 1};
default     = false;
};

// Кнопка
class RscButton
{
type         = CT_BUTTON;
idc         = -1;
style         = ST_CENTER;
colorText[]     = {0, 0, 0, 1};
font         = FontHTML;
sizeEx         = 0.025;
soundPush[]     = {, 0.2, 1};
soundClick[]     = {"ui\ui_ok", 0.2, 1};
soundEscape[]     = {"ui\ui_cc", 0.2, 1};
default     = false;
};

// Поле для ввода текста.
class RscEdit
{
type         = CT_EDIT;
idc         = -1;
style         = ST_LEFT;
font         = FontHTML;
sizeEx         = 0.02;
colorText[]     = {0, 0, 0, 1};
colorSelection[] = {0.5, 0.5, 0.5, 1};
autocomplete     = false;
text         = ;
};

// А это компонент ComboBox.
class RscCombo
{
type     = CT_COMBO;
idc     = -1;
style     = ST_LEFT;
colorSelect[]     = {0.4, 0.4, 0.4, 1};
colorText[]     = {0.2, 0.2, 0.2, 1};
colorSelectBackground[] = {0.2, 0.2, 0.2, 1};
colorBackground[]     = {0.4, 0.4, 0.4, 1};
font     = FontHTML;
sizeEx     = 0.025;
rowHeight     = 0.04;
wholeHeight     = 0.3;
};

// Управляющий класс, имя любое
class DlgDialog
{
idd = -1;
movingEnable = true;

// Определяем классы, отвечающие за прорисовку окна диалога
controlsBackground[] =
{
MY_BACKGROUND,
MY_FRAME
};

class MY_BACKGROUND: RscText
{
colorBackground[] = {0.4, 0.4, 0.4, 0.75};
text = ;
x = 0.2;
y = 0.1;
w = 0.6;
h = 0.7;
};

class MY_FRAME: RscText
{
idc     = 103;
style     = ST_FRAME;
colorText[] = {0, 0, 0, 1};
text     = "Это НАШЕ диалоговое окно";
font     = FontHTML;
sizeEx     = 0.025;
x     = 0.22;
y     = 0.12;
w     = 0.56;
h     = 0.66;
};

objects[] = { };

// Список "рабочих" классов
controls[] =
{
HELLO_WORLD,
CLICK_ME,
MY_BUTTON,
MY_COMBO
};

// "Статический текст" - привет всем
class  HELLO_WORLD: RscText
{
idc     = 100;
style     = ST_CENTER;
x     = 0.4;
y     = 0.45;
w     = 0.2;
h     = 0.1;
text     = "Всем привет!";
};

class CLICK_ME:RscActiveText
{
idc     = 101;
style     = ST_CENTER;
x     = 0.4;
y     = 0.65;
w     = 0.2;
h     = 0.05;
text     = "Кликни!";
action     = "ctrlSetText [100, lbData[104, lbCurSel 104]]";
// 100 - это идентификатор "Статического текста"
// lbData[104, lbCurSel 104] - Функция получает выделенную строку компанента
COMBO.
// ctrlSetText - а эта функция устанавливает текст "Статического текста" в тот, который
// мы выбрали.
default = true;
};

class MY_BUTTON:RscButton
{
idc     = 102;
x     = 0.4;
y     = 0.25;
w     = 0.2;
h     = 0.04;
text     = "Закрыть окно.";
action     = "closeDialog 0";
};

// Как видете у Combo очень мало параметров.
class MY_COMBO:RscCombo
{
// Задаем идентификатор = 104, теперь с помощью его можно обратится к Combo
idc     = 104;
x     = 0.4;
y     = 0.3;
w     = 0.2;
h     = 0.04;
};
};
 Вот и конец файла Description.ext

Что бы использовать наш компонент сделаем следующее:
Создадим файл dialog.sqs и напишем в нем вот что:

; Пытаемся вызвать класс DlgDialog
_ok = createDialog "DlgDialog"
: Если нет такого, то выходим.
?(!_ok): hint "Ошибка!"; exit

: Ну а если есть, то заполняем компонент Combo данными
; 104 - это идентификатор Combo, а "WEST" - надпись.
_index = lbAdd [104, "WEST"]
; Сопоставляем с этой строкой какие то данные, например другую строку. "Solder"
lbSetData [104, _index, "Solder WEST"]

_index = lbAdd [104, "EAST"]
lbSetData [104, _index, "Solder EAST"]

_index = lbAdd [104, "Resistance"]
lbSetData [104, _index, "Solder RES"]

; По умолчанию выделяем первую строку
lbSetCurSel [104, 0]

теперь скрипт можно вызвать командой: this exec "dialog.sqs"
<<<Назад <<<


Бессмертные солдаты

В инит солдату (soldier1) прописать:

This exec "immortal.sqs"

скрипт immortal.sqs:

#begin
?(getdammage soldier1 >0.3):soldier1 setdammage 0
~0.00004
goto "begin"

Странно, вещь полезная, но никто никогда не спрашивал о том, как сделать солдатов неуязвимыми и никто никогда не писал об этом.
Может быть просто не догадывались?
Всё элементарно:
юнит с именем soldier1 активирует циклический скрипт, который восстанавливает его здоровье каждый раз, когда в бойца попадает вражеская пуля.
В работе скрипта бывают сбои, так что на 100% полагаться на него нельзя!


Бомбардировщик вызывали?

Хочу подать одну интересную идею. Как можно организовать бомбежку определенного района или бомбежку по вызову. Для создания этого скрипта я использовал данные других посетителей сайта и выражаю им свою признательность. Значит, так. Сначала бомбежка определенного района:
1. Ставим в укромном угле карты (где игрок по сюжету миссии находиться не должен) несколько объектов, класса "Ammo". Этот класс появляется, когда сторона определана как "Нет". Лучше всего подходят "Static Maverick" и "Static SCUD". Присваиваем им имена, скажем это будут ракеты "Маверик" с порядковыми именами от А1 до А10. Чем больше, тем качественней будет бомбежка.
2. Также в этом укромном угле располагаем глобальный триггер. Активация "Альфа", в графе "Текст" пишем "Вызов бомбардировщика". Эта надпись в игре вызывается через рацию. Нажатием кнопки "0" два раза. Или в режим карты появляется радиостанция. В ините пишем An setPos [x,y,z]; для каждой ракеты. Где n - порядковый номер ракеты, а x,y,z - координаты, определяемые по таблице ниже. Активация триггера должна быть установлена "Однажды", иначе это будет неинтересно.
Данная таблица поможет вам конвертировать квадрат (от Aa-00 до Jj-99). Замечание: каждый квадрат имеет размеры 128х128 метров, а координаты середины равны сумме начальных и конечных координат квадрата, деленной на 2. Пример:
Квадрат: Ah-07 имеет начальные координаты: X:896, Y:11904, Z:0. Конечные координаты: X:1024, Y:11776, Z:0. Середина квадрата: X:960, Y:11840, Z:0.

Буквы X : ОТ X : ДО Цифры Y : ОТ Y : ДО
AA 0 128 0 0 12672
AB 128 256 1 12672 12544
AC 256 384 2 12544 12416
AD 384 512 3 12416 12288
AE 512 640 4 12288 12160
AF 640 768 5 12160 12032
AG 768 896 6 12032 11904
AH 896 1024 7 11904 11776
AI 1024 1152 8 11776 11648
AJ 1152 1280 9 11648 11520
BA 1280 1408 10 11520 11392
BB 1408 1536 11 11392 11264
BC 1536 1664 12 11264 11136
BD 1664 1792 13 11136 11008
BE 1792 1920 14 11008 10880
BF 1920 2048 15 10880 10752
BG 2048 2176 16 10752 10624
BH 2176 2304 17 10624 10496
BI 2304 2432 18 10496 10368
BJ 2432 2560 19 10368 10240
CA 2560 2688 20 10240 10112
CB 2688 2816 21 10112 9984
CC 2816 2944 22 9984 9856
CD 2944 3072 23 9856 9728
CE 3072 3200 24 9728 9600
CF 3200 3328 25 9600 9472
CG 3328 3456 26 9472 9344
CH 3456 3584 27 9344 9216
CI 3584 3712 28 9216 9088
CJ 3712 3840 29 9088 8960
DA 3840 3968 30 8960 8832
DB 3968 4096 31 8832 8704
DC 4096 4224 32 8704 8576
DD 4224 4352 33 8576 8448
DE 4352 4480 34 8448 8320
DF 4480 4608 35 8320 8192
DG 4608 4736 36 8192 8064
DH 4736 4864 37 8064 7936
DI 4864 4992 38 7936 7808
DJ 4992 5120 39 7808 7680
EA 5120 5248 40 7680 7552
EB 5248 5376 41 7552 7424
EC 5376 5504 42 7424 7296
ED 5504 5632 43 7296 7168
EE 5632 5760 44 7168 7040
EF 5760 5888 45 7040 6912
EG 5888 6016 46 6912 6784
EH 6016 6144 47 6784 6656
EI 6144 6272 48 6656 6528
EJ 6272 6400 49 6528 6400
FA 6400 6528 50 6400 6272
FB 6528 6656 51 6272 6144
FC 6656 6784 52 6144 6016
FD 6784 6912 53 6016 5888
FE 6912 7040 54 5888 5760
FF 7040 7168 55 5760 5632
FG 7168 7296 56 5632 5504
FH 7296 7424 57 5504 5376
FI 7424 7552 58 5376 5248
FJ 7552 7680 59 5248 5120
GA 7680 7808 60 5120 4992
GB 7808 7936 61 4992 4864
GC 7936 8064 62 4864 4736
GD 8064 8192 63 4736 4608
GE 8192 8320 64 4608 4480
GF 8320 8448 65 4480 4352
GG 8448 8576 66 4352 4224
GH 8576 8704 67 4224 4096
GI 8704 8832 68 4096 3968
GJ 8832 8960 69 3968 3840
HA 8960 9088 70 3840 3712
HB 9088 9216 71 3712 3584
HC 9216 9344 72 3584 3456
HD 9344 9472 73 3456 3328
HE 9472 9600 74 3328 3200
HF 9600 9728 75 3200 3072
HG 9728 9856 76 3072 2944
HH 9856 9984 77 2944 2816
HI 9984 10112 78 2816 2688
HJ 10112 10240 79 2688 2560
IA 10240 10368 80 2560 2432
IB 10368 10496 81 2432 2304
IC 10496 10624 82 2304 2176
ID 10624 10752 83 2176 2048
IE 10752 10880 84 2048 1920
IF 10880 11008 85 1920 1792
IG 11008 11136 86 1792 1664
IH 11136 11264 87 1664 1536
II 11264 11392 88 1536 1408
IJ 11392 11520 89 1408 1280
JA 11520 11648 90 1280 1152
JB 11648 11776 91 1152 1024
JC 11776 11904 92 1024 896
JD 11904 12032 93 896 768
JE 12032 12160 94 768 640
JF 12160 12288 95 640 512
JG 12288 12416 96 512 384
JH 12416 12544 97 384 256
JI 12544 12672 98 256 128
JJ 12672 12800 99 128 0

 Недостатки этого метода вот в чем. Во-первых, взорвавшиеся "Маверики" остаются валяться в воронках или около них. Если кто-то доработает скрипт, чтобы как-то убрать их - пишите в этот топик. Во-вторых, слишком медленно падают эти ракеты, будто бы из бумаги сделанные. Неплохо было бы их как-то ускорить, но только не ускорением времени в игре. В-третьих, пробуя в редакторе этот метод я заметил некоторую неточность, с которой по указанным координатам падают импровизированные "бомбы".
И самое главное, может кто-то напишет скрипт, как вызывать бомбардировку по указанному месту? Например делается псевдоюнит, который отображается в нижней полосе условным знаком бомбы. Допустим, как солдат номер два. Я жму на F2, выделяя его зеленым кружком. Прицел меняется на квадратик с указанием дистанции в нем. Ну, все как для того, чтобы послать куда-то простого солдата. Надо полагать, что при таком посылании игра определяет координаты места назначения солдата. Так вот, нельзя ли эти самые координаты вставить в аргументы функции setPos? Таким образом мы бы получили систему наведения, для реальности можно было бы использовать это с юнитом, который носит лазерный целеуказатель.
И вот еще что. Есть такой адд-он, три дельтоплана. Один двухместный, другой с пулеметом, третий с двумя бомбами типа Mk81. Было бы неплохо заменить падающие с неба ракеты "Маверик" на эти бомбы, но я не знаю как это сделать! Ибо бомбы с дельтоплана падают куда реалистичнее ракет. Такие же бомбы, кажись, есть на одном из доступных штурмовиков А-10 "Тандерболт". Короче, прикладываю ссылку на указанный адд-он мотодельтапланов, может, кто и займется моей сырой идеей. Кажется, у нее есть будущее...

Чтобы убрать меверики или что ты там бросаешь) воспользуйся
deleteVehicle this
может и поможет, да к стати можно условие поставить: если взорвался
not Alive this ,тогда deleteVehicle this

<<<Назад <<<


Вариант РАЗГОНА миссий или "Рожаем на лету"

Счастливым обладателям КРУТЫХ КОМПОВ
ЭТО НЕ ОБЯЗАТЕЛЬНО ! ! !

Самое узкое место в PC - отображение 3D графики.
(комп выполняет много расчётов по масштабированию,скрытию невидимых поверхностей и т.д.)
Движок OFP проверяет кучу переменных для КАЖДОГО объекта.

ВЫВОД - чем меньше ОБЪЕКТОВ в миссии ПРИСУТСВУЕТ и ОТОБРАЖАЕТСЯ ОДНОВРЕМЕННО - тем БЫСТРЕЕ миссия.

Предлагаю НАБРОСОК скрипта, позволяющий производить ВРАГА по мере надобности. (эффект тревоги)
РАБОТАЕТ С ВЕРСИЕЙ 1.30 и ВЫШЕ.
Пока не оптимизировано поэтому делает ТОЛЬКО СОЛДАТ. БУДЕТ ВРЕМЯ ДОРАБОТАЮ до УНИВЕРСАЛЬНОГО.

(специально для НЕВЕРУЮЩИХ)
Скрипт производит 256 вражеских солдат с интервалом в одну секунду.
ПОПРОБУЙТЕ создать миссию и хотя-бы 128 единиц в ОДНОМ МЕСТЕ и сравните скорость!!!


Вертолёт вызывали ?

ДА ПРОСТЯТ МЕНЯ ЗНАТОКИ СКРИПТОВ,
НО Я ОСМЕЛЮСЬ привести пример включения скрипта, описанного мною ранее в П.П. Летайте вертолётами АЭРОФЛОТА
(он немного дополнен и теперь позволяет вызвать вертолёт в ЛЮБУЮ точку карты по рации)

ЭТО НЕ МИССИЯ, ЭТО ПРИМЕР!

------------->ИНСТРУКЦИЯ<---------
Распакуйте архив в директорию
\...\OperationFlashpoint\Users\USERNAME\missions
после чего в редакторе на острове >EVERON<
ДОЛЖНА появиться миссия ----ScripTrain----- в ней ВСЁ ОТКРЫТО.
скрипт в папке scripTrain.eden в файле movinhel.sqs.
ЧТО НЕ ЯСНО СПРАШИВАЙТЕ - если смогу помогу.

P.S. За замечания и исправления буду благодарен.
P.P.S. Я тут немного добавил, получилось посложнее но зато в примере ВКЛЮЧЕНО ВИДЕО

Пример находится в папке "ПРИМЕРЫ" под названием - "Вертолёт вызывали"


Воин Камикадзе... Вах Вах!!! :)

Приветствую! Не знаю конечно, может я и повторяюсь, но зделал я прикол! Особенно интересно это будет в кампании "Дикие горы" с чеченами!
Создаем солдатика, Игрок это будет или нет, значения не имеет!
Обзываем его Kamikaze.
Создаем тригер с такими параметрами:
Axis a: 0 Axis b: 0
Type: none
Activation: none
Condition: (speed Kamikaze)>18
Activation: bm="hellfire" camcreate getpos Kamikaze

и во время игры (если камикадзе - игрок) забежать(не нажимая ускорение, то есть обычный, лёгкий бег) в логово врага и нажать ускорение бега! по умолчанию клавиша "E"
Если это комп, то просто поставить ему вэйпоинт и указать скорость передвижения самую быструю!
Этот скрипт похож на скрипт ФлэшДемона, но его скрипт используется для техники, я пробовал на людях! Все гут!
ОГРОМНОЕ СПАСИБО ФЛЭШДЕМОНУ!!!

Можно добавить пункт "Взорваться" в меню действий и взрываться по собственному желанию, при помощи команды:

id = player addAction ["Взорваться","Boom.sqs"]
которую нужно прописать где нибудь в ините.
После того как ты выберешь это действие, сработает скрипт Boom.sqs и все!
Убирать действие:
player removeAction id

<<<Назад <<<


Всех посадим, высадим и СНИМЕМ

_Sg=_this select 0
;Это группа солдат(если игрок в ней то он НЕ ДОЛЖЕН быть лидером)
;(А если для кино, то его в группе вообще быть НЕ ДОЛЖНО!!! )
Local Ca
Ca = _this select 1
;Это наша машина
_Tg = _this select 2
;Это пункт назначения (куда машине ехать????)->должен быть объектом например солдатом
;----Здесь для (кино) ставим камеру, задержки и т.д.----------

;-------------------------------------------------------------
;-----Посадка в машину----------------------------------------
"_x AssignAsCargo Ca" ForEach (units group _Sg)
(units group _Sg) ordergetin true

;---ставим скорость в машины----------------------------------------
Ca setspeedmode "FULL"
;---Можно ещё "LIMITED" или "NORMAL"
;----Здесь для (кино) ставим камеру, задержки и т.д.----------
;
;
;-------------------------------------------------------------
;-----Движение к высадке из машины-------------------
#Labe1
~8
Ca domove getpos _Tg
~1
?(_Tg distance Ca > 10.0) : goto "Labe1"
~1
?(_Tg distance Ca < 10.0) : dostop Ca
;----Здесь для (кино) ставим камеру, задержки и т.д.----------
;
;
;-------------------------------------------------------------
;------------------------ВЫГРУЗКА-----------------------------------

_Sg LeaveVehicle Ca
;--------------------------------------------------------------------
;--Вот всего и делов. Естественно в скрипт нужно передать аргументы
;ПРИМЕРНО так: 1/ В редакторе ставим группу и называем - MyGroupp
;1.1 машину ------------ MyCar
;1.2 oбъект ------------ MyObj
;2 при вызове СКРИПТОВОГО! видеоролика
;ставим [MyGroupp,MyCar,MyObj]exec"имя скрипта.sqs"
;то есть имя этого файла
;кстати для миссии этот скрипт тоже подойдёт, естественно без команд для камеры

exit

<<<Назад <<<


Где брать музыку из ОФП в формате МР3 (на холяву)

<<<Назад <<<

Где брать музыку из ОФП в формате МР3 (на халяву)

Для тех, кто не знает где можно без лишних запар надыбать муз треки из ОФП скажу ПРЯМО - их можно надыбать ЗДЕСЬ: http://www.seventh.com.au/ofp/downloads.htm


Добавление домов и построек на карту БЕЗ ГЕМОРРОЯ.

Выкладываю mission.sqm, в котором УЖЕ ДОБАВЛЕНЫ все постройки на карту. Перенести их в свою миссию можно простым копированием через буфер.
(Для тех, кто не знает: выделяем объект мышкой, Ctrl+C – копировать, Ctrl+V – вставить.)
Меняем угол поворота объекта: зажимаем Shift и левую кнопку мыши, а затем вращаем объект мышью – (если менять через свойства юнита объект примет первоначальную форму))

Добавил также транспорт для осмотра владений

Таким образом можно в очень короткий период создать огромный город. (Даже для проекта «Чечня» на Desert Island)

Вдохновения Вам, картоделы !!!

Это хорошо для версии 1.0. Если у вас версия выше 1.20 качаем аддон "Дома и домишки" http://upminder.narod.ru/downloads/index.html>Отсюда.

Аддон "Дома и домишки" (для редактора)
Позволяет вставлять дома. После вставки, откройте в вордпаде ваш файл mission.sqm и удалите из из имени дома _Х. Например, vehicle="Housebudova5_Х"; должно выглядеть как vehicle="Housebudova5";. После этого миссия не требует аддона, и может работать с любой версией игры. В редакторе имя дома начинается с цифр. Например 0,0_Housebudova5, где
первая цифра обозначает возможность входа в здание 1=да, 0=нет, а вторая как выглядит здание, разрушено или нет 1=да, 0=нет.

Аддон для версии "Резистанса" 1.85 берите в аддонах...
http://www.flashpoint.ru/addons/pafiledb.php?action=file&id=31

Пример находится в папке "ПРИМЕРЫ" под названием - "Добавление домов и построек на карту"


Дополнительные флаги

Все уже знают про две старинные команды:
this setflagtexture "usa_vlajka.pac"
this setflagtexture "rus_vlajka.pac"

Эти команды, ПРОПИСЫВАЕМЫЕ в ините обьекта "ФЛАГ" добавляют флаги США и СССР соответственно.
Однако во флеше ожно сделать множество других флагов (ООН, FIA, Германия, Франция, Россия, Израиль и др.)
Все эти флаги лежат в файле "flags.pbo" в папке ADDONS дирректории вашей игры.
Все флаги лежат в формате JPG.
Для того, штобы использовать их в ините обьекта ''флаг'' надо прописывать:
this setflagtexture "\flags\russia.jpg" (получится флаг России)
this setflagtexture "\flags\israel.jpg" (получится флаг Израиля).

Для того чтобы узнать ПРАВИЛЬНЫЕ названия всех флагов надо открыть файл "flags.pbo" PBOдескриптором и просто переписать себе куда-нибудь названия нужных JPG-файлов, которые лежат там.


Другой вариант получения точных координат камеры и её цели

Способ получения координат уже описывался товарищем Finsternis, его способ конечно хорош, но мне лично больше нравится способ описанный ниже, т.к. он по моему мнению проще и удобней в использовании. Повторяю это моё мнение и я ничего не имею против других способов

Итак начнёмс:
В эдиторе у какого-нибудь юнита в строке Initialisation прописываем:

this exec "camera.sqs"

теперь если войти в режим предосмотра миссии, то мы сразу оказываемся в режиме камеры, которая управляется следующим образом:

  • 8 : наклонять вверх
  • 2 : наклонять вниз
  • 4 : поворот влево
  • 6 : поворот вправо
  • + : увеличить
  • - : уменьшить
  • V : выход из режима камеры
  • L : включает и выключает прицел (крест в центре экрана)
  • Q : движение вверх
  • Z : движение вниз
  • W : движение вперёд (нормально)
  • E : движение вперёд (быстро)
  • S : движение назад
  • A : движение налево
  • D : движение направо
  • DEL : движение налево и отдаление цели
  • END : движение направо и отдаление цели
  • PAGE UP : смотри Q
  • PAGE DOWN : смотри Z
  • X : как A но быстрее
  • C : как D но быстрее
  • SPACE и правый CTRL: нацеливание камеры на объект
Теперь когда мы нашли нужную позицию камеры мы нажимаем левый CTRL и о чудо в папке OFP появляется документ под названием clipboard.txt, где написано что-то вроде этого:

;=== 18:41:15
_camera camSetTarget [7912.55,103006.88,8793.68]
_camera camSetPos [9627.82,3406.36,2.00]
_camera camSetFOV 0.700
_camera camCommit 0
@camCommitted _camera

Я думаю, что люди собирающиеся создавать мультик по скриптам (как это делается написано в Hints & Tips) знают, что это такое и что с этим делать при этом указание времени не играет роли и его можно стереть.

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

<<<Назад <<<


Если врача убили...

Если убили медика и нигде рядом нет госпиталя, можно воспользоваться простым скриптом медпомощи.
Назовите его например apteka.sqs и напишите

hint "Первая помощь"
player playMove "CombatToMedic"
player playMove "MedicToCombat"
player setDammage 0
player removeAction 0

Все элементарно. Ваш солдат сам себя излечит. При некоторых изменениях можно использовать несколько раз.
Данный скрипт рекомендуется прописывать для старта в init.sqs


Искуственное падение тел

Иногда бывает нужно, чтобы например с определённой высоты падали к примеру бочки или что то ещё. Но есть загвозда - если вы будете пользоваться оператором setpos допустим на высоту 1000 метром, то бочка окажеться там и не полетит вниз.
Что бы она полетела, воспользуйтесь ниже приведённым скриптом.

_G = 0
#loop
_G=_G+0.05
_flank setpos [getpos _flank select 0,getpos _flank select 1,(getpos _flank select 2)-_G]
?(getpos _Flank select 2 <=1):exit
~0.05
goto "loop"

Где _flank имя бочки которая должна падать, _G коффицент притяжения (если увеличить, то бочна будет падать быстрее.)


Использование команды list&thislist

Используются для получения списка всех юнитов находящихся радиусе действия триггера. Эта команда является действенной только для юнитов установленных на акитвацию триггера.

Синтаксис:
List TriggerName
(Используйте "thisList" если вы хотите получить "List this")

Возвращается:
Массив юнитов в радиусе действия триггера

Пример:
thisList CommandMove [X,Y]
"_x DoFire unit_enemy" ForEach List town_target


Как включать и выключать лампы

Если вы пропишите в триггере команду, то лампа на столбе или еще где-либо выключится.

(object 99999) switchLight "off"

где номер 99999 - это номер объекта (лампы, осветительного столба), его можно узнать в редакторе если нажать кнопку Show IDs и хорошенько увеличить карту. Тоже самое, только "on" - включится.

Можно сделать, чтобы лампа мигала как-будто испорченная. Пишем простенький скрипт:

#Light
(object 3053) switchLight "off"
~random 2
(object 3053) switchLight "on"
~0.05
goto "Light"

объект 3053 - это осветительный столб у моста.

Для версии 1.75


Как выбросить группу из вертолета

Как заставить группу выпрыгнуть из летящего вертолета.
Один из советов уже предлагался, но он несколько не отражает то, что требуется.

Выбираем зону высадки. Зону высадки рекомендую выбрать так, чтобы она имела достаточно большую, приблизительно плоскую площадку, свободную от деревьев. Многие побережья для этого подходят идеально.
Для вертолета, в котором уже сидит десант, ставим два вейпоинта - один в начале, другой в конце зоны высадки. В обоих WP прописываем chop flyinheight 5 - с высотой можно поэксперементировать, но не поднимайте вертолет слишком высоко - мы же не хотим, чтобы юниты разбивались об землю, и не опускайте слишком низко - на высоте 2 ваш chop упрется в землю носом. Еще от вейпоинтов требуется, чтобы они:
- задали минимальную скорость вертолету (чем меньше скорость, тем меньше опущен нос и, оответсвенно, тем на меньшей высоте может идти вертолет.)
- запретили вертолету стрелять (а то он вместо десантирования солдат будет бегать за юнитами противника)
Где-то в середине зоны высадки (когда вертолет выйдет на заданную высоту) необходимо поставить триггер, активируемый, разумеется, только вертолетом. Теперь самое интересное - в строке on activation прописывается команда:
unit action ["getout",chop]; unassignvehicle unit
что есть что, я думаю объяснять не надо(на всякий случай: chop-имя вертолета). Если необходимо выбросить группу, то можно, конечно воспользоваться строкой

getout="getout"; "_x action [getout,chop]" foreach units CargoGroup;"unassignvehicle _x" foreach units CargoGroup

где CargoGroup - выбрасываемая группа. Но эффект получиться не тот. Лучше создать небольшой скрипт, вроде вот этого:

_count=0
_limit=(count units CargoGroup)
#begin
_unit=((units CargoGroup) select _count)
_unit action ["getout",chop]
unassignvehicle _unit
~0.5
_count=_count+1
?(_count<=_limit-1):goto "begin"

Скрипт не проверялся - возможны синтаксические ошибки, но я старался не допустить их.
Если вместо "getout" использовать "eject", то вертолет попытается подняться на высоту, достаточную для раскрытия парашюта, но у него это всё равно не получиться и юнит точно сломает себе ноги (как минимум). Поэтому если вы хотите выбросить юнит с парашютом, то задайте вертолету достаточно большую высоту заранее.
И еще одно - все что задается через action одинаково действует и на AI и на игрока. (то есть игроку, если он в десантируемой группе, нужно всего лишь сидеть и ждать, пока его выбросит из вертолета).

<<<Назад <<<


Как делать красивое ОВЕРВЬЮ со скриншотом.

Если у тебя проблем с овервью.
Делаешь так:

  • качаешь распаковщик pbo файлов (на любом ОФП-сайте он есть);
  • распаковываешь им любую официальную сингл-миссию;
  • открываешь файл owerviev.html в блокноте;
  • вместо текстов прописанных там пишешь свои тексты (там их всего два - заголовок и краткое вступительное слово);
  • делаешь скриншот;
  • в фотошопе делаешь его размером 128 х 256 (или 64 х 128) пикселей;
  • сохраняешь в папку с миссией твоей;
  • обзываешь его допустим "photo.jpg";
  • снова открываешь owerviev,html в блокноте;
  • и вместо графического файла paa, который прописан там вписываешь "photo.jpg";
  • размеры файла, которые прописаны там лучше НЕ ИЗМЕНЯЙ, чтобы твоя картинка в игре выглядела адекватно (они правильные);
  • сохраянешь это всё в папку со своей миссией;
  • обзываешь "owerviev.html";
  • заходишь в редактор;
  • сохраняешь свою миссию как отдельную миссию;
  • выходишь из редактора;
  • заходишь в меню в раздел ''Миссии'';
  • любуешься на свою картинку.


Как делать разговор по рации?

В активации триггера пишите:

  • Рация синими буквами, переговор между группами: имя_юнита sideChat "чё захочешь"
  • Рация зелёными буквами, переговор между солдатами одной группы: имя_юнита GroupChat "чё захочешь"
  • Рация белыми буквами, переговор между сторонами: имя_юнита globalchat "чё захочешь"
  • Рация оранжевыми буквами, переговор между экипажем техники: имя_юнита vehiclechat "чё захочешь"


Как добавить русского генерала

Сделать это очень просто!
Ставите простого солдата на карте, задаете ему имя general (имя задавать не обязательно, это делается для того чтобы быстрее найти этот юнит в текстовом редакторе).
Далее сохраняете карту и открываете ваш файл mission.sqm любым текстовым редактором. Ищите юнит general и изменяете ТИП солдата на generalE.
Все! Теперь вместо простого солдата появится генерал!

Кроме генерала Губы в свою миссию можно добавить женщину-солдата Ангелину.

"Ставите простого солдата на карте, задаете ему имя" angel "(имя задавать не обязательно, это делается для того чтобы быстрее найти этот юнит в текстовом редакторе)."
"Далее сохраняете карту и открываете ваш файл mission.sqm любым текстовым редактором. Ищите юнит" angel "и изменяете ТИП солдата на" Angelina.
"Все! Теперь вместо простого солдата появится" женщина-солдат Ангелина!


Как заставить AI расстрелять пленного

Допустим надо при вашем обнаружении чтоб AI расстрелял пленного, делается это так :
допустим вы East, а враг Resistance
создаем пленного называем его civ1
создаем любого солдата называем его sol1
в инит civ1 пишем this setbehaviour "safe" и делаем на него waipoint и в OnActivation пишем this switchmove "fxstandsur"
в инит sol1 пишем this setbehaviour "safe"; this dotarget civ1
Создаем триггер любой дистанции, в полях триггера пишем - East,Detected by Resistence,switch
в поле OnActivation пишем - sol1 setcombatmode "red";sol1 dofire civ1; civ1 switchmove "effectcombatstand";

вот после вашего обнаружения солдат откроет огонь по пленному.


Как заставить солдата занять позицию у окна в доме

Как заставить солдата забежать в дом (который открыт) и занять позицию точно у окна (у любого):

mysoldier domove ((object 99999) buildingpos 5)

где 999999 - это индификационный номер объекта (если в редакторе нажать кнопку "Show IDs" и хорошенько увеличить карту, то они будут видны).
5 - это позиция в доме у окна. Может быть от 0 до 5,10 и более. В зависимости от кол-ва окон и дверных проемов в доме.

Солдаты занимают точную позицию у окон, изнутри дома конечно.

Для версии 1.75


Как заставить юнит посадить самолёт!

Ставишь самолёт с юнитом в любом месте карты.

Ставишь ему Special: Flying(чтоб летел),
потом можешь проставить ему ряд вэйпоинтов,
а потом щёлкни на самом самолёте и сделай вэйпоинт типа Get Out.

Всё!Теперь после того как он завершит все вэйпоинты он посадит самолёт...


Как изменить радиус видимости?

<<<Назад <<<

Как изменить радиус видимости ?

Если позволяют системные требования, можно в своей миссии изменить далность видимости, сделайте это хотя бы один раз - ведь какой вид открывается с горы, при радиусе видимости 7000 метров!
В строке init пишете:
setViewDistance 2000

Вместо 2000 можно писать что угодно , хоть 200000 , но это если позволяет компьютер. Кто будет играть в миссию, в которой всё дёргается?


Как изменить угол поворота обекта не заходя в его опции?

Чтобы изменить угол поворота любого обекта в эдиторе нужно всего лишь выделить его а затем крутить правой кнопкой мышки в нужном вам направлении при этом зажав клавишу Shift.


Как менять погоду и туман в процессе игры с помощью тригера

Создаём тригер, который активируется при желаемых условиях и прописываем в строке OnActivation следующий текст:

для погоды:
X SetOvercast Y - где X это время в секундах на протяжении которого погода должна меняться, а Y определяет конечную погоду (0.0 - самая хорошая погода; 1.0 - самая плохая погода)

для тумана:
X SetFog Y - что определяет X смотри выше, а Y определяет "плотность" тумана (0.0 - нет тумана; 1.0 - самый сильный туман)

Естественно можно это прописать и в строке OnDeactivation тригера, тогда погода будет соответственно меняться при деактивации тригера, таким способом можно создать к примеру зону тумана, правда это будет выглядеть довольно нереально.
ЗЫ: Всё протестировано на версии 1.40, если эдитор будет ругаться на SetOvercast тогда попробуйте команду SetOvercastWeather.


Как менять текстуры в файле p3d

Значит так.
Берешь, файл имя.p3d и переименовываешь его в mission.sqm в этой же директории запускаешь unpack-sqm и получаешь файл mission.txt - это распакованый p3d. Дальше, опять переименовываешь теперь уже mission.txt в имя.p3d

Запускаеш программу Texture Swaper - http://www.ofpeditingcenter.com/files/textureswap.zip

И меняешь текстуры. Паковать назад не надо.


Как перевести сразу всю группу в опр. behaviour

<<<Назад <<<

Как перевести сразу всю группу в определенный behaviour

САБЖ-не через Waypoint.
В init командира пишем - mygroup=group this
В activation триггера пишем - behaviourmode = "safe"; "_x setbehaviour behaviourmode" foreach units mygroup


Как поместить всю группу в технику 2ч.

Надо командиру группы прописать в строке init что-то вроде UNIT1 AssignAsCargo UNIT2, где
unit1 - имя командира
unit2 - имя транспортного средства
И не забыть поставить вейпоинт ,Get In,на технику


Как поместить всю группу в технику 3ч.

Надо каждому юниту прописать в строке init кем он должен быть Например, Gunner'ом, то пишем
UNIT1 AssignAsGunner UNIT2
где unit1-имя солдата, unit2-имя танка (далее указываться это не будет)

Или Commander'ом: UNIT1 AssignAsCommander UNIT2
Или Driver'ом: UNIT1 AssignAsDriver UNIT2


Как распаковать "чужую" миссию?

"Чужих" миссий не бывает, бывают миссии за "чужих".

Открываешь в DePBO, получаешь mission.sqm, в этой же директории запускаешь unpack-sqm и, о !чудо! получаеш файл mission.txt,
это и есть распакованный mission.sqm. Когда миссию распакуешь, смотри в самый конец файла mission.txt. Видшиь?

class OutroLoos
а, дальше пусто. Дальше просто надо добавить:

class OutroLoose
{
addOns[]={};
randomSeed=2973699.000000;
class Intel
{
};
};

и переименовываешь обратно в mission.sqm если миссия содержит скрипты, их тоже надо раcпаковывать, таким же образом.

Скрипты надо переименовавать каждый раз в мission.sqm а то, unpack-sqm другие имена файлов не поддерживает. Но со скриптами может не все получиться, если нижние строки не распакуются.

а можно не мучатся и скачать автораспаковщик.


Как сделать Respawn

Знаю, что эта тема уже обсуждалась, но напишу всё равно для тех кто так и не знает как это делаеться.

Итак мы делаем миссию для мультиплея, потом заходим в папку, где эта миссия сохранена, там мы создаём в Notepad файл Description.txt где мы пишем:

respawn=X
respawndelay=Y

где X тип Respawnа (смотри ниже), а Y задержка в секундах до Respawnа
Теперь мы этот файл сохряняем и переименовываем в Description.ext

Типы Respawnов:
  1. Respawn птицей
  2. Respawn на том-же месте где вас убили
  3. Respawn на определённом месте на карте. Для этого надо создать маркер (кнопка F6) и назвать его:
    • respawn_east - для СССР;
    • respawn_ west - для НАТО;
    • respawn_guer - для повстанцев
    • и respawn_civi для Цивилистов
  4. и 5 (вчера весь день пытался найти разницу но так и не нашёл, по идеее 4 с задержкой а 5 без, но у меня было оба раза с небольшой задержкой) это Respawn в следующего Юнита в группе управляемого AI если таких нет, тогда птичкой
  5. никакого Respawnа
Всё Respawn готов!

ЗЫ: Напишите если кто знает разницу между 4 и 5, а если я ошибся поправьте.

<<<Назад <<<


Как сделать "взрывоопасную" технику...

Создаём пустую технику, называем к примеру ammo1
Теперь создаём тригер и пишем в поле Condition:
(getdammage ammo1)>0.0000001 чем больше число тем больше повреждения требуется для взрыва
а в поле Activation пишем:
ex = "hellfire" camcreate getpos ammo1, где hellfire можно заменить другим оружием по желанию (список есть где-то здесь на форуме)
Всё! Теперь если техника получит повреждения, определённые выше, на её месте произойдёт взрыв!


Как сделать пленного

Если вы не знаете как сделать на вражеской базе пленного,то это для вас.

aP setcaptive T\F
aP-имя пленного
T\F=true\false - включить\выключить скрипт

Также можно поставить триггер с диаметром в 150-200 метров.
Activation East или West
No Present
Далее еще пониже, где выбирать конец миссий, там выбираем Switch,ну а дальше делаете как обычный триггер с Тревогой.
Ставим группу,этой группе пишем вейпоинтов что бы парулировала,и на пленного ставим Search and Destroy, этот вейпоинт синхронизируем с только что сделанным триггером. И получится,что когда этот пленный выбежит с пределов триггера, поднимется тревога,и эта вражеская группа начнет искать пленного, после чего убьет его.


Как сделать сигнальную ракету

  1. Имитация пуска ракеты. Именно имитация, потому что при этом AI не стреляет флаэром, а сам флаэр можно поместить в любом месте карты.
    Ниже приведен скрипт, имитирующий стрельбу солдатом.

    _obj= _this select 0 ; ссылка на солдата
    _exe= _this select 1 ; ссылка на боеприпас

    _i=1
    #start
    ;для достоверности выход, если солдат убит (иначе пуски продолжатся)
    ?(! alive _obj): goto "stop"
    ; пускаем 10 ракет
    ? _i>10: goto "stop"
    ;выстреливаем ракету на высоту 150 метров над AI
    _action=_exe CamCreate [(GetPos _obj select 0)+5, (GetPos _obj select 1)+5,150]
    _i=_i+1
    ;интервал между запусками
    ~5
    goto "start"
    #stop
    exit

    Скрипт можно вызвать из триггера: [solname, "flareRed"] exec "flare2.sqs"
    Вместо flarered можно ставить flare, flaregreen, flareyellow
    Этот скрипт можно использовать с небольшими изменениями для имитации растяжки с сигналкой. Для этого делаем примоугольный триггер 5Х30 с активацией кто угодно, обзываем его triggername и пишем его в вызове скрипта вместо solname.
    В скрипте удаляем все кроме:
    _action=_exe CamCreate [(GetPos _obj select 0)+5, (GetPos _obj select 1)+5,150]
    ~5
    exit
    Триггер может быть повторяющимся или нет.

  2. AI реально стреляет ракетами.
    ВАЖНО: солдату надо дать оружие и боеприпас flare, а чтобы flare был активным оружием, сначала надо все оружие убрать и дать заново.
    В ините надо написать:
    removeallweapons this; this addmagazine "FLAREGREEN"; this addweapon "FLAREGREEN"; this addweapon "M16GrenadeLauncher"; this addmagazine "M16";this addmagazine "M16";[5,5] exec "flare1.sqs"
    ВАЖНО: оружие для флаеров разных цветов разное: FLARE, FLARERED, FLAREGREEN, FLAREYELLOW
    Не забудьте поменять его в строке s2 fire ["throw","Flaregreen","Flaregreen"], иначе стрелять не будет. Перезаряжается флаэр автоматически.

    сам скрипт:

    ;число выстреливаемых ракет
    num= _this select 0
    ; интервал между пусками (если дать имя time, то пишется ошибка - зарезервированная переменная)
    tim= _this select 1

    ; эти переменные совершенно безболезненно можно заменить на конкретные цифры как в предыдущем примере, внеся соответствующие изменения в скрипт и в команду его вызова. Если сделать переменные локальными (_num, _tim), то все будет работать, но только почему то постепенно задержка между выстрелами увеличивается. Аналогично можно изменить и предыдущий скрипт.

    _i=1
    #begin
    ? _i>num: goto "stop"
    s2 fire ["throw","Flaregreen","Flaregreen"]
    s2 addmagazine "flaregreen"
    _i=_i+1
    ~tim
    goto "begin"
    #stop
    exit

<<<Назад <<<


Как сделать телепортацию

Делаешь тригер, активация EAST или WEST смотря за кого играешь, пишешь uP setpos (getpos teleport);
uP имя юнита.
Делаешь инвизибле хелипад называешь teleport.
При активации юнит uP оказывается в позиции teleport.


Как сделать часовую бомбу?

  1. Делается логика игры (на усмотрение игры, game logic).
    Обзывается например Bomba
    В init'е (ините , инициализации) прописывается: CrBom=false.
  2. Делается триггер с нужным условием (если условие не нужно,то пропишите просто true)создания бомбы, в "при активации"(on activation) пишите - CrBom=true.
  3. Затем делаете 2 триггер с условием CrBom.
    В поле "при активации" - BWT = "TimeBomb" camcreate (getpos Bomba)

    Делаем игрока недалеко от той Игровой логики..
    Жмём preview(предпросмотр)..

    После выполнения того условия следим за тем местом где появляется бомба. После этого через 30 секунд она взорвётся.


Как сделать чтоб AI запускал скад.

Для всех неугомонных картоделов которые без скада жить не могуть.

Чтоб AI запустил скад прописываем следующие две строки:

unit action ["SCUD Launch"]
unit action ["SCUD Start"]


Как сделать, чтобы на базе поднялась тревога

  1. Делаем игрока за Восток около базы.
    На месте базы делается круглый триггер (переключатель) примерно на 200 a и 200 b больше самой базы.
    1. Активируется - восток(east)
    2. Из шести вариантов (присутствует,не присутствует и т.д) - выбирается - НАТО (west,замечен НАТО)
    3. В эффектах выставляете /тревога/
  2. В дома на базе ставятся солдаты,на базе ставите пустые БТР М113 и М60, и в домах соответственно экипаж для них.
    1. Дайте названия командирам отрядов которые находятся в домах. В init'е (инициализации, ините) каждому командиру пропишите в init'е:
      "_x lockWP true" forEach units this

      Также в свойствах каждого солдата и командира отрядов (там где "в кузове" , в "воздухе" и т.д ) уберите "в построении", выберите "нет".
    2. Поставьте отрядам вейпойнты типа "Найти и уничтожить" хотя какие вейпойнты вы поставите не важно. ГЛАВНОЕ!!! Каждому отряду поставить по одному вейпойнту "передвижение" (move) на том месте где они будут находиться в самом начале иначе они сразу побегут из домов и начнут искать врагов.
    3. Экипажу укажите вейпойнты, чтоб они сели в тракто... тьфу ,танки.
      Не забудьте также сделать на их месте вейпойнт "передвижение".
      Так... допустим что всего получилось 4 отряда. 1 командир - ComA, 2 - ComB , 3 - ComC , 4 - ComD.
  3. Вернёмся к первому триггеру (переключателю).
    В "при активации" (on activation) пишем:
    "_x lockWP false" forEach units ComA;"_x lockWP false" forEach units ComB;"_x lockWP false" forEach units ComC;"_x lockWP false" forEach units ComD
  4. Осталось вокруг базы поставить пару сторожей, патрулей (используя вейпойнты "передвижение" и "цикл"(cycle)), на базе поставить пару подставок для ящиков, машин, бочек, если база большая то и вертолётную площадку и ящики с оружием.

И так , что же у нас получилось. Жмём предпросмотр и делаем так, чтобы нас заметили. Затем прячемся неподалёку в кустах или в лесу и наблюдаем за тем что происходит на базе.

<<<Назад <<<


Как сделать, чтобы камера сопровождала движущийся объект

Нужно использовать скрипт "followcam.sqs":

_obj = _this select 0 ; имя объекта
_x = _this select 1 ; Вспомогательные константы для определения смещения камеры от объекта по 3 координатным оcям
_y = _this select 2
_z = _this select 3

_cam = "camera" camCreate getPos _obj
_cam cameraEffect ["internal","back"]

#LOOP

;расчет координат камеры. Можно указать любые другие формулы для вычислений.
_cx = (getpos _obj select 0) + _x * sin (getdir _obj) - _y * cos (getdir _obj)
_cy = (getpos _obj select 1) + _x * cos (getdir _obj) + _y * sin (getdir _obj)
_cz = (getpos _obj select 2)+_z

_cam camSetTarget _obj
; помещаем камеру в расчетные координаты
_cam camSetPos [_cx, _cy, _cz]
_cam camCommit 0
@camCommitted _cam

? camend : goto "END" ;условие проверки выхода из цикла

goto "LOOP"

#END

Вызывай скрипт так [unitname, 4,5,2] exec "followcam.sqs"
После этого ставь задержку сколько надо секунд
~10
и завершай скрипт
camend=true

<<<Назад <<<


Как создавать взрывы

Создаём триггер и пишем в On Activation
ex = "hellfire" camcreate getpos targetname
где hellfire название снаряда, а targetname имя солдата, машины, вертушки и т.д.


Как создать бомбу, срабатывающая на скорости...

<<<Назад <<<

Как создать бомбу срабатывающая на скорости...

Как сделать бомбу срабатывающая на скорости...
Техника уничтожается при достижении определенной скорости.
Создаем триггер:

  1. 1) Для джипов и других машин не относящихся к тяжелой техники:
    Axis a: 0 Axis b: 0
    Activation: none
    Type: none
    В поле Condition: (speed jeep1) > 40
    В поле On Activation: bm = "hellfire" camcreate getpos jeep1
    Теперь создаем джип называем его jeep1 и вперед!!
  2. 2)Для тяжелой техники немножко другое в поле On Activation
    там пишите: t80 setdammage 1
    а поле Condition оставляете тем же
И не забудьте создать танк и назвать его t80! Теперь когда джип или танк разгонится до 40 миль в час он взорвется!!
И с джипом все правильно сделать то он может улететь еще вперед метров на двести!
Параметры скорости можно изменять.


Как создать дымовую завесу у танка

Создаём танк, обзываем его tank.
Создаём триггер с нулевым радиусом ,type Switch, Activation RadioAlfa.
В строке on activation пишем:
[tank] exec "zavesa.sqs"

Вот содержимое этого файла:

_armour= _this select 0
_smokey="SmokeShell"

_smokepos=GetPos _armour
_cx=_smokepos select 0
_cy=_smokepos select 1
_cz=_smokepos select 2

_smokes= _smokey CamCreate [_cx,_cy+6,_cz+2]
_smokes1= _smokey CamCreate [_cx,_cy-6,_cz+2]
_smokes2= _smokey CamCreate [_cx+6,_cy,_cz+2]
_smokes3= _smokey CamCreate [_cx-6,_cy,_cz+2]

exit

 И теперь,после подачи радиосигнала, танк погрузится в дымовую завесу (я пробовал это лишь на Т-80, но, по идее, и на других должно сработать).


Как создать зависящие от игрока вейпоинты.

<<<Назад <<<

Как создать зависящие от игрока вейпоинты

Очень просто сделать так, чтобы, например, M113 не поехала до того времени, пока в неё не сядешь.

Это делается так: Выделяется M113 (если она не в нашей группе) и для неё, допустим, создаётся вейпоинт Transport unload (разгрузка транспорта). А ТОЛЬКО ПОТОМ для нас создаётся вейпоинт, который указывает на M113 и называется захватить. Всё! Теперь M113 не поедет, пока мы в неё не сядем. А как только M113 приедет, она сама нас высадит.

А с вертолётами потруднее, но у меня получалось.

Может это глюк, а может и вправду так и нужно делать.

Но я делаю так:
Выделяем вертолёт (который летит) и создаём для него wp load(загрузить), а для нас создаём wp захватить (не надо указывать им на вертолёт). Далее синхронизируем эти вейпоинты. В игре вертолёт должен сесть (у меня садился), но пока мы в него не сядем, он не взлетит.


Как создать противопехотную мину?

<<<Назад <<<

Как создать противопехотную мину ?

Вот , что для этого нужно:

  1. Делаете круглый тригер 5x5
  2. Делаем ативацию "кем-нибудь"
  3. Называем тригер mine (место куда нужно это писать находится правее центра таблицы)
  4. Нажимаем кнопку "отчёт" и время везде ставим 0.8
  5. В активации пишем:
    ex = "MortarShell" camcreate getpos mine ; ex setPos [getPos ex select 0, getPos ex select 1, (getPos ex select 2) +20]
  6. Копируем это и опять вставляем. Только в скопированном тексте везде меняем ex на ex1 и меняем +20 на +20.2
    Всё, мина готова. Для теста делаем это:
  7. Делаем рядом с тригером солдата.
  8. Делаем Waypoint "move" за тригером с макс. скоростью.
Играем!
Прикол: пехотинец, когда активирует тригер, бежит дальше. Через 0.8 секунды взрываюся две мины к миномёту. За это время пехотинец убегает на метр - два. При взрыве он "взлетает" и, если всё сделано правильно может улететь где-то метров на 100!
Вот за чем и нужен отрезок времени после активации тригера.


Как удалять объекты в игре?

Очень интересный и полезный скрипт по удалению объектов, юнит и техники!
Требуется версия 1.30 (1.40)

deleteVehicle tank (tank – имя юнита)

Игрока с помощью этого скрипта удалить нельзя!


Камеры в массы или получаем координаты.

Скрипт, облегчающий позиционирование камеры при создании роликов. Показывает координаты камеры и объекта, на который она нацелена.

Порядок действий:

  1. Создаем миссию и сохраняем ее.
  2. Ставим любой юнит, даем ему имя UNIT и в строке инициализации (этого юнита) пишем:
    [freq, UNIT] exec "имя_скрипта.sqs"
    где имя_скрипта - любое имя, которое вы этому скрипту дадите.
  3. Нажимаем Alt+Tab и запускаем Блокнот.
  4. В Блокноте пишем следующее:

    _target = _this select 0
    _freq = _this select 1

    _cam = "camera" camcreate [X, Y, Z]
    _cam cameraeffect ["internal", "back"]
    _cam camsettarget UNIT
    _cam camcommit 0
    _cam camCommand "manual on"

    #Coord
    titletext [format ["Camera: %1", getpos _cam],"Plain Down"]
    ~6
    titletext [format ["Object: %1", getpos UNIT],"Plain Down"]
    ~6
    goto "Coord"

    [X, Y, Z] - координаты, какие Вы захотите, можно [0, 0, 0]
  5. Сохраняем этот документ с именем "имя_скрипта" и расширением .sqs. Сохраняем его в папку с Вашей миссией.
    Внимание! Создастся текстовый файл типа "имя_скрипта.sqs.txt" - переименуйте его в "имя_скрипта.sqs"!
  6. Возвращаемся обратно в редактор и нажимаем кнопку Просмотр (Preview). Результат: создается камера, направленная на UNIT, а внизу экрана показываются текущие координаты и камеры и юнита.
    Камерой можно управлять стрелочками и менять высоту кнопками PgDown и PgUp. Обьективом камеры можно управлять на цифровой панели.

    Методом позиционирования юнита в редакторе можно достигнуть точного положения и направления обзора камеры.

<<<Назад <<<


Короткая лекция по созданию скриптов!!!

Здорово бойцы!!!
Если вы плохо разбираетесь, или вообще не разбираетесь в скриптах и лень лазить скачивать, конечно было бы лучше если бы вы сами всё искали, ну да ладно помогу.

Самое простое:вывод текста на экран

Hello.sqs

этот скрипт выводит на экран сообщение "Hello!"
TitleText ["Hello!", "plain down"]
Exit
Запуск скрипта: [] exec "Hello.sqs"

";"-позволяет делать комментарии(текст который не будет считываться игрой),главная цель у этого символа разделение команд.

Следующее
"TitleText" - позволяет выводить на экран разные сообщения.

TitleText [" текст ","Позиция текста на экране", скорость прокручивания]
"PlAIN" - в центре экрана
"PLAIN DOWN" - внизу экрана

Запуск cкрипта в игре:
Создадим миссию, назовём её Test полное название с островом смотря каким:

  • Eden-имя миссии.eden
  • Malden-имя миссии.abel
  • Kolgujev-имя миссии.cain
  • Desert Island-имя миссии.Intro
  • Nogova-имя миссии.noe
Открываем блокнот,пишем:

TitleText ["Mupy mup", "plain down"]
Exit
Сохраняем в каталоге(папке) с миссией mup.sqs

В редакторе:
В строке Иницилизация(Initalization) пишем: [] exec "mup.sqs"
ВСЁ!!! МИРУ МИР
[] - сюда надо писать аргумент задаваемый в скрипт. В данной команде аргумент нам не нужен.

Теперь попробуем заставить вашего солдата говорить (махать рукой как при разговоре).

;получение аргумента(солдат)
_Unit = _this select 0
;прекратить выполнение скрипта до тех пор, пока дистанция между игроком и юнитом _unit не станет меньше 5 метров
@(_unit distance player < 5)
;устанавливает юниту _unit режим поведения SAFE (все спокойно, оружие за спину)
_unit setbehaviour "SAFE"
;заставляет юнит _unit следить за игроком
_unit doWatch player
;пауза в 5 секунд
~5
; Заставляет юнит _unit проиграть анимацию тоесть говорить "effectstandtalk"
_unit playmove "effectstandtalk"
; заставляет юнит _unit не за кем не следить(следить за отсутствием объекта)
_unit dowatch objnull
;выход
exit

Теперь рассмотрим:
distance - с помощью этой команды скрипт приостанавливает свое действие, пока расстояние между игроком и юнитом не сократится на 5метров.

UnitName setbehaviour "{тип поведения}"
типы поведения:
  • SAFE - все спокойно, можно идти не спеша, оружие за спину;
  • AWARE - будь на чеку, передвигайся ползком (но не надо искать укрытие);
  • COMBAT - к бою, враг наступает, передвигаться ползком или бегом;
  • CARELESS - не обращать внимания ни на что, даже если рядом приземлиться граната;
  • STEALTH - укрыться и передвигаться ползком.
и главное

UnitName playmove "{название анимации}"

НЕ ВСЕ! Скрипты работают с командой playmove, некоторые с switchmove.
UnitName switchmove "{название анимации}"

Вроде всё описание.

Теперь пример и запуск:

Пишем,сохраняем talk.sqs(ложим в папку с миссией)

_Unit = _this select 0
@(_unit distance player < 5)
_unit setbehaviour "SAFE"
_unit doWatch player
~5
_unit playmove "effectstandtalk"
_unit dowatch objnull
exit

В редакторе:
Ставим одного игрока player(без имени), и другого с именем Sold1, ставить солдат надо с расстоянием не меньше 5метров.
В строке Иницилизация (Initialization) юнита с именем Sold1(хотя без разницы можно и тому написать):[Sold1] exec "talk.sqs"
Запускаем и подходим к тому юниту.

<<<Назад <<<


Летайте вертолётами АЭРОФЛОТА

НАФИГА НУЖНЫ ВЭЙПОЙНТЫ - если есть скрипты!!!

_Hl= _this select 0
;Это вертолёт
_La= _this select 1
;Пункт назначения
_St= _this select 2
;Точка старта
_My= _this select 3
;Это игрок

_To=(getpos _Hl select 2)+30
;+30 высота полёта

_Hl flyinheight _To
;Полетели

#L1
~5
_Hl domove getpos _La
;ЕЩЁ летим
~2
?(_La distance _Hl < 129.0) : _Hl Land "Land"
?(_Hl distance _La > 129.0) : goto "L1"
;Проверка достижения цели если не достигли то идем НА.. #L1
~1
_Hl flyinheight 0
;садимся

#HWait
~15
?(_My in _Hl): goto "HWait"
;проверим вылез ты или наоборот пока не вылез #HWait
_Hl flyinheight _To
;вылез ? - взлетаем и летим к точке старта

#L2
~5
_Hl domove getpos _St
~2
?(_St distance _Hl < 129.0) : _Hl Land "Land"
?(_Hl distance _St > 129.0) : goto "L2"
~1
_Hl flyinheight 0
~1
_Hl Action ["ENGINEOFF"]
exit

 Применяем ЭТО примерно так. Обзываем ЭТО например MovInHel.sqs
В редакторе делаем:

  1. вертолёт - обзываем - mHeli
  2. пункт назначения (любой объект - например H (invisible)) -;назовём mL1
  3. пункт старта (то-же что и п.п.2) - назовём mL2
  4. и себя назовём - My
Делаем в редакторе триггер. в поле Condition пишем My IN mHeli
в поле On Activation пишем - [mHeli,mL1,mL2,My]exec"MovInHel.sqs"
ЕСЛИ поставить триггеру Repeatedly - то летать вам не перелетать

P.S. ДА И ЕЩЁ прежде чем запускать ЭТО, УБЕРИТЕ РЕМАРКИ

<<<Назад <<<


Обычные ошибки при раcпаковке файлов PBO.

1) Попытка раcпаковать при работающей игре. Лечение -(Выйди из игры)
2) Корректно раcпаковывает PBO только програма DePBO остальные могут раcпаковывать неправильно. Например раcпаковал текстуры, а они не читаются в TexView. Лечение - (Используй только проверенные програмы).


Окончание-Создание мультиков через скрипты(для новичков)

Насчёт вставления музыки.
Делаем это через команду playmusic "".

Между ковычками название музыки. Я не помню все названия,но вот их большинство - от "track1" до "track16".Также ещё помню "7thlifeless" и "7thdecide".

Если нужно чтоб музыка закончилась раньше времени то пишем к примеру - 20 fademusic 0, где 20 время в секундах за которое мы хотим чтоб звук понизился, а 0 это до какой громкости мы хотим звук понизить(повысить). 0 это естественно выключенный звук, 1 это полная громкость.
Если мы после этого хотим вставить другую музыку то не забывайте опять написать fademusic, но с 1 вместо 0, это звук включит.
Например -1 fademusic 1

В мультиках также можно замедлять или убыстрять время.
Делается через команду setacctime.
1 это время нормальное, номера ниже единицы это замедление,выше единицы это убыстрение.
Пример - setacctime 0.2

Есть левая команда CamCommitted. По идее она проверяет закончила ли камера последние изменения.
Если пишется с @, то скрипт останавливается пока камера не закончит изменения.

Пользу от этой команды я нашёл одну,о чём в своё время.
Пишется так - @camCommitted _cam

Команда для приближения и удаления камеры(zoom) - camSetFOV.
Чем ниже единицы тем ближе, чем больше тем дальше.
Пример - _cam camSetFOV 1.700

Вот здесь я и нашёл пользу от CamCommitted. Если я хотел сделать приближение, то оно у меня без этой команды почему-то не работало.
Пример как в моём мультике я это сделал:

_cam camsetpos [8469.21,9368.04,3]
_cam camsettarget of
_cam camcommit 0
@camCommitted _cam
~6
_cam camsetpos [8469.21,9368.04,3]
_cam camsetfov 0.200
_cam camcommit 0
@camCommitted _cam

 Без @camCommitted _cam команда camsetfov не срабатывала.

Следующяя команда - CamSetRelPos.
В отличие от CamSetPos эта команда создаёт позицию камеры относительно либо какого-нибудь обьекта, либо какой-либо позиции.
В первом случае команда выглядит так - _cam camsetrelpos t80
Во втором: _cam camsetrelpos [8469.21,9368.04,3]

Через команду cutrsc(или cutobj) можно на экран поместить обьект поверх камеры, например вид через бинокль.
Выглядит так: cutrsc [название обьекта, его позиция, номер].

Зачем нужен номер по-моему никто толком не знает. В любом случае пишите "PLAIN DOWN", 0 и никогда не ошибётесь.
Названия обьектов есть следующие, пишу только релевантные:

  • "tvset"-телевизор
  • "binocular"-бинокль
  • "default"-возвращение к обыкновенному виду

Пример как сделать анимацию как солдат смотрит в бинокль и потом это показывается через камеру:

_cam camsetpos [8641.9,3357.61,5]
_cam camsettarget ofi
_cam camcommit 0
ofi playmove "StandToBinocStand"
~3.6
cutrsc ["binocular","PLAIN DOWN",0]
_cam camsettarget t80
_cam camCommit 0
~5
ofi playmove "BinocStandToStand"
cutrsc ["default","PLAIN DOWN",0]

 Команда playmove "StandToBinocStand" заставляет юнит сыграть анимацию подношения бинокля к глазам,
playmove "BinocStandToStand" - прямо противоположное.
И под конец опять используем команду CameraEffect, но с эффектом терминации - _cam CameraEffect ["Terminate","Back"]
Заканчиваем мультик уничтожением камеры через команду CamDestroy. Выглядит так: CamDestroy _cam

<<<Назад <<<


Определение Координат

Даю маленький скрипт, который позволяет легко узнавать координаты любого объекта (и не надо лазить в какие-то таблицы, что-то там искать).
В строке инициализации объекта, координаты которого Вы хотите узнать прописываете:

hint format ["%1",getpos this]

И все! При запуске миссии в левом верхнем углу экрана отобразится хинт с координатами объекта с точностью до сантиметра(!)
Если Вы хотите узнавать координаты по ходу миссии, создайте тригер с любой активацией (Альфа например), а в строке "по активации" пропишите:

hint format ["%1",getpos ИМЯ]

где ИМЯ - это имя объекта, координаты которого Вы хотите узнавать.
Этот скриптец ОЧЕНЬ помогает при создании видео роликов, а также для создания и компилирования более сложных скриптов.


Основы: как организовать конвой

Сценарий создания конвоя на простом примере.

Конвоем считается группа юнитов, которая передвигается вместе и действует организованно под управлением одного лидера (командира конвоя).
Пример создания простейшего конвоя: группа из трёх бойцов загружается в два грузовика, едет в точку высадки, выгружается и пешком добирается до пункта назначения.

Запускаем встроенный редактор в режиме ADVANCED.

Создаём действующие лица:

  1. Грузовик. Принадлежность - empty. В поле NAME присваиваем ему имя, например Truck1.
  2. Грузовик. Принадлежность - empty. В поле NAME присваиваем ему имя, например Truck2.
  3. Cолдат игрока, WEST, player. Называем его Bill.
  4. Другой солдат, WEST. Называем его John.
  5. Офицер, WEST. Командир конвоя, называем его Сaptain. Делаем его лидером группы. Для этого переключаемся в режим Group и тянем Билла и Джона мышкой на Captain.
Создаём для конвоя (то есть для Captain) 4 waypoint'a:
  • W1 - пункт погрузки (тип MOVE)
  • W2 - пункт отправления (MOVE)
  • W3 - пункт высадки (GET OUT)
  • W4 - пункт назначения (MOVE)
В поле on activation для W1 пишем:

Bill assignasdriver Truck1; John assignasdriver Truck2; Captain assignascargo Truck2; [Bill, John, Captain] ordergetin true;

Таким образом, Билл (то есть игрок) назначается водителем первого грузовика, Джон садится за баранку второго и командир конвоя едет с ним рядом.
Теперь нужно заставить их всех начать прохождение заданного маршрута только вместе, иначе каждый поедет сам по себе.
Для этого в поле conditionдля W2 пишем:

Bill == driver Truck1 AND John == driver Truck2 AND Captain in Truck2

Точка выгрузки W3 имеет тип GET OUT, поэтому командир прикажет всем покинуть грузовики и направляться в пункт назначения W4 пешком.

Ещё пару полезных советов, которые пригодятся при организации конвоя.
  1. Транспортные средства должны следовать в порядке убывания звания. Иными словами, в голове колонны должен стоять капитан, за ним лейтенант и так далее. Иначе порядок будет нарушаться, т.к. старший будет пытаться вырваться вперёд.
  2. Чтобы колонна следовала строго по дороге, в поле behaviour вейпоинта W2 нужно поставить SAFE.

<<<Назад <<<


Основы: как организовать погрузку и высадку

Сценарий погрузки и высадки бойцов в различные транспортные средства.

Сценарий может быть очень простым или довольно сложным, в зависимости от того сколько дополнительной информации, спецэффектов и логики он включает.
Рассмотрим типичный простой пример: к солдату подъезжает джип (грузовик, танк и т.д.), ждёт пока он загрузится, затем отвозит его в заданное место, ждёт выгрузки и уезжает.

Запускаем встроенный редактор в режиме ADVANCED.

Создаём действующие лица:
1. Джип. WEST, not empty. В строке NAME присваиваем ему имя, например "JEEP1".
2. Солдата игрока. WEST, player. Называем его "Bill".

Для джипа создаём 3 waypoint'a - точка погрузки W1, точка высадки W2, точка ухода W3.
В строке Condition для W1 пишем:
Bill in JEEP1
Это означает что джип не уедет из W1 до тех пор, пока Bill не загрузится в JEEP1.
В строке Condition для W2 пишем:
NOT (Bill in JEEP1)
Это означает что джип не уедет из W2 до тех пор, пока BILL не покинет JEEP1. Как только игрок выйдет из джипа, тот направится в точку W3.

Если вместе с Биллом требуется загрузить ещё и Джона, условие для W1 будет выглядеть так:
Bill in JEEP1 AND John in JEEP1
Только сначала не забудьте создать бойца и назвать его "John".
Используя в условиях логических операторов NOT, OR и AND можно добиться различных сценариев.

<<<Назад <<<


Перенос оружия из одной миссии в другую в кампании

Если хотите, чтобы у юнита оружие оставалось из предыдущей миссии, а также кол-во патронов и уровень здоровья, то создаем файл (скрипт) exit.sqs (как в ориг. кампании). Пишем в нем:

aP saveStatus "MyStatus"

Скрипт exit.sqs запускаем при заканчивании миссии.

В файле init.sqs следующей миссии пишем:

aP loadStatus "MyStatus"

При этом оружие перейдет в следующую миссию (даже кол-во патронов в магазине останется прежним).


Подробное описание: редактирование *.sqm файлов.

<<<Назад <<<

Подробное описание: редактирование *.sqm файлов

// NOTE: YOU CAN ACTUALLY USE C++ Style comments in the file
// Helpful if authors added comments so others could see the logic more easily

// Version. Leave this as 11.0
version=11.000000;

// Mission Class describes an entire mission
class Mission

{

// Used for random events.
randomSeed=-1393918.000000;

// Intel Class describes some basic mission information
class Intel

{
// Shows up in list of missions when selecting mission
briefingName="Ambush (Demo)";

// Description of briefing
briefingDescription="This is a stupid mission";

// Used to indicate what the weather is and will be like.
// Values of 0.0-0.9 where 0.9 is stormy weather and 0.0 is sunny
startWeather=0.487594;
forecastWeather=0.687794;

// Used to indicate what the fog will be like. Values of 0.0 - 1.0
startFog=0.5;
forecastFog=1.0;

// Month
// Values=(1-12) Hope everyone knows that by now!
month=7.000000;

// Day of the month. Values (1-31)
day=5.000000;

// Hour of the Day. Values (1-24)
hour=5.000000;

// Minute of the Hour. Values (0-59)
minute=35.000000;

};

//Group classes are used to define groups of vehicles/troops in the game
class Groups

{

// Number of groups in the mission
items=39.000000;

// Info about a specific group
class Item0
{
// What side this group is on. Values=("WEST","EAST"). DOES "Guer" WORK HERE???????
side="WEST";

// Vehicle classes are used to define individual vehicles/troopers in a group
class Vehicles
{

// Number of groups. You MUST make sure this is the same as the number of waypoints defined below.
items=6.000000;

// Info about a specific unit in the group. Need to define one of these classes for each unit in the group.

class Item0
{
// Probability of presence (how likely to be created). Adds variability
// 0.0 - 1.0 where 1.0 is 100% going to be created. Optional field
presence=0.600000;

// Condition that must be true in order for this vehicle to appear.
presenceCondition="true";

// Position of this waypoint (X,Z,Y coordinates) in meters
// X starts at 0 on the left side of the screen
// Y starts at 0 on the bottom of the screen
// Z is height (only if flying unit)
position[]={6710.527832,82.907585,5408.891602};

// Placement Radius. Distance is meters to randomly place the unit away from position.
// Adds variability to starting positions. Optional field
placement=20.00000;

// Angle the unit will be facing in degrees (0-359). 0 is north. 90 is east 180 is south 270 is west
azimut=355.000000;

// Special behaviour for this unit
// Values are :
// "NONE" = no special behaviour
// "CARGO" = Indicates unit can store things.
// "FLY" = Indicates unit is flying
// "FORM" = In formation.
// Optional field
special="NONE";

// Unique identifier for this unit. This MUST be unique for ALL units defined in the mission.
id=0.000000;

// Which side is this unit? on?
// Values are :
// "WEST"=NATO
// "EAST"=Soviet
// "GUER"=Resistance
// "LOGIC"=Logic. How is this used?
// "EMPTY"=No side. Used for things like Ammoboxes
side="WEST";

// Unit class name
// Values are :
// The number in parens is the amount of ammo clips plus any clip already in weapon
//
// WESTERN SOLDIERS :
// "OfficerW" = West Officer with M16 (3+1) Handgrenade (6)
// "OfficerWNight" = West Officer with M16(3+1),M203, NightVision and flares
// "SoldierW" = West Soldier with M16 Grenade Launcher (3+1) Grenade(3) (IS THIS IN GAME?)
// "SoldierWB" = West Soldier with M16A2 (3+1) Handgrenade (6)
// "SoldierWAT" = West Soldier with M16A2 (3+1) Carl Gustav Launcher(1)
// "SoldierWLAW" = West Soldier with M16A2 (3+1) and LAW (3)
// "SoldierWMG" = West Soldier with M60 Machine Gun (4+1)
// "SoldierWG" = West Soldier with M16A2 with grenade launcher (3+1) Grenade (3)
// "SoldierWMedic" = West Medic with M16A2 (3+1)
// "SoldierWAA" = West soldier with M16A2 (3+1) and Stinger Missile (1)
// "SoldierWPilot" = West pilot with XM(3+1) Handgrenade(6)
// "SoldierWMortar" = West soldier with M16A2 (3+1) Grenade (3) mortar
// "SoldierWCrew" = West crew member with XM (3+1) Handgrenade (6)
// "SoldierWMiner" = West combat engineer with M16A2 (3+1) MINE(3) Binocular
// "SoldierWSniper" = West soldier with Sniper rifle
// "SoldierWSaboteur"= ?? (IS THIS IN GAME?)
// "SoldierWSaboteurPipe" = West Black Ops soldier with pipe bombs (night)
// "SoldierWSaboteurDay"= West Black Ops soldier with pipe bombs
// "SoldierWLawSniper"=? (IS THIS IN GAME?)
// "SoldierWCaptive" = West soldier captured. No weapons and ID says captive
// "SoldierWNOG" = West Soldier with M16 + grenades (IS THIS IN GAME?)
// "SoldierWFakeE = "West Soldier wearing Soviet clothing and weapons (IN GAME?)
//
// EASTERN SOLDIERS :
// "OfficerE" = East Officier
// "OfficerENight" = East Officer with AK74+Grenade Launcher, NightVis and flares
// "SoldierEB" = East Soldier with AK74
// "SoldierEG"=East Soldier with Ak74 + grenade launcher
// "SoldierELAW"= East Soldier with RPG
// "SoldierEMG" = East Soldier with PK Machine Gun
// "SoldierEMedic" = East Medic
// "SoldierEAT" = East soldier with RPG
// "SoldierEAA" = East soldier with ?? Missile
// "SoldierECrew" = East crewmember
// "SoldierENOG" = East soldier with AK74 + hand grenades (IS THIS IN GAME?)
// "SoldierEPilot" = East Pilot
// "SoldierEMortar" = East soldier with mortar (IS THIS IN GAME?)
// "SoldierEMiner" = East combat engineer with mines
// "SoldierECaptive" = East prisoner (IS THIS IN GAME?)
// "SoldierESniper" = East soldier with Sniper rifle
// "SoldierESniperLAW" = East soldier with Sniper rifle and LAW (NOT IN GAME)
// "SoldierESaboteur" = East soldier with ? (IS THIS IN GAME?)
// "SoldierESaboteurPipe" = East Spetz Natz soldier with pipe bombs
// "SoldierESaboteurDay" = East soldier with ? (NOT IN GAME)
// "SoldierEFakeW" = East soldier wearing U.S. clothing and weapons (IN GAME?)
// "GeneralE" - east general. No weapons.
//
// RESISTANCE SOLDIERS :
// "SoldierGB" = Resistance soldier
// "SoldierGCrew" = Resistance crew member
// "SoldierGMedic" = Resistance medic
// "SoldierGPilot" = Resistance pilot
// "SoldierGG" = Resistance grenadier
// "SoldierGMG" = Resistance machine gunner
// "SoldierGLAW" = Resistance RPG soldier
// "SoldierGAT" = Resistance antitank soldier
// "SoldierGAA" = Resistance antiair soldier
// "OfficerG" = Resistance officer
// "OfficerGNight" = Resistance officer with night vision
//
// WESTERN VEHICLES :
// "M60" = U.S. M60 Tank
// "M1Abrams" = U.S. M1 Abrams Tank
// "M113" = U.S. Armored personnel carrier
// "M113Ambul" = Armored Ambulance
// "M2StaticMG" = Static Machine Gunner
// "Jeep" = U.S. M-152 Jeep (not some housewife SUV)
// "JeepMG" = U.S. Jeep with Machine Gun
// "Truck5t" = U.S. 5 ton truck with enclosed bed
// "Truck5tOpen" = U.S. 5 ton truck open bed
// "Truck5tRepair" = 5 ton repair truck
// "Truck5tReammo" = 5 ton reammo truck
// "Truck5tRefuel" = 5 ton refuel truck
// "BoatW" = Mark II PBR (Patrol Boat)
// "CarrierW" = LST (Landing Ship Tank)
// "Cobra" = AH1 Attack Helicopter
// "UH60" = U.S. UH60 Transport Helicopter
// "UH60mg" =U.S. UH60 Transport Helicopter with machine gun
// "A10" = A10 ground to air support plane (Warthog)
// "Parachute" = Parachute?
//
// EASTERN VEHICLES :
// "BMP"= Soviet Infantry Fighting Vehicle (IFV)
// "BMPAmbul" = Soviet armoured ambulance
// "UAZ" = Soviet Armored personnel carrier
// "T72" = Soviet heavy tank
// "T80" = Soviet Tank
// "Ural" = Soviet 5 ton truck
// "UralRepair" = Soviet repair truck
// "UralReammo" = Soviet reammo truck
// "UralRefuel" = Soviet refuel truck
// "ZSU" = Soviet AA
// "Scud" = Soviet mobile SCUD missile launcher
// "Mi24" = Soviet Hind gunship/transport helicopter
// "Mi17"=Soviet gunship
// "M2StaticMGE"=Soviet Static Machine Gun
// "BoatE"=
//
// RESISTANCE VEHICLES:
// "TruckV3SG" = Resistance PV3S Truck
// "TruckV3SGRefuel" = Resistance refueling truck
// "TruckV3SGRepair" = Resistance repair truck
// "TruckV3SGReammo" = Resistance reammo truck
// "GJeep" = Resistance Jeep
// "UAZG" = Resistance personnel carrier
// "SGUAZG" = Resistance ?
// "T55G" = T55 tank
//
// CIVILIAN :
// "Civilian" = Civilian man wearing white
// "Civilian2" = Civilian man wearing grey
// "Civilian3" = Civilian man wearing black
// "Angelina" = woman in NATO? cloth. No weapons.
// "Rapid" = Sports car
// "RapidY" = Yellow Sports car
// "Skoda" = Yellow car
// "SkodaBlue" = Blue car
// "SkodaRed" = Red car
// "SkodaGreen" = Green Car
// "Tractor" = Tractor
// "TruckV3SCivil" = Civilian truck
// "Cessna" = Cessna small airplane
//
// MISCELLANOUS OBJECTS :
// "FlagCarrier" = Flagpole. Refer to
// How to command things using the init, expCond, expActiv and expDesActiv fields for setting flag texture.
// "Danger" = Danger sign
// "Fire" = campfire (lightable)
// "TargetE" = Man shaped target
// "TargetGrenade" = Tank shaped target
// "CampEmpty" = Open tent with rounded roof
// "Camp" = Closed up tent with rounded roof
// "CampEast" = Open tent with angled roof
// "CampEastC" = Closed tent with angled roof
// "MASH" = Field Hospital (can heal here)
// "Fortress1" = Large bunker
// "Fortress2" = Small bunker
// "Grave" = Grave
// "GraveCross1" = Grave with cross and dog tags
// "GraveCross1" = Grave with cross
// "GraveCrossHelmet" = Grave with cross and helmut
// "ACamp" = ? (looks like a little tent)
// "Fence" = Sandbags corner
// "FenceWood" = Sanbags straight with wood supports
// "Wire" = Barbed wire
// "WireFence" = Fence with barbed wire at top
// "Barrels" = four barrels
// "Barrel1" = Red barrel
// "Barrel2" = Brown barrel
// "Barrel3" = White barrel
// "Barrel4" = Another white barrel
// "Camera1" = Video camera on tripod
// "Table" = Small table
// "Tablemap" = Small table with map
// "Chair" = You guessed it! A CHAIR!
// "ChairHangar" = Another chair
// "ChairX" = Another chair
// "ChairSmall"=Small chair
// "Phone" = Telephone
// "Computer" = Gee I wonder what this is?
// "VideoTable" = Television
// "TablePub" = Table (Pub style with green tablecloth)
// "Radio" = Small Radio
// "Crawling" = Crawling training
// "ExcerciseTrack" = Consists of wall with doorway and ramp
// "ExcerciseTrack2" = A walkway for running up and down
// "ExcerciseTrack3" = A small obstacle course to run through
// "Paleta1" = Wood palette
// "Paleta2" = Wood palettes
// "JeepWreck1" = Burned out jeep
// "JeepWreck1" = Burned out upside down jeep
// "JeepWreck1" = Burned out jeep with crushed front end
// "M113Wreck" = Burned out M113
// "UralWreck" = Ural Truck wreck
// "Body" = Body covered with a cloth
// "Shed" = Camo netting for tanks/vehicles
// "ShedSmall" = Camo netting and sandbags
// "HeliH" = Helicopter landing (with H on ground)
// "HeliHEmpty" = Helicopter landing (no symbol)
// "ReammoBoxWest" = Western reammo box (hand grenades,ammo)
// "ReammoBoxEast" = Eastern Reammo box (hand grenades,ammo)
// "ReammoBoxGuer" = Guerilla ammo box (hand grenades,ammo)
// "HeavyReammoBoxWest" = Western reammo box (hand grenades,ammo,mines,mortar,satchel)
// "HeavyReammoBoxEast" = Eastern reammo box (hand grenades,ammo,mines,satchel)
// "HeavyReammoBoxRes" = Guerilla reammo box (hand grenades,ammo,mines,satchel)
// "MachineGunBox=M60 and ammo
// "MineMine" = Anti Tank Mine (use to create mine fields)
// "Logic" =?
//
// BUILDINGS :
// "Houseryb_domek"=Single Story 2 room White House (can enter)
// "Housemajak"=Lighthouse (can't enter)
// "Houseplechbud"=Small metal shed with picture of Lenin inside (can't enter)
// "Housedeutshe_mini"=Single Story 4 room White House (can enter)
// "Housebouda2_vnitrek"=Single Story 1 room dark wood building (can enter)
// "Housedeutshe" = Two Story Bavarian style building (can't enter)
// "Housedum_mesto" = Two Story White Stone building (can't enter)
// "Housedum_mesto2" = Two Story White building (can enter first floor rooms)
// "Housedum_mesto2l" = Two Story Greyish building (can't enter)
// "Housedum_mesto3" = Two Story White building with Large Red door (can't enter)
// "Housedum_rasovna" = One Story 2 room White House with loft and hole in wall (can enter)
// "Housedum_rasovna_in" = Same as Housedum_rasovna?
// "Housebouda2" = Single Story Dark Wood Building (can't enter)
// "Housebouda3" = Single Story Dark Wood Warehouse with large glass windows (can't enter)
// "Housedumruina" = Two Story White Building with arched indentations (can't enter)
// "Housedumruina_mini" = Single Story White Building with arched indentations (can't enter)
// "Housestodola_open" = White Barn with brown doors (can enter)
// "Housestatek_kulna" = Single story grey building with underlying stone showing (can't enter)
// "Housebudova5" = Single story tan building with flat roof (can't enter)
// "Housedum01" = Single story white building with boarded windows (can't enter)
// "Housecihlovej_dum_mini" = Single story 2 room dark brick building (can enter)
// "Housecihlovej_dum" = Two story narrow dark brick building (can't enter)
// "Housecihlovej_dum_in" = Two story narrow dark brick building (can enter)
// "Housebudova1" = Single story tan building (can't enter)
// "Housebudova3" = Another single story tan building (can't enter)
// "Housebudova4" = Single story long and narrow tan building (can't enter)
// "Housebudova2" = Single story L shaped tan building (can't enter)
// "Housegaraz" = Single story white garage with numbers 1-5 on doors (can't enter)
// "Housegaraz_bez_tanku" = Concrete tank garage with doors closed (can't enter)
// "Housegaraz_s_tankem" = Concrete tank garage with tank inside and ammo boxes (can't enter)
// "Houserepair_center" = Vehicle repair center (can't enter)
// "Housedum02" = Two story building (1st floor white, 2nd floor tan) (can't enter)
// "Houseafdum_mesto2" = Two story burned out white building no roof (can't enter)
// "Househospoda_mesto" = Two story white pub? (can enter)
// "Housestanice" = Another Single story small building (can't enter)
// "Housedum_m2" = Single story white building with tan door (can't enter)
// "Housebouda1" = Two story building with arched doorway (can't enter)
// "Housestodola" = Large white/red brick barn with red roof (can't enter)
// "Housestatek_hl_bud" = Single story white building with decorative roof (can't enter)
// "Househospital" = Single story U shaped hospital (can't enter)
// "Housemesto_dum" = Two story white stone building (can't enter)
// "Househelfenburk" = Five story Castle Keep on rock foundation (can enter)
// "Housedum_olezlina" = Two story white building with boarded windows (can't enter)
// "Houseafdum_mesto3" = Two story burned out white building with archway running through it (can't enter)
// "Houseafhospoda_mesto" = Two story burned out white corner building (can't enter)
// "Housedulni_bs" = Single story ruined building barred windows and no roof (can't enter)
// "Housekostel_trosky" = Church ruins (can enter)
// "Houseafdum_mesto2l" = Two story burned out white building (no roof) (can't enter)
// "Housedum_mesto_in" = Two story white stone building with balcony (can enter)
// "Houseafbarabizna" = Two story white stone building caved in (can't enter)
// "Househruzdum" = Tall skinny three story white stone building (can enter)
// "Houseammostore2" = Vehicle garage with door open and ammo boxes (can't enter)
// "ViewTower" = Metal guard tower with no roof (can enter)
// "ViewTower2" = Metal guard tower with roof (can enter)
// "Church001" = White church red roof with tower (can enter tower)
// "Church002" = Large tan church (can't enter)
// "Church003" = Tan church with clock tower (can't enter)
// "Chapel001" = Small white chapel (can't enter)
// "FuelStationNew" = Fuel Station (can't enter)
// "FuelStationNew2" = Camoflauged fuel station (can't enter)
// "Barracks" = Single story tan soviet barracks
// "Hangar_Hall" = Airplane hanger (can enter)
// "Fountain" = Water fountain (without any water)
//
// VEHICLE TYPES I DIDN'T SEE A MODEL WITH
// "Office" = I didn't see any model with this.
// "Hangar" = I didn't see any model with this.
// "Hangar_Office" = I didn't see any model with this.
// "Forest001" = I didn't see any model with this.
//
// NEED TO VERIFY IF THESE ARE STILL IN THE GAME
// "BarrelHelper" = Some soviet personnel carrier? Can't get in it. Can't destroy it.
// "PaletaHelper" = Same as BarelHelper

vehicle="OfficerW";

// Indicates the unit will be controlled by you as well as starting position
// "PLAYER COMMANDER" - Start in Commander position if this is a vehicle
// "PLAYER DRIVER" - Start in the Driver position if this is a vehicle
// "PLAYER GUNNER" - Start in Gunner position if this is a vehicle
// "PLAY C" - Playable as commander (for multi play)
// "PLAY D" - Playable as driver (for multi play)
// "PLAY G" - Playable as gunner (for multi play)
// "PLAY CD" - Playable as Commander or Driver (for multi play)
// "PLAY CG" - Playable as Commander or Gunner (for multi play)
// "PLAY DG" - Playable as Driver or Gunner (for multi play)
// "PLAY CDG" - Playable vehicle (for multi play)
// Optional field
player="PLAYER COMMANDER";

// Leader of this group. Only one unit in group must have this defined as 1.
// Values are: 0 = not the leader / 1 = leader
// Optional field
leader=1.000000;

// Indicates if the player can drive the vehicle
// "LOCKED" - player cannot enter the driver seat
// "UNLOCKED" - player can enter the driver seat
// Optional field
lock="LOCKED";

// Rank of this unit
// Affects order of leadership if leader killed.
// Is also valid for vehicles
// Values are:
// "PRIVATE"
// "CORPORAL"
// "SERGEANT"
// "LIEUTNANT"
// "CAPTAIN"
// "MAJOR"
// "COLONEL"
// "GENERAL" (is this even in game?)
// Optional field. Is the default corporal?
rank="COLONEL";

// Skill level of this unit. Values are (0.0-1.0) 0 being Gomer Pyle and 1.0 being Sergeant York.
skill=1.000000;

// Used to tag the unit for future needs (e.g moving other units into this unit)
// You can reference this specific unit by using this value.
// Optional field
text="UH";

// Indicates percentage of ammo the unit has left (0-1.0) 0 is empty 1.0 is full load.
ammo=0.900000;

// Indicates percentage of fuel the unit has left (0-1.0) 0 is empty 1.0 is full tank.
fuel=0.900000;

// Indicates percentage of health the unit has left (0-1.0) 0 is dead 1.0 is full health.
fuel=0.900000;

// How does this tie to markers at end of this file?
// Optional field
markers[]={};

// Initialization Behaviour
// Refer to my How to Command Things tutorial for more info
// Optional field
init="grp = group this; group this allowFleeing 0; this setidentity ""Commander""";
};

// Define all the waypoints for this group

class Waypoints

{

//Number of waypoints. You MUST make sure this is the same as the number of waypoints defined below.

items=16.000000;

// Info about a specific waypoint. You define one of these classes for each waypoint.
class Item0
{
// Position of this waypoint (X,Z,Y coordinates) in meters
// X starts at 0 on the left side of the screen
// Y starts at 0 on the bottom of the screen
// Z is height (only if flying unit)
position[]={6704.093262,83.758492,5413.947754};

// Placement radius
// How many meters to randomly put this waypoint away from position. Adds
// variablity to waypoint locations.
placement=20.000000;

// Text description of the waypoint
// Optional field
description="this is waypoint 1";

// Formation group to take at this waypoint
// Values are :
// "LINE" = Line formation
// "STAG COLUMN" = Staggered column formation
// The following are from the bin\stringtable file :
// "WEDGE" = wedge formation
// "ECH LEFT" = echelon left
// "ECH RIGHT" = echelon right
// "VEE" = vee formation
// "COLUMN" =column formation
// Optional field
formation="LINE";

// Indicates how group should react at this waypoint
// Values are :
// "SAFE"=Secure. Everything okay. Gun on back.
// "AWARE" = stay alert,go prone when you are prone, won't automatically go to cover
// "COMBAT" = uses lots of Prone and Sprinting to Advance
// "CARELESS" = Don't give a shit. Don't react even if grenade lands near them.
// "STEALTH" = unit will use cover, prone movement to advance.
// Optional field
combat="SAFE";

// Indicates the combat state the unit is in
// Values are :

// "BLUE" = Never Fire
// "GREEN" = Hold Fire
// "WHITE" = Hold Fire, Engage At Will
// "YELLOW" = Open Fire (stay where you are at)
// "RED" = Open Fire, Engage At Will (seek targets but stay near leader)

// Optional field
combatMode="BLUE";

// Speed group should take at this waypoint
// Values are :
// "FULL" = full speed ahead
// "NORMAL" = normal speed
// "LIMITED" = Slow speed
// Optional field
speed="FULL";

// The type of this waypoint
// Values are :
// "GETIN" = Order the units assigned to this vehicle to get into the vehicle.
// "GETOUT" = Order assigned units of the vehicle to get out and proceed to next waypoint on foot
// "HOLD" = Stop
// "SAD" = Seek and Destroy? Attack then resume waypoints?
// "DESTROY" = Destroy. Does this mean keep moving as well?
// "CYCLE" = Will cycle back to the first waypoint and start over
// "JOIN" = Follow?
// "TR UNLOAD" = Unload the vehicles cargo and then proceed to nxt waypoint
// "MOVE" = Just keep moving
// "LEADER" = Join and lead
// "LOAD" =
// "UNLOAD" =
// "SENTRY" = ?
// "GUARD" = ?
// "TALK" = ?
// "SCRIPTED" = ?
// "SUPPORT" = ?
// "AND" = ? Used when type = "LOGIC"
// "OR" = ? Used when type = "LOGIC?"
// Optional field. Default is "MOVE"
type="GETIN";

// Condition at this waypoint. Evaluated when the group arrives at this waypoint.
// If true then execute commands in expActiv field.
// Optional field
expCond="alive aP";

// Commands to execute if expCond field is true
// Optional field
expActiv="0 fadeMusic 0.3; ""1"" objstatus ""DONE""";

// Commands to execute when the group leaves this waypoint
// Optional field
expDesActiv="0 fadeMusic 0.3; ""1"" objstatus ""DONE""";

// Script to execute? When is this used?
script="dude.sqs";

// List of synchronization ids. Waypoints and sensors who share a common
// synchronization id will wait for each to trigger before executing.
synchronizations[]={2,14};

// Graphic, sound, music effects for this waypoint
class Effects

{
// Condition that must be true for these effects to occur
// Optional field
condition="alive billclinton";

// Musical track to play
// Optional field
track="01demo";

// Type of title to display
// The value of this fields affects the meaning of the title field.
// "TEXT" = Text title
// "OBJECT" = Object title
// "RES" = Resource title.
// Optional field
titleType = "OBJECT";

// Title to display
// If titleType field is "TEXT" then this is the text to display
//
// If titleType field is "OBJECT" then this identifies the object style. The builtin values are:
//
// If titleType field is "RES" then this identifies a resource to
// to use (what is a resource?). The builtin values are:
//
// Optional field
title="BISLogo";

// Effect to use for the title
// Values are:
// "BLACK FADED" = Fade out
// "PLAIN" = No fading
// "PLAIN DOWN" = ?
// "BLACK" = ?
// "BLACK OUT" = ?
// "BLACK IN" = ?
// "WHITE OUT" = ?
// "WHITE IN" = ?
// Optional field. Default is "PLAIN"
titleEffect="PLAIN DOWN";

// Camera effect to use at this waypoint. Camera is targeted at the waypoint center. Values are :
// "$TERMINATE$" = ??
// "Terminate" = This changes the view back to the player
// "Internal" =
// "ZoomIn" = Zoom in towards the waypoint center
// "ZoomInSlow" = Zoom in slowly towards the waypoint center
// "Around" = Rotate around the waypoint center
// "AroundSlow" = Slowly rotate around the waypoint center
// "ZoomAndAround" = Zoom towards the waypoint center then around it
// "AroundAndZoomINSlow" = Rotate around the waypoint center and then zoom in slowly
// "ZoomInS" = ??
// "Fixed"=Camera is at a fixed distance from waypoint center
// "FixedWithZoom" = Camera has zoom lense and is at a fixed distance from the waypoint center
// "External" = ??
// Optional field
cameraEffect="ZoomIn";

// Starting position of the camera relative to the waypoint
// Optional field
// Values are:
// "TOP" = Directly above waypoint looking down
// "LEFT" = To the left of the waypoint
// "RIGHT" = To the right of the waypoint
// "FRONT" = To the front of the waypoint
// "BACK" = To the back of the waypoint
// "LEFT FRONT" = To the left/front of the waypoint
// "RIGHT FRONT" = To the right/front of the waypoint
// "LEFT BACK" = To the left/back of the waypoint
// "RIGHT BACK" = To the right/back of the waypoint
// "LEFT TOP" = To the top/left of the waypoint
// "RIGHT TOP" = To the top/right of the waypoint
// "FRONT TOP" = To the front/top of the waypoint
// "BACK TOP" = To the back/top of the waypoint
// "BOTTOM" = ?
cameraPosition="TOP";

// Sound effect to play at this waypoint. Optional field
sound="Eng1";

// Environmental sound effect to play at this waypoint
// Values built into game
// "Default" = ?
// "Rain" = Sound of rain
// "Sea" = Sounds of the sea
// "Meadows" =
// "Trees"=
// "Hills"=
// "Combat" = Combat sounds
// Optional field
soundEnv="Rain";

// Ambient sound to play at this waypoint
soundDet="Cricket1Sfx";

// Voice sound to play at this waypoint
// Optional field
voice="Eng4";

};

// Timer values for this waypoint. These determine the time to wait before executing the commands at this waypoint. If all values are the same then the
// time is constant otherwise the time will be between timeoutMin and timeoutMax
// with an equal likelihood of the value greater or less than timeoutMid
timeoutMin=5.000000;
timeoutMid=7.000000;
timeoutMax=10.000000;

// Show the Waypoint on the map. If you control a unit in this group then you will
// see and be able to move the shown waypoints on the map (except for the starting waypoint.
// Values :
// "NEVER" - Don't show this waypoint
// "EASY" - Only show this waypoint only if difficulty is Cadet level
// "ALWAYS" - Show this waypoint
showWP="NEVER";

// In bin/stringtable.csv I also saw these which might be
// other attributes:
// HOUSEPOS : Position in the house?

};
};
};

// You can also create vehicles which are not part of any group.
// Format is same as the above Vehicle class definition. This is where you create buildings and
// fences, and other things you wouldn't put into a group You can also add vehicles here you want
// to have available to drive yourself.
class Vehicles
{

};

// Marker classes identify markings on map for this mission
class Markers
{
// How many markers?
items=18.000000;

// Info about each marker.
class Item0
{
// Position of this waypoint (X,Z,Y coordinates) in meters
// X starts at 0 on the left side of the screen Y starts at 0 on the bottom of the screen
// Z is height (not used for markers)
position[]={8091.201172,8.996542,5152.532715};

// Name of marker
// Identifier for this marker
name="Start";

// Text for marker. This text is seen on the map
// Optional field
text="Starting Position";

// Type of marker
// Values are:
// "RECTANGLE" = Rectange shape
// "ELLIPSE" = Ellipse shape
// Optional field. If you don't use this then the marker is an icon type.
markerType="ELLIPSE";

// Type of icon to use.
// Values are:
// Not sure if all of these are in the demo
// "Start" = Arrow moving out of a circle
// "End" = Circle with an arrow going into it from the top
// "Pickup" = Arrow bouncing in and out of a circle
// "Empty" = Circle with a diagonal line through it
// "Marker" = X icon
// "Destroy" = Targetting icon
// "Arrow" = Arrow
// "Flag" = ? I see this used if the markerType field is set.
// "Flag1" = Flag icon
// "Warning" = Exclamation Mark
// "Dot" = Simple little dot. Can use these to denote movement paths
// "Join" = Two Arrows joining in a circle
// "Unknown" = Question Mark
type="Start";

// Marker Fill Brushes
// Use these when markerType field is set to denote area fill type.
// Values are:
// "Solid" = Solid Fill
// "Horizontal" = Horizontal lines
// "Vertical" = Vertical lines
// "Grid" = Grid lines
// "FDiagonal" = Forward Diagonal
// "BDiagonal" = Backward Diagonal
// "DiagGrid" = Grid Diagonal
// "Cross" = Cross fill
// Optional field.
fillName = "BDiagonal";

// Horizontal radius of marker area if markertype is "ELLIPSE"
// Horizontal dimension of marker area if markertype is "RECTANGLE"
// Optional field.
a=40.000000;

// Vertical radius of marker area if markertype is "ELLIPSE"
// Vertical dimension of marker area if markertype is "RECTANGLE"
// Optional field.
b=4.000000;

// Angle of clockwise rotation in degrees for the marker icon
// Optional field
angle=-140.000000;

// Color of icon
// Values are:
// "ColorGreen"
// "ColorGreenAlpha"
// "ColorRed"
// "ColorRedAlpha"
// "ColorBlack"
// "ColorBlue"
// "ColorYellow"
// "ColorWhite"
// Optional field. Default is "ColorBlack"
colorName="ColorGreen";

};

};

// Sensors are used to define ambient sounds and trigger points on the map
class Sensors
{
// Number of sensors
items=120.000000;

// Info about each sensor
class Item0
{

// Unique identifier for this sensor
name="Sensor 1";

// Text to describe this sensor (displayed in Mission Builder map)
text="This sensor does nothing";

// Position of this waypoint (X,Z,Y coordinates) in meters
// X starts at 0 on the left side of the screen
// Y starts at 0 on the bottom of the screen
// Z is height (used for sensors?)
position[]={6713.065918,161.670975,5830.863770};

// Horizontal radius of sensor area in meters if area is a circle
// Horizontal dimension of sensor area in meters if the area is a rectangle
// Optional field
a=5.000000;

// Vertical radius of sensor area in meters if area is a circle
// Vertical dimension of sensor area in meters if the area is a rectangle
b=5.000000;

// Indicates if the sensor area is rectangular or circular
// A value of 1 indicates rectangular. A value of 0 indicates circular.
// Optional field. Default is circular area.
rectangular=1.000000;

// Should this sensor repeat or trigger just once?
// Value of 1 indicates repeat.
// Value of 1 indicates once only.
// Optional field. Default is once only
repeating=1.000000;

// This field indicates that a sensor with a timer set can be aborted (and thus the expActiv field is not executed)
// if the sensor's expCond field is no longer true during the timeout period. Great way to say only do this action
// if this condition is always true for this amount of time.
// A value of 1 indicates that the sensor can be aborted
// A value of 1 indicates the sensor can not be aborted.
// Optional field. Default is sensor can not be aborted
interruptable=1.000000;

// These fields allow you to set a timer (in seconds) that needs to expire before the sensor expActiv field is
// actually executed. This allows you to add some delay. If Min,Mid,Max are all the same then the timer is
// always going to be that value. If Min,Mid,Max are different then the timer value will be randomly chosen
// between the min and max value considering the mid value is the mid point.
// If interruptable is set to 1 then these fields instead define the range of the timer period after the
// sensor is triggered to allow the sensor to be aborted (i.e. the expCond field is no longer valid during this
// timer period)
// Optional fields
timeoutMin=1.000000;
timeoutMid=1.000000;
timeoutMax=1.000000;

//?
// Optional field
angle=45.000000;

// Indicates who can activate this sensor.
// Values are:
// "GROUP" = The entire group of the unit specified by vehicleId field. IS THIS STILL IN GAME?
// "ANY" = Anyone can activate this sensor
// "VEHICLE" = Vehicle activation. Vehicle id field ids the vehicle? IS THIS STILL IN GAME?
// "EAST" = Eastern unit activates this sensor.
// "WEST" = Western unit activates this sensor.
// "GUER" = Resistance unit activates this sensor.
// "CIV" = Civilian unit activates this sensor.
// "LEADER" = Leader of the group of the unit identified with the vehicle id field. IS THIS STILL IN GAME?
// "MEMBER" = Any member of the group of the unit identified with the vehicle id field? IS THIS STILL IN GAME?
// "LOGIC" = ??
// "ALPHA" = Alpha radio channel activates this sensor
// "BRAVO" = Bravo radio channel activates this sensor
// "CHARLIE" = Charlie radio channel activates this sensor
// "DELTA" = Delta radio channel activates this sensor
// "ECHO" = Echo radio channel activates this sensor
// "FOXTROT" = Foxtrot radio channel activates this sensor
// "GOLF" = Golf radio channel activates this sensor
// "HOTEL" = Hotel radio channel activates this sensor
// "STATIC" = Static object? IS THIS IN GAME?
// Optional field
activationBy="GROUP";

// Type of activation?
// Values are:
// "EAST D" = Detected By East
// "WEST D" = Detected By West
// "GUER D" = Detected By Resistance
// "CIV D" = Detected By Civilian
// "NOT PRESENT" = Whoever is supposed to activate it isn't there?
// Also saw in bin/stringtable.csv Detected by Guerrila and Detected by
// Civilian.
// Optional field
activationType="EAST D";

// Type of sensor
// Values are:
// "SWITCH" = A switch sensor
// "END1" = Trigger ending number 1
// "END2" = Trigger ending number 2
// "END3" = Trigger ending number 3
// "END4" = Trigger ending number 4
// "END5" = Trigger ending number 5
// "END6" = Trigger ending number 6
// "NONE" = ? IS THIS IN GAME?
// "EAST G" = Guarded by east
// "WEST G" = Guarded by west
// "GUER G" = Guarded by resistance
// "LOOSE" = Lose ending Will execute the OutroLoose class (see at bottom of this file)
// Optional field
type="SWITCH";

// Age. What is this used for?
// Values are:
// "UNKNOWN"=?
// ARE THESE USED IN THE GAME?
// "5MIN" = 5 minutes (duh)
// "10MIN"
// "15MIN"
// "30MIN"
// "60MIN"
// "120MIN"
age="UNKNOWN";

// Id of the unit. Use by various values in the activationBy field.
// IS THIS STILL IN THE GAME?
// Optional field
idVehicle=3.000000;

// Specify a name for this sensor. Used to refer to sensor in the mission.
text="sfx";

// Condition for this sensor. Evaluated when the sensor is triggered. If this evaluated to be
// true then execute commands in expActiv field.
expCond="true";

// Commands to execute if expCond field is true
// Optional field
expActiv="namiste = true";

// Commands to execute when the unit which triggered this sensor is no longer triggering this sensor.
// Optional field
expDesactiv="Warning=false";

// Graphic, sound, music effects for this sensor
// THIS CLASS HAS THE SAME FIELDS AS THE EFFECTS CLASS IN THE WAYPOINT CLASS
class Effects
{

};

// List of synchronization ids. Waypoints and sensors who share a common
// synchronization id will wait for each to trigger before executing.
synchronizations[]={};

};
};

// Intro class is used to define the introduction sequence for this mission
// The format seems identifical to the mission class format with groups definitions,
// group waypoints, and sensors.
// This is actually used in the mission.sqm in the DTA/anims.pbo file. It defines the
// battle scene shown at beginning of game.

class Intro

{

}

// This class appears to define the outro sequence for this mission if the mission
// is a win. Format may be same as intro class. Wasn't used for demo.

class OutroWin

{

randomSeed=493314.000000;

class Intel

{

};

};

// This class appears to define the outro sequence for this mission if the mission
// is a lose. Format may be same as intro class. Wasn't used for demo.

class OutroLoose
{
randomSeed=-1517822.000000;

class Intel

{

};

};

<<<Назад <<<


Почти оптимальный скрипт

вот УНИВЕРСАЛЬНЫЙ ВЕРТОЛЁТНЫЙ скрипт.
(он ПОЧТИ ОПТИМАЛЕН т.к. понятие "ОПТИМАЛНОСТИ" относительно!!!)
(иными словами ЕСЛИ В ПРОГРАММЕ НЕТ ОШИБОК то это НЕ ПРОГРАММА)
ИТАК:
ФОРМАТ ПАРАМЕТРОВ:
[A,B,C,D,E,F,G] exec "uniheli.sqs"
A - Вертолёт (должен быть EMPTY)
B - Пилот
C - Стрелок
D - Десантная группа
E - Пункт назначения
F - Точка старта (с ТЕКУЩЕЙ позицией ВЕРТОЛЁТА может не совпадать!!!!)
G - Вид действия (код вида действия (цифра)).

коды видов действий:
0 - Транспортировка в точку E
1 - Эвакуация из точки E в точку F
2 - Выброска десанта над точкой E и возврат вертолёта в точку F

Если десантная группа или стрелок НЕ нужны, то передаём аргумент - NULL
аргументы E и F могут СОВПАДАТЬ.

ДЕЙСТВИЯ БУДУТ ДОПОЛНЯТЬСЯ.

ЭТО ВАЖНО ! ! !
НЕЛЬЗЯ ВЫЗЫВАТЬ СКРИПТ ПОВТОРНО ДО ЕГО ЗАВЕРШЕНИЯ ! ! !
чтобы обработать скриптом ДВА вертолёта ОДНОВРЕМЕННО,
скопируйте его в папку с Вашей миссией под другим именем
например - uniheliN.sqs, и вызов соответственно для второй вертушки [A,B,C,D,E,F,G]exec"uniheliN.sqs"

<<<Назад <<<


Прикрепление флага к юнитам

Создаём флаг, притом в таком месте где игрок его не увидет, так как перенося флаг, мы переносим только сам флаг, а флагшток остаётся на месте где флаг был создан.
Для новичков: русский флаг создаётся через this setFlagTexture "rus_vlajka.pac"

Далее.
Команда для техники и пехоты отличается.
Для пехотинца пишем в init флага this setFlagOwner aP
где aP-имя солдата.
Для техники - таже процедура, только после имени техники добавляем d.
Например-наш джип зовут jeep1.
Команда будет выглядеть так this setFlagOwner jeep1d

В общем init флага должен в этом случае выглядеть так:
this setFlagTexture "rus_vlajka.pac";
this setFlagOwner jeep1d

Наслаждаемся творением рук своих.


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

Как установить солдату определенное выражение лица.

aP setmimic Play

aP - имя солдата
Play - выражение лица

Вместо Play:

  • angry - злой
  • smile - улыбающийся
  • suprise - удивленный
  • hurt - чувство боли
  • sad - обидился
  • ironic - улыбка
  • cynic - ухмылка
  • agresive - агрессивный
  • normal - нормальный


Птичка

Покумекал над редактором и внезапно осенило: если мы уже умеем создавать снаряды и гранаты, то почему не создать и чайку в intro демы ОУ присутствует птица, но разработчики поленились соощить нам как они её туда положили

ptic = "seagull" camcreate [x,y,z]

в заданных координатах создается чайка. Вот и всё!

Чтобы заставить чайку сесть надо прописать команду: ptic camcommand "landed"
чтобы она летела: ptic camcommand "airborne"


Ролики. Урок 1

<<<Назад <<<

Ролики. Урок1

Вступление

Данные уроки предназначены для тех, кто, как и я годом раньше, думал, что не сможет осилить редактор ОФП. Создание же видеороликов представлялось чем-то из разряда фантастики. Данное ощущение не пропало даже после прочтения нескольких туториалов по скриптописанию. В данных темах я попытаюсь на примерах простых и сложных объяснить основы создания игровых роликов. Я намеренно не подразделяю ролики на вступительные (intro), промежуточные (проигрываемые в любом месте миссии) и финальные (outro), поскольку отсутствует разница в их создании. Кроме того, я не буду объяснять значение команд, с помощью которых функционирует камера (слава богу, об этом можно прочитать в любом русскоязычном туториале) – добавлю лишь то, до чего мне пришлось доходить самому. Вам необходима версия ОФП 1.75, так как она содержит более продвинутую анимацию и некоторые другие фишки.

Создание роликов. Урок I - Лирика.

Что же нужно, чтобы оживить свою миссию? Минимум: сюжет, умение работать с координатами (x,y,z), знать команды swithmove и playmove (особенно какие анимации с какими командами работают), и терпение для многократного просмотра своего вторения на предмет исправлений. Желательно также и понимание возможностей движка ОФП. Для начала определитесь с сюжетом своего ролика. При отсутствии оного, даже совершенный с технической точки зрения ролик не найдет своего зрителя или, как минимум, испортит впечатление обо всей миссии. Координаты в ОФП задаются непосредственно на объекте camsetpos [x,y,z] либо относительно этого объекта camsetrelpos [0,+1,2.5]. Тут все ясно, надо только добавить, что второй способ я чаще всего применяю, если надо нацелить камеру на бойца или объект под конкретным углом на конкретном расстоянии. Теперь об анимации. Немой ролик с неподвижными объектами не привлечет внимание аудитории. Техника должна двигаться, самолеты должны пролетать над головой, бойцы должны отжиматься, приседать и разговаривать, стрелять и вовремя умирать, солнце должно заходить и всходить тогда, когда вы ему прикажете. Для этого, помимо вышеуказанных команд нужно знать следующие: setacctime (замедляет время от 0 до1: позволяет не только создавать эффекты а’ля Макс Пэйн, но чаще всего эффектно отобразить анимацию. Например, удар кулаком, падение убитого бойца, посадка за стол и т.д.); domove, dotarget, dofire, setbehaviour, setspeedmode, setformdir, dowatch; а также команды, формирующие световые эффекты (затемнение и т.д.) и выводящие текст на экран – titletext и titlecut. Эти команды применяются при создании роликов чаще всего. Используются они как непосредственно в скрипте, так и на карте в триггерах и вэйпойнтах. Знание данных команд превратит любую немую сцену в художественный фильм. С чего же конкретно начать Вам? Возьмите любую миссию, содержащую видеоролики интересные на Ваш взгляд. Распакуйте миссию в директорию OFP/User/Mission. Запустите редактор и найдите эту миссию. Теперь переключаясь Alt-Tab’ом и глядя на скрипты и карту, попытайтесь проследить чью-то творческую мысль. Далее, заглядываем в файл intro.sqs (он может называться и по-другому), отвечающий за вступительный ролик. Попробуйте поменять координаты камер, время их работы camcommit, время их существования (обычно обозначается ~, например ~5 после строчки @camCommitted _cam), а также степень увеличения/уменьшения фокуса камеры (команда camSetFOV, 0,7 – норма; <0,7 – приближаем; >0,7 – удаляем камеру от объекта, на который она нацелена командой camsettarget). Немного поиграв с этими параметрами, Вы не только поймете их глубокий смысл, но и осознаете, как важны временные интервалы (~), нарушая которые, вы не увидите то, что задумывал автор. Таким образом, самый быстрый способ проникнуть в тайну создания ролика – взять и переделать чужой.

Ролики. Урок2

Создание роликов. Урок II - Поехали.

Теперь о технической стороне процесса: как переделать чужой ролик под свою миссию. Вот мы и добрались до чужого ролика (дабы не обижать авторов, я в качестве примера выложу свой Login15Eng.Noe.pbo). Потрудитесь создать в папке со своей миссией файл INIT.SQS со строкой titleCut ["","BLACK IN", 3]. Этот файл проигрывается автоматически движком ОФП и в данном случае начинает проигрывать ролик с выходом из затемнения. На карте, вдали от места основного действия ставим игрока в строке инициализации которого прописываем [] exec “intro.sqs” – он нам запустит наш вступительный ролик. Далее, на карте (см. рисунок) создаем бойца s3 (в строке инит которого напишите this setbehaviour “SAFE”) и поблизости от него три лоджика (game logic): gl1, gl2, gl3. При создании лоджиков и иных объектов следите (F2), чтобы они не образовывали группы, иначе они изменять свое, т.е. вами установленное, первоначальное положение. Также ставим триггер с типом end#1 (финал-победа1) и в поле Condition вместо this прописываем end. Далее, в любом месте скрипта, когда мы скажем, что end = true, он завершится. Теперь берете файл INTRO.SQS (выложен ниже) и из всего имеющегося оставляйте только следующее (измените в Notepad и не забудьте сохранить и закрыть скрипт перед просмотром):

;----------------------------------------------------------------------------------------------------------
; This script is made by LOGIN (all rights reserved :-)
; ----------------------------------------------------------------------------------------------------------

; создаем дефолтную камеру
mycam = "camera" camcreate [0,0,0]
mycam cameraeffect ["internal", "back"]
; устанавливаем замедление времени ( в данном случае – отсутствует)
setacctime 1.0
; устанавливаем видимость в игре (влияет на производительность и прохождение)
setviewdistance 900
; начинаем проигрывание музыки (можно без нее, также можно вставить в любом другом месте ниже)
playmusic ["track5",1]

; Первый вариант – нацеливаем камеру на солдата s3, которого предварительно ставим на
; карте и прописываем его имя в соответствующей строке. Нацеливание происходит через
; относительное задание координат и посредством создания камеры в лоджике (game logic), которые, как известно, в игре невидимы.

mycam = "camera" camCreate getPos s3
mycam camsetTarget s3
mycam cameraEffect ["INTERNAL", "BACK"]
; устанавливаем камеру относительно солдата [ влево от него, назад от него, высота]
mycam camSetRelPos [2, -1.5, 1]
; немного приблизим к нему камеру 0,65 (можете сделать меньше или больше)
mycam CamSetFOV 0.65
; камера появляется мгновенно
mycam camCommit 0
; здесь можно написать какой-либо текст сообщения либо удалить эту строчку
titlecut ["Здесь пишем какой хотим текст","plain down",1]
; текст продержится на экране примерно 4 секунды
~4
; камера проверяет исполнение всех действий и завершает свое существование через 3
; секунды (сначала Вы можете увеличит время, чтобы внимательно все осмотреть)
@camcommitted mycam
~3

; камера занимает положение лоджика (game logic) gl1, который вы предварительно
; установили поблизости от бойца s3 в любом месте
mycam camsetpos getpos gl1
glcoords = getpos gl1
x = glcoords select 0
y = glcoords select 1
z = glcoords select 2
; задаем высоту расположения камеры z+1 (можно поставит и 5 метров и больше)
mycam camsetpos [x,y,z+1]
; камера нацеливается непосредственно на бойца s3
mycam camsettarget s3
mycam camSetFOV 0.70
; камера занимает новую позицию в gl1 неи прописываем его имя в соответствующей строке. Нацеливание происходит через
; относительное задание координат и посредством создания камеры в лоджике (game logic), которые, как известно, в игре невидимы.

mycam = "camera" camCreate getPos s3
mycam camsetTarget s3
mycam cameraEffect ["INTERNAL", "BACK"]
; устанавливаем камеру относительно солдата [влево от него, назад от него, высота]
mycam camSetRelPos [2, -1.5, 1]
; немного приблизим к нему камеру 0,65 (можете сделать меньше или больше)
mycam CamSetFOV 0.65
; камера появляется мгновенно
mycam camCommit 0
; здесь можно написать какой-либо текст сообщения, либо удалить эту строчку
titlecut ["Здесь пишем какой хотим текст","plain down",1]
; текст продержится на экране примерно 4 секунды
~4
; камера проверяет исполнение всех действий и завершает свое существование через 3
; секунды (сначала Вы можете увеличит время, чтобы внимательно все осмотреть)
@camcommitted mycam
~3

; камера занимает положение лоджика (game logic) gl1, который вы предварительно
; установили поблизости от бойца s3 в любом месте
mycam camsetpos getpos gl1
glcoords = getpos gl1
x = glcoords select 0
y = glcoords select 1
z = glcoords select 2
; задаем высоту расположения камеры z+1 (можно поставит и 5 метров и больше)
mycam camsetpos [x,y,z+1]
; камера нацеливается непосредственно на бойца s3
mycam camsettarget s3
mycam camSetFOV 0.70
; камера занимает новую позицию в gl1 не мгновенно, а через 7 секунд
mycam camcommit 7
; здесь можно вставить любую анимацию бойца s3
s3 playmove "FXShow5"
; и дать время на ее завершение
~3
@camcommitted mycam
~3

; теперь камера, находясь в лоджике gl1 и не перемещаясь, будет нацелена на лоджик gl2,
; который вы предварительно установили в любом месте, например, на доме, на дереве и
; другом месте
mycam camsetpos getpos gl1
glcoords = getpos gl1
x = glcoords select 0
y = glcoords select 1
z = glcoords select 2
mycam camsetpos [x,y,z+1]
; нацеливаем камеру на лоджик gl2
mycam camsettarget gl2
mycam camSetFOV 0.70
; камера переведет объектив на лоджик gl2 за 8 секунд
mycam camcommit 8
; и закончит свою работу после нацеливания на gl2 через 2 секунды
@camcommitted mycam
~2

; теперь, переместим камеру в лоджик gl3, одновременно меняя цель. Теперь камера снова
; будет нацелена на бойца s3, причем сразу приблизим камеру к бойцу.
mycam camsetpos getpos gl3
glcoords = getpos gl3
x = glcoords select 0
y = glcoords select 1
z = glcoords select 2
; поставим камеру в 5 метрах от земли
mycam camsetpos [x,y,z+5]
mycam camsettarget s3
; приблизим камеру к бойцу
mycam camSetFOV 0.350
; изменения произойдут через 7 секунд
mycam camcommit 7
; заставим бойца присесть
s3 playmove “FXtoKneel”
@camcommitted mycam
~5

; теперь все остается на своих местах, но вы поменяете фокус камеры – отдали ее от бойца
mycam camsetpos getpos gl3
glcoor мгновенно, а через 7 секунд
mycam camcommit 7
; здесь можно вставить любую анимацию бойца s3
s3 playmove "FXShow5"
; и дать время на ее завершение
~3
@camcommitted mycam
~3

; теперь камера, находясь в лоджике gl1 и не перемещаясь, будет нацелена на лоджик gl2,
; который вы предварительно установили в любом месте, например, на доме, на дереве и
; другом месте
mycam camsetpos getpos gl1
glcoords = getpos gl1
x = glcoords select 0
y = glcoords select 1
z = glcoords select 2
mycam camsetpos [x,y,z+1]
; нацеливаем камеру на лоджик gl2
mycam camsettarget gl2
mycam camSetFOV 0.70
; камера переведет объектив на лоджик gl2 за 8 секунд
mycam camcommit 8
; и закончит свою работу после нацеливания на gl2 через 2 секунды
@camcommitted mycam
~2

; теперь, переместим камеру в лоджик gl3, одновременно меняя цель. Теперь камера снова
; будет нацелена на бойца s3, причем сразу приблизим камеру к бойцу.
mycam camsetpos getpos gl3
glcoords = getpos gl3
x = glcoords select 0
y = glcoords select 1
z = glcoords select 2
; поставим камеру в 5 метрах от земли
mycam camsetpos [x,y,z+5]
mycam camsettarget s3
; приблизим камеру к бойцу
mycam camSetFOV 0.350
; изменения произойдут через 7 секунд
mycam camcommit 7
; заставим бойца присесть
s3 playmove “FXtoKneel”
@camcommitted mycam
~5

; теперь все остается на своих местах, но вы поменяете фокус камеры – отдали ее от бойца
mycam camsetpos getpos gl3
glcoords = getpos gl3
x = glcoords select 0
y = glcoords select 1
z = glcoords select 2
mycam camsetpos [x,y,z+5]
mycam camsettarget s3
; зумимся в сторону уменьшения
mycam camSetFOV 0.700
; уменьшение будет проходить на протяжении 5 секунд
mycam camcommit 5
@camcommitted mycam
~5

; громкость музыки уменьшаем до 0 в течении 4 секунд (если она не кончилась раьше)
4 fademusic 0

; теперь заканчиваем свое творение затемнением и автоматически выходом в редактор
: или в миссию при окончательной запаковке готового изделия
titleCut ["","BLACK OUT", 3]
~1
titletext ["здесь можно тоже написать какой-нибудь текст","plain"]
~2
mycam CameraEffect ["TERMINATE", "BACK"]
camDestroy myCam
cutText["","BLACK IN",1]
; условие end = правда и срабатывает триггер END#1, завершая Интро
end = ture
; собственно выход из скрипта - не пренебрегайте этой командой.
exit

;-----------------------------------------------------------------------------------------------------------------

Все. Жмете на просмотр и видите все свои изменения. Теперь можете менять все, что Вам заблагорассудится в пределах тех камер и объектов, которые мы расставили на карте.
В следующем уроке я расскажу Вам как делать более сложные сцены, переходы, диалоги и связанные анимации, как вызывать из скрипта Интро другие скрипты и как предварительно расставлять объекты, прописывая их свойства или действия непосредственно в скрипте Интро.

<<<Назад <<<


Самый лёгкий принцип посадки группы в технику

Для лидера группы создаётся Waypoint "GET IN", для техники создаётся Waypoint "LOAD". Далее следует эти Waypointы синхронизировать, для этого мы нажимаем F5 и потом тянем мышкой линию от одного Waypointа к другому.

По идее група должна сесть в технику, которая последует потом к следующему Waypointу.

НО! Необязательно делать технике wp "LOAD", можно сделать обыкновенный wp "MOVE".

И ещё - вышеупомянутая процедура работает только с обыкновенной техникой, поставленной в редакторе с водителем внутри автоматом.
Если же создать пустую технику(как часто делают по разным причинам многие картоделы), а потом через moveindriver засунуть туда водителя,
то это не сработает, он уедет не дожидаясь груза.

Тогда это исправляется так - если наша группа называется grp, то пишем в wp техники:
"_x assignascargo Ural" foreach units grp; "[_x] ordergetin true" foreach units grp

Где Ural-имя техники. Срабатывает если груз - не один юнит.


Самый простой способ - как сделать, чтобы солдаты стреляли по гражданским!

<<<Назад <<<

Самый простой способ - как сделать чтобы солдаты стреляли по гражданским!

Как я вижу эта тема весьма популярная вот я и решил поэксперементировать.
Что происходит когда Вы убиваете своих же? У Вас отнимаются очки.
При отнимании союзники начинают по вам стрелять.
Так вот. Каждому гражданскому по которому должны стрелять в init'e (инициализации, ините) пропишите следующую команду:

this addrating (-(rating this)-10000)


Скрипты: Запретная зона

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

В скрипте init.sqs или в триггере в condition true и activation пропишите:
GuyInZone=false

Содержание скрипта toxic.sqs:
_Player = _this select 0
#Start
_Player setDammage getDammage _Player + 0.1
hint format["%1",getDammage aP]
~2
?(GuyInZone):Goto "Start"
Exit

Установки триггера:

  • y=10
  • x=10
  • Activate by West
  • Repeatedly
  • Condition: This
  • Activation: GuyInZone = true;[Player] exec "toxic.sqs"
  • Deactivation: GuyInZone = false

Вы можете заменить задержку (~2), так же можно заменить шаг для повреждений (0.1)!


Создание брифингов

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

Пример находится в папке "ПРИМЕРЫ" под названием - "Создание брифингов.txt"


Groups. Присваивание имен группам.

<<<Назад <<<

Создание мультиков через скрипты(для новичков)

Итак, урок первый.
Начну пожалуй с разжевывания команд.
Создаётся камера через команду camCreate.
С этой командой идут два синтаксиса-"camera", который создаёт нормальную камеру и "seagull", создающий летающую камеру,типа с высоты птичьего полёта.
"seagull" я не пользуюсь и не видел чтоб кто-то ей пользовался, поэтому советую об "seagull" забыть и переключиться только на "camera".
Также с самого начала камере даётся идентификация. Я например всегда использую _cam.
В общем команда выглядит так _cam = "camera" camcreate [x,y,z].
Лучший способ создавать камеру на определённом месте уже был описан Goodspeedom.
Пишете в init игрока - hint format["position: %1", getpos player], и сразу в начале миссии вы получите координаты места на котором стоит игрок.
Это будет выглядеть что-то вроде этого - 8627.95,9372.47,6.
Вписываете полученные координаты вместо x,y,z и камера будет создана точно в том месте.
Естественно есть несколько способов сделать это (например по отношению к какому-то обьекту), но я пришёл к выводу что это самый удобный и точный способ,поэтому говорить буду только о нём.
Далее следует команда cameraEffect.Она создаёт эффект для нашей камеры. Пишется так - cameraEffect ["эффект", "позиция"].
Здесь есть много команд, но опять таки общепринятые команды это - internal и back. Здесь как и везде далее к команде привязываем идентификацию созданную в начале скрипта(_cam например).
В общем команда выглядит так - _cam cameraeffect ["internal", "back"].
Зачастую неплохо во время мультика отключить радио,что тут и делаем через enableradio false.
Главное не забыть в конце скрипта включить его обратно через enableradio true.
В начале для понта можно создать переход из темного экрана в игру через titleCut ["","BLACK IN",5].
Где 5, это время в секундах через которое совершается переход. Между первыми кавычками можно вставить текст.
Кроме BLACK IN есть ещё три команды - BLACK OUT (из игры в темный экран), WHITE IN (из светлого экрана в игру) и WHITE OUT (из игры в светлый экран).
Разделение через переходы в секундах совершается через ~* (где * означает время в секундах).
Далее идёт команда camsetpos. Она создаёт позицию камеры.
В общем команда выглядит так - _cam camsetpos [7800,4335,5].
Позицию камеры можно создавать и на позициях обьектов через _cam camsetpos (getpos player).
Это создаст позицию камеры на месте где в тот момент стоит игрок.
Следующая команда наводит камеру на цель -camsettarget.
Цель может быть позицией, а может быть и обьектом.
В первом случае команда будет выглядеть так- _cam camsettarget [7800,4335,5].
Во втором случае так - _cam camsettarget t80. - где t80 это имя обьекта на карте.
Любые изменения и команды которые мы задаём в скрипте не будут применены в реальности пока не будет использована команда camcommit.
Если мы хотим чтоб изменения произошли моментально то пишем - _cam camcommit 0.
Если мы хотим плавный переход то пишем - _cam camcommit 5. - где 5 это время перехода в секундах, чем больше, тем медленнее и плавнее будет переход.

На этом закончу урок первый.

<<<Назад <<<


Создание своего аддона с музыкой

Замечая ваш повышенный интерес к созданию своей музыки во флэше я объясню вам как сделать свой аддон с музыкой. При этом не надо будет заменять Music.pbo. Файл с аддоном кладется в OFP\AddOns\
Вот содержание файла Config.cpp:

class CfgPatches
{
  class Music_AddOns
  {
    units[] = {};
    weapons[] = {};
    requiredVersion = 1.46;
  };
};
class CfgMusic
{
  class mytrack1
  {
    name="My Track 1";
    sound[]={"\MyMusic\01.ogg",1.000000,1.000000};
  };
  class mytrack2
  {
    name="My Track 2";
    sound[]={"\MyMusic\02.ogg",1.000000,1.000000};
  };
  class mytrack3
  {
    name="My Track 3";
    sound[]={"\MyMusic\03.ogg",1.000000,1.000000};
  };
  class mytrack4
  {
    name="My Track 4";
    sound[]={"\MyMusic\04.ogg",1.000000,1.000000};
  };
  class mytrack5
  {
    name="My Track 5";
    sound[]={"\MyMusic\05.ogg",1.000000,1.000000};
  };
};

 MyMusic - это название вашего файла .pbo аддона.
01.ogg - название файлов музыки.
My Track 1 - это название ваших муз. треков, которые будут отображаться в триггерах и вейпоинтах в закладке "эффекты".
mytrack1 - это название класса трека. Им можно вызывать трек командой playmusic "mytrack1"
Муз. файлы формата .ogg битрейта 56-128 kb\s (можно больше или меньше) и частотой 22 или 44 кГц. находятся в MyMusic\ , там же находится файл config.cpp

<<<Назад <<<


Техника с небес

Коротенький скрипт, позволяющий сбросить технику или любой объект с парашютом вызывается так:
[A,B]exec"helidrop.sqs"
где:
A - это самолёт или вертолёт откуда будем сбрасывать объекты
B - это десантируемый объект.

А это сам скрипт с именем "helidrop.sqs".
Делали Мы - AlexandrIII г.Омск http://www.flashpoint.ru/
_heli = _this select 0
_car = _this select 1
~1
_car setPos [(getPos _heli select 0)+10.0,( getPos _heli select 1),( getPos _heli select 2)-7.0]
_chute = "parachute" camCreate[(getPos _heli select 0),( getPos _heli select 1),( getPos _heli select 2)-12.0]

~0.05

#DropUp
~0.01
_chutePosZ =(getPos _chute select 2)
_car setPos [(getPos _chute select 0),(getPos _chute select 1),_chutePosZ]
_car setDir (getDir _chute)
? (_chutePosZ > 2) : goto "DropUp"
exit

<<<Назад <<<


Транспортировка грузов по воздуху.

Для быстрой переброски груза, полезен ВОЗДУШНЫЙ транспорт.
В примере транспортируем по воздуху АВТОЗАПРАВЩИК.
УДАЧНЫХ ВАМ МИССИЙ
(КОНЕЧНО ЗА НАШИХ ! ! !)
(и ПОБОЛЬШЕ Вам ФАНТАСТИЧЕСКОЙ фантазии).

Пример находится в папке "ПРИМЕРЫ" под названием - "Транспортировка грузов по воздуху"


Кто не знает как копировать юниты вам сюда!

Чтоб скопировать юнит, надо выдилить юнит (или групу юнитов) потом нажать Ctrl+C, потом перевести мыш в другое место и нажать Ctrl+V и Voila появится скопированый юнит, но если юнит имеет имя ap(например), то у скопированого юнита имя помеяется на ap_1 и так далее! Есле вы копируете игрока то скопированый юнит будет не игроком а компъютером!

Добавление:
Копировать можно с помощю клавиш правый Ctrl+Ins
Вставлять с помощю правый Shift+Ins


Groups. Присваивание имен группам.

Иногда очень удобно управлять группами а не отдельными юнитами. Но при создании группы ей не присваивается имени. Поэтому все это приходится делать вручную.

Чтобы присвоить группе имя нужно всего-лишь прописать в строке init коммандира группы:
Strikers=group Leader

При этом:
Strikers - имя новой группы
Leader - имя лидера группы


Бегущий человек

Не знаю почему, но описание этих анимаций я не встретил на форуме. А зря.

Напомню, для их использования напишите:
Solder SwitchMove "действие"
Где Solder - имя солдата.

Вот небольшой список анимаций движения солдат:

  • StandWalkB - два шага назад
  • StandWalkRB - два шага назад и вправо
  • StandWalkRL - два шага назад и вправо
  • StandWalkL - два шага влево
  • StandWalkR - два шага вправо
  • StandWalkRF - два шага вперед и вправо
  • StandWalkLF - два шага вперед и влево
  • StandRunF - два шага вперед
Можно заменить Stand на
  • Civil... - бег цивила
  • Combat... - с оружием
  • Crouch... - на колено
А вот так солдат будет передвигаться ползком:
  • LyingCrawlF
  • LyingCrawlLF
  • LyingCrawlRF
  • LyingCrawlL
  • LyingCrawlR
  • LyingCrawlLB
  • LyingCrawlRB
  • LyingCrawlB
  • LyingCrawlF
  • LyingCrawlLF
  • LyingCrawlRF
  • LyingCrawlL
  • LyingCrawlR
  • LyingCrawlLB
  • LyingCrawlRB
  • LyingCrawlB
  • LyingFastCrawlF
  • LyingCrawlLF
  • LyingCrawlRF
  • LyingCrawlL
  • LyingCrawlR
  • LyingCrawlLB
  • LyingCrawlRB
  • LyingCrawlB
Эти команды удобно использовать в заставках, и т.п. Причем солдат будет их исполнять даже будучи убитым
Для того что бы солдат тупо шагал вперед напишите такой скрипт.
#Loop
Solder SwitchMove "StandRunF"
~1.1
GoTo "Loop"

Задержка в 1.1 секунды необходима для того, что бы солдат успел сделать эти два шага.

<<<Назад <<<


Блокирование Waypoints

Иногда очень полезно динамично запретить юниту двигаться до определенной точки.
Делается все это с помощью комманды: LockWP

Например: в строке init юнита прописываете unit LockWP true - этой коммандой для юнита заблокируется следующий waypoint и он не будет к нему двигаться.

После этого, когда совершилось определенное событие, Вы можете прописать в триггере unit LockWP false и юнит отправится дальше!


Воинское приветствие! Как это делается?

Используйте скрипт salute.sqs и положите его в директорию с Вашей миссией!
F:\OperationFlashpoint\Users\Your-Name\missions\Something.Eden

Теперь пропишите в триггере, в строке INIT, это:
[unit1, unit2] exec salute.sqs

Этот скрипт расчитан на двоих солдат, при этом они повернутся лицом друг к другу.

Вот сам скрипт salut.sqs:

_Unit= _this select 0
_Unit2= _this select 1

; Время в течение которого солдаты отдают воинское приветствие
~1

_Unit PlayMove "EffectStandSalute"
_Unit2 PlayMove "EffectStandSalute"

; Время, в течении которого солдаты стоят под козырек
~2

_Unit PlayMove "EffectStandSaluteEnd"
~0
_Unit2 PlayMove "EffectStandSaluteEnd"
~0

exit

<<<Назад <<<


Как заставить солдата бросить дымовую шашку

Дадим юниту имя SOLD и пропишем в строке инициализации:

removeAllWeapons this; this addWeapon "M16", this addMagazine "SmokeSh*ll Red"; this addWeapon "SmokeSh*ll Red"

Далее чтобы он бросил дымовую шашку необходисо прописать следующую комманду в триггере либо вейпоинте:

SOLD fire ["Throw", "SmokeSh*ll Red", "SmokeSh*ll Red"]


Как очищать ammo crates от аммуниции и добавлять туда свое оружие и боеприпасы

Создаем ammo crate.Допустим иы хотим полностью очистить его и добавить туда 4 калашникова и 12 к ним обойм. В строке init пишем:

clearweaponcargo this; clearmagazinecargo this; this addweaponcargo ["AK74", 4]; this addmagazinecargo ["AK74",12].
Для полного списка оружия и боеприпасов вам сюда


Как поместить всю группу в технику

Можно избежать прописывание всем юнитам комманды moveincargo если они находятся в одной группе.

Достаточно написать:

"_x moveincargo NAME1" foreach units STRGRP

Где:
NAME - имя техники
STRGRP - имя группы


Как проверить кол-во солдат в группе.

Делаем тригер вставляем сount units group < 10;
где group имя группы, 10 солдат в групе, < меньше. Если солдат в групе станет меньше 10, то триггер активизируется. Можно использовать > больше, = равно. Допустим, что всех убили и ты один остался, надо вывести сообщение, делаем так.

Имя группы допустим ussr
Имя солдата uP
count units ussr < 2;
uP globalchat "YA ODIN OSTALSYA!!!";


Как сделать, чтоб спецназ закладывал бомбы и потом их взрывал.

В wp спецназовца, в котором вы хотите, чтоб он заложил бомбу, в строке активации пишите - this fire ["put", "pipebomb"]. В строке активации wp в котором вы хотите чтоб он эту бомбу взорвал пишите - this action ["touchoff"]. Только сделайте второй wp от первого метрах в ста, чтоб он сам себя не взорвал.Вот и все!


Перехват световых гранат

Вы до сих пор не знаете как отследить выстрел световой гранаты игроком, или другим солдатом.
Все просто, в каталоге с миссией создайте файл OnFlare.sqs
В него можно записывать все что угодно. Он автоматически будет запущен при выстреле световой гранаты.
PS: И на всякий случай. Файл InitIntro.sqs загружается при запуске заставки. Так что теперь не надо делать вызов заставки из редактора.


Скрытые задания

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

Пример находится в папке "ПРИМЕРЫ" под названием - "Скрытые задания.txt"


Как быстро узнать какое у юнита оружие

РАБОТАЕТ ТОЛЬКО В ВЕРСИИ 1.75 И ВЫШЕ! ПРОВЕРЯЛОСЬ НА 1.85 и 1.90.

Чтобы узнать как называется та или иная пушка у солдата (вертолёта, самолёта, танка), особенно если он - неофициальный аддон, в редакторе юниту в строку init (инит,инициализация,initialization) пишите:

hint format ["%1 \n\n %2", weapons this, magazines this]

При начале просмотра в левом верхнем углу отобразится в первом блоке оружие юнита, а во втором магазины к этому оружию.


EventHandler

Вот команда которая перехватывает события

player addEventHandler ["killed",{_this exec "playerKilled.sqs"}]
иногда надо узнать, кто убил того или иного юнита, например игрока убил другой юнит и нужно навести камеро на того, кто убил юнита и сообщить это скрипту пример ниже показывает, как это сделать ещё есть такие типы EventHandler:

  • "Engine" bool: вкл/вкл двинатель
  • "GetIn" string osition (1), если юнит вышел из техники
  • "GetOut" string osition (1), если юнит вошел в технику
  • "Fired" string: из чего стрелял
  • "IncomingMissile" string: самонаводка
  • "Dammaged" string: имя того selection которое было повреждено при поподении(selectionName)
  • "Gear" bool: выпущены или нет шасси
  • "Fuel" bool: топливо
this addeventhandler ["Fired",{hint format ["%1",_this select 1]}] - вернет метод стрельбы из оружия
this addeventhandler ["Fired",{hint format ["%1",_this select 1]}] - Возратит имя того selection которое было повреждено при поподении (selectionName).
Остольное аналогично примерам.


А как сделать активацию тригера на высоте вы знаете?

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

_unit = _This Select 0
_Alti = 124
;_Alti = _This Select 1

#ubdate

;определение первоначальных координат
_pos = GetPos _unit;
_x = _pos select 0;
_y = _pos select 1;
_z = _pos select 2;

;собственно проверка высоты
?_z<=_Alti :goto "Altitude"

;зацикливаем скрипт на ubdate
goto "ubdate"

;активация триггера
#Altitude
Altitude=true
;выходим
exit

Ставим тригер в поле активации ставим Altitude в папку с миссией кладём скрипт дапустим с именем Altitude.sqs.
Как только высота, мы её опредилили как _Alti стонет меньше либо равной 124 тригер с активацией Altitude сработае.
Пример: [unit, 124] exec "Altitude.sqs" теперь по не русски [имя юнита, высота срабатывания] exec "Altitude.sqs"


Активная карта

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

_camera = "camera" camcreate [0,0,0]
_camera cameraeffect ["internal", "back"]

;*-*-*-*-*-*-*-*-*-*-*-*MAPA*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

showmap true;
showPad false;
showCompass false;
showWatch false;
showRadio false;

mapAnimClear;

mapAnimAdd [8, 0.1, getMarkerPos "basa"];
mapAnimCommit;
ForceMap true;
@mapAnimDone;

mapAnimAdd [4, 0.1, getMarkerPos "radar"];
mapAnimCommit;
~3.5

mapAnimAdd [4, 0.1, getMarkerPos "hellybasa"];
mapAnimCommit;
~3.5

mapAnimAdd [4, 0.1, getMarkerPos "blokpost2"];
mapAnimCommit;
~3.5
;mapAnimAdd [2, 0.1, getMarkerPos "Obrana"];
;"obrana" setMarkerColor "ColorRed"
;"obrana" setMarkerType "Destroy"
;mapAnimCommit;
;@mapAnimDone;
~4
forcemap false;
_camera cameraeffect ["terminate", "Back"]
camdestroy _camera

showPad true;
showCompass true;
showWatch true;
showRadio true;
exit

В редакторе ставите маркеры, в имени пишите (это у меня) basa, radar... и т.д.
Я делал миссию про пленного, он появлялся без карты (в description отключаете showMap false), а потом заходил в палатку, подходил к столу с картой вражеской, понимал где он находится и куда ему идти, это я к тому, что WP можно не делать, а по карте с помощью мультика показывать задание, плюс использовать скрытые задания (об этом можно прочитать в Hints&Tips)
Пожалуй все... вот...

<<<Назад <<<


Вы мечтали покататься на танках?

Думаю многие хотели бы покататься на танках и пр., а также покатать солдатиков и т.п., но не внутри, а на броне. Я вот тут написал скрипт, который позволяет поставить солдата (и не только) на танк (и не только).
Скрипт позволяет поставить солдата на танк, а танк можно пустить кататься и все будет ОК.
Использование: [sold, tank, [0, -1.5, 2]] exec "LinkObjects.sqs"

Выкладываю демочку: сидите на холмике и смотрите в биноколь
В архивчике имеется более менее подробное руководство по использованию скрипта и рассмотрены ньюансы его работы (enjoy)

скрипт "LinkObjects.sqs"

;Инициализируем массив
_i=count LinkedObjectsArray
? (format["%1", _i]==""): LinkedObjectsArray=[]

;Предустанавливаем значения
_Dir=0
_DirType=0
_LifeType=0
_DisableAI=false
_Delay=0.01

_count=count _this
;0 - Кого
_Man=_this select 0
;Расцепим предыдущую связь сразу (если есть)
[_Man] exec "UnLinkObjects.sqs"

;1 - С кем
_Tank=_this select 1

;2 - относительные координаты
_dx=(_this select 2) select 0
_dy=(_this select 2) select 1
_dz=(_this select 2) select 2

;3 - Направление, если нет, то 0
? _count<4: goto "Start"
_Dir=_this select 3

;4 - Тип направления, если нет, то 0
;типы: 0 - по желанию _Man
; 1 - всегда относительно _Tank
; 2 - всегда по заданному глобально
? _count<5: goto "Start"
_DirType=_this select 4

;5 - Тип жизни _Man, если нет, то 0
;типы: 0 - может умереть, после смерти может упасть
; 1 - может умереть, после смерти останется висеть
; 2 - всегда живой
? _count<6: goto "Start"
_LifeType=_this select 5

;6 - Отключить интеллект, если нет, то false
? _count<7: goto "Start"
_DisableAI=_this select 6

;7 - Интервал, если нет, то 0.01
? _count<8: goto "Start"
_Delay=_this select 7

#Start
;Необходимая пауза, чтобы надежно расцепить
~_Delay
;Добавим _Man в LinkedObjectsArray
_i=count LinkedObjectsArray
LinkedObjectsArray resize (_i+1)
LinkedObjectsArray set [_i, _Man]

_OldDamage=getDammage _Man
doStop _Man
? (_DisableAI): _Man disableAI "MOVE"
_r=sqrt(_dx*_dx+_dy*_dy)
? (_dy==0): _dy=0.001
_ra=(_dx atan2 _dy)-90

? (_DirType==0): _Man setDir ((getDir _Tank)+_Dir)
? (_DirType==1): _Man setDir ((getDir _Tank)+_Dir)
? (_DirType==2): _Man setDir _Dir

#Loop
;Проверка необходимости дальнейшего сцепления
? !(_Man in LinkedObjectsArray): goto "End"

;Установка позиции
_TD=-((getDir _Tank)+_ra)
ddx=(cos _TD)*_r
ddy=(sin _TD)*_r
_Man setPos [(getPos _Tank select 0)+ddx, (getPos _Tank select 1)+ddy,(getPos _Tank select 2)+_dz]

;Установка направления
? (_DirType==0): _Man setDir (getDir _Man)
? (_DirType==1): _Man setDir ((getDir _Tank)+_Dir)
? (_DirType==2): _Man setDir _Dir

;Проверка жизни
? ((!alive _Man)&&(_LifeType==0)): [_Man] exec "UnLinkObjects.sqs"; goto "End"
? (_LifeType==2): _Man setDammage _OldDamage

;Проверка необходимости дальнейшего сцепления
? !(_Man in LinkedObjectsArray): goto "End"

~_Delay

;Проверка необходимости дальнейшего сцепления
? !(_Man in LinkedObjectsArray): goto "End"

goto "Loop"

#End

exit

Пример находится в папке "ПРИМЕРЫ" под названием - "Вы мечтали покататься на танках?"

<<<Назад <<<


Как вставлять снайперский прицел в ролик

Каждый флэшпоинтэр наверное хоть раз задавался вопросом "Как сделать прицел как в ресистанском ролике"?
Я тоже задался этой целью. Искал выход из ситуации. Наконец нашёл - покопался в description.ext и методом тыка удалил всё ненужное. У меня всё получилось. Вообще-то в нём прицел обозначен как "binocular", я переименовал его в "svdvintovka".
Маленькая инструкция: копируйте в папку с миссией description.ext (он ниже). Ставите триггер в разделе "Эффекты" выбирайте ресурс, затем "svdvintovka". Чтобы сделать такой эффект в скрипте, напишите:
cutrsc ["Dragunov","plain down",1000]

Пример находится в папке "ПРИМЕРЫ" под названием - "Как вставлять снайперский прицел в ролик"


Как добавить анимерованые 3d обьекты часть I

Вы наверное видели всякие открывающиеся там блокноты и ноутбуки в игре так вот как их добывить и использовать.

Добавляем анимированый блокнот.

Я не коментировал те строки которые уже описывались ранее

Создаём фаил description.ext и в нем пишем:

#define FontM "tahomaB36"
#define FontHTML "CourierNewB64"

#define ST_HPOS 0x0F
#define ST_LEFT 0
#define ST_RIGHT 1
#define ST_CENTER 2
#define ST_FRAME 64

#define CT_STATIC 0
#define CT_BUTTON 1
#define CT_EDIT 2
#define CT_SLIDER 3
#define CT_COMBO 4
#define CT_LISTBOX 5
#define CT_ACTIVETEXT 11
#define CT_3DSTATIC 20
#define CT_3DACTIVETEXT 21
#define CT_3DLISTBOX 22
#define CT_3DHTML 23
#define CT_3DSLIDER 24
#define CT_3DEDIT 25
#define CT_OBJECT 80
#define CT_OBJECT_ZOOM 81
#define CT_OBJECT_CONTAINER 82
#define CT_OBJECT_CONT_ANIM 83

class RscText
{
  type = CT_STATIC;
  idc = -1;
  style = ST_LEFT;
  colorBackground[] = {0, 0, 0, 0};
  colorText[] = {1, 1, 1, 1};
  font = FontM;
  sizeEx = 0.04;
};
class RscActiveText
{
  type = CT_ACTIVETEXT;
  idc = -1;
  style = ST_LEFT;
  color[] = {1, 1, 1, 1};
  colorActive[] = {1, 0, 0, 1};
  font = FontM;
  sizeEx = 0.04;
  soundEnter[] = {"ui\ui_over", 0.2, 1};
  soundPush[] = {, 0.2, 1};
  soundClick[] = {"ui\ui_ok", 0.2, 1};
  soundEscape[] = {"ui\ui_cc", 0.2, 1};
  default = false;
};
class RscButton
{
  type = CT_BUTTON;
  idc = -1;
  style = ST_CENTER;
  colorText[] = {0, 0, 0, 1};
  font = FontHTML;
  sizeEx = 0.025;
  soundPush[] = {, 0.2, 1};
  soundClick[] = {"ui\ui_ok", 0.2, 1};
  soundEscape[] = {"ui\ui_cc", 0.2, 1};
  default = false;
};
class RscEdit
{
  type = CT_EDIT;
  idc = -1;
  style = ST_LEFT;
  font = FontHTML;
  sizeEx = 0.02;
  colorText[] = {0, 0, 0, 1};
  colorSelection[] = {0.5, 0.5, 0.5, 1};
  autocomplete = false;
  text = ;
};
class RscLB_C
{
  style = ST_LEFT;
  idc = -1;
  colorSelect[] = {0.4, 0.4, 0.4, 1};
  colorSelectBackground[] = {0.2, 0.2, 0.2, 1};
  colorText[] = {0.2, 0.2, 0.2, 1};
  colorBackground[] = {0.4, 0.4, 0.4, 1};
  font = FontHTML;
  sizeEx = 0.025;
  rowHeight = 0.04;
};
class RscListBox : RscLB_C
{
  type = CT_LISTBOX;
};
class RscCombo : RscLB_C
{
  type = CT_COMBO;
  wholeHeight = 0.3;
};
class RscObject
{
  type = CT_OBJECT;
  scale = 1.0;
  direction[] = {0, 0, 1};
  up[] = {0, 1, 0};
};
class Rsc3DStatic
{
  type = CT_3DSTATIC;
  font = FontHTML;
  style = ST_LEFT;
  selection = "display";
  angle = 0;
  size = 0.04;
  color[] = {0,0,0,1};
};
// Имя нашего диалога
class DlgTutorial
{
  idd = -1;
  movingEnable = true;
  controlsBackground[] = { };
  controls[] = { };
  // Определяем классы обьектов, которые мы добавим
  objects[] = { Organizer };
  class Organizer : RscObject
  {
    //модель обьекта
    model = "blok_selmis2.p3d";
    idc = -1;
    type = CT_OBJECT_CONT_ANIM;
    autoOpen = true;
    autoZoom = true;
    animSpeed = 1;
    //файл анимации
    animation = "BLOK_MIS.rtm"
    position[] = {0.1, 0, 0.6};
    direction[] = {0, 0, 90};
    up[] = {0, cos 20, -sin 20};
    positionBack[] = {0.1, 0, 0.8};
    inBack = true;
    enableZoom = false;
    zoomDuration = 1;
    scale=1;
    controls[]={MY_TEXT1,MY_TEXT2}; // Перечисление классов с текстом которые используются ниже

    // Этот класс MY_TEXT1 наследует Rsc3DStatic, то есть ему автоматически все свойства класса Rsc3DStatic
    class MY_TEXT1 : Rsc3DStatic
    {
      idc = 100;
      selection = "papir2"; // Та часть (selection) модели на которой будем писать текст их задают в O2
      x = 0.025; y = 0.033; w = 0.8; h = 0.04; // Собсно расположение текста
      angle = 0; // Угол поворота текста
      size = 0.4; // Размер текста
      color[] = {1, 0, 0, 1};
      text = "Nero12 Приветствует вас!";
    };
    class MY_TEXT2 : Rsc3DStatic
    {
      idc = 100;
      selection = "papir2"; // Та часть (selection) модели на которой будем писать текст их задают в O2
      x = 0.025; y = 0.1; w = 0.8; h = 0.04;
      // Собсно расположение текста
      angle = 0; // Угол поворота текста
      size = 0.4; // Размер текста
      color[] = {0, 0.65, 1.0, 1};
      text = "nero12@mail.ru";
    };
  };
};

Вызываем обьект вот так:
делаем файл createDialog.sqs содержанием:

_ok = createDialog "DlgTutorial"
?(!_ok): hint "Error!"; exit

Пример находится в папке "ПРИМЕРЫ" под названием - "Как добавить анимерованые 3d обьекты часть I"

<<<Назад <<<


Как добавить анимерованые 3d обьекты часть II

Вы наверное видели всякие открывающиеся там блокноты и ноутбуки в игре так вот как их добывить и использовать.

Добавляем анимированый ноутбук.

Я не коментировал те строки которые уже описывались ранее

Создаём файл description.ext и внём пишем:

#define FontM "tahomaB36"
#define FontHTML "CourierNewB64"

#define ST_HPOS 0x0F
#define ST_LEFT 0
#define ST_RIGHT 1
#define ST_CENTER 2
#define ST_FRAME 64

#define CT_STATIC 0
#define CT_BUTTON 1
#define CT_EDIT 2
#define CT_SLIDER 3
#define CT_COMBO 4
#define CT_LISTBOX 5
#define CT_ACTIVETEXT 11
#define CT_3DSTATIC 20
#define CT_3DACTIVETEXT 21
#define CT_3DLISTBOX 22
#define CT_3DHTML 23
#define CT_3DSLIDER 24
#define CT_3DEDIT 25
#define CT_OBJECT 80
#define CT_OBJECT_ZOOM 81
#define CT_OBJECT_CONTAINER 82
#define CT_OBJECT_CONT_ANIM 83

class RscText
{
type = CT_STATIC;
idc = -1;
style = ST_LEFT;
colorBackground[] = {0, 0, 0, 0};
colorText[] = {1, 1, 1, 1};
font = FontM;
sizeEx = 0.04;
};
class RscActiveText
{
type = CT_ACTIVETEXT;
idc = -1;
style = ST_LEFT;
color[] = {1, 1, 1, 1};
colorActive[] = {1, 0, 0, 1};
font = FontM;
sizeEx = 0.04;
soundEnter[] = {"ui\ui_over", 0.2, 1};
soundPush[] = {, 0.2, 1};
soundClick[] = {"ui\ui_ok", 0.2, 1};
soundEscape[] = {"ui\ui_cc", 0.2, 1};
default = false;
};
class RscButton
{
type = CT_BUTTON;
idc = -1;
style = ST_CENTER;
colorText[] = {0, 0, 0, 1};
font = FontHTML;
sizeEx = 0.025;
soundPush[] = {, 0.2, 1};
soundClick[] = {"ui\ui_ok", 0.2, 1};
soundEscape[] = {"ui\ui_cc", 0.2, 1};
default = false;
};
class RscEdit
{
type = CT_EDIT;
idc = -1;
style = ST_LEFT;
font = FontHTML;
sizeEx = 0.02;
colorText[] = {0, 0, 0, 1};
colorSelection[] = {0.5, 0.5, 0.5, 1};
autocomplete = false;
text = ;
};
class RscLB_C
{
style = ST_LEFT;
idc = -1;
colorSelect[] = {0.4, 0.4, 0.4, 1};
colorSelectBackground[] = {0.2, 0.2, 0.2, 1};
colorText[] = {0.2, 0.2, 0.2, 1};
colorBackground[] = {0.4, 0.4, 0.4, 1};
font = FontHTML;
sizeEx = 0.025;
rowHeight = 0.04;
};
class RscListBox : RscLB_C
{
type = CT_LISTBOX;
};
class RscCombo : RscLB_C
{
type = CT_COMBO;
wholeHeight = 0.3;
};
class RscObject
{
type = CT_OBJECT;
scale = 1.0;
direction[] = {0, 0, 1};
up[] = {0, 1, 0};
};
class Rsc3DStatic
{
type = CT_3DSTATIC;
font = FontHTML;
style = ST_LEFT;
selection = "display";
angle = 0;
size = 0.04;
color[] = {0,0,0,1};
};
// Имя нашего диалога
class DlgTutorial
{
idd = -1;
movingEnable = true;
controlsBackground[] = { };
controls[] = {};
// Определяем классы обьектов, которые мы добавим
objects[] = { Organizer };
class Organizer : RscObject
{
//модель обьекта
model = "notebook.p3d";
idc = -1;
type = CT_OBJECT_CONT_ANIM;
autoOpen = true;
autoZoom = true;
animSpeed = 1;
//фаил анимации
animation = "notebook.rtm"
position[] = {0.1, 0, 0.6};
direction[] = {0, 0, 90};
up[] = {0, cos 20, -sin 20};
positionBack[] = {0.1, 0, 0.8};
inBack = true;
enableZoom = false;
zoomDuration = 1;
scale=1;
controls[]={MY_TEXT1,MY_TEXT2}; // Перечисление классов с текстом которые используются ниже
// Этот класс MY_TEXT1 наследует Rsc3DStatic, то есть ему автоматически все свойства класса Rsc3DStatic
class MY_TEXT1 : Rsc3DStatic
{
idc = 100;
selection = "display"; // Та часть (selection) модели на которой будем писать текст их задают в O2
x = 0.025; y = 0.033; w = 0.9; h = 0.13; // Собсно расположение текста
angle = 0; // Угол поворота текста
size = 0.3; // Размер текста
color[] = {1, 0, 0, 1};
text = "Nero12 Приветствует вас!";
};
class MY_TEXT2 : Rsc3DStatic
{
idc = 100;
selection = "display"; // Та часть (selection) модели на которой будем писать текст их задают в O2
x = 0.025; y = 0.3; w = 0.9; h = 0.13; //Собсно расположение текста
angle = 0; // Угол поворота текста
size = 0.3; // Размер текста
c
olor[] = {0, 0.65, 1.0, 1};
text = "nero12@mail.ru";
};
};
};

Вызываем обьект вот так: делаем фаил createDialog.sqs с содержанием:

_ok = createDialog "DlgTutorial"
?(!_ok): hint "Error!";
exit

Пример находится в папке "ПРИМЕРЫ" под названием - "Как добавить анимерованые 3d обьекты часть II"
<<<Назад <<<


Как заставить юнита сдать задним ходом

Ну собсно говоря, это делается при помощи команды setVelocity иногда получается коряво потому, что водитель крутит руль куда не надо но можно сделать и будет очень даже не плохо
Собсно скрипт
_vehicle = _this select 0
_startfuel= fuel _vehicle
_vehicle setfuel 0.0

#loop
_v = Velocity _vehicle
_vehicle setVelocity [((_v select 0) +2), ((_v select 1)), 0]
_vehicle setDammage 0.0

~0.14

?endingveloci: goto "end"
goto "loop"

;?getPos _heli select 2 > 2: goto "loop"

#end

_vehicle setfuel _startfuel

exit

Смотрите миссию-пример

Пример находится в папке "ПРИМЕРЫ" под названием - "Как заставить юнита сдать задним ходом"

<<<Назад <<<


Как отвести стингер или стрелу от вертолётов

<<<Назад <<<
Как отвести стингер или стрелу от вертолётов

Вот скрипт, который поможет отвести самоновадящиеся и не только ракеты от вертолёта

_vehicle = _this select 0
_ammo = _this select 1
[_vehicle,_ammo] exec "antiroket_init_fire.sqs"

;debuggingline
#loop
_missile = nearestobject [_vehicle,_ammo]

? _missile distance _vehicle <=60:goto "antimisslile"

goto "loop"
#antimisslile
;_missile setdir (direction _missile - 2 - random 2)
_missile setdir (direction _missile - 4 - random 2)
goto "loop"
exit

;missile
;9K32
;AA

Обязательно смотрите миссию тест, там есть специальные эффекты типа дымовой завесы и отстреливания всяких красивых штучек.

Такой вариант более простой:
_vehicle = _this select 0
_ammo = _this select 1
[_vehicle,_ammo] exec "antiroket_init_fire.sqs"

;debuggingline
#Loop
@(_vehicle distance (_missile = nearestobject _ammo)) =< 60
_missile setdir (direction _missile - 4 - random 2)
goto "loop"
exit
;missile
;9K32
;AA

Можно еще перехватывать событие IncomingMissile, что гораздо лучше.

Пример находится в папке "ПРИМЕРЫ" под названием - "Как отвести стингер или стрелу от вертолётов"

<<<Назад <<<


Как сделать себе педерастичный голос и лицо из Резиста без едиторапдейта

Если открыть в своей папке в ОФП БЛОКНОТОМ файл UserInfo.cfg то (см. приложенную картинку) люди не желающие по каким либо причинам постоянно иметь у себя в аддонах эдиторапдейт (неугомонные картоделы например) могут сделать следующее:
1. Фейсы с 1 по 52 есть стандартные фейсы ОФП. Резистовские фейсы называются словами. Например если в кавычках прописать "Lada" то получим женское лицо уже из Резиста. Названия остальных лиц можно посмотреть установив эдитоапдейт.
2. Параметр отвечающий за тональность голоса. Чем меньше - тем ниже голос. Чем больше - тем лучший танцор выйдет из вашего персонажа. Между прочим чем выше голос тем быстрее командир проговаривает приказ и соответственно тем быстрее появляется таргет.

ЗЫ: Если после изменения данного файла зайти в настройки то все установится по дефолту.


Как сделать хитрую растяжку

Иногда нужно, чтобы игрок проходящий миссию не шлялся где-попало, а шел именно туда, куда хочет автор миссии..

;Создаем тригер triggerone, определенного радиуса, если радиус
;большой - ставим небольшую задержку, если маленький - без нее,
;по активации пишем This exec "", в кавычках имя этого скрипта..
;выбираем активацию для Триггера, в зависимости от того, кого хочем подорвать
;Принцип действия - считает солдат в радиусе действия
;тригера, который ее
;активирует, случайным образом определяет жертву.

; Создаем массив, элементами которого являются юниты в радиусе действия триггера.
Arr = list triggerone
;Считаем количество элементов массива.
_k = count Arr
;Определяем случайную величину
_r = random _k
; Определяем жертву
_Zhertva = Arr select _r
; Создаем массив с координатами жертвы, вынимаем оттуда
;ее координаты ..
ZArr = getpos _Zhertva

_Rgx = ZArr select 0
_Rgy = ZArr select 1
; Создаем взрыв, с координатами, несколько отличными от
;координат жертвы. Изменять их можно и по-другому,
; а не простым вычитанием, прибавлением...
~0.5
explosion = "Grenade" camCreate [_Rgx+0.1, _Rgy+ 0.1, 0];
;Вместо Grenade хорошо подходит MortarShell
;Если на дворе ночь, то можно добавить сигнальную ракету.
action = "flarered" CamCreate [_Rgx+ 10, _Rgy+ 10, 130]

exit

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

<<<Назад <<<


Как сделать, чтобы в радиособщениях заменить "Альфы" и "Бравы" на "Ромашки"

Способ довольно прост и примитивен. В папке с вашей миссией вы создаете файл stringtable.csv.

В этом файле вы меняете официальный стринги на нужный вам.

Например, изменим "Альфа" на "Ромашка".
Находим в файле stringtable.csv, находящийся в папке BIN стринг, отвечающий за название группы с ИД Альфа.
STR_CFG_GRPNAMES_ALPHA,АЛЬФА,

После этого в файле stringtable.csv, находящимся в папке с вашей миссией пишем

STR_CFG_GRPNAMES_ALPHA,РОМАШКА,

Теперь группа, в ините лидера которой прописано group this setGroupId ["Alpha", "GroupColor0"], на экране и в радиосообщениях будет отображаться как "РОМАШКА".

Таким же образом можно заменить цвет групп и задолбавшего всех "ПАПАШУ МЕДВЕДЯ" на штаб или всё что душе угодно.

Список стрингов.

Для групп.

  • STR_CFG_GRPNAMES_ALPHA,Alpha,
  • STR_CFG_GRPNAMES_BRAVO,Bravo,
  • STR_CFG_GRPNAMES_CHARLIE,Charlie,
  • STR_CFG_GRPNAMES_DELTA,Delta,
  • STR_CFG_GRPNAMES_ECHO,Echo,
  • STR_CFG_GRPNAMES_FOXTROT,Foxtrot,
  • STR_CFG_GRPNAMES_GOLF,Golf,
  • STR_CFG_GRPNAMES_HOTEL,Hotel,
  • STR_CFG_GRPNAMES_NOVEMBER,November,
  • STR_CFG_GRPNAMES_KILO,Kilo,
  • STR_CFG_GRPNAMES_YANKEE,Yankee,
  • STR_CFG_GRPNAMES_ZULU,Zulu,
  • STR_CFG_GRPNAMES_BUFFALO,Buffalo,
  • STR_CFG_GRPNAMES_SIX,Six,
  • STR_CFG_GRPNAMES_TWO,Two,
  • STR_CFG_GRPNAMES_THREE,Three,
  • STR_CFG_GRPNAMES_GUARDIAN,Guardian,
  • STR_CFG_GRPNAMES_CONVOY,Convoy,
Для HQ
  • STR_CFG_HQ_BASE,Base,
  • STR_CFG_HQ_HQ,HQ,
  • STR_CFG_PAPABEAR,PAPA_BEAR,
  • STR_CFG_FIREFLYBASE,AIRBASE,
(предупреждаю, что в конфиге (версия 1.85) ошибка, и Base, HQ и PAPA_BEAR имеют одинаковый стринг STR_CFG_PAPABEAR)

Для цвета групп.
  • STR_CFG_GRPCOL_BLACK,1,
  • STR_CFG_GRPCOL_RED,2,
  • STR_CFG_GRPCOL_GREEN,3,
  • STR_CFG_GRPCOL_BLUE,4,
  • STR_CFG_GRPCOL_YELLOW,5,
  • STR_CFG_GRPCOL_ORANGE,6,
  • STR_CFG_GRPCOL_PINK,7,
  • !NB. GroupColor0-отсутствие цвета.

Обратие внимание, что изменив стринги, вы не изменяете ID групп и цвета в игре. Т.е. названия групп для ID остаются теми-же:
ALPHA, BRAVO, CHARLIE, DELTA, ECHO, FOXTROT, GOLF, HOTEL, NOVEMBER, KILO, YANKEE, ZULU, BUFFALO, SIX, TWO, THREE, GUARDIAN, CONVOY.

Для HQ тоже - самое. Т.е. вы должны будете писать [east,"PAPA_BEAR"], а не [east,"Штаб"]

<<<Назад <<<


Как узнать высоту юнита

Насколькоя знаю во Flashpoint нет команды проверки высоты и определить её можно только через скрипт подобный моему.
А вот скрипт который выведет сообщение о высоте юнита

_unit = _This Select 0

#ubdate

;определение первоначальных координат
_pos = GetPos _unit;
_x = _pos select 0;
_y = _pos select 1;
_z = _pos select 2;

;проверка высоты на которой скрипт перестаёт действовать и выходит пример: _z<=3 :exit если высота меньше либо равна 3 выходим
?_z<=3 :exit
;kalkulate ostatok
;% or mod
;(_z % 1) это остаток нужен для того чтобы получить сообщение не ввиде дробного (123.77576) а целого (123)

;_zend это округлённая высота юнита
_zend=_z-(_z % 1)

;hint format ["Высота: %1 метров",_zend]
hint format ["Высота: %1 метров",_zend]

~1.5

;зацикливаем скрипт на ubdate
goto "ubdate"

;выходим
#exit
exit

Пример: [unit] exec "Altitude_hint.sqs" теперь по не руски [имя юнита] exec "Altitude_hint.sqs"
Вот, смотрите как я это применил

Пример находится в папке "ПРИМЕРЫ" под названием - "Как узнать высоту юнита"

<<<Назад <<<


Карта, компас...

  • forceMap true - включает выключает карту
  • shownWarrant - Проверяет доступно или не доступено удостоверение личности прикольная такая карточка
  • shownPad - Проверяет доступен или не доступен блокнот
  • shownRadio - Проверяет доступно или не доступено радио
  • shownWatch - Проверяет доступны или не доступны часики
  • shownCompass - Проверяет доступен или не доступен компас
  • shownGps - Проверяет доступен или не доступен GPS
  • shownMap - Проверяет доступна или не доступна карту
  • showWarrant true/false - доступно или не доступено удостоверение личности прикольная такая карточка
  • showPad true/false - доступен или не доступен блокнот
  • showRadio true/false - доступно или не доступено радио
  • showWatch true/false - доступны или не доступны часики
  • showCompass true/false - доступен или не доступен компас
  • showGps true/false - доступен или не доступен GPS
  • showMap true/false - доступна или не доступна карту


На море или на суше

Иногда надо сделать активацию тригера при условии, что допустим БМП съехала в воду и поплыла или узнать в воде ли БМП?

Вот скрипт при помощи которого можно енто проверить.

#znova

private ["_sensorWatert"];

_sensorWatert = "EmptyDetector" createVehicle [0,0,0]
;private новая команда доступная только v 1.85+

_cal = {private["_result"]; _sensorWatert setpos [getpos _this select 0, getpos _this select 1, 0]; _result = getpos _sensorWatert select 2; _result};

;Проверяем условие

; call новая команда доступная только v 1.85+

?abs(_this call _cal) < 3: InaWater=true
?abs(_this call _cal) > 3: InaWater=false

;выходим
?exitwater: exit

goto "znova"

 Пример находится в папке "ПРИМЕРЫ" под названием - "На море или на суше"

<<<Назад <<<


Хотите управлять 32 юнитами?

Копаясь в http://www.ofpec.com/ обнаружил для себя метод управления несколькими взводами.
Осуществляется при помощи рации и очень прост в повторении.

Пример находится в папке "ПРИМЕРЫ" под названием - "Хотите управлять 32 юнитами"


Разгавор по телефону

<<<Назад <<<

Разговор по телефону

Вобщем сначала надо добавить телефон юниту this addweapon "phone"
Далее используйте анимации указаные ниже для эфектов кстати телефон помещается в тот-же слот что и бинокль и прибор ночного виденья и если добавить их заместо телефона, то юнит будет держать их.
this addweapon "phone" - добавляет трубку от телефона
a1 switchmove "FXstandtotel" - берёт трубку
a1 playmove "FXstandtotelHand" - подносит трубуку к уху и садится (без FXstandtotel не работает так как эта команда приконнектина к FXstandtotel и должна использоваться только с нею)
a1 switchMove "FXStandTelLoop" -сидит, трубка у уха
a1 playMove "FXStandDropTel" - ложим трубку


Скрипт для отладки миссий

Установка:

  1. Поместить папку debug в папку с вашей миссией.
  2. В файле init.sqs прописать команду [] exec "debug\initialisacion.sqs".
  3. Ставите триггер на карте с активацией "ANYBODY" (кто-либо), и радиусом по осям в 6200, чтобы охватывать всю территорию или глобальный триггер (может кто не знает то это делается легко - ставим радиус по осям равный 0).
  4. Всё теперь запускаем миссию и в меню действий там где перезарядка и прочее и и выбераем "Отладчик миссий"
    это если у вас русский язык.

Особенности:
Скрипт идёт на нескольких языках, поэтому добавляйте все строки находящиеся моём в файле stringtable.csv к своему от пометок //Started stringtable до //Ending stringtable, и все строки находящиеся моём в файле description.ext к своему от пометок //Started description до //Ending description.
Имеется возможность автозаполнения, и выбора готовых команд, добовление собственных команд во время редактирования, сразу предугадывая, что вы решите добавить список собственных команд это делается следующим образом- открываете фаил comrefuser.sqs который лежит в папке debug в текстовом редакторе и вносите команды примерно так _index = lbAdd [107,"Ваша команда"] но есть одно но, я ещё не нашел способ использования ковычек (") в командах и я предлагаю пока использовать такие кавычки (') команда автоматически будет приотачена к списку команд, но убедительная просьба не редактируйте файл comrefnew.sqs со стондартными командами добавленными мною, не советую также трогать остальные файлы скрипта.

Пример находится в папке "ПРИМЕРЫ" под названием - "Скрипт для отладки миссий"


Скрипты, активирующиеся в зависимости от их имени

  • init.sqs - активация при запуске игры(после брифинга).
  • initIntro.sqs - активация при запуске ролика.
  • exit.sqs - активация в конце миссии.
  • onFlare.sqs - активация при запуске светящейся ракеты.
    Аргументы: [[r,g,b], loh] - R,G,B - цвета ракет.


Удары кулаком и прикладом

Думаю кого-нибудь может заинтересовать, как заставить солдатов бить кулаком или прикладом.
Все, что я находил на форумах и т.п., не работало в чистом виде.
Я уже убил порядком времени на это и, вроде бы немного разобрался.
Итак...

УДАР ПРИКЛАДОМ

Удар прикладом можно осуществить несколькими способами:
Способ 1. (playMove)
sold1 playMove "CombatStrokeGun" или
sold1 playMove "CombatStrokeGunEnd"
где sold1 - имя солдата.
Разницы между этими командами я не заметил (хотя, возможно, она есть). Если применять этот способ, то солдат ударит прикладом в любом случае: если оружие за спиной, то достанет, а если его нет вообще, то будет бить без него (с пистолетами я не пробовал). Использовать вместо playMove команду switchMove не получается - солдат дергается и останавливается.
Способ 2. (action)
sold1 action ["StrokeGun"]
Эффект тот же, но больше ограничений. Необходимо, чтобы оружие находилось в руках, иначе ничего не выйдет.

УДАР КУЛАКОМ

Удар кулаком мне удалось получить также двумя способами.
Способ 1. (playMove, switchMove)
sold1 playMove "StandStrokeFist" или sold1 switchMove "StandStrokeFist"
playMove при некоторых условиях может не срабатывать, а вот switchMove срабатывает всегда (вроде как).
Способ 2. (action)
sold1 action ["StrokeFist"]
Чтобы сработало необходимо, чтобы у солдата в руках не было оружия (пистолеты не проверял). Необходимо сначала либо отобрать у бойца
оружие (например removeAllWeapons sold1), либо заставить убрать оружие за спину - sold1 setBehaviour "CARELESS".

<<<Назад <<<


Хотите взрыв?

Иногда же вам хотелось сделать миссию более эффектной с помощью артобстрела? Или с помощью бомбардировки? Вот собственно два скрипта с подробным обьяснением.

  1. Бомбардировка
    идет относительно самолета(кто захочет - можно и вертолета, но это нереально будет, товарищи)

    ;находим самолет и записываем его в переменную _plane
    _plane = this select 0
    ;берем название заряда и записываем его в переменную _gun
    _gun = this select 1
    ;записываем кол-во зарядов в переменную _countgun
    _countgun = this select 2
    ;начало цикла
    #bomba
    ;помещаем бомбу ниже самолета на полметра
    _bomb = _gun camcreate[(getpos _plane select 0), (getpos _plane select 1), (getpos _plane select 2)-0.5]
    ;ожидаем полсекунды и уменьшаем кол-во зарядов на 1-цу
    ~0.5
    _countgun = _countgun - 1
    ;проверяем кол-во зарядов:
    ;если > 0, то возвращаемся в начало цикла
    ;если нет, то идем к концу
    ?(_countgun>0): goto "bomba"
    exit
    ;запуск скрипта:
    ;[ваш_самолет,"ваш_заряд",кол-во_зарядов]
    ;exec "ваше_название_скрипта.sqs"
  2. Артобстрел: !ОБНОВЛЕН!(! - обновление в скрипте)
    идет относительно какого-либо маркера

    ;берем название заряда и записываем его в переменную _gun
    _gun = this select 0
    ;берем название маркера и записываем его в переменную _marka
    _marka = this select _coord
    ;кол-во переменных в массиве записываем в переменную _coord
    ;отнимаем от кол-ва переменных в массиве 1-цу для того,
    ;чтобы не было ошибки при взятии координатов,
    ;например: у вас 15 эл. в массиве. _gun нам брать не надо, а
    ;из-за считывания координат без 0-вого эл-та
    ;программа найдет несуществующую переменную. Нам
    ;этого не надо.
    _coord=(count _this) - 1
    ;берем название маркера и записываем его в переменную _marka
    _marka = this select _coord
    ;начало цикла
    #artob
    ;обождем время от 1 до 5 секунд
    ~random 5

    ;захват случайным образом координат из массива _this с помощью
    ;переменной _coord

    ;координата x
    _xc = _this select (random _coord)
    ;!проверяем номер рендома, чтобы он не взял имя маркера на x
    ;а взял последнюю координату
    ?(_xc == _coord): _xc = _coord - 1
    ;координата y
    _yc = _this select (random _coord)
    ;!проверяем номер рандома, чтобы он не взял имя маркера на y,
    ;а взял последнюю координату
    ?(_yc == _coord): _yc = _coord - 1

    ;создаем заряд относительно маркера плюс координат х и у
    _bang = _gun camcreate[(getmarkerpos _marka select 0) + _xc, (getmarkerpos _marka select 1) + _yc]

    ;проверяем выполнена ли задача (obj правда или ложь)
    ;правда - переходим к концу
    ;ложь - возвращаемся в начало цикла
    ?(obj): exit
    goto "artob"
    ;если хотите, можете сделать так, как и в бомбардировании - определить
    ;кол-во зарядов, а потом проверить его: 0 зарядов или еще есть

    ;для запуска скрипта
    ;["ваш_заряд",...разные_координаты...,"ваш_маркер"]
    ;exec "ваше_название_скрипта.sqs"
    ;не забудьте кроме положительных координат еще и отрицательные
  3. Артобстрел 2. Сокращение.!НОВОЕ!
    идет относительно какого-либо маркера

    ;берем название заряда и записываем его в переменную _gun
    _gun = _this select 0
    ;берем максимальное значение координат и записываем его
    ;в переменную _coordsmax
    _coordsmax = _this select 1
    ;берем название маркера и записываем его в переменную _marka
    _marka = _this select 2
    ;берем максимальное ожидание заряда оружия
    _vrema = _this select 3

    ;начинам цикл
    #artobstrel
    ;ожидаем от одной до _vrema секунд
    ~random vrema

    ;захватываем одну из координат максимально до _coordsmax в переменную _xc
    _xc = random _coordsmax
    ;захватываем одну из координат максимально до _coordsmax в переменную _yc
    _yc = random _coordsmax

    ;создаем заряд относительно маркера _marka плюс координаты x и y
    _bang = _gun camcreate[(getmarkerpos _marka select 0) + _xc, (getmarkerpos _marka select 1) + _yc]

    ;проверяем выполнена ли задача (obj правда или ложь)
    ;правда - переходим к концу
    ;ложь - возвращаемся в начало цикла
    ?(obj): exit
    goto "artobstrel"
    ;если хотите, можете сделать так, как и в бомбардировании - определить
    ;кол-во зарядов, а потом проверить его: 0 зарядов или еще есть

    ;для запуска скрипта
    ;["ваш_заряд",максимальная_координата,"ваш_маркер"]
    ;exec "ваше_название_скрипта.sqs"
Но в Артобстреле 2 будут только макс-корды(отрицательные не пробовал), но в написании он значительно легче, чем обычный Артобстрел(лучше использовать обычный Артобстрел, в нем может быть огромное кол-во координат)
<<<Назад <<<


Полный туториал по брифингам

Пример находится в папке "ПРИМЕРЫ" под названием - "Полный туториал по брифингам"


Меню

Глава 1. Введение.
Основы редактора
Units (F1)
Groups (F2)
Triggers (F3)
Waypoints (F4)
Synchronize (F5)
Markers (F6)
Глава 2. Команды
Введение
Игровые команды A - C
Игровые команды D - R
Игровые команды S - W
Игровые команды - Resistance
Анимация
Действия
Неизвестные команды
Глава 3. Объекты
Основные
Оружие и боеприпасы
Оружие и боеприпасы от Mailman'а и Kegetys'a
Глава 4. Скрипты
Введение
Скриптописание
Глава 5. Камеры
Введение
Глава 6. Остальное
Создание собственных звуков и музыки
Синхронизация речи и движения губ
Создание CTF миссии
Добавление флага
Внешние файлы: Briefing, Overview и Description
Как собрать отдельные миссии в кампанию
Использование речи и радио
Добавление лица
Drop tutorial (огонь, вода, дым) как это сделать
Часто задаваемые вопросы
Hits & Tips (Flashpoint.ru)
Благодарности
История

Made by Rinza
Url: www.rinzzza.narod.ru
Mail: rinzzza@mail.ru
ICQ: 169140236
Версия 1.80