|
||||||||||||||||
|
||||||||||||||||
|
06.10.2020, 01:44 | #41 | ||
Mafia Modding Crew Сообщений: 144
Репутация: 160
Judge
|
Когда-то делалось для СССР мода. Правда не помню рабочий ли это вариант.
Скрипт рассчитан на 4 радиостанции. Но это не точно. Развернуть для просмотраКод:
dim_act 3 dim_flt 14 findactor 0,"Tommy" findactor 1,"NULL" citymusic_off let flt[9]=0 // toggle fade1 let flt[10]=0 // toggle fade2 let flt[11]=0 // toggle fade3 let flt[12]=-1 // last radio let flt[13]=0 //toggle stopped radio label NotInCar commandblock 0 //stream_getpos 0,5 //stream_destroy 0 //stream_getpos 1,6 //stream_destroy 1 //stream_getpos 2,7 //stream_destroy 2 //findnearactor 0,2,Car getactorsdist 0,2,8 freeride_scoreset flt[11] if flt[8]<5,-1,vol1 if flt[10]=0,-1,subvol1 if flt[9]=0,-1,vol1 stream_fadevol 0,1000,1,0.5 stream_fadevol 1,1000,1,0.5 stream_fadevol 2,1000,1,0.5 let flt[9]=1 goto vol4 label subvol1 stream_fadevol 0,1000,0.25,0.5 stream_fadevol 1,1000,0.25,0.5 stream_fadevol 2,1000,0.25,0.5 let flt[10]=0 goto vol4 label vol1 if flt[8]<15,-1,vol2 if flt[8]>5,-1,vol2 if flt[11]=0,-1,subvol2 if flt[10]=0,-1,vol2 stream_fadevol 0,1000,0.5,0.25 stream_fadevol 1,1000,0.5,0.25 stream_fadevol 2,1000,0.5,0.25 let flt[10]=1 goto vol4 label subvol2 stream_fadevol 0,1000,0,0.25 stream_fadevol 1,1000,0,0.25 stream_fadevol 2,1000,0,0.25 let flt[11]=0 goto vol4 label vol2 if flt[8]<30,-1,vol4 if flt[8]>15,-1,vol4 if flt[11]=0,-1,vol4 stream_fadevol 0,1000,0.25,0.01 stream_fadevol 1,1000,0.25,0.01 stream_fadevol 2,1000,0.25,0.01 let flt[11]=1 goto vol4 label vol4 if flt[8]>50,-1,gb if flt[13]=0,-1,gb stream_getpos 0,5 stream_destroy 0 stream_getpos 1,6 stream_destroy 1 stream_getpos 2,7 stream_destroy 2 let flt[13]=1 label gb if flt[8]<50,-1,gb1 if flt[13]=1,-1,gb1 if flt[12]=0,-1,rad1 stream_create 0,"sounds/MUSIC/opr04KOJ.mp3" stream_setloop 0, 1000 stream_setpos 0,5 stream_play 0 stream_fadevol 0,1,0.01,0.01 let flt[13]=0 label rad1 if flt[12]=1,-1,rad2 stream_create 1,"sounds/MUSIC/opr04UR3.mp3" stream_setloop 1, 1000 stream_setpos 1,6 stream_play 1 stream_fadevol 1,1,0.01,0.01 let flt[13]=0 label rad2 if flt[12]=2,-1,gb1 stream_create 2,"sounds/MUSIC/opr04FYZ.mp3" stream_setloop 2, 1000 stream_setpos 2,7 stream_play 2 stream_fadevol 2,1,0.01,0.01 let flt[13]=0 label gb1 compareownerwithex 0,1,NotInCar,-1 human_getowner 0,2 let flt[9]=0 let flt[10]=0 let flt[11]=0 if flt[12]=-1,-1,manualselect stream_getpos 0,5 stream_destroy 0 stream_getpos 1,6 stream_destroy 1 stream_getpos 2,7 stream_destroy 2 rnd 4,3 if flt[4]=0,PreMusic1,-1 if flt[4]=1,PreMusic2,-1 if flt[4]=2,PreMusic3,-1 goto NoRadio label manualselect if flt[12]=0,Music1,-1 if flt[12]=1,Music2,-1 if flt[12]=2,Music3,-1 label NoRadio commandblock 0 commandblock 1 let flt[12]=-1 compareownerwithex 0,1,NotInCar,-1 ctrl_read 3,FIRE1 if flt[3]>0,-1,NoRadio label PreMusic1 console_addtext 99970011 stream_create 0,"sounds/MUSIC/opr04KOJ.mp3" stream_setloop 0, 1000 stream_setpos 0,5 stream_play 0 let flt[12]=0 commandblock 0 wait 100 label Music1 commandblock 0 commandblock 1 stream_fadevol 0,1,1,1 compareownerwithex 0,1,NotInCar,-1 ctrl_read 3,FIRE1 if flt[3]>0,-1,Music1 stream_getpos 0,5 stream_destroy 0 label PreMusic2 console_addtext 99970012 stream_create 1,"sounds/MUSIC/opr04UR3.mp3" stream_setloop 1, 1000 stream_setpos 1,6 stream_play 1 let flt[12]=1 commandblock 0 wait 100 label Music2 commandblock 0 commandblock 1 stream_fadevol 1,1,1,1 compareownerwithex 0,1,NotInCar,-1 ctrl_read 3,FIRE1 if flt[3]>0,-1,Music2 stream_getpos 1,6 stream_destroy 1 label PreMusic3 console_addtext 99970013 stream_create 2,"sounds/MUSIC/opr04FYZ.mp3" stream_setloop 2, 1000 stream_setpos 2,7 stream_play 2 let flt[12]=2 commandblock 0 wait 100 label Music3 commandblock 0 commandblock 1 stream_fadevol 2,1,1,1 compareownerwithex 0,1,NotInCar,-1 ctrl_read 3,FIRE1 if flt[3]>0,-1,Music3 stream_getpos 2,7 stream_destroy 2 console_addtext 99970014 commandblock 0 wait 100 goto NoRadio [свернуть] |
||
цитата |
06.10.2020, 06:52 | #42 | ||||
Senior Member Сообщений: 341
Репутация: 287
Enforcer
|
Цитата:
Просто такой формат был в исходном скрипте, от которого я отталкивался, и я, в первую очередь, думал над тем, чтобы всё правильно работало, не до форматов было. Надо глянуть, по-моему для city bars +, когда делал пианисту скрипт с заказом музыки, использовал mp3. Но, кажется, игра понимала файлы не с любым битрейтом, были нюансы. А ogg в скрипте заиграл без вопросов. Да, выбор трека можно рандомизировать. Но учти, что все имена файлов прописываются в скрипте. Поэтому желательно знать, сколько треков будет, и дать им универсальные имена, типа radio01, radio02, radio ga-ga, radio goo-goo Работа скрипта в главном меню исключена. За этим следит та часть кода, которую дал GOLOD55 Цитата:
Интересно, реализован здесь выбор радиостанции через выбор трека, в одном аудиопотоке, или через несколько параллельных потоков. По идее, идеально будет сделать несколько параллельных аудиопотоков для радиостанций, с несколькими рандомизированными треками для каждой. И надо будет выбор радиостанции к клавишам привязать. Насколько я помню, пять лет назад приходилось довольствоваться только клавишами из тех, что в настройках дополнительного управления. Сейчас появилось средство считывать в скрипте нажатие любой клавиши, или всё как раньше? Ещё вопрос, пока я тут занимаюсь скриптописанием, кто-нибудь извлекает записи радио из Дефинитив эдишн? Когда я буду делать выбор радиостанции и рандомизацию треков, мне желательно знать, сколько этих радиостанций и треков будет, чтобы не переписывать по 100500 раз. UPD: Глянул, в SityBars+ я использовал вообще wav. B исключительно 22Khz, потому, что 44,1 или 48 KHz игра не воспроизводила. Почему я тогда не использовал mp3 - честно, хз. Но это не критично, с форматами можно и потом поиграться. Сейчас главное алгоритм отладить, чтоб скрипт работал точно, как швейцарские часы. UPD2: В скрипте, который дал Melhior, три радиостанции реализованы тремя параллельными аудиопотоками, по одному mp3 на каждый. Переключение осуществляется посредством того, что в одних потоках громкость убирается, в других прибавляется. Последний раз редактировалось KlassenAS; 06.10.2020 в 14:08. |
||||
цитата |
06.10.2020, 15:10 | #43 | ||
VIP Сообщений: 100
Репутация: 152
Thug
|
имейте в виду, что аудио_потоки запрошенные грузятся в память и занимают ее.
если счет пойдет на гигабайты то мб проблема. |
||
цитата |
06.10.2020, 15:36 | #44 | |||
Senior Member Сообщений: 341
Репутация: 287
Enforcer
|
Цитата:
Если для каждой радиостанции у нас несколько записей с рандомной подгрузкой, то, чтобы начать воспроизведение другого трека пересоздаём поток командой Stream_Create. По идее, предыдущий трек при этом из памяти должен выгрузиться. Если гигабайтные аудиозаписи не использовать, то и памяти должно расходоваться ровно столько, сколько весят эти 3 -4 трека. Или я в чём-то ошибаюсь? И ещё, изобретён ли за последние пять лет, способ считывать скриптом любые клавиши, а не только те, что прописаны в настройках упрвления? Abradox 1 На какие клавиши будем назначать переключение радиостанций? Я прям сейчас занимаюсь реализацией этого дела. Предлагаю на W и S, при настройке управления по умолчанию. Т. е. Эти клавиши назначены как дополнительные при управлении персонажем. 2 Сколько радиостанций у нас будет? Последний раз редактировалось KlassenAS; 06.10.2020 в 16:06. |
|||
цитата |
06.10.2020, 16:18 | #45 | ||
Mafia Modding Crew Сообщений: 687
Репутация: 771
Priest
|
Лучше назначать на те кнопки, которые не используются в управлении машиной - прыжок, приседание и т.д.
Насколько я знаю, способ считывания любых клавиш скриптом не изобретён. |
||
цитата |
06.10.2020, 18:13 | #46 | ||
VIP Сообщений: 100
Репутация: 152
Thug
|
Полагаю, стрим делетается из памяти при его дестрое.
Мда, команду для хнопичек че-то мы упустили из виду с Асмом в mse сделать. |
||
цитата |
Поблагодарил: |
KlassenAS (06.10.2020)
|
06.10.2020, 19:46 | #47 | ||
Modding Crew Сообщений: 2,760
Репутация: 1311
Councilor
|
W и S не надо! Нужно что-то типа F3 и F4
|
||
цитата |
06.10.2020, 20:36 | #48 | ||
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)
|
06.10.2020, 21:25 | #49 | ||
#667e34 Сообщений: 1,247
Репутация: 979
Hitman
|
Они используются при игре с контроллером, если на них назначить курки. Лучше назначить переключение на доп. клавишу Run \ Walk, тогда точно не будет коллизий.
Последний раз редактировалось grandshot; 06.10.2020 в 21:26. |
||
цитата |
Поблагодарил: |
KlassenAS (06.10.2020)
|
06.10.2020, 21:52 | #50 | |||
Senior Member Сообщений: 341
Репутация: 287
Enforcer
|
Цитата:
Почему-то вдруг появился баг с непрошеным воспроизведением потоков при нажатии ESC, о котором упоминал GOLOD55. Видать, придётся, всё-таки, мютить потоки, убирая громкость, а не ставить на паузу. Щас попробую, посмотрю, что из этого выйдет. |
|||
цитата |