|
||||||||||||||||
|
|
||||||||||||||||
|
|
||||||||||||||||
|
|
#11 | ||
|
Senior Member Сообщений: 341
Репутация: 287
Enforcer
|
Ну, если в настройках игры назначишь F3 и F4 в качестве дополнительных, для управления персонажем, то будут тебе F3 и F4.
Повторюсь: если в настройках игры клавиша не назначена ни на одну из функций, то скрипты её не видят. Я использовал дополнительные вперёд и назад. При управлении машиной они не используются. У меня им соответствуют W и S. А у тебя может быть что угодно. Да, всё верно. Я проверил. Переменная, используемая в команде 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. Наверное, потому, что тогда знал меньше ) Последний раз редактировалось KlassenAS; 06.10.2020 в 21:14. |
||
| цитата |
| Поблагодарили: 2 |
EmptyBowl (07.10.2020),
Firefox3860 (06.10.2020)
|