Arma 3 диалоги как сделать

Обновлено: 07.07.2024

Всем привет. Хотелось бы задать пару вопросов, на мой взгляд не сложных, по поводу редактора. А именно:

2. Задания. Хотелось бы сделать как в некоторых миссиях кампании. То есть, изначально у нас стоит одна задача (дойти до города), потом внезапно что-то происходит (падает метеорит), задача отменяется и из ниоткуда создается другая, изначально невидимая(эвакуация). Как это реализуется?

К.О.З.Л.И.К прошел. Все нормально.

Задания. Хотелось бы сделать как в некоторых миссиях кампании. То есть, изначально у нас стоит одна задача (дойти до города), потом внезапно что-то происходит (падает метеорит), задача отменяется и из ниоткуда создается другая, изначально невидимая(эвакуация). Как это реализуется?

Так там вроде об этом упоминается.

Задания. Хотелось бы сделать как в некоторых миссиях кампании. То есть, изначально у нас стоит одна задача (дойти до города), потом внезапно что-то происходит (падает метеорит), задача отменяется и из ниоткуда создается другая, изначально невидимая(эвакуация). Как это реализуется?

Так там вроде об этом упоминается.

Нет, там все 3 задания заранее видны. А мне нужно, чтобы изначально задания не было.

Чтоб изначально заданий не было видно, синхронизируй модуль ЗАДАНИЕ СОЗДАНО (CREATE TASK), а не ЗАДАНИЕ НАЗНАЧЕНО (TASK ASSIGNED) с нужным триггером. там по сути должно быть два модуля задание создано, так вот тебе нужно синхронизировать с триггером само задание, а не состояние задания). Еще, чтоб оно и назначилось(что скорее всего тебе тоже нужно), соедини с тем же триггером и задание назначено.

Чтоб изначально заданий не было видно, синхронизируй модуль ЗАДАНИЕ СОЗДАНО (CREATE TASK), а не ЗАДАНИЕ НАЗНАЧЕНО (TASK ASSIGNED) с нужным триггером. там по сути должно быть два модуля задание создано, так вот тебе нужно синхронизировать с триггером само задание, а не состояние задания). Еще, чтоб оно и назначилось(что скорее всего тебе тоже нужно), соедини с тем же триггером и задание назначено.

Понял, спасибо. Ответ на один вопрос есть.

Чтоб изначально заданий не было видно, синхронизируй модуль ЗАДАНИЕ СОЗДАНО (CREATE TASK), а не ЗАДАНИЕ НАЗНАЧЕНО (TASK ASSIGNED) с нужным триггером. там по сути должно быть два модуля задание создано, так вот тебе нужно синхронизировать с триггером само задание, а не состояние задания). Еще, чтоб оно и назначилось(что скорее всего тебе тоже нужно), соедини с тем же триггером и задание назначено.

Ребят скиньте sqm файл на яндекс диск напр. с нормальными заданиями которые должны выполняться поочерёдно. Просто солдат идёт в точку 1 2 3. Сам парюсь уж несколько дней, постоянно фигня то галки с самого начала стоят, то последнее задание первым и т.д. беда короче беда

Чтоб изначально заданий не было видно, синхронизируй модуль ЗАДАНИЕ СОЗДАНО (CREATE TASK), а не ЗАДАНИЕ НАЗНАЧЕНО (TASK ASSIGNED) с нужным триггером. там по сути должно быть два модуля задание создано, так вот тебе нужно синхронизировать с триггером само задание, а не состояние задания). Еще, чтоб оно и назначилось(что скорее всего тебе тоже нужно), соедини с тем же триггером и задание назначено.

Ребят скиньте sqm файл на яндекс диск напр. с нормальными заданиями которые должны выполняться поочерёдно. Просто солдат идёт в точку 1 2 3. Сам парюсь уж несколько дней, постоянно фигня то галки с самого начала стоят, то последнее задание первым и т.д. беда короче беда

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

Чтоб изначально заданий не было видно, синхронизируй модуль ЗАДАНИЕ СОЗДАНО (CREATE TASK), а не ЗАДАНИЕ НАЗНАЧЕНО (TASK ASSIGNED) с нужным триггером. там по сути должно быть два модуля задание создано, так вот тебе нужно синхронизировать с триггером само задание, а не состояние задания). Еще, чтоб оно и назначилось(что скорее всего тебе тоже нужно), соедини с тем же триггером и задание назначено.

Ребят скиньте sqm файл на яндекс диск напр. с нормальными заданиями которые должны выполняться поочерёдно. Просто солдат идёт в точку 1 2 3. Сам парюсь уж несколько дней, постоянно фигня то галки с самого начала стоят, то последнее задание первым и т.д. беда короче беда

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

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

Arma 3 диалоги как сделать

Объясняю построчно:
1. Создаем задачу
2. Дескрипшен задачи (т.е. пояснения) ["Что видно в блокноте", "Название задачи", "Метка на маркере"];
3. Ссылка на маркер, что бы знали куда бежать, где Marker_Name - имя маркера. Можно не задавать, если задача того не требует.
4. Устанавливаем состояние задачи - в данном случае - назначено
5. Красивый хинт в центре экрана, в котором написан - задание добавлено
6. говорим системе, что 1 задача - активная.

Теперь, давайте рассмотрим, как можно сюда добавить текст из stingtable.xml

Создаем stingtable.xml и в нем пишем:

<Project name="Name">
<Package name="Second name">

<Container name="Tasks">
<Key >
<Original> Kill All Human </Original>
<Russian>Убить всех людей</Russian>
</Key>

