Цитата:
Сообщение от Abradox
W и S не надо! Нужно что-то типа F3 и F4
|
Ну, если в настройках игры назначишь F3 и F4 в качестве дополнительных, для управления персонажем, то будут тебе F3 и F4.
Повторюсь: если в настройках игры клавиша не назначена ни на одну из функций, то скрипты её не видят.
Я использовал дополнительные вперёд и назад. При управлении машиной они не используются. У меня им соответствуют W и S. А у тебя может быть что угодно.
Цитата:
Сообщение от GOLOD55
Полагаю, стрим делетается из памяти при его дестрое
|
Да, всё верно. Я проверил. Переменная, используемая в команде Stream_Create 1, не указывает команде, с каким идентификатором надо делать поток, а лишь хранит идентификатор этого потока. То есть, если мы два раза подряд напишем в скрипте:
Stream_Create 1
Stream_Create 1
То будет создан новый поток, его идентификатор сохранится в переменной, и идентификатор предыдущего потока мы потеряем, а сам поток в памяти останется.
Так что, если мы хотим один поток поменять на другой, старый поток дестроить надо обязательно.
Так же я выяснил, что если создать подряд несколько потоков, то их номера будут просто идти друг за другом, например, 132, 133, 134. Следовательно, мы можем через одну и ту же переменную отдавать команды разным потокам, меняя её значение. Для этого понадобятся ещё две, в которых мы запомним номера первого и последнего потока.
Благодаря этому у меня получилось сделать скрипт, легко изменяемый под любое количество потоков-радиостанций.
Пока переключение оставил W и S, при настройках, как на скринах.
Поменять можно и потом, в любой момент.
Неактивные "радиостанции" пока находятся просто на паузе. Потом их можно будет мютить, убирая громкость.
Так же, пока что, одной радиостанции соответствует один аудиофайл.
Особенность переключения радиостанций: поскольку в скриптах отсутствует понятие "события", они не могут реагировать на непосредственное нажатие клавиш.
Поэтому скрипт проверяет, нажата ли клавиша, через определённые промежутки времени. Если нажатие попадёт между считываниями, оно не будет обработано.
Поэтому клавишу переключения радиостанции нужно удерживать примерно полсекунды. Зато, если удерживать клавишу, радиостанции переключаются циклически.
Также без автоматического повторения треков, ведь мы договорились, что у нас на каждой радиостанции будет несколько рандомно играющих треков.
Но, если трек доиграл до конца и хочется послушать его снова, можно выйти из машины и зайти опять.
Затестил его, вроде работает без сбоев.
Собственно, сам скрипт:
Развернуть для просмотра
Dim_Act 1
Dim_Flt 10
GetActivePlayer 0
Human_GetProperty 0,0,Energy
If Flt[0]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on
Let Flt[0]=0 //логика
Let Flt[1]=0 //поток 00
Let Flt[2]=-1 //сиденье
Let Flt[3]=0 //ещё пригодится )
Let Flt[4]=0 //ещё пригодится )
Let Flt[5]=0 //Нажатие клавиши вперёд 1
Let Flt[6]=0 //Запоминаем последний поток
Let Flt[7]=0 //Запоминаем первый поток
Let Flt[8]=0 //ещё пригодится )
Let Flt[9]=0 //номер радиостанции 0-3
CommandBlock 1
Stream_Create 1,"radio\radio00.ogg"
Let Flt[7]=Flt[1]
Stream_Create 1,"radio\radio01.ogg"
Stream_Create 1,"radio\radio02.ogg"
Stream_Create 1,"radio\radio03.ogg"
Let Flt[6]=Flt[1]
Let Flt[1]=Flt[1]-3
CommandBlock 0
Label CHECK
CommandBlock 0
Wait 350
Human_GetSeatIdx 0,2
If Flt[2]=-1,CAR_OUT,CAR_IN
Label CAR_IN
Ctrl_Read 5,UP1
If Flt[5]=0,-1,RADIO_UP
Label READ_DOWN
Ctrl_Read 5,DOWN1
If Flt[5]=0,-1,RADIO_DOWN
Label CHECKPLAY
CommandBlock 1
If Flt[0]=0,-,CHECK
CityMusic_Off
Stream_Play 1
Let Flt[0]=1
CommandBlock 0
Wait 500
GoTo CHECK
Label CAR_OUT
CommandBlock 1
If Flt[0]=1,-,CHECK
Stream_Pause 1
CityMusic_On
Let Flt[0]=0
CommandBlock 0
Wait 500
GoTo CHECK
Label RADIO_UP
CommandBlock 1
Let Flt[5]=0
Stream_Pause 1
Let Flt[1]=Flt[1]+1
If Flt[1]>Flt[6],-1,CHANGEDUP
Let Flt[1]=Flt[1]-4
Label CHANGEDUP
Stream_Play 1
CommandBlock 0
GoTo READ_DOWN
Label RADIO_DOWN
CommandBlock 1
Let Flt[5]=0
Stream_Pause 1
Let Flt[1]=Flt[1]-1
If Flt[1]<Flt[7],-1,CHANGEDDOWN
Let Flt[1]=Flt[1]+4
Label CHANGEDDOWN
Stream_Play 1
CommandBlock 0
GoTo CHECKPLAY
[свернуть]
Тестим, находим баги, ругаемся на меня матом )
Позже проверю, любой ли mp3 может быть воспроизведён игрой.
UPD: Проверил, действительно, воспроизводит любой mp3, независимо от битрейта и частоты дискретизации. Так что я теперь хз, почему пять лет назад использовал wav. Наверное, потому, что тогда знал меньше )