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


Фотография

Отключить радиопереговоры для определенной стороны


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

#1 OFFLINE   GSBcom

GSBcom

    Рядовой

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

Отправлено 02 September 2021 - 23:32

Доброго времени суток! В очередной раз столкнулся с такой проблемой. Если на ботов (например, зеленых) кинуть анимации (например, [this,"WATCH1","FULL"] call BIS_fnc_ambientAnimCombat;), а потом убить или удалить такого бота, то получаем невидимого бота, который разговаривает всегда на английском. Есть команда  "enableSentences",  но она отключат весь звук на боте, - такой вариант не подходит. Возможно ли как-то применить эту команду для определенной стороны и решить вопрос  с "голосами невидимок". Либо как-то удалить то, что остается после "физического" удаления бота. Т.к. в режиме наблюдателя даже удаленные боты подсвечиваются как синяя сторона (в месте где была анимация).


Сообщение отредактировал GSBcom: 02 September 2021 - 23:32

  • 0

#2 OFFLINE   Ibragim

Ibragim

    Сержант

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

Отправлено 04 September 2021 - 16:53

Доброго времени суток! В очередной раз столкнулся с такой проблемой. Если на ботов (например, зеленых) кинуть анимации (например, [this,"WATCH1","FULL"] call BIS_fnc_ambientAnimCombat;), а потом убить или удалить такого бота, то получаем невидимого бота, который разговаривает всегда на английском. Есть команда  "enableSentences",  но она отключат весь звук на боте, - такой вариант не подходит. Возможно ли как-то применить эту команду для определенной стороны и решить вопрос  с "голосами невидимок". Либо как-то удалить то, что остается после "физического" удаления бота. Т.к. в режиме наблюдателя даже удаленные боты подсвечиваются как синяя сторона (в месте где была анимация).

Почему не подходит отключить весь звук на боте, если сам бот вообще не нужен?

Можно отключить боту способность говорить

bot disableAI "RADIOPROTOCOL";

Можно поставить EH "Killed" и в скрипте прописать выход из этой анимации перед смертью/удалением.


  • 0

#3 OFFLINE   GSBcom

GSBcom

    Рядовой

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

Отправлено 04 September 2021 - 20:57

Боты рандомно удаляются в миссии. Теоретически можно прописать тем, кто удаляется и отключение переговоров. А как быть с теми кто в анимации находился и убежал, или был убит во время анимации. Если отключать им речь, то теряется часть атмосферы боя. "Radioprotocol" попробую, но это вроде как тоже самое что sentences....
  • 0

#4 OFFLINE   Ibragim

Ibragim

    Сержант

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

Отправлено 04 September 2021 - 21:19

Боты рандомно удаляются в миссии. Теоретически можно прописать тем, кто удаляется и отключение переговоров. А как быть с теми кто в анимации находился и убежал, или был убит во время анимации. Если отключать им речь, то теряется часть атмосферы боя. "Radioprotocol" попробую, но это вроде как тоже самое что sentences....

Объясни подробней с примерами. Я не могу понять, что именно происходит с ботами и как нежелательные эффекты влияют на атмосферу.
Если баг случается по причине смерти/удаления во время анимации, то пропиши в обработчике события "killed" выход из анимации и перед смертью он из нее выйдет. А лучше прописать это в обработке события "hit".


Сообщение отредактировал Ibragim: 04 September 2021 - 22:27

  • 0

#5 OFFLINE   Ibragim

Ibragim

    Сержант

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

Отправлено 05 September 2021 - 21:54

А как быть с теми кто в анимации находился и убежал, или был убит во время анимации. Если отключать им речь, то теряется часть атмосферы боя. 

Если правильно понимаю, то можно решить отключив эту анимацию в момент, когда она больше не нужна, а именно в момент ранения,смерти/удаления. Об этом я писал выше: ставишь им всем EH "hit", а в блоке EH пишешь код, который выводит их из анимации. В итоге прежде, чем по ним пройдут эффекты ранения или смерти/удаления, они уже прекратят анимацию и нежелательные эффекты не должны будут проявляться. 


  • 0

#6 OFFLINE   Cooler58

Cooler58

    Сержант

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

Отправлено 19 September 2021 - 21:00

 

А как быть с теми кто в анимации находился и убежал, или был убит во время анимации. Если отключать им речь, то теряется часть атмосферы боя. 

Если правильно понимаю, то можно решить отключив эту анимацию в момент, когда она больше не нужна, а именно в момент ранения,смерти/удаления. Об этом я писал выше: ставишь им всем EH "hit", а в блоке EH пишешь код, который выводит их из анимации. В итоге прежде, чем по ним пройдут эффекты ранения или смерти/удаления, они уже прекратят анимацию и нежелательные эффекты не должны будут проявляться

Привет, Ibragim! Есть скрипт:

_victim = _this select 0 select 0;
_sleepTime = _this select 0 select 2;
 
if (isNull _victim || !alive _victim || vehicle _victim != _victim || stance _victim in ["PRONE","UNDEFINED"]) exitWith {};
 
 
_soundArray = ["hit_1", "hit_2", "hit_3", "hit_4", "hit_5", "hit_6", "hit_7", "hit_8", "hit_9", "hit_10", "hit_11", "hit_12", "hit_13", "hit_16", "hit_17", "hit_21", "hit_22", "hit_23", "hit_24", "hit_25", "hit_26", "hit_27", "hit_28", "hit_29", "hit_30", "hit_31", "hit_32", "hit_33", "hit_34", "hit_35", "hit_36", "hit_37", "hit_38", "hit_39", "hit_40", "hit_41", "hit_42", "hit_43", "hit_44", "hit_45", "hit_46", "hit_47", "hit_48", "hit_49", "hit_50", "hit_51", "hit_52", "hit_53", "hit_54", "hit_55", "hit_56", "hit_57", "hit_58"];
 
_soundToPlay = _soundArray select (floor(random(count _soundArray)));
 
if (_victim getVariable ["sound_switched", false]) exitWith {};
 
[_victim, [_soundToPlay, 100, 1]] remoteExec ["say3D", 0];
 
_victim setVariable ["sound_switched", true, true];
 
  sleep 0.1;
 
_AnimArray_1 = ["AmovPercMstpSrasWrflDnon_AadjPpneMstpSrasWrflDleft", "AmovPercMstpSrasWrflDnon_AadjPpneMstpSrasWrflDright", "Acts_CrouchingCoveringRifle01", "RHSUSF_flashbang_cover"];
 
_AnimToPlay_1 = _AnimArray_1 select (floor(random(count _AnimArray_1)));
 
if (_victim getVariable ["anim_switched", false]) exitWith {};
 
[_victim, _AnimToPlay_1] remoteExec ["switchMove", 0];
 
_victim setVariable ["anim_switched", true, true];
 
  sleep 1.9;
 
_AnimArray_2 = ["UnconsciousFaceDown", "UnconsciousReviveLegs_B", "UnconsciousReviveHead_A", "UnconsciousReviveDefault_B", "UnconsciousReviveDefault_A", "UnconsciousReviveBody_B", "UnconsciousFaceLeft", "Acts_LyingWounded_loop3", "acts_InjuredLyingRifle01", "Acts_InjuredCoughRifle02", "Acts_InjuredSpeakingRifle01", "Acts_InjuredLyingRifle02_180", "Acts_InjuredLookingRifle01", "Acts_InjuredLookingRifle02", "Acts_InjuredLookingRifle03", "Acts_InjuredLookingRifle04", "Acts_InjuredLookingRifle05", "Acts_InjuredAngryRifle01", "Acts_CivilInjuredLegs_1", "Acts_CivilInjuredChest_1", "Acts_CivilInjuredArms_1", "AmovPpneMstpSrasWrflDnon_injuredHealed", "AinjPpneMstpSnonWrflDnon_injuredHealed"];
 
_AnimToPlay_2 = _AnimArray_2 select (floor(random(count _AnimArray_2)));
 
[_victim, _AnimToPlay_2] remoteExec ["switchMove", 0];
 
if (_sleepTime > 0) then {
sleep _sleepTime;
};
Ты мне помог там здорово, спасибо.
Вызывается в init.sqf так: {_x addEventHandler ["Hit", {[_this] execVM "Soldier_Hit.sqf";}] } forEach (allUnits-playableUnits);
Судя по этому   скрипту при "hit" бот проигрывает анимацию ранения, валяясь на земле. Вот именно в этот момент он не должен болтать приказы, а он менторским голосом повторяет их. Как отключить ему болтовню в этот момент?

  • 0

#7 OFFLINE   Ibragim

Ibragim

    Сержант

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

Отправлено 20 September 2021 - 09:35

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

Что именно тебе нужно оставить из этого скрипта, а что убрать?
Судя по моим тестам, скрипт не проигрывает ни анимацию, ни голоса в момент смерти. Только в момент не смертельного ранения. 
Я убрал звуки вообще - для любого ранения, не только смертельного.

_victim = _this select 0 select 0;
_sleepTime = _this select 0 select 2;

if (isNull _victim || !alive _victim || vehicle _victim != _victim || stance _victim in ["PRONE","UNDEFINED"]) exitWith {};
/*
_soundArray = ["hit_1", "hit_2", "hit_3", "hit_4", "hit_5", "hit_6", "hit_7", "hit_8", "hit_9", "hit_10", "hit_11", "hit_12", "hit_13", "hit_16", "hit_17", "hit_21", "hit_22", "hit_23", "hit_24", "hit_25", "hit_26", "hit_27", "hit_28", "hit_29", "hit_30", "hit_31", "hit_32", "hit_33", "hit_34", "hit_35", "hit_36", "hit_37", "hit_38", "hit_39", "hit_40", "hit_41", "hit_42", "hit_43", "hit_44", "hit_45", "hit_46", "hit_47", "hit_48", "hit_49", "hit_50", "hit_51", "hit_52", "hit_53", "hit_54", "hit_55", "hit_56", "hit_57", "hit_58"];
 
_soundToPlay = _soundArray select (floor(random(count _soundArray)));
 
if (_victim getVariable ["sound_switched", false]) exitWith {};

_victim setVariable ["sound_switched", true, true];

[_victim, [_soundToPlay, 100, 1]] remoteExec ["say3D", 0];
  
  sleep 0.1;*/
 
_AnimArray_1 = ["AmovPercMstpSrasWrflDnon_AadjPpneMstpSrasWrflDleft", "AmovPercMstpSrasWrflDnon_AadjPpneMstpSrasWrflDright", "Acts_CrouchingCoveringRifle01", "RHSUSF_flashbang_cover"];
 
_AnimToPlay_1 = _AnimArray_1 select (floor(random(count _AnimArray_1)));
 
if (_victim getVariable ["anim_switched", false]) exitWith {};

_victim setVariable ["anim_switched", true, true]; 

[_victim, _AnimToPlay_1] remoteExec ["switchMove", 0];
 
  sleep 1.9;
 
_AnimArray_2 = ["UnconsciousFaceDown", "UnconsciousReviveLegs_B", "UnconsciousReviveHead_A", "UnconsciousReviveDefault_B", "UnconsciousReviveDefault_A", "UnconsciousReviveBody_B", "UnconsciousFaceLeft", "Acts_LyingWounded_loop3", "acts_InjuredLyingRifle01", "Acts_InjuredCoughRifle02", "Acts_InjuredSpeakingRifle01", "Acts_InjuredLyingRifle02_180", "Acts_InjuredLookingRifle01", "Acts_InjuredLookingRifle02", "Acts_InjuredLookingRifle03", "Acts_InjuredLookingRifle04", "Acts_InjuredLookingRifle05", "Acts_InjuredAngryRifle01", "Acts_CivilInjuredLegs_1", "Acts_CivilInjuredChest_1", "Acts_CivilInjuredArms_1", "AmovPpneMstpSrasWrflDnon_injuredHealed", "AinjPpneMstpSnonWrflDnon_injuredHealed"];
 
_AnimToPlay_2 = _AnimArray_2 select (floor(random(count _AnimArray_2)));
 
[_victim, _AnimToPlay_2] remoteExec ["switchMove", 0];
 
if (_sleepTime > 0) then {
sleep _sleepTime;
};

 

 


  • 0

#8 OFFLINE   Cooler58

Cooler58

    Сержант

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

Отправлено 21 September 2021 - 21:38

Привет, Ibragim! Ты спрашиваешь: "Что именно тебе нужно оставить из этого скрипта, а что убрать?". Отвечаю - ничего менять не надо. Скрипт работает исправно и устраивает меня. Но как сделать, чтобы бот  после "hit" пока жив и в анимации не мог озвучивать встроенные переговоры. Может как-то так: {_x addEventHandler ["Hit", {[_this] execVM "Soldier_Hit.sqf"; [_this] disableAI "RADIOPROTOCOL";}] } forEach (allUnits-playableUnits);


  • 0

#9 OFFLINE   Ibragim

Ibragim

    Сержант

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

Отправлено 22 September 2021 - 12:31

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

Но попробуй вот так написать:

_victim = _this select 0 select 0;
_sleepTime = _this select 0 select 2;

if (isNull _victim) exitWith {};

if (!alive _victim) exitWith {_victim switchMove ""; _victim disableAI "RADIOPROTOCOL"};

if (vehicle _victim != _victim || stance _victim in ["PRONE","UNDEFINED"]) exitWith {};

_soundArray = ["hit_1", "hit_2", "hit_3", "hit_4", "hit_5", "hit_6", "hit_7", "hit_8", "hit_9", "hit_10", "hit_11", "hit_12", "hit_13", "hit_16", "hit_17", "hit_21", "hit_22", "hit_23", "hit_24", "hit_25", "hit_26", "hit_27", "hit_28", "hit_29", "hit_30", "hit_31", "hit_32", "hit_33", "hit_34", "hit_35", "hit_36", "hit_37", "hit_38", "hit_39", "hit_40", "hit_41", "hit_42", "hit_43", "hit_44", "hit_45", "hit_46", "hit_47", "hit_48", "hit_49", "hit_50", "hit_51", "hit_52", "hit_53", "hit_54", "hit_55", "hit_56", "hit_57", "hit_58"];
 
_soundToPlay = _soundArray select (floor(random(count _soundArray)));
 
if (_victim getVariable ["sound_switched", false]) exitWith {};

_victim setVariable ["sound_switched", true, true];

[_victim, [_soundToPlay, 100, 1]] remoteExec ["say3D", 0];
  
  sleep 0.1;
 
_AnimArray_1 = ["AmovPercMstpSrasWrflDnon_AadjPpneMstpSrasWrflDleft", "AmovPercMstpSrasWrflDnon_AadjPpneMstpSrasWrflDright", "Acts_CrouchingCoveringRifle01", "RHSUSF_flashbang_cover"];
 
_AnimToPlay_1 = _AnimArray_1 select (floor(random(count _AnimArray_1)));
 
if (_victim getVariable ["anim_switched", false]) exitWith {};

_victim setVariable ["anim_switched", true, true]; 

[_victim, _AnimToPlay_1] remoteExec ["switchMove", 0];
 
  sleep 1.9;
 
_AnimArray_2 = ["UnconsciousFaceDown", "UnconsciousReviveLegs_B", "UnconsciousReviveHead_A", "UnconsciousReviveDefault_B", "UnconsciousReviveDefault_A", "UnconsciousReviveBody_B", "UnconsciousFaceLeft", "Acts_LyingWounded_loop3", "acts_InjuredLyingRifle01", "Acts_InjuredCoughRifle02", "Acts_InjuredSpeakingRifle01", "Acts_InjuredLyingRifle02_180", "Acts_InjuredLookingRifle01", "Acts_InjuredLookingRifle02", "Acts_InjuredLookingRifle03", "Acts_InjuredLookingRifle04", "Acts_InjuredLookingRifle05", "Acts_InjuredAngryRifle01", "Acts_CivilInjuredLegs_1", "Acts_CivilInjuredChest_1", "Acts_CivilInjuredArms_1", "AmovPpneMstpSrasWrflDnon_injuredHealed", "AinjPpneMstpSnonWrflDnon_injuredHealed"];
 
_AnimToPlay_2 = _AnimArray_2 select (floor(random(count _AnimArray_2)));
 
[_victim, _AnimToPlay_2] remoteExec ["switchMove", 0];
 
if (_sleepTime > 0) then {
sleep _sleepTime;
};

  • 0

#10 OFFLINE   Cooler58

Cooler58

    Сержант

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

Отправлено 22 September 2021 - 21:06

Привет, Ibragim! Всё правильно, при смерти и не должен работать скрипт. Крики и анимация работают только при ранении, если ранение смертельное - то скрипт прекращает работу. В общем всё как надо. Осталось сделать, чтобы бот еще при жизни, получив не смертельный "hit", перестал разговаривать.


  • 0

#11 OFFLINE   Ibragim

Ibragim

    Сержант

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

Отправлено 23 September 2021 - 01:34

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

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


  • 0

#12 OFFLINE   Cooler58

Cooler58

    Сержант

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

Отправлено 23 September 2021 - 20:23

Привет, Ibragim! Смоделирую ситуацию пошагово что делает этот скрипт в игре: Пуля попала в бота → бот вскрикнул типа от попадания (рандомный звук из массива _soundArray) → через sleep 0.1 бот отрабатывает первую анимацию → через sleep 1.9 бот отрабатывает вторую анимацию уже на земле. В итоге, надо, чтобы после использования рандомного звука из массива _soundArray, живой бот  ничего не говорил по радиопротоколу. Просто смешно смотрится, когда он корчится раненый и одновременно бодрым голосом отдает кому-то приказы


  • 0

#13 OFFLINE   Ibragim

Ibragim

    Сержант

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

Отправлено 23 September 2021 - 20:45

Только сейчас понял, что тебе нужно отключить команды бота, а не крики после ранения.

_victim = _this select 0 select 0;
_sleepTime = _this select 0 select 2;

if (isNull _victim) exitWith {};

if (!alive _victim) exitWith {_victim switchMove ""; _victim disableAI "RADIOPROTOCOL"};

if (vehicle _victim != _victim || stance _victim in ["PRONE","UNDEFINED"]) exitWith {};

_victim disableAI "RADIOPROTOCOL";

_soundArray = ["hit_1", "hit_2", "hit_3", "hit_4", "hit_5", "hit_6", "hit_7", "hit_8", "hit_9", "hit_10", "hit_11", "hit_12", "hit_13", "hit_16", "hit_17", "hit_21", "hit_22", "hit_23", "hit_24", "hit_25", "hit_26", "hit_27", "hit_28", "hit_29", "hit_30", "hit_31", "hit_32", "hit_33", "hit_34", "hit_35", "hit_36", "hit_37", "hit_38", "hit_39", "hit_40", "hit_41", "hit_42", "hit_43", "hit_44", "hit_45", "hit_46", "hit_47", "hit_48", "hit_49", "hit_50", "hit_51", "hit_52", "hit_53", "hit_54", "hit_55", "hit_56", "hit_57", "hit_58"];
 
_soundToPlay = _soundArray select (floor(random(count _soundArray)));
 
if (_victim getVariable ["sound_switched", false]) exitWith {};

_victim setVariable ["sound_switched", true, true];

[_victim, [_soundToPlay, 100, 1]] remoteExec ["say3D", 0];
  
  sleep 0.1;
 
_AnimArray_1 = ["AmovPercMstpSrasWrflDnon_AadjPpneMstpSrasWrflDleft", "AmovPercMstpSrasWrflDnon_AadjPpneMstpSrasWrflDright", "Acts_CrouchingCoveringRifle01", "RHSUSF_flashbang_cover"];
 
_AnimToPlay_1 = _AnimArray_1 select (floor(random(count _AnimArray_1)));
 
if (_victim getVariable ["anim_switched", false]) exitWith {};

_victim setVariable ["anim_switched", true, true]; 

[_victim, _AnimToPlay_1] remoteExec ["switchMove", 0];
 
  sleep 1.9;
 
_AnimArray_2 = ["UnconsciousFaceDown", "UnconsciousReviveLegs_B", "UnconsciousReviveHead_A", "UnconsciousReviveDefault_B", "UnconsciousReviveDefault_A", "UnconsciousReviveBody_B", "UnconsciousFaceLeft", "Acts_LyingWounded_loop3", "acts_InjuredLyingRifle01", "Acts_InjuredCoughRifle02", "Acts_InjuredSpeakingRifle01", "Acts_InjuredLyingRifle02_180", "Acts_InjuredLookingRifle01", "Acts_InjuredLookingRifle02", "Acts_InjuredLookingRifle03", "Acts_InjuredLookingRifle04", "Acts_InjuredLookingRifle05", "Acts_InjuredAngryRifle01", "Acts_CivilInjuredLegs_1", "Acts_CivilInjuredChest_1", "Acts_CivilInjuredArms_1", "AmovPpneMstpSrasWrflDnon_injuredHealed", "AinjPpneMstpSnonWrflDnon_injuredHealed"];
 
_AnimToPlay_2 = _AnimArray_2 select (floor(random(count _AnimArray_2)));
 
[_victim, _AnimToPlay_2] remoteExec ["switchMove", 0];
 
if (_sleepTime > 0) then {
sleep _sleepTime;
};

  • 0

#14 OFFLINE   Ibragim

Ibragim

    Сержант

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

Отправлено 23 September 2021 - 20:52

А если тебе вообще не нужны голосовые команды этих ботов, то запусти в ините каждого бота:

this disableAI "RADIOPROTOCOL";

Можешь сделать для всех сразу:

_bots = []; // массив со всеми, кому хочешь отключить
{_x disableAI "RADIOPROTOCOL"} forEach _bots;

Если для всей стороны и со спавном новых ботов, то: (запускай либо через execVM, либо spawn)

while {isServer} do 
	{
		sleep 1;
		
		_bots = allUnits select {side _x isEqualTo EAST};
		
		{_x disableAI "RADIOPROTOCOL"} forEach _bots;
	};

  • 0

#15 OFFLINE   Cooler58

Cooler58

    Сержант

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

Отправлено 23 September 2021 - 20:59

Ibragim, спасибо! выручил


  • 0




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