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


Фотография

Запретить отступление


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

#1 OFFLINE   rds1

rds1

    Рядовой

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

Отправлено 25 January 2020 - 14:36

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


Сообщение отредактировал rds1: 25 January 2020 - 14:44

  • 0

#2 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 25 January 2020 - 16:07

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

 


  • 0

#3 OFFLINE   rds1

rds1

    Рядовой

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

Отправлено 25 January 2020 - 16:31

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

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


  • 0

#4 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 25 January 2020 - 17:15

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

.


  • 0

#5 OFFLINE   rds1

rds1

    Рядовой

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

Отправлено 25 January 2020 - 17:40

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

.

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

 

В поле "условие" пишем ! player in list Trig1

 

В "по активации" (bot1) doMove (getMarkerPos "marker1");

 

Вот как, примерно с этими командами хотя бы это сделать? Это был эксперимент с отдельными ботами, а нужно чтобы вместо player и bot1 была группа, то есть, если группа оказалась вне триггера, то она возвращается, ну и маркер этот поставить в центре триггера. Потом можно добавить счетчик, то есть, если не вся группа вышла за триггер, а из нее там осталось меньше половины (из тех что живы), ну и тд.

 

Я примерно знаю, какие команды здесь нужны, но проблема в том, что сам не смогу правильно все это написать в один работающий скрипт)


Сообщение отредактировал rds1: 25 January 2020 - 18:08

  • 0

#6 OFFLINE   Denispetrov123

Denispetrov123

    Ефрейтор

  • Пользователи
  • 82 сообщений
  • Откуда:Москва

Отправлено 25 January 2020 - 18:57

 

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

.

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

 

В поле "условие" пишем ! player in list Trig1

 

В "по активации" (bot1) doMove (getMarkerPos "marker1");

 

Вот как, примерно с этими командами хотя бы это сделать? Это был эксперимент с отдельными ботами, а нужно чтобы вместо player и bot1 была группа, то есть, если группа оказалась вне триггера, то она возвращается, ну и маркер этот поставить в центре триггера. Потом можно добавить счетчик, то есть, если не вся группа вышла за триггер, а из нее там осталось меньше половины (из тех что живы), ну и тд.

 

Я примерно знаю, какие команды здесь нужны, но проблема в том, что сам не смогу правильно все это написать в один работающий скрипт)

 

while {true} do {
	{
		if (!(_x in list Trig1)) then {
			_x doMove (getMarkerPos "marker1");
		};
	}forEach units group ГРУППА;
};

  • 0

#7 OFFLINE   rds1

rds1

    Рядовой

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

Отправлено 25 January 2020 - 20:33




while {true} do {
	{
		if (!(_x in list Trig1)) then {
			_x doMove (getMarkerPos "marker1");
		};
	}forEach units group ГРУППА;
};

Кажется, все правильно, но не работает. Создаю миссию, в ней скрипт с этим текстом, триггер trig1, группу gr1 (командой gr1 = group this), группа вне триггера, но к маркеру не идет.

 

В этой строке должно быть так?

 

}forEach units group gr1; или _gr1 ?


  • 0

#8 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 25 January 2020 - 21:44

Да, примерно такой скрипт и нужен, но этот слишком сложный

А что там сложного? Код, который тебя интересует, находится на строках 78-120. Поскольку положение тела тебя не интересует, то можно исключить строки 88-101. Итого, твой код займёт примерно ((120 - 78) + 1) - ((102 - 88) + 1) = 28 строк.


  • 0

#9 OFFLINE   rds1

rds1

    Рядовой

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

Отправлено 26 January 2020 - 00:14

 

Да, примерно такой скрипт и нужен, но этот слишком сложный

А что там сложного? Код, который тебя интересует, находится на строках 78-120. Поскольку положение тела тебя не интересует, то можно исключить строки 88-101. Итого, твой код займёт примерно ((120 - 78) + 1) - ((102 - 88) + 1) = 28 строк.

 

Для моего уровня это пока сложновато ) и у меня же Арма 2 ОА, там эти новые команды не работают


  • 0

#10 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 26 January 2020 - 22:30

rds1, попробуй этот код:
private ["_distanceMax", "_group", "_position"];

_group = _this select 0;
_position = _this select 1;
_distanceMax = _this select 2;

{
    [_x, _position, _distanceMax] spawn {
        _unit = _this select 0;
        _position = _this select 1;
        _distanceMax = _this select 2;

        while {
            sleep 1;

            !(isNull _unit) and { alive _unit }
        } do {
            _unitPosition = getPosATL _unit;

            if ((_unitPosition distance _position) > _distanceMax) then {
                _unitPosition = [
                    [0, random _distanceMax, 0],
                    -(([_position, _unitPosition] call BIS_fnc_dirTo) + (45 - (random 90)))
                ] call BIS_fnc_rotateVector2D;

                _unit moveTo ([_position, _unitPosition] call BIS_fnc_vectorAdd);

                waitUntil {
                    sleep 1;

                    (isNull _unit) or { !(alive _unit) } or { moveToCompleted _unit } or { moveToFailed _unit }
                };
            };
        };
    };
} forEach (units _group); 

Сообщение отредактировал Schatten: 27 January 2020 - 13:10

  • 0




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