Arma 3 диалоги как сделать

Работаем в скриптах SQF, можно делать в FSM, но мы же не ищем легких путей. верно? Страдания закаляют характер.

Для начала нам нужно дать все эти фразы, что мы создали и боту и игроку.

Делается это легко и не принужденно, например в init.sqf

"Briefing" - тема разговора, не меняйте, пусть всегда будет briefing, лишний гемор ни к ему.

kb\briefing.bikb - ссылка на файл bikb в папке с миссией,

С этого момента и игрок и бот знают, что нужно говорить, но не знают когда и в каком порядке. Самое время представить вам команды kbTell и kbWasSaid

Player kbTell [ Kill_Bot , " briefing ", " EFT_Hello_Bot "];

а, команда kbWasSaid - условие, проверяющее. сказал ли игрок нужное, ну или не игрок а Бот

Там же в ините ставим условие, после которого начнется диалог (здесь на приближение):

Player kbTell [Kill_Bot, "briefing", " EFT_How_are_you_Kill_bot "];

Player kbTell [Kill_Bot, "briefing", " EFT_Nice_weather_right "];

Все! Все остальное - паузы, эффекты (если далеко), анимации - все сделает система.

Выбор между репликами:

Тут как с диалогами, сначала нужно научить, затем запустить в нужный момент. Но уже не в bikb а в sqf, создаем briefing_Kill_bot.sqf:

if (_from == Bot_kill && _sentenceId == "" && !(_this kbWasSaid [_from, _topic, "EFT_Hello_Bot", 999999])) then <
BIS_convMenu = BIS_convMenu + [[localize "EFT_Hello_Bot", _topic, "EFT_Hello_Bot", []]]
>;


if (Bot_Kill kbWasSaid [player, "briefing", "EFT_Hello_Player", 3]) then <

BIS_convMenu = BIS_convMenu + [[localize "EFT_How_are_you_Kill_bot", _topic, "EFT_How_are_you_Kill_bot", []]];

BIS_convMenu = BIS_convMenu + [[localize "EFT_Nice_weather_right", _topic, "EFT_Nice_weather_right", []]];
>;

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

Второй код - это меню диалога запуститься, когда Kill_Bot скажет определенную фразу игроку.

localize "EFT***" - это то, что будет в меню, не сама фраза, а сокращенный ее вариант, нужно отдельно прописывать в stringtable.xlm, для чего? в крохотное меню не уместиться ваши поэмы, хотя если банальное да или нет, то можно и не заморачиваться.

waitUntil ; //ждем начало диалога, т.к. эта фраза забита в briefing_Kill_Bot.sqf, то просто ждем пока игрок скажет привет.

Kill_Bot kbTell [Player, "briefing", " EFT_Hello_Player "]; //бот здоровается, ждать не нужно, т.к. у игрока появилось меню.

[] spawn <
waitUntil ;
Kill_Bot kbTell [Player, "briefing", " EFT_Im_alright "];

[] spawn <
waitUntil ;
Kill_Bot kbTell [Player, "briefing", " EFT_Yeah_right "];

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

Диалоги


1: sleep в триггере работать не будет, значит выносим диалог в отдельный скрипт, и делаем задержку там.

Просмотрел весь раздел, попробовал что-то делать в редакторе, но не получилось. Как делать задержку между репликами? То-есть, например, в триггере в поле ПО АКТИВАЦИИ я прописываю: unit1 sidechat "Здарова!"; sleep 2; unit2 sidechat "Привет.". Но задержки нету — весь текст выходит сразу. Что я делаю не так?
Второй вопрос. Когда я присваиваю каждому боту в отряде имя, прописывая в инициализации " bot setGroupID [ "Имя бота" ];", то в чате почему-то пишется имя рандомного бота из отряда, а не конкретного, хотя переменные-имена у них разные.

1: sleep в триггере работать не будет, значит выносим диалог в отдельный скрипт, и делаем задержку там.

1: sleep в триггере работать не будет, значит выносим диалог в отдельный скрипт, и делаем задержку там.

2:

Вынести это значит писать в поле "ПО СКРИПТУ"?

Tsarkov , он все четко написал! Тоесть сохраняешь миссию, идешь "мои_документы - Arma 3 или Arma 3 other profile - ищешь себя любимого - mission - "имя миссии.остров" и вот там создаешь файл нахвание.sqf (любым текстовым редактором (не ворд!)) в него пишешь нужный код (sidechat ""; sleep; sidechat "";) сохраняешь, идешь опять в игру, открываешь миссию в редакторе ставишь триггер и в егоактивации пишешь null = [] execVM "название.sqf";

Tsarkov , он все четко написал! Тоесть сохраняешь миссию, идешь "мои_документы - Arma 3 или Arma 3 other profile - ищешь себя любимого - mission - "имя миссии.остров" и вот там создаешь файл нахвание.sqf (любым текстовым редактором (не ворд!)) в него пишешь нужный код (sidechat ""; sleep; sidechat "";) сохраняешь, идешь опять в игру, открываешь миссию в редакторе ставишь триггер и в егоактивации пишешь null = [] execVM "название.sqf";

Все, спасибо. Никогда просто скрипты не выносил.

vlad333000 , так, я попробовал. У меня ишет Skript not found/ игру даже перезапускал, писал диалог такого вида:

Или скобки нужны?

И еще так писал:

Названия юнитов, естественно, писал.

То-есть проблема у меня именно с документом, хотя сохранил вроде правильно.

Читайте также: