|
||||||||||||||||
|
|
||||||||||||||||
|
|
||||||||||||||||
|
|
|
|
#1 | ||
|
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)
|
|
|
#2 | ||
|
#667e34 Сообщений: 1,257
Репутация: 988
Hitman
|
Они используются при игре с контроллером, если на них назначить курки. Лучше назначить переключение на доп. клавишу Run \ Walk, тогда точно не будет коллизий.
Последний раз редактировалось grandshot; 06.10.2020 в 21:26. |
||
| цитата |
| Поблагодарил: |
KlassenAS (06.10.2020)
|
|
|
#3 | |||
|
Senior Member Сообщений: 341
Репутация: 287
Enforcer
|
Цитата:
Почему-то вдруг появился баг с непрошеным воспроизведением потоков при нажатии ESC, о котором упоминал GOLOD55. Видать, придётся, всё-таки, мютить потоки, убирая громкость, а не ставить на паузу. Щас попробую, посмотрю, что из этого выйдет. |
|||
| цитата |
|
|
#4 | ||
|
Mafia Modding Crew Сообщений: 728
Репутация: 853
Hitman
|
KlassenAS, Работает. А зачем в 32 строке задержка 350 мс? Можно ведь её вообще не делать, и тогда не надо будет долго держать кнопку переключения.
Mp3 читает все, вплоть до 320 кб/с, так что можно сразу на них переписать. Один раз включились сразу все потоки после esc. Но чаще всего не включаются. Непонятно, от чего зависит. Может, при использовании mut'а такого не будет. Ты, кстати, в чём со скриптом работаешь? У меня вот есть такая поддержка синтаксиса для Notepad++
А чего вам crouch1 и jump1 не нравятся?? На w и s некоторые ездят, так что они как раз используются в машине. Ну и ещё, конечно, надо добавить отключение всех станций. Последний раз редактировалось Firefox3860; 06.10.2020 в 22:03. |
||
| цитата |
|
|
#5 | |||||||
|
Senior Member Сообщений: 341
Репутация: 287
Enforcer
|
Цитата:
Я вообще сейчас 500 сделал. Хотя, можно поставить задержку не в цикле считывания, а в процедуре обработки нажатия. Тогда срабатывать будет сразу, и циклическое переключение при удержании будет работать. Спасибо, на правильную мысль навёл меня ) Цитата:
Цитата:
Цитата:
Хорошо хоть, не на ассемблере ![]() Как выделение цветом замутить? Цитата:
UPD: Внёс необходимые изменения с задержками и замютиванием потоков: Развернуть для просмотраКод:
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.mp3" Stream_Fadevol 1,1,0,0 Let Flt[7]=Flt[1] Stream_Create 1,"radio\radio01.mp3" Stream_Fadevol 1,1,0,0 Stream_Create 1,"radio\radio02.mp3" Stream_Fadevol 1,1,0,0 Stream_Create 1,"radio\radio03.mp3" Stream_Fadevol 1,1,0,0 Let Flt[6]=Flt[1] Let Flt[1]=Flt[1]-3 CommandBlock 0 Label CHECK CommandBlock 0 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 Stream_Fadevol 1,1,1,1 Let Flt[0]=1 CommandBlock 0 GoTo CHECK Label CAR_OUT CommandBlock 1 If Flt[0]=1,-,CHECK Stream_Pause 1 Stream_Fadevol 1,1,0,0 CityMusic_On Let Flt[0]=0 CommandBlock 0 GoTo CHECK Label RADIO_UP CommandBlock 1 Let Flt[5]=0 Stream_Pause 1 Stream_Fadevol 1,1,0,0 Let Flt[1]=Flt[1]+1 If Flt[1]>Flt[6],-1,CHANGEDUP Let Flt[1]=Flt[1]-4 Label CHANGEDUP Stream_Play 1 Stream_Fadevol 1,1,1,1 CommandBlock 0 Wait 1000 GoTo READ_DOWN Label RADIO_DOWN CommandBlock 1 Let Flt[5]=0 Stream_Pause 1 Stream_Fadevol 1,1,0,0 Let Flt[1]=Flt[1]-1 If Flt[1]<Flt[7],-1,CHANGEDDOWN Let Flt[1]=Flt[1]+4 Label CHANGEDDOWN Stream_Play 1 Stream_Fadevol 1,1,1,1 CommandBlock 0 Wait 1000 GoTo CHECKPLAY [свернуть] Теперь надо сделать на каждую радиостанцию несколько треков с рандомизированным порядком воспроизведения. Но этим я завтра займусь, хватит с меня на сегодня программирования ) Последний раз редактировалось KlassenAS; 06.10.2020 в 22:29. |
|||||||
| цитата |
| Поблагодарили: 3 |
|
|
#6 | |||||
|
Mafia Modding Crew Сообщений: 728
Репутация: 853
Hitman
|
Цитата:
Цитата:
Вот файл, описывающий синтаксис https://dropmefiles.com/dG7kRВ программе выбери Снтаксисы - задать свой - импортировать. Я ещё обычно для дебага скриптов ставлю в нужных местах команды console_addtext, чтобы видно было, когда стрим включается, когда выключается. Например, console_addtext 100. А хошь ещё прикол? Напиши вместо какого-нибудь потока, например: stream_create 1,"http://airtime.joyradio.cc:8000/airtime_192.mp3"(В начале игры будет небольшая прогрузка) Цитата:
|
|||||
| цитата |
| Поблагодарил: |
KlassenAS (06.10.2020)
|
|
|
#7 | |||
|
Senior Member Сообщений: 341
Репутация: 287
Enforcer
|
Цитата:
|
|||
| цитата |
|
|
#8 | |||
|
Mafia Modding Crew Сообщений: 229
Репутация: 243
Judge
|
Цитата:
__________________
Моя моддинговая страничка: https://vk.com/kaiser_edition |
|||
| цитата |
|
|
#9 | ||
|
VIP Сообщений: 100
Репутация: 152
Thug
|
мм я когда-то, "мимо пробегая", наткнулся на блок памяти-хнопичный_буфер(или шо-то типа того), помому даже ассемлил хнопичку для дебуга. уж ни нипомню, давно было.
новой версии mse пока нету даж в планах, тут надо ж именно нам новую скрипт_команду, а вставлять новые команды только Асм умеет(я лишь могу пошариться в памяти и написать тело команды). хотя..наверняка есть вариант замутить не новую команду, а модифицировать старую: кстати напр ctrl_readex команда у нас не юзается(а мб она и читает все хнопки, но заинактивена чехами)... |
||
| цитата |
| Поблагодарили: 3 |
|
|
#10 | ||
|
Senior Member Сообщений: 341
Репутация: 287
Enforcer
|
GOLOD55, Скажи, пожалуйста, размер скрипта script.sc, который может использовать твой патчер, как-нибудь ограничен?
Я сейчас делаю код, чтобы в каждом потоке могли рандомно меняться 10 треков, скрипт получается очень большой. Где-то после 220-ой строки команды просто не выполняются, как будто эта часть скрипта отрезана. Если скрипт не сможет работать с твоим патчем, мне придётся его в сцену вставлять, там ограничений нет. Но это и неудобно в работе. UPD: В scene2.bin такая же ошибка. Стало быть, проблема не в размере скрипта. Буду думать. Похоже, с условными переходами что-то не то набарагозил... Последний раз редактировалось KlassenAS; 07.10.2020 в 19:27. |
||
| цитата |
| Ответ |
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|
|
| Регистрация × |