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


Фотография

Как заставить юнита стрелять вопреки приказу?


Лучший Ответ Ibragim , 17 February 2021 - 23:42

Если это не группа игрока, то все проще:

USER_make_unit_open_fire_on_target = 
	{
		params ["_unit","_target"];
		
		_group = group _unit;
		
		[_unit] joinSilent grpNull; 
		
		_unit setCombatMode "RED";
		_unit doTarget _target;
		
		waitUntil 
			{
				!(alive _unit)
				or
				(!(canMove _target) and !(canFire _target))				
			};
		
		if (alive _unit) then 
			{
				[_unit] joinSilent _group;		
			};		
	};

[_unit,_target] spawn USER_make_unit_open_fire_on_target; /// _unit - бот; _target - цель
Перейти к сообщению


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

#1 OFFLINE   Fixjunior

Fixjunior

    Ефрейтор

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

Отправлено 17 February 2021 - 21:18

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


  • 0

#2 OFFLINE   Ibragim

Ibragim

    Сержант

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

Отправлено 17 February 2021 - 21:35

USER_make_unit_open_fire_on_target = 
	{
		params ["_unit","_target"];
		
		_group = group _unit;
		[_unit] joinSilent grpNull; 
		_unit setCombatMode "RED";
		[_unit] joinSilent _group;

		_unit doTarget _target;
	};

[_unit,_target] spawn USER_make_unit_open_fire_on_target; /// _unit - бот; _target - цель

Убедись, что бот имеет соответствующий заряд и его цель бронированна. Иначе он может открыть огонь из основного оружия (по водителю грузовика, например). Если требуется удар из РПГ по небронированной цели, резонно писать длинный скрипт по удалению основного оружия и прибавления его заново после поражения цели из РПГ.


  • 0

#3 OFFLINE   Fixjunior

Fixjunior

    Ефрейтор

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

Отправлено 17 February 2021 - 21:37

USER_make_unit_open_fire_on_target = 
	{
		params ["_unit","_target"];
		
		_group = group _unit;
		[_unit] joinSilent grpNull; 
		_unit setCombatMode "RED";
		[_unit] joinSilent _group;

		_unit doTarget _target;
	};

[_unit,_target] spawn USER_make_unit_open_fire_on_target; /// _unit - бот; _target - цель

Убедись, что бот имеет соответствующий заряд и его цель бронированна. Иначе он может открыть огонь из основного оружия (по водителю грузовика, например). Если требуется удар из РПГ по небронированной цели, резонно писать длинный скрипт по удалению основного оружия и прибавления его заново после поражения цели из РПГ.

 

Понял, большое спасибо.


  • 0

#4 OFFLINE   Fixjunior

Fixjunior

    Ефрейтор

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

Отправлено 17 February 2021 - 22:51

USER_make_unit_open_fire_on_target = 
	{
		params ["_unit","_target"];
		
		_group = group _unit;
		[_unit] joinSilent grpNull; 
		_unit setCombatMode "RED";
		[_unit] joinSilent _group;

		_unit doTarget _target;
	};

[_unit,_target] spawn USER_make_unit_open_fire_on_target; /// _unit - бот; _target - цель

Убедись, что бот имеет соответствующий заряд и его цель бронированна. Иначе он может открыть огонь из основного оружия (по водителю грузовика, например). Если требуется удар из РПГ по небронированной цели, резонно писать длинный скрипт по удалению основного оружия и прибавления его заново после поражения цели из РПГ.

 

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


Сообщение отредактировал Fixjunior: 17 February 2021 - 23:03

  • 0

#5 OFFLINE   Ibragim

Ibragim

    Сержант

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

Отправлено 17 February 2021 - 23:05

 

USER_make_unit_open_fire_on_target = 
	{
		params ["_unit","_target"];
		
		_group = group _unit;
		[_unit] joinSilent grpNull; 
		_unit setCombatMode "RED";
		[_unit] joinSilent _group;

		_unit doTarget _target;
	};

[_unit,_target] spawn USER_make_unit_open_fire_on_target; /// _unit - бот; _target - цель

Убедись, что бот имеет соответствующий заряд и его цель бронированна. Иначе он может открыть огонь из основного оружия (по водителю грузовика, например). Если требуется удар из РПГ по небронированной цели, резонно писать длинный скрипт по удалению основного оружия и прибавления его заново после поражения цели из РПГ.

 

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

Ничего. Прописывай в параметрах запуска скрипта бота и его цель. Группа в самом скрипте вычисляется сама. 
 


  • 0

#6 OFFLINE   Fixjunior

Fixjunior

    Ефрейтор

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

Отправлено 17 February 2021 - 23:13

 

 

USER_make_unit_open_fire_on_target = 
	{
		params ["_unit","_target"];
		
		_group = group _unit;
		[_unit] joinSilent grpNull; 
		_unit setCombatMode "RED";
		[_unit] joinSilent _group;

		_unit doTarget _target;
	};

[_unit,_target] spawn USER_make_unit_open_fire_on_target; /// _unit - бот; _target - цель

Убедись, что бот имеет соответствующий заряд и его цель бронированна. Иначе он может открыть огонь из основного оружия (по водителю грузовика, например). Если требуется удар из РПГ по небронированной цели, резонно писать длинный скрипт по удалению основного оружия и прибавления его заново после поражения цели из РПГ.

 

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

Ничего. Прописывай в параметрах запуска скрипта бота и его цель. Группа в самом скрипте вычисляется сама. 
 

 

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


  • 0

#7 OFFLINE   Ibragim

Ibragim

    Сержант

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

Отправлено 17 February 2021 - 23:17

Переделай вот так:

USER_make_unit_open_fire_on_target = 
	{
		params ["_unit","_target"];
		
		_unit doTarget _target;
		
		sleep 3;
		
		_group = group _unit;
		[_unit] joinSilent grpNull; 
		_unit setCombatMode "RED";
		[_unit] joinSilent _group;		
	};

Этот бот в группе игрока или в группе ИИ?


  • 0

#8 OFFLINE   Fixjunior

Fixjunior

    Ефрейтор

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

Отправлено 17 February 2021 - 23:32

Переделай вот так:

USER_make_unit_open_fire_on_target = 
	{
		params ["_unit","_target"];
		
		_unit doTarget _target;
		
		sleep 3;
		
		_group = group _unit;
		[_unit] joinSilent grpNull; 
		_unit setCombatMode "RED";
		[_unit] joinSilent _group;		
	};

Этот бот в группе игрока или в группе ИИ?

этот бот находится в названной группе _group1


  • 0

#9 OFFLINE   Fixjunior

Fixjunior

    Ефрейтор

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

Отправлено 17 February 2021 - 23:39

 

Переделай вот так:

USER_make_unit_open_fire_on_target = 
	{
		params ["_unit","_target"];
		
		_unit doTarget _target;
		
		sleep 3;
		
		_group = group _unit;
		[_unit] joinSilent grpNull; 
		_unit setCombatMode "RED";
		[_unit] joinSilent _group;		
	};

Этот бот в группе игрока или в группе ИИ?

этот бот находится в названной группе _group1. в группе под командованием ИИ.

 


  • 0

#10 OFFLINE   Ibragim

Ibragim

    Сержант

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

Отправлено 17 February 2021 - 23:42   Лучший Ответ

Если это не группа игрока, то все проще:

USER_make_unit_open_fire_on_target = 
	{
		params ["_unit","_target"];
		
		_group = group _unit;
		
		[_unit] joinSilent grpNull; 
		
		_unit setCombatMode "RED";
		_unit doTarget _target;
		
		waitUntil 
			{
				!(alive _unit)
				or
				(!(canMove _target) and !(canFire _target))				
			};
		
		if (alive _unit) then 
			{
				[_unit] joinSilent _group;		
			};		
	};

[_unit,_target] spawn USER_make_unit_open_fire_on_target; /// _unit - бот; _target - цель

  • 0

#11 OFFLINE   Fixjunior

Fixjunior

    Ефрейтор

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

Отправлено 18 February 2021 - 00:01

 

Если это не группа игрока, то все проще:

USER_make_unit_open_fire_on_target = 
	{
		params ["_unit","_target"];
		
		_group = group _unit;
		
		[_unit] joinSilent grpNull; 
		
		_unit setCombatMode "RED";
		_unit doTarget _target;
		
		waitUntil 
			{
				!(alive _unit)
				or
				(!(canMove _target) and !(canFire _target))				
			};
		
		if (alive _unit) then 
			{
				[_unit] joinSilent _group;		
			};		
	};

[_unit,_target] spawn USER_make_unit_open_fire_on_target; /// _unit - бот; _target - цель

о, вот это работает, спасибо! а еще маленький вопросик: можно ли как-то предотвратить кривые выстрелы ботов? я вроде прописал команду боту disableAI "AIMINGERROR", а он все равно куда то рядом отстрелялся, притом что расстояние небольшое.


  • 0

#12 OFFLINE   Ibragim

Ibragim

    Сержант

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

Отправлено 18 February 2021 - 00:17

о, вот это работает, спасибо! а еще маленький вопросик: можно ли как-то предотвратить кривые выстрелы ботов? я вроде прописал команду боту disableAI "AIMINGERROR", а он все равно куда то рядом отстрелялся, притом что расстояние небольшое.

В Инициализации бота поставь:

this setSkill ["aimingAccuracy", 1];

Но это приведет к тому, что и основным оружием он будет снимать с двух-трех выстрелов. Если только для выстрела с рпг, то так:

