Перейти к содержимому


Фотография

Проблема с побегом


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 10

#1 OFFLINE   Nika

Nika

    Ефрейтор

  • Пользователи
  • 34 сообщений

Отправлено 05 May 2019 - 19:13

Всем доброго времени суток.

Хочу сделать кооперативную миссию на 9 мая, но возникла проблема. Мой сценарий заключается в захвате немецкого "языка" и я хочу сделать, чтобы при определённых условиях этот пленник мог попытаться сбежать. Я пробовала создать повторяемый триггер с условием на дистанцию, при активации которого, пленник отсоединяется от группы игрока и пытается убежать, но оказалось что это работает некорректно в мультиплеере. Получается, что когда один игрок стоит близко к пленнику и охраняет его, а хост отбегает на расстояние нужное для активации триггера побега, триггер срабатывает не смотря на то что второй игрок стоит близко к пленнику. В условии триггера я использовала команду:

Player Distance Officer > 30;

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

Условие:

Player Distance Officer < 10;

Активация:

Player action ["Surrender", Officer];

Но этот беглец сдаётся только, когда условие выполняет хост. Когда его пытается поймать другой игрок, он на него не реагирует. Подскажите, как можно заставить выполняться условия триггера на всех игроков, а не только на хоста?


  • 0

#2 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 05 May 2019 - 22:34

Подскажите, как можно заставить выполняться условия триггера на всех игроков, а не только на хоста?

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


Сообщение отредактировал Schatten: 05 May 2019 - 22:37

  • 0

#3 OFFLINE   Nika

Nika

    Ефрейтор

  • Пользователи
  • 34 сообщений

Отправлено 05 May 2019 - 23:54

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

 

Подскажите, как можно заставить выполняться условия триггера на всех игроков, а не только на хоста?

 

Зашла перепроверить на счёт этой галочки и она отключена. Странно как-то... 


  • 0

#4 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 06 May 2019 - 01:27

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

(thisList findIf {(_x distance Officer) < 10}) >= 0

а при активации выполнить

(thisList select 0) action ["Surrender", Officer];

Аналогичное условие использовать для второго триггера.


Сообщение отредактировал Schatten: 06 May 2019 - 01:28

  • 1

#5 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 06 May 2019 - 01:51

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

для каждой машины РАЗНЫЙ, а на выделенном сервере вообще не определен!
3. Команда

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

в качестве аргумента требует ЛОКАЛЬНОСТИ юнита!

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



Как решить?
1. Смотрим не за одним игроком, а за всеми -

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

,

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

,

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

,

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


2. Расчет проводить только на одной машине (Сервере) - триггер только для сервера
3. При необходимости изменить поведение ИИ удаленно отсылать команды с сервера на машину, где этот ИИ локален -

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

,

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


Сообщение отредактировал vlad333000: 06 May 2019 - 01:57

  • 0

#6 OFFLINE   Nika

Nika

    Ефрейтор

  • Пользователи
  • 34 сообщений

Отправлено 07 May 2019 - 01:20

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

(thisList findIf {(_x distance Officer) < 10}) >= 0

а при активации выполнить

(thisList select 0) action ["Surrender", Officer];

Аналогичное условие использовать для второго триггера.

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


  • 0

#7 OFFLINE   Nika

Nika

    Ефрейтор

  • Пользователи
  • 34 сообщений

Отправлено 07 May 2019 - 04:18

Nika, код работает на все 100% так как и было задумано БИСами, причины отличия реального кода, от того, что вы хотите:
1. Вычисления триггера - НЕ СИНХРОНИЗИРУЕТСЯ между клиентами и/или сервером, они проходят на каждой машине (где существует триггер) независимо!
2. Результат команды

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

для каждой машины РАЗНЫЙ, а на выделенном сервере вообще не определен!
3. Команда

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

в качестве аргумента требует ЛОКАЛЬНОСТИ юнита!

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



Как решить?
1. Смотрим не за одним игроком, а за всеми -

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

,

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

,

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

,

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


2. Расчет проводить только на одной машине (Сервере) - триггер только для сервера
3. При необходимости изменить поведение ИИ удаленно отсылать команды с сервера на машину, где этот ИИ локален -

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

,

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

