Перейти к содержанию

Музыкальный скрипт


Рекомендуемые сообщения

Еле нашел свой скрипт 3 летней давности на фр. Решил сейчас перепостить его сюда.

Суть скрипта проста. Он блокирует оригинальную музыку игры и играет вашу в определенной локации бесконечное количество времени.

 

begin musicscript

short nextSong
short done1
short doOnce
short doOnce2
short doit
short counter
short state
float Timer5
float timer2
float timer

if ( CellChanged == 1 )
	set Timer5 to 500
	set done1 to 0
	set doit to 0
	set counter to 0
	set state to 0
return
endif

if ( nextSong == 0 )
if ( done1 == 0 ); номер трэка
	set done1 to 1
	StreamMusic, "Music.*"; трэк в формате mp3, ogg, midi и путь.
endif
endif


set Timer5 to ( Timer5 + GetSecondsPassed )
if ( nextSong == 0 ); номер трэка
	if ( Timer5 < 370 ); время трэка
		return
	endif
	set nextSong to 1 ; переключатель
	set done1 to 0
	set Timer5 to 0
endif
end

Ссылка на комментарий
Поделиться на другие сайты

Существующая информация в сети что Морровинд работает только с mp3 не есть правда, игра использует DirectShow что теоретически позволяет проигрывать музыку в любом формате. Главное чтобы у вас были кодеки этих форматов.

 

Да и вообще mp3 не есть круто использовать в плагинах, только лишнее место тратится.

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...
А разве нельзя просто взять песню, заменить её название на песню из морроувинда и засунуть в папку, где была песня из морроувинда с таким же именем, заменить?
Ссылка на комментарий
Поделиться на другие сайты

Зачем заменят оригинальную музыку? Движок Морры считывает любую музыку в формате мп3 из папки Music\Explore для проигрывания фона.

 

Этот скрипт

блокирует оригинальную музыку игры и играет вашу в определенной локации
Ссылка на комментарий
Поделиться на другие сайты

Читай выше что я написал.

Если тебе нужно чтобы проигрывался музыка везде запихни ее в Music\Explore без скрипта.

Для надежности используй префикс для треков mx_explore_*.mp3

Изменено пользователем Kane
Ссылка на комментарий
Поделиться на другие сайты

  • 3 года спустя...
На какой-нибудь editor_marker. Такие можно найти, например, в Вивеке над каналами. Или же на любой другой объект, на который можно повесить скрипт.
Ссылка на комментарий
Поделиться на другие сайты

Бестолковый скрипт какой-то. Аж целых 10 переменных. Что за Timer5, timer2, timer? Это что - отдельные таймеры на каждый трек? Нафига? И почему отсутствует рандомайзер? Вместо него жестко заданный порядок воспроизведения треков. С учетом обнуления порядка при выходе игрока из локации последние треки в списке игрок и не услышит никогда. Этим скриптом только речь, состоящую из нескольких файлов, толкать, или еще какой набор звуков, но никак не музыку проигрывать.

Вот мой скрипт из мода, который я сейчас делаю. Проигрывает 4 трека в случайном порядке, один и тот же трек 2 раза подряд не повторяется. Скрипт глобальный, запускается другим глобальным скриптом.

 

Begin DsT_Music_IceCaves

short IceCaves_music
short DsT_IceCaves_rand
short DsT_IceCaves_rand_check
float timer

if ( ( getjournalindex "DsT_reloadIndex" ) != 10 )
setjournalindex "DsT_reloadIndex" 10
set IceCaves_music to 0
set DsT_IceCaves_rand_check to 0
endif

if IceCaves_music == 0
set timer to 0
set DsT_IceCaves_rand to random 4
if DsT_IceCaves_rand == 0
	if DsT_IceCaves_rand_check != 1
	set IceCaves_music to 1
	StreamMusic, "IceCaves_1.mp3"
	elseif DsT_IceCaves_rand_check == 1
	set IceCaves_music to 2
	StreamMusic, "IceCaves_2.mp3"
	endif
elseif DsT_IceCaves_rand == 1
	if DsT_IceCaves_rand_check != 2
	set IceCaves_music to 2
	StreamMusic, "IceCaves_2.mp3"
	elseif DsT_IceCaves_rand_check == 2
	set IceCaves_music to 3
	StreamMusic, "IceCaves_3.mp3"
	endif
elseif DsT_IceCaves_rand == 2
	if DsT_IceCaves_rand_check != 3
	set IceCaves_music to 3
	StreamMusic, "IceCaves_3.mp3"
	elseif DsT_IceCaves_rand_check == 3
	set IceCaves_music to 4
	StreamMusic, "IceCaves_4.mp3"
	endif
elseif DsT_IceCaves_rand == 3
	if DsT_IceCaves_rand_check != 4
	set IceCaves_music to 4
	StreamMusic, "IceCaves_4.mp3"
	elseif DsT_IceCaves_rand_check == 4
	set IceCaves_music to 1
	StreamMusic, "IceCaves_1.mp3"
	endif
endif
endif

if IceCaves_music != 0
set timer to ( timer + GetSecondsPassed )
endif

if IceCaves_music == 1
if ( timer > 403 )
set IceCaves_music to 0
set DsT_IceCaves_rand_check to 1
endif
elseif IceCaves_music == 2
if ( timer > 315 )
set IceCaves_music to 0
set DsT_IceCaves_rand_check to 2
endif
elseif IceCaves_music == 3
if ( timer > 358 )
set IceCaves_music to 0
set DsT_IceCaves_rand_check to 3
endif
elseif IceCaves_music == 4
if ( timer > 389 )
set IceCaves_music to 0
set DsT_IceCaves_rand_check to 4
endif
endif

if ( DsT_locationType != 24 )
set IceCaves_music to 0
set DsT_IceCaves_rand_check to 0
stopscript DsT_Music_IceCaves
endif

end

 

Где DsT_reloadIndex - добавленная в журнал запись с индексами 0 и 10. if ( ( getjournalindex "DsT_reloadIndex" ) != 10 ) обнуляет список воспроизведения при перезагрузке игры. Единственный минус - перезагрузка определяется толко полная, с выходом из игры.

if ( DsT_locationType != 24 )
set IceCaves_music to 0
set DsT_IceCaves_rand_check to 0
stopscript DsT_Music_IceCaves

- Останавливает скрипт при изменении кода локации, выставляемого из глобального скрипта, (например, при выходе из пещеры), если вешать скрипт на активатор, то это писать не надо. В этом случае (если активатор в интерьере) необходимо вписать в начало скрипта:

if ( CellChanged == 1 )
set DsT_IceCaves_rand_check to 0
set IceCaves_music to 0
endif

 

Upd: скрипт проапгрейжен, в случае повторного выбора трека рандомайзером проигрывается фиксированный трек, тк рандом в этом случае слишком много времени жрет.

Время таймера в секундах необходимо установить на 1 с меньше, чем в плейере (если берется оттуда), т к мною был замечен конфликт - в случае одновременного запуска музыки скриптом и стандартной музыки Морра воспроизводиться будет стандартная.

Изменено пользователем DesT
Ссылка на комментарий
Поделиться на другие сайты

Ну да, напрашивается рандомное воспроизведение музыки. Не понял только зачем было через журнал делать не повторение треков, можно было через переменные, но тут хозяин - барин.
Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...