USER_make_unit_open_fire_on_target = 
	{
		params ["_unit","_target"];
		
		_group = group _unit;
		_accuracy = _unit skill "aimingAccuracy";
		
		[_unit] joinSilent grpNull; 
		
		_unit setCombatMode "RED";
		_unit doTarget _target;
		_unit setSkill ["aimingAccuracy", 1];
		
		waitUntil 
			{
				!(alive _unit)
				or
				(!(canMove _target) and !(canFire _target))				
			};
		
		if (alive _unit) then 
			{
				_unit setSkill ["aimingAccuracy", _accuracy];
				[_unit] joinSilent _group;		
			};		
	};

[_unit,_target] spawn USER_make_unit_open_fire_on_target; /// _unit - бот; _target - цель

  • 0

#13 OFFLINE   Fixjunior

Fixjunior

    Ефрейтор

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

Отправлено 18 February 2021 - 00:28

 

о, вот это работает, спасибо! а еще маленький вопросик: можно ли как-то предотвратить кривые выстрелы ботов? я вроде прописал команду боту disableAI "AIMINGERROR", а он все равно куда то рядом отстрелялся, притом что расстояние небольшое.

В Инициализации бота поставь:

this setSkill ["aimingAccuracy", 1];

Но это приведет к тому, что и основным оружием он будет снимать с двух-трех выстрелов. Если только для выстрела с рпг, то так:

USER_make_unit_open_fire_on_target = 
	{
		params ["_unit","_target"];
		
		_group = group _unit;
		_accuracy = _unit skill "aimingAccuracy";
		
		[_unit] joinSilent grpNull; 
		
		_unit setCombatMode "RED";
		_unit doTarget _target;
		_unit setSkill ["aimingAccuracy", 1];
		
		waitUntil 
			{
				!(alive _unit)
				or
				(!(canMove _target) and !(canFire _target))				
			};
		
		if (alive _unit) then 
			{
				_unit setSkill ["aimingAccuracy", _accuracy];
				[_unit] joinSilent _group;		
			};		
	};

[_unit,_target] spawn USER_make_unit_open_fire_on_target; /// _unit - бот; _target - цель

понял, спасибо.


  • 0

#14 OFFLINE   Cooler58

Cooler58

    Сержант

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

Отправлено 12 May 2022 - 19:17

 

Если это не группа игрока, то все проще:

USER_make_unit_open_fire_on_target = 
	{
		params ["_unit","_target"];
		
		_group = group _unit;
		
		[_unit] joinSilent grpNull; 
		
		_unit setCombatMode "RED";
		_unit doTarget _target;
		
		waitUntil 
			{
				!(alive _unit)
				or
				(!(canMove _target) and !(canFire _target))				
			};
		
		if (alive _unit) then 
			{
				[_unit] joinSilent _group;		
			};		
	};

[_unit,_target] spawn USER_make_unit_open_fire_on_target; /// _unit - бот; _target - цель

Здравствуйте. ребята! Уважаемый Ibragim, в этом скрипте по-моему отсутствует переключение бота на рпг. Я пробовал по-разному, убирал основное оружие и второстепенное, но бот бежит с одним рпг (еще ршг давал) ко мне (переменная "p1" и не стреляет в меня из трубы. Расстояние 150-200 м. Не понимаю, как заставить бота выстрелить из трубы?


  • 0

#15 OFFLINE   Cooler58

Cooler58

    Сержант

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

Отправлено 12 May 2022 - 19:34

В идеале так себе представляю: бежит ко мне бот (bot move getPosATL player) и за 150-200 м достает трубу и стреляет в меня из ршг. Неужели нельзя ничего сделать? Было бы полезно


Просто боты по своему FSM иногда применяют ршг. Хочу понять, какие условия, обстоятельства заставляют их делать это


  • 0

#16 OFFLINE   Cooler58

Cooler58

    Сержант

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

Отправлено 12 May 2022 - 20:41

даже это не помогло при написании в консоли отладки: JBOY_FireRPG_fnc =


{
params["_rpgShooter","_targetUnit"];
_invisibleTarget = "O_TargetSoldier" createVehicle [10,10000,0];
_invisibleTarget allowdamage false;
createVehicleCrew _invisibleTarget;
_invisibleTarget attachTo [_targetUnit,[0,0,1]];
_weapon = primaryWeapon _rpgShooter;
_magType = magazines _rpgShooter select 0;
_rpgShooter removeMagazines _magType;
_rpgShooter removeWeapon _weapon;
_rpgShooter doTarget _invisibleTarget;
_rpgShooter reveal _invisibleTarget;
_rpgShooter addWeapon _weapon;
sleep 20;
_rpgShooter addMagazines [_magType,3];
deleteVehicle _invisibleTarget;
};
[] spawn
{
[rpg_1,player] call JBOY_FireRPG_fnc;

};


  • 0




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