Касательно команды "allPlayers" думаю что она не подойдёт в моём варианте, так как в моей кооп миссии присутствуют ещё и боты, а эта команда судя по-всему учитывает только игроков. Говоря о других командах, то я плохо понимаю, как их нужно правильно прописывать в условии триггера... К сожалению я далеко не профессионал в редакторе и только учусь. Я также не знаю что вы имеете ввиду под необходимостью изменять поведение ИИ удалённо... Мне никогда не приходилось иметь с этим дело, не могли бы вы объяснить мне подробнее, как можно заставить работать эти команды. Я думаю, мне нужно сделать такое условие, которое будет активироваться только тогда, когда все игроки группы в том числе и боты, будут находиться от пленника на расстоянии побега. Я видела где-то команду, которая учитывает только юнитов определённой стороны и мне кажется, что она могла бы сработать, ведь все игроки и боты в моей миссии находятся на стороне "OPFOR", а пленник на стороне "BLUFOR".


Сообщение отредактировал Nika: 07 May 2019 - 04:19

  • 0

#8 OFFLINE   Nika

Nika

    Ефрейтор

  • Пользователи
  • 34 сообщений

Отправлено 07 May 2019 - 23:36

Нашла довольно простой способ выполнить необходимые условия для побега.

1) Создаём триггер в форме эллипс с радиусом допустим 20х20 и называем его Run;

2) В активации этого триггера выбираем "OPFOR", тип активации "Отсутствует";

3) Делаем его повторяемым;

4) Условие: this

5) При активации: 

​[Пленник] joinSilent grpNull; hint "Он пытается сбежать!";Пленник move getpos marker_0;Pobeg=true;

6) Прикрепляем этот триггер к пленнику

Run attachto [Пленник, [0,0,0]];

Таким образом мы создали триггер, который служат своеобразным радаром, который проверяет есть ли в его радиусе юниты той или иной стороны, в моём случае это юниты красной стороны. Когда в радиусе триггера нет ни одного красного юнита, пленник пытается сбежать. В сингле работает отлично, а вот в мультиплеере возникают проблемы, которые я пока не придумала как решить. Он просто отказывается бежать к нужному месту, застывает на месте и всё тут... Раньше он пытался бежать как в одиночном сценарии, так  и в мультиплеере. Буду думать


Сообщение отредактировал Nika: 07 May 2019 - 23:39

  • 0

#9 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 09 May 2019 - 01:10

Nika, настройки активации триггера:
- Тип: нет.
- Активация: нет.
- Повторяемый: да.
- Только сервер: да.
Выражения триггера:
- Условие:

call {
    _index = allUnits findIf {((side _x) == opfor) and {(_x distance Officer) < 10}};

    thisTrigger setVariable ["closestUnitIndex", _index];

    _index >= 0
};

- При активации:

call {
    _index = thisTrigger getVariable "closestUnitIndex";

    (allUnits select _index) action ["Surrender", Officer];
};

- При деактивации:

[Officer] joinSilent grpNull;

"Он пытается сбежать!" remoteExec ["hint"];

Officer move (getMarkerPos "marker_0");

P. S.

Чтобы проверить, активирован триггер или нет, есть команда 

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

.


Сообщение отредактировал Schatten: 09 May 2019 - 01:12

  • 0

#10 OFFLINE   Nika

Nika

    Ефрейтор

  • Пользователи
  • 34 сообщений

Отправлено 09 May 2019 - 18:15

Nika, настройки активации триггера:
- Тип: нет.
- Активация: нет.
- Повторяемый: да.
- Только сервер: да.
Выражения триггера:
- Условие:

call {
    _index = allUnits findIf {((side _x) == opfor) and {(_x distance Officer) < 10}};

    thisTrigger setVariable ["closestUnitIndex", _index];

    _index >= 0
};

- При активации:

call {
    _index = thisTrigger getVariable "closestUnitIndex";

    (allUnits select _index) action ["Surrender", Officer];
};

- При деактивации:

[Officer] joinSilent grpNull;

"Он пытается сбежать!" remoteExec ["hint"];

Officer move (getMarkerPos "marker_0");

P. S.

Чтобы проверить, активирован триггер или нет, есть команда 

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

.

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


  • 0

#11 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 09 May 2019 - 20:56

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

Это из-за действия Surrender.
Сбросить можно так:

[Officer, ""] remoteExec ["switchMove"];

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

Это как?


  • 0




Яндекс.Метрика