Добрый день, уважаемые форумчане! Пытаюсь написать скрипт криков раненого, но не преуспел. Ситуация такая: играем с АСЕ модом, без GPS и нужно, чтобы в бессознательном состоянии игрок кричал, чтобы другие могли хотя бы по источнику крика определить, где валяется подстреленный. Пытался в триггере условие: {(getDammage _x) > 0.8} ForEach [p1, p2, p3, p4, p5, p6, p7, p8], /где р1 и другие - это игроки, а 0.8 - степень повреждения при котором игрок уходит в бессознательное состояние более чем на 30 секунд и не очнётся точно, а то будет смешно если ранили кого то рядом, а он в сознании и орёт как дурачок. В активации: playSound krik; [p1, p2, p3, p4, p5, p6, p7, p8] say3D "krik"; / где "krik" - это название звукового файла. Есть предположение, что скорее всего я не правильно выстроил логику скрипта. Если есть у кого какие мысли -помогите пожалуйста! С уважением.

крик раненого

Лучший Ответ Cooler58 , 24 October 2018 - 22:51
Друзья! Спасибо, всё действительно получилось! Итак: в условие триггера:(p1 getVariable ["ACE_isUnconscious", false]) and {(time - (thisTrigger getVariable ["time", time - 120])) >= 120}; в активацию: krik remoteExec ["playSound",-2]; p1 say3D "krik"; thisTrigger setVariable ["time", time]; Понятно, что р1 заменяется во втором триггере на р2, в третьем на р3 и т.д.
Перейти к сообщению
#1
OFFLINE
Отправлено 11 September 2018 - 16:01
#2
OFFLINE
Отправлено 11 September 2018 - 16:38
#3
OFFLINE
Отправлено 11 September 2018 - 17:32
Cooler58, попробуй сделать триггер локальным и настроить его так:
- Повторяемый
- Условие активации (если moroz89 прав):
(player getVariable ["unconscious", false]) and {!(triggerActivated thisTrigger)}
- При активации:
playSound3D [...];
Также установи задержку для триггера.
Сообщение отредактировал Schatten: 11 September 2018 - 17:54
#4
OFFLINE
Отправлено 11 September 2018 - 20:24
Спасибо, ребята. надоумили как сделать проще, а не городить огород. В Wiki второй пример будет в самый раз. Благодарю!
#5
OFFLINE
Отправлено 13 September 2018 - 18:44
Попробовал - не получилось(
- Условие активации : (player getVariable ["unconscious", false]) and {!(triggerActivated thisTrigger)}
- При активации пробовал и ссылку из Wiki, и просто любой звук в триггере.
Не срабатывает скорее всего из-за условия. А вот задержка триггера - это как? Я в самом триггере ставил время и 3, и 30 сек., может еще где-то надо? Ставил "повторяемый" и "на сервере". Может не нужно ставить в условии "!" (это по-моему "not alive" )
#6
OFFLINE
Отправлено 13 September 2018 - 22:57
Cooler58, ставишь триггер и делаешь его повторяемым. В условие активации вставляешь это:
(player getVariable ["unconscious", false]) and {(time - (thisTrigger getVariable ["time", time - 30])) >= 30}
При активации:
playSound3D [...]; thisTrigger setVariable ["time", time];
P. S.
Похоже, playSound3D проигрывает только встроенные звуки. Тогда используй другие команды, а для проигрывания у других игроков используй
Сообщение отредактировал Schatten: 13 September 2018 - 22:57
#7
OFFLINE
Отправлено 14 September 2018 - 17:33
К сожалению ничего не получается. Вообще наверное с АСЕ такие штучки не проходят, там бессознанка наверное другая. Сам звуковой файл"крик" работает при других условиях (УАЗики, железные банки т.д. - всё орёт). А вообще вот так в условии {(getDammage _x) > 0.8} ForEach [p1, p2, p3, p4, p5, p6, p7, p8] написано правильно или в корне неверно?
#8
OFFLINE
Отправлено 14 September 2018 - 17:52
А вообще вот так в условии {(getDammage _x) > 0.8} ForEach [p1, p2, p3, p4, p5, p6, p7, p8] написано правильно или в корне неверно?
Неправильно, надо так:
({(getDammage _x) > 0.8} count [p1, p2, p3, p4, p5, p6, p7, p8]) > 0
или так:
([p1, p2, p3, p4, p5, p6, p7, p8] findIf {(getDammage _x) > 0.8}) >= 0
А если pX в одной группе, то можно вообще так:
((units (group player)) findIf {(getDammage _x) > 0.8}) >= 0
Сообщение отредактировал Schatten: 14 September 2018 - 18:03
#9
OFFLINE
Отправлено 14 September 2018 - 18:51
Странности продолжаются) в одном и том же триггере
при условии: p1 distance b1 < 3 звуковой файл срабатывает на железной банке (переменная b1) ,
при условии: ({(getDammage _x) > 0.1} count [p1, p2, p3, p4, p5, p6, p7, p8]) > 0 не работает (хотя урон снизил до 0.1 это при 2-х гранатах под ноги)
#10
OFFLINE
Отправлено 14 September 2018 - 18:56
Виноват. Ввел в заблуждение. Вместо "unconscious" нужно "ACE_isUnconscious"
#11
OFFLINE
Отправлено 14 September 2018 - 19:16
moroz89, вот сейчас условие рабочее, активация работает, звук от b1 (железная банка) воспроизводится. Спасибо тебе. Осталось только докумекать как из игроков источник звука сделать.
#12
OFFLINE
Отправлено 14 September 2018 - 19:24
P.S. проверил с примерами из Wiki (playSound3D [...] не пашет. Или я в синтаксисе filename не разобрался, т.е. "A3\Sounds_F\sfx\blip1.wav" менять нельзя на что то своё?
#13
OFFLINE
Отправлено 14 September 2018 - 19:49
Всё! Получилось!!!!!Спасибо вам, ребята!! Короче,
в условие:
(player getVariable ["unconscious", false]) and {(time - (thisTrigger getVariable ["time", time - 30])) >= 30}
в активацию: playSound krik; player say3D "krik"; thisTrigger setVariable ["time", time];
И даже несмотря на то, что триггер повторяемый, звуковой файл воспроизводится не с накложением, а с определенным интервалом
Сегодня проверим в игре, и если всё нормально, то тему апну
#14
OFFLINE
Отправлено 14 September 2018 - 20:13
при условии: ({(getDammage _x) > 0.1} count [p1, p2, p3, p4, p5, p6, p7, p8]) > 0 не работает (хотя урон снизил до 0.1 это при 2-х гранатах под ноги)
getDammage возвращает интегральный показатель. Например, ты можешь ногам нанести урон 0,8, но в целом урон будет 0,1.
проверил с примерами из Wiki (playSound3D [...]
не пашет. Или я в синтаксисе filename не разобрался, т.е. "A3\Sounds_F\sfx\blip1.wav" менять нельзя на что то своё?
Всё-таки можно, смотри заметки в BIKI.
И даже несмотря на то, что триггер повторяемый, звуковой файл воспроизводится не с накложением, а с определенным интервалом
Конечно, это благодаря этим кускам кода:
(time - (thisTrigger getVariable ["time", time - 30])) >= 30 // 30 -- время в секундах до следующей активации триггера
thisTrigger setVariable ["time", time];
Сообщение отредактировал Schatten: 14 September 2018 - 20:15
#15
OFFLINE
Отправлено 15 September 2018 - 01:47
Всё! Получилось!!!!!Спасибо вам, ребята!! Короче,
в условие:
(player getVariable ["unconscious", false]) and {(time - (thisTrigger getVariable ["time", time - 30])) >= 30}
в активацию: playSound krik; player say3D "krik"; thisTrigger setVariable ["time", time];
И даже несмотря на то, что триггер повторяемый, звуковой файл воспроизводится не с накложением, а с определенным интервалом
Сегодня проверим в игре, и если всё нормально, то тему апну
ошибся в посте: вместо "unconscious" нужно "ACE_isUnconscious", как и сказал moroz89
#16
OFFLINE
Отправлено 30 September 2018 - 15:12
Ребята, не могу сообразить, как же сделать, чтобы после кратковременной потери сознания игрок, сам пришедший в себя, не начинал орать через время (время задержки триггера), будучи давным-давно в строю. Знаю одно, что при моих настройках ACE если через 1 минуту не очнешься, то значит кричи. Прошу, подскажите.
#17
OFFLINE
Отправлено 30 September 2018 - 16:03
Я бы сделал звук короче, например 5 сек. И запускал его сразу же, как игрок становится раненным, и пускай каждые 5 секунд запускается, пока игрок не перестанет быть раненным
#19
OFFLINE
Отправлено 10 October 2018 - 21:18
Друзья, добрый вечер! понравилось предложение от moroz89 насчет 5 сек.Теперь всё славно работает за исключением одного НО, а именно каждый игрок слышит только себя. Т.е. по-моему мнению отсутствует Глобальная составляющая этого скрипта. Пробовал в триггере ну все галочки снимать/ставить всё безуспешно. Как же сделать, чтобы крики других игроков слышать?