Ох, народ, чувствую себя японским городовым )
Итак.
Я примерно понял, как работает баг с клавишей ESC
При вызове меню все игровые звуки должны ставиться на паузу, а после возврата в игру, те, что не были на паузе и до того, должны снова воспроизводиться.
Но код-то чешский )
Из-за этого игра некорректно отслеживает состояния потоков в скриптах.
Поэтому она эти потоки то ставит на паузу, то нет. И возобновляет, когда не надо.
Далее, почему после загрузки играет музон.
А фишка в том, что игра помнит все работающие аудио-потоки, и из каких файлов они созданы.
Поэтому, при загрузке из сохранения, игра вспоминает, что был поток, из такого-то файла сделанный, и восстанавливает.
Теперь способ, как эти мафиозные выкрутасы побороть:
Игра помнит не только сам поток, но и состояние всех переменных на момент сохранения. И в этих переменных лежат идентификаторы аудиопотоков.
Следовательно, чтобы багов с непрошенным воспроизведением не возникало, надо в самом начале скрипта, ещё до объявления переменных, эти потоки отдестроить.
CommandBlock 1
Stream_Destroy 0
Stream_Destroy 1
Stream_Destroy 2
Stream_Destroy 3
CommandBlock 0
А уже потом пускать весь основной скрипт.
Если мы используем в скрипте "шапочку" от GOLOD55, чтобы внешний скрипт не работал в меню, то этот дестрой можно и до, и после "шапочки" продублировать. На всякий случай.
Ещё полезно отслеживать состояние здоровья персонажа и дестроить потоки, если Томми склеил ласты.
И вот при таком способе "зачистки" потоков я пока багов не заметил. Но это не точно. Может, потом ещё найдутся.
P.S. Предлагаю, сообщения из этой темы, начиная с №26 перенести в отдельную тему и назвать её "Скрипт авто-радио" или как-то иначе, на усмотрение администрации.
UPD: Написанному не верить. Более тщательная проверка показала, что ни шиша из этого не работает, как ожидалось.
Последний раз редактировалось KlassenAS; 09.10.2020 в 18:42.
|