×
Меню
Индекс

MSFD Использование звука для обнаружения событий

 
Я думаю, что это очень умная идея (спасибо BalorNG), так что описываю ее еще и здесь, хотя ранее она описана в разделе о звуке.
Можно использовать функцию GetSoundPlaying, чтобы обнаружить некоторые ситуации в игре, не доступные другим способом.
Просто взгляните на звуки в меню Gameplay/sounds, и это, возможно, даст вам повод к размышлению: определить, что кто-то упал, определить, когда рядом определенный монстрА вот этого вы не узнаете , если не присоедените скрипт к монстру. Тогда зачем вам звук, когда есть GetDistance? Дело в том, что звучит всегда определенная вещь – игрок, монстр, предмет и т.д. Стрелкой вы доберетесь до первого монстра, а не нужного вам. Также, похоже, для некотрых звуков есть объект, которого нет в игре (например, звуки региона, звук skillraise) и добраться до него нельзя. (Прим. Gwathlobal), определить удар оружием и т.д.
 
Вот дополнительная информация (спасибо Horatio):
GetSoundPlaying – это очень мощная команда, при помощи которой можно обнаружить что игрок (и, я полагаю, другие Актеры) выполняют определенное действие, такое как чтение заклинания или вытаскивание оружия. Я использовал это в моем моде, чтобы определить, когда игрок кастует заклинание и какой оно школы. Формат следующий:
if ( player->GetSoundPlaying, "Sound ID" == 1 )
;сделать что-то крутое здесь
endif 
 
Посмотрите меню звуков в TESCS, чтобы определить какой Sound ID соответствует нужному действию.
Например "illusion cast" соответствует моменту, когда игрок читает заклинание школы Иллюзий.
Возможно, что вам придется немного поэкспериментировать немножко.
 
Примечание: по какой то причине Sound ID "drink" вызывает ошибку, так что не проверяйте, пьет ли игрок зельеКстати, не всегда :P Но даже когда ошибки нет, звучит похоже не игрок, а бутылка! С игрока вы до звука не доберетесь. (Прим.Gwathlobal).
 
Примечание.
Работает не со всеми звуками.
Например звук дверей не детектируется и еще некоторые зашитые в движок (хардкод) звуки.
Либо надо использовать локальные скрипты вместо глобальных (?).