PDA

Просмотр полной версии : Скрипт автомобильного радио


Страницы : [1] 2

Kaiser
04.10.2020, 10:37
Ребята! Коллеги! Друзья!

Помогите разобраться со скриптом пожалуйста.

Намедни мне Фаерфокс прислал один скрипт, который к сожалению, нормально отказался работать. И мы не можем понять почему.

На деле происходит следующее:

1. Я сажусь в авто, городская музыка выключается и включается радио.
2. Я выхожу из авто, радио продолжает играть, хотя должно выключаться.
3. Я снова сажусь в авто и радио начинает играть сначала.

Фактически, радио должно включаться при посадке в авто и выключаться при выходе из него.


dim_act 2
dim_frm 1
dim_flt 5
findactor 0, "Tommy"
findactor 1, "fire"

let flt[0]=0

label 1
wait 100
compareownerwithex 0, 1, 101, 102

label 101
if flt[0]=1,-,1
citymusic_off
stream_create 0, "sounds\music\fireradio.ogg"
stream_play 0
wait 2000
let flt[0]=0
goto 1

label 102
if flt[0]=0,-,1
stream_stop 0
citymusic_on
wait 2000
let flt[0]=1
goto 1

KlassenAS
04.10.2020, 11:53
Ребята! Коллеги! Друзья!
Помогите разобраться со скриптом пожалуйста.


У тебя проблема с присвоением значения переменой flt[0]
Проследи логику:
Переменная равна 0
Далее проверяем наличие Тома в машине.
И смотрим значение переменной.
1 Томми в машине:
Если переменная 0 - музыка не играет, включить и присвоить ей 1
если переменная 1 - музыка уже играет, ничего делать не нужно

2 Томми не в машине
Если переменная 0 - музыка не играет, ничего делать не нужно
Если переменная 1 - выключить музыку и присвоить переменной 0

И вот в этом присвоении переменных, вроде, путаница затесалась.

Во-первых, если я не ошибаюсь, номер аудиопотока может быть одновременно и переменной.
Тогда stream_create 0 и stream_play 0 обращаются к переменной flt[0], используемой для логики включения/выключения. Возникает конфликт, ведь значение переменной меняется и ты пытаешься остановить не тот аудиопоток, который запустил.

Попробуй использовать вторую переменную:
let flt[1]=0

И через неё упралять аудиопотоком:
stream_create 1
stream_play 1
stream_stop 1

Должно помочь, вроде.

Также стоит проверить сравнение условий включения/выключения

Под лабелом 101 сделай
if flt[0]=0,-,1
let flt[0]=1

Под лабелом 102 сделай
if flt[0]=1,-,1
let flt[0]=0

Так больше будет соответствовать логике скрипта.

Вместо findactor nn, "Tommy" лучше использовать getactiveplayer nn, эта команда универсальна и не привязана к используемой модели персонажа.

И ещё я не понял, что это за актор "fire"?
У тебя радио будет включатся только если Томми садится в одну конкретную машину?
Почему бы, в принципе, не проверить его нахождение в любой машине?
Используешь ещё одну переменную.
Присваиваешь ей вначале скрипта let flt[2]=-1
И запрашиваешь у игры номер сиденья в машине, на котором сидит Томми:
Human_GetSeatidx 0,2 (актор чела, переменная с номером сиденья)
И дальше проверяешь значение переменной:
If Flt[2]=-1,102,101
Если переменная осталась равна -1, чел не в машине, идём на метку 102
Если переменная изменилась, чел в машине, идём на метку 101.
Ладно, я тебе щас по-своему скрипт напишу, и всё )
И фреймы в скрипте не используются, их можно не объявлять



Dim_Act 2 //Два актора
Dim_Flt 3 //Три переменных
GetActivePlayer 0 //Получаем актора игрока

Let Flt[0]=0 //Переменная для логики вкл/выкл
Let Flt[1]=0 //Переменная для аудиопотока
Let Flt[2]=-1 //Переменная для сидения в машине

Label CHECK
Wait 100
Human_GetSeatIdx 0,2 //Запрашиваем номер сиденья
If Flt[2]=-1,CAR_OUT,-1 //Если получили, идём дальше, если не получили, идём к метке CAR_OUT

If Flt[0]=0,-,CHECK //Если музыка не играет, идём дальше, иначе возвращаемся к проверке
CityMusic_Off
Stream_Create 1, "sounds\music\fireradio.ogg"
Stream_Play 1
Let Flt[0]=1 //Запоминаем, что музыка играет
Wait 2000 //Ждём
GoTo CHECK //Возвращаемся к проверке

Label CAR_OUT //Если не в машине
If Flt[0]=1,-,CHECK //Если музыка играет, идём дальше, иначе возвращаемся к проверке
Stream_Stop 1
CityMusic_On
Let Flt[0]=0 //Запоминаем, что музыка не играет
Wait 2000 //Ждём
GoTo CHECK //Возвращаемся к проверке



Вроде, всё верно, проверяй )

А ещё можно расширить скрипт и рандомно воспроизводить одну из нескольких аудиозаписей. Хоть сто песен можно в скрипт воткнуть. Только затрахаешься строки кода копипастить и имена файлов прописывать )

Firefox3860
04.10.2020, 15:17
KlassenAS, Спасибо за хороший разбор логики. Видимо, основная проблема была в конфликте переменной потока с логической переменной. Я этого не заметил.

Ещё круто, что ты показал команду Human_GetSeatidx. Наверное, это лучший способ отслеживания сидения чела в любой машине :)

KlassenAS
04.10.2020, 15:21
Ещё круто, что ты покакзал команду Human_GetSeatidx. Наверное, это лучший способ отслеживания сидения чела в любой машине :)

Я этот способ использовал, когда писал систему скриптов для Sity Bars +, чтобы тачка, припаркованная возле загружаемой локации, типа отеля или порта, при возвращении была на месте.

А подсказал мне этот способ GOLOD55, за что ему огромное спасибо! )

GOLOD55
04.10.2020, 18:24
возможно, саунд_стрим лучше вдобавок хорошенько отдестроить после выключения, а то у мафы бажок был...что-то типа перезапуска стрима при юзании хнопички ESC.

Kaiser
04.10.2020, 18:41
2 KlassenAS

Спасибо огромное, поставил твой скрипт, все прекрасно работает. Только вот оно работает во всех автомобилях, а мне бы надо в одном. Тогда мне гетактивплейер просто заменить на нужный мне файндактор?

KlassenAS
04.10.2020, 19:53
Только вот оно работает во всех автомобилях, а мне бы надо в одном. Тогда мне гетактивплейер просто заменить на нужный мне файндактор?

GetActivePlayer 0 - это поиск управляемого игроком персонажа. К машине отношения не имеет.
А тебе нужно конкретное авто.
Я сделал, чтобы работало во всех, потому, что посчитал, что так лучше )
Тогда сделаем с одной:



Dim_Act 2 //Два актора
Dim_Flt 2 //Две переменных
GetActivePlayer 0 //Получаем актора игрока
FindActor 1, "fire" //Получаем актор с нужной машиной

Let Flt [0] = 0 //Переменная для логики вкл/выкл
Let Flt [1] = 0 //Переменная для аудиопотока

Label CHECK
Wait 100
CompareOwnerWithEx 0, 1, -, CAR_OUT //Проверяем, сидит ли игрок в конкретной машине, если да, идём дальше, если нет, идём к метке CAR_OUT

If Flt [0] = 0, -, CHECK //Если музыка не играет, идём дальше, иначе возвращаемся к проверке
CityMusic_Off
Stream_Create 1, "sounds\music\fireradio.ogg"
Stream_Play 1
Let Flt [0] = 1 //Запоминаем, что музыка играет
Wait 2000 //Ждём
GoTo CHECK //Возвращаемся к проверке

Label CAR_OUT //Если не в машине
If Flt [0] = 1, -, CHECK //Если музыка играет, идём дальше, иначе возвращаемся к проверке
Stream_Stop 1
Stream_Destroy 1 // Уничтожаем аудиопоток, как посоветовал GOLOD55
CityMusic_On
Let Flt [0] = 0 //Запоминаем, что музыка не играет
Wait 2000 //Ждём
GoTo CHECK //Возвращаемся к проверке

Kaiser
04.10.2020, 20:06
2 KlassenAS

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

Причем, когда выходишь из машины, тогда начинает проигрываться нормально.

KlassenAS
04.10.2020, 20:15
2 KlassenAS

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

Причем, когда выходишь из машины, тогда начинает проигрываться нормально.

Хз, может, опечатку допустил, или движку пробелы мои в скриптах не понравились.
Убрал лишнее, пробуем ещё раз:



Dim_Act 2
Dim_Flt 2
GetActivePlayer 0
FindActor 1, "fire"

Let Flt[0]=0
Let Flt[1]=0

Label CHECK
Wait 100
CompareOwnerWithEx 0,1,-,CAR_OUT

If Flt[0]=0,-,CHECK
CityMusic_Off
Stream_Create 1, "sounds\music\fireradio.ogg"
Stream_Play 1
Let Flt[0]=1
Wait 2000
GoTo CHECK

Label CAR_OUT
If Flt[0]=1,-,CHECK
Stream_Stop 1
Stream_Destroy 1
CityMusic_On
Let Flt[0]=0
Wait 2000
GoTo CHECK

Kaiser
04.10.2020, 20:22
Пробежался по скрипту, вроде он без изменений. Что принципиально изменено?

Firefox3860
04.10.2020, 20:24
Kaiser, пробелы убрал

Kaiser
04.10.2020, 20:28
2 KlassenAS

На самом деле очень круто получилось, все прекрасно работает. Проверил неоднократно. Спасибо тебе большое, с твоего разрешения, использую этот скрипт в своем дополнении к Angel Pine Mod.

п.с.Плохо только то, что скрипт постоянно сначала начинается, при каждой очередной посадке в автомобиль. Так наверное никогда радио до конца не дослушать))).

KlassenAS
04.10.2020, 20:29
Kaiser, пробелы убрал

Это у меня со второй вышки привычка осталась, когда Delphi изучал. С пробелами и заглавными буквами читаемость кода улучшается, переменные и операторы не сливаются в единый поток. Delphi к пробелам лоялен, а вот движок Мафии закапризничал )

п.с.Плохо только то, что скрипт постоянно сначала начинается, при каждой очередной посадке в автомобиль. Так наверное никогда радио до конца не дослушать))).

По идее, есть ещё команда Stream_Pause
Так что, можно заморочиться и при выходе из машины паузить скрипт. Ввести дополнительные переменные для отслеживания проигрываемого стрима на паузе, чтобы не создавать заново и не дестроить его лишний раз. Отслеживать окончание воспроизведения и перезапускать.
Но тогда возникает вопрос: не появится ли баг с ненужным воспроизведением при нажатии ESC, о котором упомянул GOLOD55?

Firefox3860
04.10.2020, 20:36
С пробелами и заглавными буквами читаемость кода улучшается, переменные и операторы не сливаются в единый поток. Delphi к пробелам лоялен, а вот движок Мафии закапризничал )Ага, а я привык без пробелов лепить :) Мне кажется, в выражениях Flt[х] не прокатил пробел.

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

KlassenAS
04.10.2020, 20:40
А может кто-нибудь знает, можно ли такой стрим на паузу ставить или вообще отключать звук на время?

Только что предыдущее сообщение отредактировал, ответив на этот вопрос )

Ну-ка, попробуй такой вариант:
Dim_Act 2
Dim_Flt 3
GetActivePlayer 0
FindActor 1, "fire"

Let Flt[0]=0
Let Flt[1]=0
Let Flt[2]=0 //Для паузы

Label CHECK
Wait 100
CompareOwnerWithEx 0,1,-,CAR_OUT

If Flt[0]=0,-,CHECK
CityMusic_Off
If Flt[2]=0,-1,ALREADYCREATED //Проверяем, создан ли уже поток, вдруг он на паузе
Stream_Create 1, "sounds\music\fireradio.ogg"
Label ALREADYCREATED //Поток уже создан
Stream_Play 1
Let Flt[0]=1
Let Flt[2]=0
Wait 2000
GoTo CHECK

Label CAR_OUT
If Flt[0]=1,-,CHECK
Stream_Pause 1
Let Flt[2]=1 //Запоминаем, что на паузе
CityMusic_On
Let Flt[0]=0
Wait 2000
GoTo CHECK

Теперь он должен ставить на паузу и возобновлять воспроизведение.
Проверь, нет ли бага с клавишей ESC, когда аудиопоток на паузе.
Пока простой вариант, без проверки окончания воспроизведения.

Kaiser
04.10.2020, 21:08
2 KlassenAS

Я проверил. Все работает!!! Спасибо тебе огромное, теперь у меня в дополнение будет прям идеальное радио. Все отлично! Выходишь из машины, радио выключается, садишься в машину, продолжается с того момента, когда ты вышел из автомобиля. Я как раз не успел радио запихнуть в ЭП. Теперь выпущу в виде дополнения, в РидМи укажу, что скрипт твой.

KlassenAS
04.10.2020, 21:11
2 KlassenAS

Я проверил. Все работает!!!

1 А проверил, нет ли бага с ESC?
2 Если работает без багов, то его ещё доделать надо ) Чтобы по окончании мелодии начинал воспроизведение заново. Он, по логике, не должен сам понимать, что песня закончилась. Доиграл, - и всё )
3 И вообще, тебе что, хватает одной мелодии? Давай, заморочимся, чтобы несколько было, с рандомным воспроизведением )

Kaiser
04.10.2020, 21:17
1. Нет. Сейчас проверю. (Все работает нормально).
2. А ты можешь зациклить воспроизведение?
3. Там не одна песня. Там на час музыки и болтовни. Как выйдет дополнение, зацени)))

KlassenAS
04.10.2020, 21:23
2. А ты можешь зациклить воспроизведение?
Для этого тоже команда есть ) Stream_SetLoop x,y


3. Там не одна песня. Там на час музыки и болтовни. Как выйдет дополнение, зацени)))
А, ну если там целый радиоэфир, то это ж совсем другой калинкор )

Вот тебе с зацикливанием, всего одну команду дописал:
Dim_Act 2
Dim_Flt 3
GetActivePlayer 0
FindActor 1, "fire"

Let Flt[0]=0
Let Flt[1]=0
Let Flt[2]=0 //Для паузы

Label CHECK
Wait 100
CompareOwnerWithEx 0,1,-,CAR_OUT

If Flt[0]=0,-,CHECK
CityMusic_Off
If Flt[2]=0,-1,ALREADYCREATED //Проверяем, создан ли уже поток, вдруг он на паузе
Stream_Create 1, "sounds\music\fireradio.ogg"
Stream_SetLoop 1,1 //Зацикливаем
Label ALREADYCREATED //Поток уже создан
Stream_Play 1
Let Flt[0]=1
Let Flt[2]=0
Wait 2000
GoTo CHECK

Label CAR_OUT
If Flt[0]=1,-,CHECK
Stream_Pause 1
Let Flt[2]=1 //Запоминаем, что на паузе
CityMusic_On
Let Flt[0]=0
Wait 2000
GoTo CHECK

Kaiser
04.10.2020, 21:26
Блин, ну теперь надо час играть, чтобы посмотреть, работает ли воспроизведение)) Сегодня точно тебе не дам ответ)

KlassenAS
04.10.2020, 22:06
Я вот ещё, чё удумал:
В реале, когда слушаешь радио, выходишь из машины, но эфир-то продолжается.
Садишься в машину и продолжаешь слушать, пропустив часть эфира.
И в Мафии 2 эта фича реализована.
Так что я глянул, есть команда для управления громкостью аудиопотока.

Stream_FadeVol ww, xx, yy, zz
изменить громкость стрима
ww - номер стрима
xx - время (мс) (не м.б. флт, недопустим 0)
yy - громкость1 (не м.б. флт)
zz - громкость2 (не м.б. флт)

Можно не ставить на паузу, а убрать громкость, и потом восстанавливать.
Но в описании не указано, используются ли с этой командой значения громкости, или переменные. Так же не указано, в каком диапазоне значений изменяется громкость.
Поэтому я предположил, что вместо переменных там числа и громкость от 0 до 100.
Если тебе интересна такая фича, то можешь попробовать этот экспериментальный вариант, но я хз, будет ли он вообще работать:
Dim_Act 2
Dim_Flt 3
GetActivePlayer 0
FindActor 1, "fire"

Let Flt[0]=0
Let Flt[1]=0
Let Flt[2]=0 //Для паузы

Label CHECK
Wait 100
CompareOwnerWithEx 0,1,-,CAR_OUT

If Flt[0]=0,-,CHECK
CityMusic_Off
If Flt[2]=0,-1,ALREADYCREATED
Stream_Create 1, "sounds\music\fireradio.ogg"
Stream_Play 1
Label ALREADYCREATED
Stream_FadeVol 1, 200, 100, 0
Let Flt[0]=1
Wait 2000
GoTo CHECK

Label CAR_OUT
If Flt[0]=1,-,CHECK
Stream_FadeVol 1, 200, 0, 100
Let Flt[2]=1
CityMusic_On
Let Flt[0]=0
Wait 2000
GoTo CHECK
Или второй вариант, из предположения, что команда использует переменные:
Dim_Act 2
Dim_Flt 6
GetActivePlayer 0
FindActor 1, "fire"

Let Flt[0]=0
Let Flt[1]=0
Let Flt[2]=0 //Для паузы
Let Flt[3]=200
Let Flt[4]=0
Let Flt[5]=100

Label CHECK
Wait 100
CompareOwnerWithEx 0,1,-,CAR_OUT

If Flt[0]=0,-,CHECK
CityMusic_Off
If Flt[2]=0,-1,ALREADYCREATED
Stream_Create 1, "sounds\music\fireradio.ogg"
Stream_Play 1
Label ALREADYCREATED
Stream_FadeVol 1, 3, 5, 4
Let Flt[0]=1
Wait 2000
GoTo CHECK

Label CAR_OUT
If Flt[0]=1,-,CHECK
Stream_FadeVol 1, 3, 4, 5
Let Flt[2]=1
CityMusic_On
Let Flt[0]=0
Wait 2000
GoTo CHECK
Но тут я тоже хз, будет ли работать )
И я хз, надо ли это тебе вообще, просто Остапа понесло )

Kaiser
04.10.2020, 22:08
Вообще меня устраивает тот вариант, который есть, так как хочется, чтобы в итоге человек, который играет в мод, прослушал весь часовой эфир. Но тебе все равно огромное спасибо за участие!

Abradox
04.10.2020, 23:40
Ребята такой полезный скрипт. Можно ли его финальную версию сделать для любой машины? Может быть потом вытащим из Мафии ДЕ радиостанции и засунем в оригинальную Мафию... Как реализовывается использование аудиофайлов? Игра подхватывает их из какой-то папки? Собственно сам скрип как реализован, в каком файле?

А можно ли отключить обычную музыку скриптом?
Есть идея сделать несколько радиостанций, на одной из которых будет играть обычная мафийная музыка.

KlassenAS
05.10.2020, 00:10
Можно ли его финальную версию сделать для любой машины?
Да
Может быть потом вытащим из Мафии ДЕ радиостанции и засунем в оригинальную Мафию
Да
Как реализовывается использование аудиофайлов? Игра подхватывает их из какой-то папки?
Специальная команда проигрывает файл. Этой команде нужно написать относительный путь к файлу и его имя, это можно увидеть в тексте скрипта.
А можно ли отключить обычную музыку скриптом?
Да, и скрипт это делает.
Собственно сам скрип как реализован, в каком файле?
Обычный мафиозный скрипт, воткнутый в миссионную сцену.
Есть идея сделать несколько радиостанций, на одной из которых будет играть обычная мафийная музыка.
Готов к труду и обороне )
Когда приступаем?

Abradox
05.10.2020, 01:38
А возможно сделать эти скрипты через asi плагин? Чтобы не модифицировать файлы миссий.

grandshot
05.10.2020, 02:17
А возможно сделать эти скрипты через asi плагин? Чтобы не модифицировать файлы миссий.

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

Либо можно использовать старинный способ, добавив скрипт в taxi_pas.dat

Abradox
05.10.2020, 02:27
В общем, если реализуете, без необходимости модифицировать файлы миссий, то честь вам и хвала.
Пусть путь ведет в папку Radio

KlassenAS
05.10.2020, 08:44
А возможно сделать эти скрипты через asi плагин? Чтобы не модифицировать файлы миссий.
Вот это я не умею, никогда с asi не работал.
Но для того, кто умеет, думаю, не сложно.
Либо можно использовать старинный способ, добавив скрипт в taxi_pas.dat
А что там, с этим taxi_pas.dat?
Ни разу в нём не копался, но, я так понимаю, скрипты там так же устроены, как и в сценах?
Тогда и в нём можно сделать.
Можно мне краткий ликбез по taxi_pas.dat?
В нём, как я понимаю, находятся скрипты, общие для всех сцен?
Чем и как его редактировать?

GOLOD55
05.10.2020, 09:58
мафияпатчер имеет файл для внешнего скрипта(опция ThunderboltCheatReplacementScriptPath = script.sc) и также функцию его активирования не только в городских-миссиях(DisableThunderboltCheatScriptMissio nCheck = 1).

KlassenAS
05.10.2020, 10:29
мафияпатчер имеет файл для внешнего скрипта(опция ThunderboltCheatReplacementScriptPath = script.sc) и также функцию его активирования не только в городских-миссиях(DisableThunderboltCheatScriptMissio nCheck = 1).

А вот сейчас я мало что понял.
Можно объяснить, чтобы мне, неандертальцу, было понятно, что к чему?
Что за зверь этот патчер, в каком месте к нему прикручиваются скрипты, и как эти скрипты пишутся? То есть, так же, как скрипты в сценах? Или как-то иначе?

Haku
05.10.2020, 11:57
KlassenAS, вот здесь http://mafiascene.com/forum/viewtopic.php?p=128823 и здесь http://mafiascene.com/forum/viewtopic.php?p=127693

Abradox
05.10.2020, 11:59
мафияпатчер имеет файл для внешнего скрипта(опция ThunderboltCheatReplacementScriptPath = script.sc) и также функцию его активирования не только в городских-миссиях(DisableThunderboltCheatScriptMissio nCheck = 1).Я так понял что мафияпатчер уже позволяет использовать любые скрипты подгружая отдельный файл.
KlassenAS, вот здесь http://mafiascene.com/forum/viewtopic.php?p=128823 и здесь http://mafiascene.com/forum/viewtopic.php?p=127693А вот и связь с ASMом появилась через мафиасцену ;)


Дайте готовый файл со скриптами и я протестирую.
путь там сделайте Mafia/radio

GOLOD55
05.10.2020, 15:30
ога внешний скрипт по типу таксипаса, но работает со сначала миссии.
файл script.sc создаем в папке с мафой, и(при активированиии опции(й) патчера) он работает как скрипт_объект(по статусу ближе к инит_скриптам).
еще там небольшая шапочка предлагалась в скрипте, чтоб какую-то проблему решить сопутствующую...нипомню... а вот:

dim_act 1
dim_flt 1
getactiveplayer 0
human_getproperty 0,0,energy
if flt[0]=0,-1,dan_on
act_setstate 100,off
Label dan_on

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

KlassenAS
05.10.2020, 17:09
KlassenAS, вот здесь http://mafiascene.com/forum/viewtopic.php?p=128823 и здесь http://mafiascene.com/forum/viewtopic.php?p=127693

Спасибо! Сейчас внимательно ознакомлюсь.

Дайте готовый файл со скриптами и я протестирую.
путь там сделайте Mafia/radio

Не вопрос. Тестовый скрипт сделаю под один аудиофайл "radio/radio.ogg"
А дальше, когда будут извлечены записи радиоэфиров из Mafia DE, тогда его допилю.

файл script.sc создаем в папке с мафой, и(при активированиии опции(й) патчера) он работает как скрипт_объект(по статусу ближе к инит_скриптам).
В readme не указано, какой формат должен иметь файл script.sc
Просто текстовый файл, созданный в блокноте? В какой кодировке?
Или я могу просто сделать копию taxi_pas.dat и переименовать?

GOLOD55
05.10.2020, 18:23
txt в sc переименовываем и норм.

KlassenAS
05.10.2020, 18:42
txt в sc переименовываем и норм.
Вроде, всё сделал по фен-шую, а не пашет.
Даже два раза патчер закинул и в папку игры, и в папку scripts, а работать не хочет.
Версия игры 1.2

Сам скрипт:
Dim_Act 1
Dim_Flt 3
GetActivePlayer 0

Let Flt[0]=0
Let Flt[1]=0
Let Flt[2]=-1

Label CHECK
Wait 100
Human_GetSeatIdx 0,2
If Flt[2]=-1,CAR_OUT,-1

If Flt[0]=0,-,CHECK
CityMusic_Off
If Flt[2]=0,-1,ALREADYCREATED
Stream_Create 1,"radio\radio.ogg"
Stream_SetLoop 1,1
Label ALREADYCREATED
Stream_Play 1
Let Flt[0]=1
Let Flt[2]=0
Wait 2000
GoTo CHECK

Label CAR_OUT
If Flt[0]=1,-,CHECK
Stream_Pause 1
Let Flt[2]=1
CityMusic_On
Let Flt[0]=0
Wait 2000
GoTo CHECK
Если вставить в сцену, будет работать как надо.

GOLOD55
05.10.2020, 20:06
при активированиии опции(й) патчера
по-умолчанию опции сии неактивны. идем в конфиг с снимаем решетки где надо.

KlassenAS
05.10.2020, 20:46
по-умолчанию опции сии неактивны. идем в конфиг с снимаем решетки где надо.
Во я блин даю ) Про решётки не врубился!
Теперь всё пашет.
Исправил ошибку из-за которой поток пересоздавался, добавил переменную.
Теперь работает правильно:
dim_act 1
dim_flt 1
getactiveplayer 0
human_getproperty 0,0,energy
if flt[0]=0,-1,dan_on
act_setstate 100,off
Label dan_on

Dim_Act 1
Dim_Flt 4
GetActivePlayer 0

Let Flt[0]=0
Let Flt[1]=0
Let Flt[2]=-1
Let Flt[3]=0

Label CHECK
Wait 100
Human_GetSeatIdx 0,2
If Flt[2]=-1,CAR_OUT,-1

If Flt[0]=0,-,CHECK
CityMusic_Off
If Flt[3]=0,-1,ALREADYCREATED
Stream_Create 1,"radio\radio.ogg"
Stream_SetLoop 1,1
Label ALREADYCREATED
Stream_Play 1
Let Flt[0]=1
Let Flt[3]=0
Wait 2000
GoTo CHECK

Label CAR_OUT
If Flt[0]=1,-,CHECK
Stream_Pause 1
Let Flt[3]=1
CityMusic_On
Let Flt[0]=0
Wait 2000
GoTo CHECK
Прикольно кататься по Лост-Хэвену под Paul Wardingham - Assimilate Regenerate )
Так можно в скрипт целый плейлист зафигачить.
Жаль, что патчер, как я понял, только один скрипт может использовать. Так было бы круто, если бы в настройках патчера прописывалось количество скриптов и их имена. Можно было бы дофига всего в игру наскриптить.

А вот тут интересно: после того, как сохранился с работающим скриптом, вышел из миссии, при загрузке из сохранения начинает играть аудиопоток.
Буду думать.

Выяснил, что это происходит, если зациклить аудиопоток командой Stream_SetLoop
Пришлось убрать её из кода. Теперь надо повтор реализовать обходным путем, через определение времени воспроизведения.

Abradox
05.10.2020, 23:15
Не вопрос. Тестовый скрипт сделаю под один аудиофайл "radio/radio.ogg"
А дальше, когда будут извлечены записи радиоэфиров из Mafia DE, тогда его допилю.
это хорошо, но почему .ogg ? Можно сделать чтобы любые аудио-файлы в этой папке воспроизводились .mp3 .wav?

Еще момент, в каждой миссии музыка будет начинаться с первого трека и с начала.
Можно ли выбор трека рандомизировать?

еще надо исключить работу скрипта в главном меню.

GOLOD55
06.10.2020, 01:36
исключить работу скрипта в главном меню.
юзайте шапку для скри пта, я писял выше; она тормознет в главменю скрипт.

мафа понимает мп3, наскоко помню. путь указать также и все.

Melhior
06.10.2020, 01:44
Когда-то делалось для СССР мода. Правда не помню рабочий ли это вариант.
Скрипт рассчитан на 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

KlassenAS
06.10.2020, 06:52
это хорошо, но почему .ogg ? Можно сделать чтобы любые аудио-файлы в этой папке воспроизводились .mp3 .wav?

Еще момент, в каждой миссии музыка будет начинаться с первого трека и с начала.
Можно ли выбор трека рандомизировать?

еще надо исключить работу скрипта в главном меню.
С ogg как-то само получилось )
Просто такой формат был в исходном скрипте, от которого я отталкивался, и я, в первую очередь, думал над тем, чтобы всё правильно работало, не до форматов было.
Надо глянуть, по-моему для city bars +, когда делал пианисту скрипт с заказом музыки, использовал mp3.
Но, кажется, игра понимала файлы не с любым битрейтом, были нюансы. А ogg в скрипте заиграл без вопросов.

Да, выбор трека можно рандомизировать.
Но учти, что все имена файлов прописываются в скрипте. Поэтому желательно знать, сколько треков будет, и дать им универсальные имена, типа radio01, radio02, radio ga-ga, radio goo-goo

Работа скрипта в главном меню исключена.
За этим следит та часть кода, которую дал GOLOD55

Когда-то делалось для СССР мода. Правда не помню рабочий ли это вариант.
Скрипт рассчитан на 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

О!, Спасибо, вечером я в нём покопаюсь.
Интересно, реализован здесь выбор радиостанции через выбор трека, в одном аудиопотоке, или через несколько параллельных потоков.
По идее, идеально будет сделать несколько параллельных аудиопотоков для радиостанций, с несколькими рандомизированными треками для каждой.
И надо будет выбор радиостанции к клавишам привязать.
Насколько я помню, пять лет назад приходилось довольствоваться только клавишами из тех, что в настройках дополнительного управления.
Сейчас появилось средство считывать в скрипте нажатие любой клавиши, или всё как раньше?

Ещё вопрос, пока я тут занимаюсь скриптописанием, кто-нибудь извлекает записи радио из Дефинитив эдишн?
Когда я буду делать выбор радиостанции и рандомизацию треков, мне желательно знать, сколько этих радиостанций и треков будет, чтобы не переписывать по 100500 раз.

UPD: Глянул, в SityBars+ я использовал вообще wav. B исключительно 22Khz, потому, что 44,1 или 48 KHz игра не воспроизводила. Почему я тогда не использовал mp3 - честно, хз. Но это не критично, с форматами можно и потом поиграться.
Сейчас главное алгоритм отладить, чтоб скрипт работал точно, как швейцарские часы.

UPD2: В скрипте, который дал Melhior, три радиостанции реализованы тремя параллельными аудиопотоками, по одному mp3 на каждый. Переключение осуществляется посредством того, что в одних потоках громкость убирается, в других прибавляется.

GOLOD55
06.10.2020, 15:10
имейте в виду, что аудио_потоки запрошенные грузятся в память и занимают ее.
если счет пойдет на гигабайты то мб проблема.

KlassenAS
06.10.2020, 15:36
имейте в виду, что аудио_потоки запрошенные грузятся в память и занимают ее.
если счет пойдет на гигабайты то мб проблема.

Ну, если у нас 3-4 радиостанции, то мы имеем 3-4 потока, размер каждого равен размеру загруженной аудиозаписи.
Если для каждой радиостанции у нас несколько записей с рандомной подгрузкой, то, чтобы начать воспроизведение другого трека пересоздаём поток командой Stream_Create. По идее, предыдущий трек при этом из памяти должен выгрузиться.
Если гигабайтные аудиозаписи не использовать, то и памяти должно расходоваться ровно столько, сколько весят эти 3 -4 трека.
Или я в чём-то ошибаюсь?
И ещё, изобретён ли за последние пять лет, способ считывать скриптом любые клавиши, а не только те, что прописаны в настройках упрвления?

Abradox
1 На какие клавиши будем назначать переключение радиостанций?
Я прям сейчас занимаюсь реализацией этого дела.
Предлагаю на W и S, при настройке управления по умолчанию. Т. е. Эти клавиши назначены как дополнительные при управлении персонажем.
2 Сколько радиостанций у нас будет?

Firefox3860
06.10.2020, 16:18
Лучше назначать на те кнопки, которые не используются в управлении машиной - прыжок, приседание и т.д.
Насколько я знаю, способ считывания любых клавиш скриптом не изобретён.

GOLOD55
06.10.2020, 18:13
Полагаю, стрим делетается из памяти при его дестрое.
Мда, команду для хнопичек че-то мы упустили из виду с Асмом в mse сделать.

Abradox
06.10.2020, 19:46
W и S не надо! Нужно что-то типа F3 и F4

KlassenAS
06.10.2020, 20:36
W и S не надо! Нужно что-то типа F3 и F4
Ну, если в настройках игры назначишь 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. Наверное, потому, что тогда знал меньше )

grandshot
06.10.2020, 21:25
При управлении машиной они не используются. У меня им соответствуют W и S. А у тебя может быть что угодно.

Они используются при игре с контроллером, если на них назначить курки. Лучше назначить переключение на доп. клавишу Run \ Walk, тогда точно не будет коллизий.

KlassenAS
06.10.2020, 21:52
Они используются при игре с контроллером, если на них назначить курки. Лучше назначить переключение на доп. клавишу Run \ Walk, тогда точно не будет коллизий.
Да, но использоваться по назначению они, при этом, будут только, если персонаж передвигается пешком. В машине они не используются, и переключение радио работает только в машине. Так что и так пересечений не будет.

Почему-то вдруг появился баг с непрошеным воспроизведением потоков при нажатии ESC, о котором упоминал GOLOD55.
Видать, придётся, всё-таки, мютить потоки, убирая громкость, а не ставить на паузу.
Щас попробую, посмотрю, что из этого выйдет.

Firefox3860
06.10.2020, 21:57
KlassenAS, Работает. А зачем в 32 строке задержка 350 мс? Можно ведь её вообще не делать, и тогда не надо будет долго держать кнопку переключения.
Mp3 читает все, вплоть до 320 кб/с, так что можно сразу на них переписать.

Один раз включились сразу все потоки после esc. Но чаще всего не включаются. Непонятно, от чего зависит. Может, при использовании mut'а такого не будет.

Ты, кстати, в чём со скриптом работаешь? У меня вот есть такая поддержка синтаксиса для Notepad++

https://mafia-game.ru/forum/imgcache/2020/10/06/vpeysmrscwjtgjpjuuv5umm.jpg

Лучше назначить переключение на доп. клавишу Run \ WalkА чего вам crouch1 и jump1 не нравятся?? На w и s некоторые ездят, так что они как раз используются в машине.

Ну и ещё, конечно, надо добавить отключение всех станций.

KlassenAS
06.10.2020, 22:13
KlassenAS, А зачем в 32 строке задержка 350 мс? Можно ведь её вообще не делать, и тогда не надо будет долго держать кнопку переключения.
Тогда есть риск двойного срабатывания, а при удержании радиостанции переключаются слишком быстро.
Я вообще сейчас 500 сделал.
Хотя, можно поставить задержку не в цикле считывания, а в процедуре обработки нажатия. Тогда срабатывать будет сразу, и циклическое переключение при удержании будет работать.
Спасибо, на правильную мысль навёл меня )

KlassenAS, Mp3 читает все, вплоть до 320 кб/с, так что можно сразу на них переписать.
Уже.

KlassenAS, Один раз включились сразу все потоки после esc. Но чаще всего не включаются. Непонятно, от чего зависит. Может, при использовании mut'а такого не будет.
Уже сделал, с мютом такого нет, т. е., непрошеное воспроизведение включается, но его всё равно не слышно )

KlassenAS, Ты, кстати, в чём со скриптом работаешь? У меня вот есть такая поддержка синтаксиса для Notepad++
В нём и работаю. Но с подсветкой синтаксиса не пробовал. Кодим по хардкору )
Хорошо хоть, не на ассемблере :D
Как выделение цветом замутить?

KlassenAS, А чего вам crouch1 и jump1 не нравятся?? На w и s некоторые ездят, так что они как раз используются в машине.
Да это, в принципе, дело вкуса. Так-то на любую функцию можно любую клавишу назначить, и тогда что угодно пересечётся )

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
Теперь надо сделать на каждую радиостанцию несколько треков с рандомизированным порядком воспроизведения.
Но этим я завтра займусь, хватит с меня на сегодня программирования )

Firefox3860
06.10.2020, 22:29
Тогда есть риск двойного срабатывания, а при удержании радиостанции переключаются слишком быстро.Ну на практике этого не происходит. Так всегда делают.

В нём и работаю. Но с подсветкой синтаксиса не пробовал. Кодим по хардкору ) Хорошо хоть, не на ассемблере Как выделение цветом замутить?хехе, да уж, ассемблер зло :D Вот файл, описывающий синтаксис https://dropmefiles.com/dG7kR
В программе выбери Снтаксисы - задать свой - импортировать.

Я ещё обычно для дебага скриптов ставлю в нужных местах команды console_addtext, чтобы видно было, когда стрим включается, когда выключается. Например, console_addtext 100.

А хошь ещё прикол? ;) Напиши вместо какого-нибудь потока, например: stream_create 1,"http://airtime.joyradio.cc:8000/airtime_192.mp3"
(В начале игры будет небольшая прогрузка)

Мда, команду для хнопичек че-то мы упустили из виду с Асмом в mse сделать.А можно ли исправить это упущение? ;)

KlassenAS
06.10.2020, 22:32
Вот файл, описывающий синтаксис https://dropmefiles.com/dG7kR
В программе выбери Снтаксисы - задать свой - импортировать.

Я ещё обычно для дебага скриптов ставлю в нужных местах команды console_addtext, чтобы видно было, когда стрим включается, когда выключается. Например, console_addtext 100.

А хошь ещё прикол? ;) Напиши вместо какого-нибудь потока, например: stream_create 1,"http://airtime.joyradio.cc:8000/airtime_192.mp3"
(В начале игры будет небольшая прогрузка)

Спасибо, завтра со всем этим побалуюсь )

Kaiser
06.10.2020, 23:04
Я ещё обычно для дебага скриптов ставлю в нужных местах команды console_addtext, чтобы видно было, когда стрим включается, когда выключается. Например, console_addtext 100.

Кстати идея)):rus:

GOLOD55
06.10.2020, 23:29
А можно ли исправить это упущение?
мм я когда-то, "мимо пробегая", наткнулся на блок памяти-хнопичный_буфер(или шо-то типа того), помому даже ассемлил хнопичку для дебуга. уж ни нипомню, давно было.
новой версии mse пока нету даж в планах, тут надо ж именно нам новую скрипт_команду, а вставлять новые команды только Асм умеет(я лишь могу пошариться в памяти и написать тело команды).
хотя..наверняка есть вариант замутить не новую команду, а модифицировать старую: кстати напр ctrl_readex команда у нас не юзается(а мб она и читает все хнопки, но заинактивена чехами)...

KlassenAS
07.10.2020, 11:41
Вот файл, описывающий синтаксис
В программе выбери Снтаксисы - задать свой - импортировать.
С настройками синтаксиса разобрался, спасибо так намного удобнее!
Напиши вместо какого-нибудь потока, например: stream_create 1,"http://airtime.joyradio.cc:8000/airtime_192.mp3"
(В начале игры будет небольшая прогрузка)
Я правильно понял, это ссылка на аудиопоток реального интернет-радио?
Вообще, круто, что таким нехитрым образом, можно интегрировать в игру реальные радиостанции!

Firefox3860
07.10.2020, 13:43
С настройками синтаксиса разобрался, спасибо так намного удобнее!:yep:
Я правильно понял, это ссылка на аудиопоток реального интернет-радио?
Вообще, круто, что таким нехитрым образом, можно интегрировать в игру реальные радиостанции!да! Несколько лет назад ещё на другом форуме эту фичу обнаружили, я тогда тоже офигел и не встал от того, что мафия может лезть в интернет и воспроизводить оттуда поток. Получается настоящее радио, в полном смысле слова :)

KlassenAS
07.10.2020, 17:25
GOLOD55, Скажи, пожалуйста, размер скрипта script.sc, который может использовать твой патчер, как-нибудь ограничен?
Я сейчас делаю код, чтобы в каждом потоке могли рандомно меняться 10 треков, скрипт получается очень большой. Где-то после 220-ой строки команды просто не выполняются, как будто эта часть скрипта отрезана.
Если скрипт не сможет работать с твоим патчем, мне придётся его в сцену вставлять, там ограничений нет. Но это и неудобно в работе.

UPD: В scene2.bin такая же ошибка. Стало быть, проблема не в размере скрипта.
Буду думать.
Похоже, с условными переходами что-то не то набарагозил...

GOLOD55
07.10.2020, 19:35
низнай. думаю, что размер скрипта не ограничен в разумных пределах.

Abradox
08.10.2020, 00:00
У вас тут большой прогресс по скриптам, это замечательно.

KlassenAS
08.10.2020, 17:43
У вас тут большой прогресс по скриптам, это замечательно.

У меня сейчас четыре потока-"радиостанции", на каждом рандомно стартует один из десяти треков. (40 треков в сумме)
При переключении треки не паузятся, а мютятся.
Баги исправил.
Сейчас осталось разобраться с отслеживанием окончания трека в каждом потоке, для рандомного перезапуска.

В итоге планирую опубликовать три версии скрипта:
1) Самый простой - четыре радиостанции, без отслеживания окончания трека и перезапуска. Удобен, если мы хотим вместо mp3 файлов подсунуть игре ссылку на поток реального интернет-радио.
2) С отслеживанием окончания и перезапуском трека. Но. Одна радиостанция - один трек. Это хорошо, если у пользователя трёхчасовая аудиозапись с "радиоэфиром".
3) Самый сложный - описал выще. Это вообще треш ) Я вчера офонарел, пока баги фиксил. Мне даже ночью снилось, что сдаю экзамен на квантового физика, и отвечаю на попросы про дискретизацию, корпускулярно-волновой дуализм и суперпозицию :D

Firefox3860
08.10.2020, 17:55
Я вчера офонарел, пока баги фиксил. Мне даже ночью снилось, что сдаю экзамен на квантового физика, и отвечаю на попросы про дискретизацию, корпускулярно-волновой дуализм и суперпозицию :DЖесть, знаю, как это бывает :D А может тогда хотя бы в простую версию добавить отключение радио на место 5-ой радиостанции?
А почему решили, что должно быть именно 4 станции?

KlassenAS
08.10.2020, 18:09
Жесть, знаю, как это бывает :D А может тогда хотя бы в простую версию добавить отключение радио на место 5-ой радиостанции?
А почему решили, что должно быть именно 4 станции?

Кстати, про отключение я не подумал ) Т. е., мне вообще не пришло в голову, что его может понадобиться отключать )
Четыре, не знаю, как-то само образовалось.
А вот, если радио отключать, то как лучше сделать, чтобы совсем тишина была, или чтобы дефолтная городская музыка играла?
Можно так и так. Тишину, конечно, сделать проще.
Переключение радиостанций оказалось не самой сложной частью алгоритма, так что можно сделать во всех трёх версиях. Но и не самой лёгкой.
Но после того, как эта часть уже отлажена, слегка расширить её не проблема.

А вот так выглядит плейлист моих "радиостанций":

Firefox3860
08.10.2020, 18:26
А вот, если радио отключать, то как лучше сделать, чтобы совсем тишина была, или чтобы дефолтная городская музыка играла?
Можно так и так. Тишину, конечно, сделать проще.Мне кажется, можно сделать как abradox сказал - кинуть всю оригинальную ситимузыку на одну из станций.
А вот так выглядит плейлист моих "радиостанций":Музыка настоящей мафии :D :rock:

KlassenAS
08.10.2020, 18:33
Мне кажется, можно сделать как abradox сказал - кинуть всю оригинальную ситимузыку на одну из станций.
А, ну да )
Тогда это уже забота того, кто составляет плейлист - первые три накидать кастомные, четвёртую с оригинальной музыкой, и пятым пунктом - гробовая тишина )
И можно добавить проверку, если Томми садится в катафалк - включается третья часть сонаты №2 Шопена )
Тогда решено - пятый пункт - выкл. и тишина.
Музыка настоящей мафии :D :rock:
Особенно трек 03-09 )

Firefox3860
08.10.2020, 18:38
Тогда это уже забота того, кто составляет плейлист - первые три накидать кастомные, четвёртую с оригинальной музыкойА может, чтобы их не кидать... Ведь ситимузыка уже есть в файлах. Задать для одной из станций пути к файлам как sounds/music/city_music_xx.ogg.
И даже если ничего не положить в radio, останется ориг. музыка :)

KlassenAS
08.10.2020, 18:42
А может, чтобы их не кидать... Ведь ситимузыка уже есть в файлах. Задать для одной из станций пути к файлам как sounds/music/city_music_xx.ogg.

Это если данные файлы у пользователя распакованы. А если нет?
Я просто не знаю, как это работает в самой игре.

Firefox3860
08.10.2020, 18:43
Это если данные файлы у пользователя распакованы. А если нет? Я просто не знаю, как это работает в самой игре.Нет, без распаковки вплоне работает, в ориг. скриптах ведь так и сделано :)

KlassenAS
08.10.2020, 18:50
Нет, без распаковки вплоне работает, в ориг. скриптах ведь так и сделано :)

А, ну тогда норм. А список имён файлов где посмотреть можно?

Firefox3860
08.10.2020, 18:58
А список имён файлов где посмотреть можно?Обычно смотрится прямо по распаковке архива :) Отдельно music можно распаковать.

Kaiser
08.10.2020, 22:48
2 KlassenAS

Я обнаружил баг в радио. В общем, скрипт работает идеально, как я писал выше, но когда ты сохраняешь игру, выходишь в Главное меню и после загружаешь сохранение, то когда спавнишься в игре, радио играет вокруг тебя, в окружающем мире.

KlassenAS
08.10.2020, 22:58
2 KlassenAS

Я обнаружил баг в радио. В общем, скрипт работает идеально, как я писал выше, но когда ты сохраняешь игру, выходишь в Главное меню и после загружаешь сохранение, то когда спавнишься в игре, радио играет вокруг тебя, в окружающем мире.

Да, я уже знаю об этой ошибке.
Так происходит, когда поток зациклен командой Stream_SetLoop.
Я уже сообразил, как реализовать повтор обходным путём.
Завтра скину исправленный скрипт.

Firefox3860
09.10.2020, 10:04
Вот и распаковка музыки подоспела → https://mafia-game.ru/forum/showpost.php?p=12356&postcount=169

Файл с музыкой радио: \Mafia Definitive Edition\edit\audio\packages\radio_global.pck

KlassenAS
09.10.2020, 13:34
Ох, народ, чувствую себя японским городовым )
Итак.
Я примерно понял, как работает баг с клавишей ESC
При вызове меню все игровые звуки должны ставиться на паузу, а после возврата в игру, те, что не были на паузе и до того, должны снова воспроизводиться.
Но код-то чешский )
Из-за этого игра некорректно отслеживает состояния потоков в скриптах.
Поэтому она эти потоки то ставит на паузу, то нет. И возобновляет, когда не надо.

Далее, почему после загрузки играет музон.
А фишка в том, что игра помнит все работающие аудио-потоки, и из каких файлов они созданы.
Поэтому, при загрузке из сохранения, игра вспоминает, что был поток, из такого-то файла сделанный, и восстанавливает.

Теперь способ, как эти мафиозные выкрутасы побороть:
Игра помнит не только сам поток, но и состояние всех переменных на момент сохранения. И в этих переменных лежат идентификаторы аудиопотоков.
Следовательно, чтобы багов с непрошенным воспроизведением не возникало, надо в самом начале скрипта, ещё до объявления переменных, эти потоки отдестроить.

CommandBlock 1
Stream_Destroy 0
Stream_Destroy 1
Stream_Destroy 2
Stream_Destroy 3
CommandBlock 0

А уже потом пускать весь основной скрипт.
Если мы используем в скрипте "шапочку" от GOLOD55, чтобы внешний скрипт не работал в меню, то этот дестрой можно и до, и после "шапочки" продублировать. На всякий случай.

Ещё полезно отслеживать состояние здоровья персонажа и дестроить потоки, если Томми склеил ласты.

И вот при таком способе "зачистки" потоков я пока багов не заметил. Но это не точно. Может, потом ещё найдутся.

P.S. Предлагаю, сообщения из этой темы, начиная с №26 перенести в отдельную тему и назвать её "Скрипт авто-радио" или как-то иначе, на усмотрение администрации.

UPD: Написанному не верить. Более тщательная проверка показала, что ни шиша из этого не работает, как ожидалось.

Abradox
09.10.2020, 14:03
Список музыки оригинальной Мафии.

папка Mafia/sounds/music (В стимовской и гоговской версиях эти треки отсутствуют.)
city_music_01.ogg
city_music_02.ogg
city_music_03.ogg
city_music_04.ogg
city_music_05.ogg
city_music_06.ogg
city_music_07.ogg
city_music_08.ogg
city_music_09.ogg
city_music_10.ogg
city_music_11.ogg
city_music_12.ogg
city_music_13.ogg
city_music_14.ogg
city_music_15.ogg
12_scene music.ogg
mise02-ulicka.ogg

папка Mafia/sounds (В стимовской и гоговской версиях эти треки "убиты" в них записана тишина вместо муызки).
03_music.wav
10_music.wav
10_musicin.wav
12_radio.wav
13b_music.wav
14_Coucou.wav
18_radio.wav
s_music1.wav
s_music2.wav
s_music3.wav
s_music5.wav

Firefox3860
09.10.2020, 14:03
Следовательно, чтобы багов с непрошенным воспроизведением не возникало, надо в самом начале скрипта, ещё до объявления переменных, эти потоки отдестроить.Прямо до dim_flt? Интересно. Главное, чтобы при этом как-нибудь не уничтожился поток стандартной музыки главного меню :D
Ещё полезно отслеживать состояние здоровья персонажа и дестроить потоки, если Томми склеил ласты.Чтобы после перезагрузки игры их не было?
P.S. Предлагаю, сообщения из этой темы, начиная с №26 перенести в отдельную тему и назвать её "Скрипт авто-радио" или как-то иначе, на усмотрение администрации."Скрипт автомобильного радио" :yep:
папка Mafia/soundsЭти — "неполноценные", лучше не использовать :) И wav, наверное, не пойдёт в стрим.
папка Mafia/sounds/music (В стимовской и гоговской версиях эти треки отсутствуют.)
city_music_14.oggЭтой не существует :net:

KlassenAS
09.10.2020, 14:10
Прямо до dim_flt? Интересно.
Прикол в том, что в сохранении прописаны значения каждой переменной в каждом скрипте.
Поэтому после загрузки сохранения все эти значения восстанавливаются.
И если в скрипте с именем "1" на момент сохранения в переменной 7 было значение 648, то после загрузки сохранения это значение восстановится.
Соответственно, если в переменной 5 был идентификатор потока, то он там и будет.
Эту фичу можно использовать для отслеживания того, начал ли игрок новую игру или загрузил сейв.
Так что я сейчас ещё добавлю к дестрою дополнительную проверку, была ли загрузка из сейва.

Чтобы после перезагрузки игры их не было?
Ну да. А то опять начнут играть, когда их не просят )

И wav, наверное, не пойдёт в стрим.
Если частота дискретизации не больше 22kHz, воспроизводятся, как миленькие )
Список музыки оригинальной Мафии.

папка Mafia/sounds/music (В стимовской и гоговской версиях эти треки отсутствуют.)
city_music_14.ogg
Этой не существует :net:
Странно, у меня существует )

Firefox3860
09.10.2020, 14:23
Странно, у меня существует )Да? И что в ней? :D Если то же самое, что в 05, то она из Extended Mod'а — я положил :)

KlassenAS
09.10.2020, 14:26
Да? И что в ней? :D Если то же самое, что в 05, то она из Extended Mod'а — я положил :)
Действительно, то же самое.

Ха! Ни фига. Я ошибся. Значение переменных не сохраняется.
Но фишка с уничтожением потоков, почему-то работает.
Хз, возможно, команда Stream_Destroy, в принципе, если видит некорректный идентификатор, докапывается до потоков, ранее созданных этом скрипте.
Хз почему, но работает как надо.

UPD: Я вообще теперь ничего не понимаю.
Снова была ошибка с непрошеным воспроизведением.
Хотя теперь, вроде, происходит реже.
Я уже ничего не понимаю.

Кто-нибудь знает способ определить в скрипте, что игрок собирается загрузиться с сохранения или выйти из миссии, чтобы перед этим отдестроить аудиопотоки?

Firefox3860
09.10.2020, 15:38
Выследить намерение игрока вряд ли можно, но есть точный способ определить, была ли игра загружена из сохранения или из меню.

KlassenAS
09.10.2020, 15:44
Выследить намерение игрока вряд ли можно, но есть точный способ определить, была ли игра загружена из сохранения или из меню.

Что за способ?
Хотя, если честно, не уверен, что это поможет.
Ведь игра уже загрузилась. А с ней загрузились и ненужные аудиопотоки.

Ещё мысль появилась.
А что там со стэком? Он работает, кажется, независимо от сохранения?
Что, если в него сохранять идентификаторы потоков, а при загрузке из сохранения считывать их и дестроить их потоки?

Firefox3860
09.10.2020, 16:00
Что за способ?Вот он - https://mafia-game.ru/forum/showpost.php?p=7764&postcount=143
Он немного костыльный, используется у меня в моде для загрузки chg-файлов и других начальных присвоений. Но вряд ли тут, конечно, поможет.

А что там со стэком? Он работает, кажется, независимо от сохранения? Что, если в него сохранять идентификаторы потоков, а при загрузке из сохранения считывать их и дестроить их потоки?Прямой доступ к оперативной памяти? Не знаю, можно ли такое сделать в скрипте.

KlassenAS
09.10.2020, 16:08
Прямой доступ к оперативной памяти? Не знаю, можно ли такое сделать в скрипте.

Может, у движка есть собственное подобие стэка?
floatreg_pop xx \\ есть в mise19mesto

найти последнее значение в стеке и записать его в переменную xx. Если стек пустой то команда вообще не сработает(даже не перепишет флт xx нулем).

xx - назначаемая переменная



floatreg_push xx \\ есть в mise19mesto\banka

закинуть значение переменной xx в стек(перед загрузкой другой карты, например). в стек можно скидывать много флт. считывание стека floatreg_pop-ом
происходит в обратном порядке. считанное из стека значение укорачивает его(причем даже нуля не остается(?))

xx - переменная, значение которой запоминаем

Firefox3860
09.10.2020, 16:44
Может, у движка есть собственное подобие стэка?А, тут даже специальные команды есть. Это точно стоит попробовать.
Ну и всё равно же этот стэк будет в оперативной памяти находиться.

KlassenAS
09.10.2020, 17:26
А, тут даже специальные команды есть. Это точно стоит попробовать.
Ну и всё равно же этот стэк будет в оперативной памяти находиться.

Попробовал. Не помогло.
Кажется, я начинаю понимать, почему.
Похоже, что, когда загружается сохранение, и игра воссоздаёт сохранённые потоки, они получают новые идентификаторы.
ESC включает их воспроизведение рандомно.
А при следующем сохранении у нас сохраняются и те потоки, которые с прошлого сохранения остались, и к ним ещё новые добавляются.
Можно было бы дестроить потоки перед каждым сохранением.
Но для этого нужно лезть в скрипты в сценах, отвечающие за сохранение.
Перелопатить сохранения всех сцен ради одного скрипта - не рационально, мягко говоря.
Или хакнуть движок, чтобы созданные в скриптах аудиопотоки не сохранялись.
Это мне кажется более действенным, но нереальным.

А так-то я этот скрипт отладил - работает отлично. До первого сохранения.
А потом игра всю малину портит.

Ещё одно наблюдение: когда я делал скрипт, в котором одной радиостанции соответствовал только один аудиофайл, этой ошибки не было. По крайней мере, не помню, чтобы была.
Может быть, в игре не может существовать двух потоков, сделанных из одного файла? Надо проверить.

UPD: Тоже не прокатило...

Вот в таком виде сейчас существует этот скрипт.
Больше половины скрипта составляет алгоритм рандомизации треков.
Кому не лень состалять плейлист из 40 песен - можете протестировать )
//Radio Script Ver. 2 10-10-2020 By KlassenAS

Dim_Act 1
Dim_Flt 19
GetActivePlayer 0
Human_GetProperty 0,4,Energy
If Flt[4]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on

Let Flt[0]=0 //поток 00
Let Flt[1]=0 //поток 01
Let Flt[2]=0 //поток 02
Let Flt[3]=0 //поток 03
Let Flt[4]=0 //логика
Let Flt[5]=0 //Нажатие клавиш вперёд1 и назад1
Let Flt[6]=0 //Последний активный поток
Let Flt[7]=0 //сиденье/Время с начала игры/текущее время потока/
Let Flt[8]=0 //Прошлое время с начала игры
Let Flt[9]=0 //номер радиостанции 0-3
Let Flt[10]=-1 //рандом для radio/разница во времени игры
Let Flt[11]=-1 //чтоб на radio00 не повторялись дважды
Let Flt[12]=-1 //чтоб на radio01 не повторялись дважды
Let Flt[13]=-1 //чтоб на radio02 не повторялись дважды
Let Flt[14]=-1 //чтоб на radio03 не повторялись дважды
Let Flt[15]=-1 //прошлое время потока 0
Let Flt[16]=-1 //прошлое время потока 1
Let Flt[17]=-1 //прошлое время потока 2
Let Flt[18]=-1 //прошлое время потока 3

//Это, чтобы сразу сохранение протестровать во фрирайде
FreeRide_ScoreAdd 2000

CommandBlock 1
Label RADIO00CREATE
Rnd 10,10
If Flt[11]=Flt[10],RADIO00CREATE,-1
Let Flt[11]=Flt[10]

Label TRCK0000
If Flt[10]=0,-1,TRCK0001
Stream_Create 0,"radio\radio 00 - 00.mp3"
GoTo RADIO00CREATED

Label TRCK0001
If Flt[10]=1,-1,TRCK0002
Stream_Create 0,"radio\radio 00 - 01.mp3"
GoTo RADIO00CREATED

Label TRCK0002
If Flt[10]=2,-1,TRCK0003
Stream_Create 0,"radio\radio 00 - 02.mp3"
GoTo RADIO00CREATED

Label TRCK0003
If Flt[10]=3,-1,TRCK0004
Stream_Create 0,"radio\radio 00 - 03.mp3"
GoTo RADIO00CREATED

Label TRCK0004
If Flt[10]=4,-1,TRCK0005
Stream_Create 0,"radio\radio 00 - 04.mp3"
GoTo RADIO00CREATED

Label TRCK0005
If Flt[10]=5,-1,TRCK0006
Stream_Create 0,"radio\radio 00 - 05.mp3"
GoTo RADIO00CREATED

Label TRCK0006
If Flt[10]=6,-1,TRCK0007
Stream_Create 0,"radio\radio 00 - 06.mp3"
GoTo RADIO00CREATED

Label TRCK0007
If Flt[10]=7,-1,TRCK0008
Stream_Create 0,"radio\radio 00 - 07.mp3"
GoTo RADIO00CREATED

Label TRCK0008
If Flt[10]=8,-1,TRCK0009
Stream_Create 0,"radio\radio 00 - 08.mp3"
GoTo RADIO00CREATED

Label TRCK0009
If Flt[10]=9,-1,RADIO00CREATED
Stream_Create 0,"radio\radio 00 - 09.mp3"
GoTo RADIO00CREATED

Label RADIO00CREATED
Stream_Fadevol 0,1,0,0
Stream_Play 0
If Flt[15]>0,REPLAY0,-1



Label RADIO01CREATE
Rnd 10,10
If Flt[12]=Flt[10],RADIO01CREATE,-1
Let Flt[12]=Flt[10]

Label TRCK0100
If Flt[10]=0,-1,TRCK0101
Stream_Create 1,"radio\radio 01 - 00.mp3"
GoTo RADIO01CREATED

Label TRCK0101
If Flt[10]=1,-1,TRCK0102
Stream_Create 1,"radio\radio 01 - 01.mp3"
GoTo RADIO01CREATED

Label TRCK0102
If Flt[10]=2,-1,TRCK0103
Stream_Create 1,"radio\radio 01 - 02.mp3"
GoTo RADIO01CREATED

Label TRCK0103
If Flt[10]=3,-1,TRCK0104
Stream_Create 1,"radio\radio 01 - 03.mp3"
GoTo RADIO01CREATED

Label TRCK0104
If Flt[10]=4,-1,TRCK0105
Stream_Create 1,"radio\radio 01 - 04.mp3"
GoTo RADIO01CREATED

Label TRCK0105
If Flt[10]=5,-1,TRCK0106
Stream_Create 1,"radio\radio 01 - 05.mp3"
GoTo RADIO01CREATED

Label TRCK0106
If Flt[10]=6,-1,TRCK0107
Stream_Create 1,"radio\radio 01 - 06.mp3"
GoTo RADIO01CREATED

Label TRCK0107
If Flt[10]=7,-1,TRCK0108
Stream_Create 1,"radio\radio 01 - 07.mp3"
GoTo RADIO01CREATED

Label TRCK0108
If Flt[10]=8,-1,TRCK0109
Stream_Create 1,"radio\radio 01 - 08.mp3"
GoTo RADIO01CREATED

Label TRCK0109
If Flt[10]=9,-1,RADIO01CREATED
Stream_Create 1,"radio\radio 01 - 09.mp3"
GoTo RADIO01CREATED

Label RADIO01CREATED
Stream_Fadevol 1,1,0,0
Stream_Play 1
If Flt[16]>0,REPLAY1,-1



Label RADIO02CREATE
Rnd 10,10
If Flt[13]=Flt[10],RADIO02CREATE,-1
Let Flt[13]=Flt[10]

Label TRCK0200
If Flt[10]=0,-1,TRCK0201
Stream_Create 2,"radio\radio 02 - 00.mp3"
GoTo RADIO02CREATED

Label TRCK0201
If Flt[10]=1,-1,TRCK0202
Stream_Create 2,"radio\radio 02 - 01.mp3"
GoTo RADIO02CREATED

Label TRCK0202
If Flt[10]=2,-1,TRCK0203
Stream_Create 2,"radio\radio 02 - 02.mp3"
GoTo RADIO02CREATED

Label TRCK0203
If Flt[10]=3,-1,TRCK0204
Stream_Create 2,"radio\radio 02 - 03.mp3"
GoTo RADIO02CREATED

Label TRCK0204
If Flt[10]=4,-1,TRCK0205
Stream_Create 2,"radio\radio 02 - 04.mp3"
GoTo RADIO02CREATED

Label TRCK0205
If Flt[10]=5,-1,TRCK0206
Stream_Create 2,"radio\radio 02 - 05.mp3"
GoTo RADIO02CREATED

Label TRCK0206
If Flt[10]=6,-1,TRCK0207
Stream_Create 2,"radio\radio 02 - 06.mp3"
GoTo RADIO02CREATED

Label TRCK0207
If Flt[10]=7,-1,TRCK0208
Stream_Create 2,"radio\radio 02 - 07.mp3"
GoTo RADIO02CREATED

Label TRCK0208
If Flt[10]=8,-1,TRCK0209
Stream_Create 2,"radio\radio 02 - 08.mp3"
GoTo RADIO02CREATED

Label TRCK0209
If Flt[10]=9,-1,RADIO02CREATED
Stream_Create 2,"radio\radio 02 - 09.mp3"
GoTo RADIO02CREATED

Label RADIO02CREATED
Stream_Fadevol 2,1,0,0
Stream_Play 2
If Flt[17]>0,REPLAY2,-1



Label RADIO03CREATE
Rnd 10,10
If Flt[14]=Flt[10],RADIO03CREATE,-1
Let Flt[14]=Flt[10]

Label TRCK0300
If Flt[10]=0,-1,TRCK0301
Stream_Create 3,"radio\radio 03 - 00.mp3"
GoTo RADIO03CREATED

Label TRCK0301
If Flt[10]=1,-1,TRCK0302
Stream_Create 3,"radio\radio 03 - 01.mp3"
GoTo RADIO03CREATED

Label TRCK0302
If Flt[10]=2,-1,TRCK0303
Stream_Create 3,"radio\radio 03 - 02.mp3"
GoTo RADIO03CREATED

Label TRCK0303
If Flt[10]=3,-1,TRCK0304
Stream_Create 3,"radio\radio 03 - 03.mp3"
GoTo RADIO03CREATED

Label TRCK0304
If Flt[10]=4,-1,TRCK0305
Stream_Create 3,"radio\radio 03 - 04.mp3"
GoTo RADIO03CREATED

Label TRCK0305
If Flt[10]=5,-1,TRCK0306
Stream_Create 3,"radio\radio 03 - 05.mp3"
GoTo RADIO03CREATED

Label TRCK0306
If Flt[10]=6,-1,TRCK0307
Stream_Create 3,"radio\radio 03 - 06.mp3"
GoTo RADIO03CREATED

Label TRCK0307
If Flt[10]=7,-1,TRCK0308
Stream_Create 3,"radio\radio 03 - 07.mp3"
GoTo RADIO03CREATED

Label TRCK0308
If Flt[10]=8,-1,TRCK0309
Stream_Create 3,"radio\radio 03 - 08.mp3"
GoTo RADIO03CREATED

Label TRCK0309
If Flt[10]=9,-1,RADIO03CREATED
Stream_Create 3,"radio\radio 03 - 09.mp3"
GoTo RADIO03CREATED

Label RADIO03CREATED
Stream_Fadevol 3,1,0,0
Stream_Play 3
If Flt[18]>0,REPLAY3,-1

Let Flt[6]=Flt[0]



CommandBlock 0
Label CHECK
CommandBlock 1
Human_GetProperty 0,7,Energy
If Flt[7]=0,DEATH,-1
GoTo POSITION
Label CHECK_IN_CAR
CommandBlock 0
Human_GetSeatIdx 0,7
If Flt[7]=-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
If Flt[4]=0,-,CHECK
CommandBlock 1
CityMusic_Off
If Flt[9]>-1,-1,RADIO_OFF
Stream_Fadevol 6,1,1,1
Label RADIO_OFF
Let Flt[4]=1
CommandBlock 0
Wait 1000
GoTo CHECK



Label CAR_OUT
If Flt[4]=1,-1,CHECK
Stream_Fadevol 6,1,0,0
CityMusic_On
Let Flt[4]=0
Wait 1000
GoTo CHECK



Label RADIO_UP
CommandBlock 1
Stream_Fadevol 6,1,0,0

Label CHNGUPTO_1
If Flt[9]=0,-1,CHNGUPTO_2
Let Flt[6]=Flt[1]
GoTo RADIOPLUS

Label CHNGUPTO_2
If Flt[9]=1,-1,CHNGUPTO_3
Let Flt[6]=Flt[2]
GoTo RADIOPLUS

Label CHNGUPTO_3
If Flt[9]=2,-1,CHNGUPTO_0
Let Flt[6]=Flt[3]
GoTo RADIOPLUS

Label CHNGUPTO_0
If Flt[9]=3,-1,RADIOPLUS
Let Flt[6]=Flt[0]

Label RADIOPLUS
Let Flt[9]=Flt[9]+1
If Flt[9]>3,-1,CHANGEDUP
Let Flt[9]=-1
GoTo RADIO_OFF_UP
Label CHANGEDUP
Stream_Fadevol 6,1,1,1
Label RADIO_OFF_UP
CommandBlock 0

Let Flt[7]=0
Label 3333
Ctrl_Read 5,UP1
If Flt[5]=1,-1,READ_DOWN
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<10,3333,-1
GoTo READ_DOWN



Label RADIO_DOWN
CommandBlock 1
Stream_Fadevol 6,1,0,0

Label CHNGDWNTO_3
If Flt[9]=-1,-1,CHNGDWNTO_2
Let Flt[6]=Flt[3]
GoTo RADIOMINUS

Label CHNGDWNTO_2
If Flt[9]=3,-1,CHNGDWNTO_1
Let Flt[6]=Flt[2]
GoTo RADIOMINUS

Label CHNGDWNTO_1
If Flt[9]=2,-1,CHNGDWNTO_0
Let Flt[6]=Flt[1]
GoTo RADIOMINUS

Label CHNGDWNTO_0
If Flt[9]=1,-1,RADIOMINUS
Let Flt[6]=Flt[0]

Label RADIOMINUS
Let Flt[9]=Flt[9]-1
If Flt[9]=-1,RADIO_OFF_DOWN,-1
If Flt[9]<-1,-1,CHANGEDDOWN
Let Flt[9]=3
Label CHANGEDDOWN
Stream_Fadevol 6,1,1,1
Label RADIO_OFF_DOWN
CommandBlock 0

Let Flt[7]=0
Label 2222
Ctrl_Read 5,DOWN1
If Flt[5]=1,-1,CHECKPLAY
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<10,2222,-1
GoTo CHECKPLAY



Label POSITION
GetGameTime 7
Let Flt[10]=Flt[7]-Flt[8]
If Flt[10]<1000,CHECK_IN_CAR,-1
Let Flt[8]=Flt[7]

Label GETPOS0
Stream_GetPos 0,7
If Flt[7]=Flt[15],RADIO0END,-1
Let Flt[15]=Flt[7]
GoTo GETPOS1
Label RADIO0END
Stream_Destroy 0
GoTo RADIO00CREATE
Label REPLAY0
Let Flt[15]=-1
If Flt[4]=0,GETPOS1,-1
If Flt[9]=0,-1,GETPOS1
Let Flt[6]=Flt[0]
Stream_Fadevol 0,1,1,1

Label GETPOS1
Stream_GetPos 1,7
If Flt[7]=Flt[16],RADIO1END,-1
Let Flt[16]=Flt[7]
GoTo GETPOS2
Label RADIO1END
Stream_Destroy 1
GoTo RADIO01CREATE
Label REPLAY1
Let Flt[16]=-1
If Flt[4]=0,GETPOS2,-1
If Flt[9]=1,-1,GETPOS2
Let Flt[6]=Flt[1]
Stream_Fadevol 1,1,1,1

Label GETPOS2
Stream_GetPos 2,7
If Flt[7]=Flt[17],RADIO2END,-1
Let Flt[17]=Flt[7]
GoTo GETPOS3
Label RADIO2END
Stream_Destroy 2
GoTo RADIO02CREATE
Label REPLAY2
Let Flt[17]=-1
If Flt[4]=0,GETPOS3,-1
If Flt[9]=2,-1,GETPOS3
Let Flt[6]=Flt[2]
Stream_Fadevol 2,1,1,1

Label GETPOS3
Stream_GetPos 3,7
If Flt[7]=Flt[18],RADIO3END,-1
Let Flt[18]=Flt[7]
GoTo CHECK_IN_CAR
Label RADIO3END
Stream_Destroy 3
GoTo RADIO03CREATE
Label REPLAY3
Let Flt[18]=-1
If Flt[4]=0,CHECK_IN_CAR,-1
If Flt[9]=3,-1,CHECK_IN_CAR
Let Flt[6]=Flt[3]
Stream_Fadevol 3,1,1,1

GoTo CHECK_IN_CAR

Label DEATH
CommandBlock 1
Stream_Destroy 0
Stream_Destroy 1
Stream_Destroy 2
Stream_Destroy 3
CommandBlock 0

Kaiser
09.10.2020, 21:06
2 KlassenAS

Я немного запутался. Ты проверял скрипт с коммандоблоками или мне нужно протестировать?

KlassenAS
09.10.2020, 21:26
Я немного запутался. Ты проверял скрипт с коммандоблоками или мне нужно протестировать?
В чём именно запутался?
Это не тот скрипт, что нужен для твоего мода, это другая версия.
Написанная с подачи Abradox.
Этот скрипт, что я сейчас выложил, я проверил вдоль и поперёк.
4 радиостанции по 10 треков на каждой, с рандомизацией. Работает хорошо, но из-за кривых особенностей игры после сохранения начинаются проблемы с непрошеным воспроизведением потоков, которые не удалось решить средствами скриптинга.
Если хочешь, - можешь попробовать этот скрипт в деле.
Не хочешь - так и не заморачивайся )

Я планировал сегодня исправить версию скрипта для твоего мода, но после тщетных попыток побороть ошибки в своей, "флагманской", версии, силы мои иссякли, увы.

Kaiser
09.10.2020, 21:29
Так может тогда убрать из него функцию запоминания? Пусть тогда каждый раз сначала играет, коли команда несовершенна.

KlassenAS
09.10.2020, 21:31
Так может тогда убрать из него функцию запоминания? Пусть тогда каждый раз сначала играет, коли команда несовершенна.
Теперь я запутался. Какое запоминание ты имеешь в виду?

Kaiser
09.10.2020, 21:33
У нас была проблема, что после загрузки сохранения, музыка из радио играет вне машины. Ты говорил, что это из-за команды Сетлуп, или как-то так.

Abradox
09.10.2020, 21:33
А что если при загрузки игры из меню или при загрузки сохранения, сначала дестроить все существующие или не существующие потоки, а потом уже стартовать нужные?

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

Kaiser
09.10.2020, 21:43
Если речь о моем радио, то там один часовой трек.

KlassenAS
09.10.2020, 21:48
А если при загрузки игры из меню или при сзагрузки сохранения сначала дестроить все существующие или не существующие потоки, а потом уже загружать нужные.
т.к. образом при сохранении даже если они и запишутся, то уничтожатся при загрузке.
Именно так я и пытался решить проблему. Аж три способа перепробовал.
Я где-то выше об этом писал.
Всё тщетно, из скрипта не удаётся докопаться до этих потоков. Я пробовал даже сделать цикл, чтобы менять идентификатор потока от 0 до 1000 и дестроить потоки по этим номерам. Но у меня сложилось впечатление, что из скрипта можно получить доступ только к потокам, созданным в этом скрипте, а после загрузки потоки этому скрипту не принадлежат. Странная хрень. И так пытался дестроить и эдак...
Может попробовать сделать цикл от 0 до 5000? )
Это было бы плохо если бы трэк-лист всегда начинался с начала, но у нас же вроде рандомный аудио-файл выбирается из списка?
Да, при старте для каждго потока рандомно выбирается 1 из 10 файлов и я ещё подстраховался, чтобы случайно не заиграл один и тот же трек два раза подряд.

У нас была проблема, что после загрузки сохранения, музыка из радио играет вне машины. Ты говорил, что это из-за команды Сетлуп, или как-то так.
Да, потому, что по умолчанию созданный поток автоматически не воспроизводится.
Только если был зациклен.
Но учти, похоже, что после сохранения всё равно останется риск, что поток начнёт играть после юзания клавиши ESC. То есть, игра его всё равно создаст и он будет висеть в памяти, только сам не начнёт играть.

Если речь о моем радио, то там один часовой трек.
Всё просто. С тобой я говорю о твоём радио.
С Abradox - о своём.

Kaiser
09.10.2020, 21:56
2 KlassenAS

Ладно, все равно тебе спасибо! Тогда оставим вариант с продолжением с исходной точки при выходе из авто. Просто буду писать в РИдМи, что есть такой-то баг и не сохраняйте игру. И выпущу тогда дополнение отдельным ДЛС, для тех, кто не захочет радио на постоянку.

Staghound
09.10.2020, 22:13
Сделано

KlassenAS
10.10.2020, 22:02
Так.
Кажется, я встал на путь истинный :D
До этого я все потоки только мютил.
А сейчас стал ставить на паузу.
Удивительно, но больше у меня баг с воспроизведением после загрузки не появляется.
Хотя, может быть, я плохо старался?
У меня сложилось впечатление, что игра сохраняет и восстанавливает при загрузки только те потоки, которые были активны на момент сохранения.
А те, что были на паузе - игнорирует.
Но на самом деле я знаю, что я ничего не знаю.
Слишком часто за время разработки этих скриптов у меня складывалось ложное впечатление.
в любом случае, баг не даёт о себе знать.
Так что на подходе 4 версии скрипта )

И ещё, если кто знает хорошие интернет-радиостанции, ориентированные на классику, джаз, блюз, рок-н-ролл или рок, скиньте мне ссылки на их аудиопоток, типа того, что Firefox3860 скидывал:"http://airtime.joyradio.cc:8000/airtime_192.mp3"
Я их вставлю в один из скриптов )

Firefox3860
10.10.2020, 22:22
KlassenAS, Чё, всё таки паузы нужны, как сначала было?

KlassenAS
11.10.2020, 15:59
KlassenAS, Чё, всё таки паузы нужны, как сначала было?
Ага, похоже на то. Но и мютить тоже надо, чтобы запаузенный поток от ESC не заиграл.

UPD:

Ну, что, друзья, вот вам!
По моим ощущениям - багов нет.
Кто найдёт - тот молодец )

Ver. 1.0
//Radio Script Ver. 1.0 11-10-2020 By KlassenAS For Kaiser
//Одна радиостанция с одним треком.
//Поле окончания трек сбрасывается на начало.
//Этот скрипт хорош, если у Вас файл с длиннющей записью реального либо фейкового радиоэфира.
Dim_Act 1
Dim_Flt 6
GetActivePlayer 0

//Удалить для использования в scene2.bin
//Оставить для использования с патчем от GOLOD55
//Начало удаления
Human_GetProperty 0,0,Energy
If Flt[0]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on
//Конец удаления

Let Flt[0]=0 //поток 00
Let Flt[1]=0 //логика
Let Flt[2]=-1 //сиденье/Время с начала игры/текущее время потока/
Let Flt[3]=0 //Прошлое время с начала игры
Let Flt[4]=-1 //разница во времени игры
Let Flt[5]=-1 //прошлое время потока

CommandBlock 1
Stream_Create 0,"radio\radio00.mp3"
Stream_FadeVol 0,1,0,0
CommandBlock 0

Label CHECK
CommandBlock 1
GoTo POSITION
Label CHECK_IN_CAR
CommandBlock 0
Human_GetSeatIdx 0,2
If Flt[2]=-1,CAR_OUT,CAR_IN

Label CAR_IN
If Flt[1]=0,-,CHECK
CityMusic_Off
Wait 500
Stream_Play 0
Stream_FadeVol 0,1,1,1
Let Flt[1]=1
GoTo CHECK

Label CAR_OUT
If Flt[1]=1,-1,CHECK
Stream_FadeVol 0,1,0,0
Stream_Pause 0
CityMusic_On
Let Flt[1]=0
GoTo CHECK

Label POSITION
If Flt[1]=0,CHECK_IN_CAR,-1
GetGameTime 2
Let Flt[4]=Flt[2]-Flt[3]
If Flt[4]<1000,CHECK_IN_CAR,-1
Let Flt[3]=Flt[2]
Stream_GetPos 0,2
If Flt[2]=Flt[5],RADIOEND,-1
Let Flt[5]=Flt[2]
GoTo CHECK_IN_CAR
Label RADIOEND
Let Flt[2]=0
Stream_SetPos 0,2
Let Flt[5]=-1
If Flt[1]=0,CHECK_IN_CAR,-1
Stream_Play 0
GoTo CHECK_IN_CAR

Ver. 1.1
//Radio Script Ver. 1.1 11-10-2020 By KlassenAS
//Три радиостанции, на каждой один трек.
//Радиостанции переключаются. Также радио можно выключить.
//Поле окончания трек сбрасывается на начало.
//Этот скрипт хорош, если у Вас файл с длиннющей записью реального либо фейкового радиоэфира.
Dim_Act 1
Dim_Flt 13
GetActivePlayer 0

//Удалить для использования в scene2.bin,
//Оставить для использования с патчем от GOLOD55
//Начало удаления
Human_GetProperty 0,4,Energy
If Flt[4]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on
//Конец удаления


Let Flt[0]=0 //поток 00
Let Flt[1]=0 //поток 01
Let Flt[2]=0 //поток 02
Let Flt[3]=0 //номер радиостанции 0-2
Let Flt[4]=0 //логика
Let Flt[5]=0 //Нажатие клавиш вперёд1 и назад1
Let Flt[6]=0 //Последний активный поток
Let Flt[7]=0 //сиденье/Время с начала игры/текущее время потока/
Let Flt[8]=0 //Прошлое время с начала игры
Let Flt[9]=0 //разница во времени игры
Let Flt[10]=-1 //прошлое время потока 0
Let Flt[11]=-1 //прошлое время потока 1
Let Flt[12]=-1 //прошлое время потока 2



CommandBlock 1
Stream_Create 0,"radio\radio00.mp3"
Stream_Fadevol 0,1,0,0

Stream_Create 1,"radio\radio01.mp3"
Stream_Fadevol 1,1,0,0

Stream_Create 2,"radio\radio02.mp3"
Stream_Fadevol 2,1,0,0

Let Flt[6]=Flt[0]
CommandBlock 0



Label CHECK
CommandBlock 1
GoTo POSITION
Label CHECK_IN_CAR
CommandBlock 0
Human_GetSeatIdx 0,7
If Flt[7]=-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
If Flt[4]=0,-,CHECK
CityMusic_Off
Let Flt[4]=1
Wait 500
CommandBlock 1
If Flt[3]>-1,-1,RADIO_OFF
Stream_Fadevol 0,1,0,0
Stream_Play 0
Stream_Fadevol 1,1,0,0
Stream_Play 1
Stream_Fadevol 2,1,0,0
Stream_Play 2
Stream_Fadevol 6,1,1,1
Label RADIO_OFF
CommandBlock 0
GoTo CHECK



Label CAR_OUT
If Flt[4]=1,-1,CHECK
Stream_Fadevol 6,1,0,0
Stream_Pause 0
Stream_Pause 1
Stream_Pause 2
Let Flt[4]=0
CityMusic_On
GoTo CHECK



Label RADIO_UP
CommandBlock 1
Stream_Fadevol 6,1,0,0

Label CHNGUPTO_1
If Flt[3]=0,-1,CHNGUPTO_2
Let Flt[6]=Flt[1]
GoTo RADIOPLUS

Label CHNGUPTO_2
If Flt[3]=1,-1,CHNGUPTO_0
Let Flt[6]=Flt[2]
GoTo RADIOPLUS

Label CHNGUPTO_0
If Flt[3]=2,-1,RADIOPLUS
Let Flt[6]=Flt[0]

Label RADIOPLUS
Let Flt[3]=Flt[3]+1
If Flt[3]>2,-1,CHANGEDUP
Let Flt[3]=-1
GoTo RADIO_OFF_UP
Label CHANGEDUP
Stream_Fadevol 6,1,1,1
Label RADIO_OFF_UP
CommandBlock 0

Let Flt[7]=0
Label 3333
Ctrl_Read 5,UP1
If Flt[5]=1,-1,READ_DOWN
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<10,3333,-1
GoTo READ_DOWN



Label RADIO_DOWN
CommandBlock 1
Stream_Fadevol 6,1,0,0

Label CHNGDWNTO_2
If Flt[3]=-1,-1,CHNGDWNTO_1
Let Flt[6]=Flt[2]
GoTo RADIOMINUS

Label CHNGDWNTO_1
If Flt[3]=2,-1,CHNGDWNTO_0
Let Flt[6]=Flt[1]
GoTo RADIOMINUS

Label CHNGDWNTO_0
If Flt[3]=1,-1,RADIOMINUS
Let Flt[6]=Flt[0]

Label RADIOMINUS
Let Flt[3]=Flt[3]-1
If Flt[3]=-1,RADIO_OFF_DOWN,-1
If Flt[3]<-1,-1,CHANGEDDOWN
Let Flt[3]=2
Label CHANGEDDOWN
Stream_Fadevol 6,1,1,1
Label RADIO_OFF_DOWN
CommandBlock 0

Let Flt[7]=0
Label 2222
Ctrl_Read 5,DOWN1
If Flt[5]=1,-1,CHECKPLAY
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<10,2222,-1
GoTo CHECKPLAY



Label POSITION
If Flt[4]=0,CHECK_IN_CAR,-1
GetGameTime 7
Let Flt[9]=Flt[7]-Flt[8]
If Flt[9]<1000,CHECK_IN_CAR,-1
Let Flt[8]=Flt[7]

Label GETPOS0
Stream_GetPos 0,7
If Flt[7]=Flt[10],RADIO0END,-1
Let Flt[10]=Flt[7]
GoTo GETPOS1
Label RADIO0END
Let Flt[7]=0
Stream_SetPos 0,7
Stream_Fadevol 0,1,0,0
Let Flt[10]=-1
Stream_Play 0
If Flt[3]=0,-1,GETPOS1
Stream_Fadevol 0,1,1,1

Label GETPOS1
Stream_GetPos 1,7
If Flt[7]=Flt[11],RADIO1END,-1
Let Flt[11]=Flt[7]
GoTo GETPOS2
Label RADIO1END
Let Flt[7]=0
Stream_SetPos 1,7
Stream_Fadevol 1,1,0,0
Let Flt[11]=-1
Stream_Play 1
If Flt[3]=1,-1,GETPOS2
Stream_Fadevol 1,1,1,1

Label GETPOS2
Stream_GetPos 2,7
If Flt[7]=Flt[12],RADIO2END,-1
Let Flt[12]=Flt[7]
GoTo CHECK_IN_CAR
Label RADIO2END
Let Flt[7]=0
Stream_SetPos 2,7
Stream_Fadevol 2,1,0,0
Let Flt[12]=-1
Stream_Play 2
If Flt[3]=2,-1,CHECK_IN_CAR
Stream_Fadevol 2,1,1,1

GoTo CHECK_IN_CAR

Ver. 1.2
//Radio Script Ver. 1.2 11-10-2020 By KlassenAS
//Три радиостанции, каждой можно присвоить ссылку на поток реального интернет-радио.
//При старте миссии игра зависнет нанесколько секунд
//Это нормально, т. к. игра лезет в интернет, чтобы загрузить аудиопоток.
//Радиостанции переключаются. Также радио можно выключить.
Dim_Act 1
Dim_Flt 8
GetActivePlayer 0

//Удалить для использования в scene2.bin,
//Оставить для использования с патчем от GOLOD55
//Начало удаления
Human_GetProperty 0,4,Energy
If Flt[4]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on
//Конец удаления


Let Flt[0]=0 //поток 00
Let Flt[1]=0 //поток 01
Let Flt[2]=0 //поток 02
Let Flt[3]=0 //номер радиостанции 0-2
Let Flt[4]=0 //логика
Let Flt[5]=0 //Нажатие клавиш вперёд1 и назад1
Let Flt[6]=0 //Последний активный поток
Let Flt[7]=0 //сиденье



Stream_Create 0,"http://airtime.joyradio.cc:8000/airtime_192.mp3"
Stream_Fadevol 0,1,0,0

Stream_Create 1,"radio\radio01.mp3"
Stream_Fadevol 1,1,0,0

Stream_Create 2,"radio\radio02.mp3"
Stream_Fadevol 2,1,0,0

Let Flt[6]=Flt[0]



Label CHECK
Human_GetSeatIdx 0,7
If Flt[7]=-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
If Flt[4]=0,-,CHECK
CityMusic_Off
Let Flt[4]=1
Wait 500
CommandBlock 1
If Flt[3]>-1,-1,RADIO_OFF
Stream_Fadevol 0,1,0,0
Stream_Play 0
Stream_Fadevol 1,1,0,0
Stream_Play 1
Stream_Fadevol 2,1,0,0
Stream_Play 2
Stream_Fadevol 6,1,1,1
Label RADIO_OFF
CommandBlock 0
GoTo CHECK



Label CAR_OUT
If Flt[4]=1,-1,CHECK
Stream_Fadevol 6,1,0,0
Stream_Pause 0
Stream_Pause 1
Stream_Pause 2
Let Flt[4]=0
CityMusic_On
GoTo CHECK



Label RADIO_UP
CommandBlock 1
Stream_Fadevol 6,1,0,0

Label CHNGUPTO_1
If Flt[3]=0,-1,CHNGUPTO_2
Let Flt[6]=Flt[1]
GoTo RADIOPLUS

Label CHNGUPTO_2
If Flt[3]=1,-1,CHNGUPTO_0
Let Flt[6]=Flt[2]
GoTo RADIOPLUS

Label CHNGUPTO_0
If Flt[3]=2,-1,RADIOPLUS
Let Flt[6]=Flt[0]

Label RADIOPLUS
Let Flt[3]=Flt[3]+1
If Flt[3]>2,-1,CHANGEDUP
Let Flt[3]=-1
GoTo RADIO_OFF_UP
Label CHANGEDUP
Stream_Fadevol 6,1,1,1
Label RADIO_OFF_UP
CommandBlock 0

Let Flt[7]=0
Label 3333
Ctrl_Read 5,UP1
If Flt[5]=1,-1,READ_DOWN
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<10,3333,-1
GoTo READ_DOWN



Label RADIO_DOWN
CommandBlock 1
Stream_Fadevol 6,1,0,0

Label CHNGDWNTO_2
If Flt[3]=-1,-1,CHNGDWNTO_1
Let Flt[6]=Flt[2]
GoTo RADIOMINUS

Label CHNGDWNTO_1
If Flt[3]=2,-1,CHNGDWNTO_0
Let Flt[6]=Flt[1]
GoTo RADIOMINUS

Label CHNGDWNTO_0
If Flt[3]=1,-1,RADIOMINUS
Let Flt[6]=Flt[0]

Label RADIOMINUS
Let Flt[3]=Flt[3]-1
If Flt[3]=-1,RADIO_OFF_DOWN,-1
If Flt[3]<-1,-1,CHANGEDDOWN
Let Flt[3]=2
Label CHANGEDDOWN
Stream_Fadevol 6,1,1,1
Label RADIO_OFF_DOWN
CommandBlock 0

Let Flt[7]=0
Label 2222
Ctrl_Read 5,DOWN1
If Flt[5]=1,-1,CHECKPLAY
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<10,2222,-1
GoTo CHECKPLAY

Ver. 2.0
//Radio Script Ver. 2.0 11-10-2020 By KlassenAS
//Четыре радиостанции, по 10 треков на каждой
//Радиостанции переключаются. Также радио можно выключить.
//При старте на каждой радиостанции случайным образом
//начинает играть один из 10 треков.
//По окончании трека, следующий выбирается так же, случайным образом.

Dim_Act 1
Dim_Flt 19
GetActivePlayer 0

//Удалить для использования в scene2.bin,
//Оставить для использования с патчем от GOLOD55
//Начало удаления
Human_GetProperty 0,4,Energy
If Flt[4]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on
//Конец удаления



Let Flt[0]=0 //поток 00
Let Flt[1]=0 //поток 01
Let Flt[2]=0 //поток 02
Let Flt[3]=0 //поток 03
Let Flt[4]=0 //логика
Let Flt[5]=0 //Нажатие клавиш вперёд1 и назад1
Let Flt[6]=0 //Последний активный поток
Let Flt[7]=0 //сиденье/Время с начала игры/текущее время потока/
Let Flt[8]=0 //Прошлое время с начала игры
Let Flt[9]=0 //номер радиостанции 0-3
Let Flt[10]=-1 //рандом для radio/разница во времени игры
Let Flt[11]=-1 //чтоб на radio00 не повторялись дважды
Let Flt[12]=-1 //чтоб на radio01 не повторялись дважды
Let Flt[13]=-1 //чтоб на radio02 не повторялись дважды
Let Flt[14]=-1 //чтоб на radio03 не повторялись дважды
Let Flt[15]=-1 //прошлое время потока 0
Let Flt[16]=-1 //прошлое время потока 1
Let Flt[17]=-1 //прошлое время потока 2
Let Flt[18]=-1 //прошлое время потока 3



CommandBlock 1
Label RADIO00CREATE
Rnd 10,10
If Flt[11]=Flt[10],RADIO00CREATE,-1
Let Flt[11]=Flt[10]

Label TRCK0000
If Flt[10]=0,-1,TRCK0001
Stream_Create 0,"radio\radio 00 - 00.mp3"
GoTo RADIO00CREATED

Label TRCK0001
If Flt[10]=1,-1,TRCK0002
Stream_Create 0,"radio\radio 00 - 01.mp3"
GoTo RADIO00CREATED

Label TRCK0002
If Flt[10]=2,-1,TRCK0003
Stream_Create 0,"radio\radio 00 - 02.mp3"
GoTo RADIO00CREATED

Label TRCK0003
If Flt[10]=3,-1,TRCK0004
Stream_Create 0,"radio\radio 00 - 03.mp3"
GoTo RADIO00CREATED

Label TRCK0004
If Flt[10]=4,-1,TRCK0005
Stream_Create 0,"radio\radio 00 - 04.mp3"
GoTo RADIO00CREATED

Label TRCK0005
If Flt[10]=5,-1,TRCK0006
Stream_Create 0,"radio\radio 00 - 05.mp3"
GoTo RADIO00CREATED

Label TRCK0006
If Flt[10]=6,-1,TRCK0007
Stream_Create 0,"radio\radio 00 - 06.mp3"
GoTo RADIO00CREATED

Label TRCK0007
If Flt[10]=7,-1,TRCK0008
Stream_Create 0,"radio\radio 00 - 07.mp3"
GoTo RADIO00CREATED

Label TRCK0008
If Flt[10]=8,-1,TRCK0009
Stream_Create 0,"radio\radio 00 - 08.mp3"
GoTo RADIO00CREATED

Label TRCK0009
If Flt[10]=9,-1,RADIO00CREATED
Stream_Create 0,"radio\radio 00 - 09.mp3"
GoTo RADIO00CREATED

Label RADIO00CREATED
Stream_Fadevol 0,1,0,0
If Flt[15]>0,REPLAY0,-1



Label RADIO01CREATE
Rnd 10,10
If Flt[12]=Flt[10],RADIO01CREATE,-1
Let Flt[12]=Flt[10]

Label TRCK0100
If Flt[10]=0,-1,TRCK0101
Stream_Create 1,"radio\radio 01 - 00.mp3"
GoTo RADIO01CREATED

Label TRCK0101
If Flt[10]=1,-1,TRCK0102
Stream_Create 1,"radio\radio 01 - 01.mp3"
GoTo RADIO01CREATED

Label TRCK0102
If Flt[10]=2,-1,TRCK0103
Stream_Create 1,"radio\radio 01 - 02.mp3"
GoTo RADIO01CREATED

Label TRCK0103
If Flt[10]=3,-1,TRCK0104
Stream_Create 1,"radio\radio 01 - 03.mp3"
GoTo RADIO01CREATED

Label TRCK0104
If Flt[10]=4,-1,TRCK0105
Stream_Create 1,"radio\radio 01 - 04.mp3"
GoTo RADIO01CREATED

Label TRCK0105
If Flt[10]=5,-1,TRCK0106
Stream_Create 1,"radio\radio 01 - 05.mp3"
GoTo RADIO01CREATED

Label TRCK0106
If Flt[10]=6,-1,TRCK0107
Stream_Create 1,"radio\radio 01 - 06.mp3"
GoTo RADIO01CREATED

Label TRCK0107
If Flt[10]=7,-1,TRCK0108
Stream_Create 1,"radio\radio 01 - 07.mp3"
GoTo RADIO01CREATED

Label TRCK0108
If Flt[10]=8,-1,TRCK0109
Stream_Create 1,"radio\radio 01 - 08.mp3"
GoTo RADIO01CREATED

Label TRCK0109
If Flt[10]=9,-1,RADIO01CREATED
Stream_Create 1,"radio\radio 01 - 09.mp3"
GoTo RADIO01CREATED

Label RADIO01CREATED
Stream_Fadevol 1,1,0,0
If Flt[16]>0,REPLAY1,-1



Label RADIO02CREATE
Rnd 10,10
If Flt[13]=Flt[10],RADIO02CREATE,-1
Let Flt[13]=Flt[10]

Label TRCK0200
If Flt[10]=0,-1,TRCK0201
Stream_Create 2,"radio\radio 02 - 00.mp3"
GoTo RADIO02CREATED

Label TRCK0201
If Flt[10]=1,-1,TRCK0202
Stream_Create 2,"radio\radio 02 - 01.mp3"
GoTo RADIO02CREATED

Label TRCK0202
If Flt[10]=2,-1,TRCK0203
Stream_Create 2,"radio\radio 02 - 02.mp3"
GoTo RADIO02CREATED

Label TRCK0203
If Flt[10]=3,-1,TRCK0204
Stream_Create 2,"radio\radio 02 - 03.mp3"
GoTo RADIO02CREATED

Label TRCK0204
If Flt[10]=4,-1,TRCK0205
Stream_Create 2,"radio\radio 02 - 04.mp3"
GoTo RADIO02CREATED

Label TRCK0205
If Flt[10]=5,-1,TRCK0206
Stream_Create 2,"radio\radio 02 - 05.mp3"
GoTo RADIO02CREATED

Label TRCK0206
If Flt[10]=6,-1,TRCK0207
Stream_Create 2,"radio\radio 02 - 06.mp3"
GoTo RADIO02CREATED

Label TRCK0207
If Flt[10]=7,-1,TRCK0208
Stream_Create 2,"radio\radio 02 - 07.mp3"
GoTo RADIO02CREATED

Label TRCK0208
If Flt[10]=8,-1,TRCK0209
Stream_Create 2,"radio\radio 02 - 08.mp3"
GoTo RADIO02CREATED

Label TRCK0209
If Flt[10]=9,-1,RADIO02CREATED
Stream_Create 2,"radio\radio 02 - 09.mp3"
GoTo RADIO02CREATED

Label RADIO02CREATED
Stream_Fadevol 2,1,0,0
If Flt[17]>0,REPLAY2,-1



Label RADIO03CREATE
Rnd 10,10
If Flt[14]=Flt[10],RADIO03CREATE,-1
Let Flt[14]=Flt[10]

Label TRCK0300
If Flt[10]=0,-1,TRCK0301
Stream_Create 3,"radio\radio 03 - 00.mp3"
GoTo RADIO03CREATED

Label TRCK0301
If Flt[10]=1,-1,TRCK0302
Stream_Create 3,"radio\radio 03 - 01.mp3"
GoTo RADIO03CREATED

Label TRCK0302
If Flt[10]=2,-1,TRCK0303
Stream_Create 3,"radio\radio 03 - 02.mp3"
GoTo RADIO03CREATED

Label TRCK0303
If Flt[10]=3,-1,TRCK0304
Stream_Create 3,"radio\radio 03 - 03.mp3"
GoTo RADIO03CREATED

Label TRCK0304
If Flt[10]=4,-1,TRCK0305
Stream_Create 3,"radio\radio 03 - 04.mp3"
GoTo RADIO03CREATED

Label TRCK0305
If Flt[10]=5,-1,TRCK0306
Stream_Create 3,"radio\radio 03 - 05.mp3"
GoTo RADIO03CREATED

Label TRCK0306
If Flt[10]=6,-1,TRCK0307
Stream_Create 3,"radio\radio 03 - 06.mp3"
GoTo RADIO03CREATED

Label TRCK0307
If Flt[10]=7,-1,TRCK0308
Stream_Create 3,"radio\radio 03 - 07.mp3"
GoTo RADIO03CREATED

Label TRCK0308
If Flt[10]=8,-1,TRCK0309
Stream_Create 3,"radio\radio 03 - 08.mp3"
GoTo RADIO03CREATED

Label TRCK0309
If Flt[10]=9,-1,RADIO03CREATED
Stream_Create 3,"radio\radio 03 - 09.mp3"
GoTo RADIO03CREATED

Label RADIO03CREATED
Stream_Fadevol 3,1,0,0
If Flt[18]>0,REPLAY3,-1

Let Flt[6]=Flt[0]
CommandBlock 0



Label CHECK
CommandBlock 1
GoTo POSITION
Label CHECK_IN_CAR
CommandBlock 0
Human_GetSeatIdx 0,7
If Flt[7]=-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
If Flt[4]=0,-,CHECK
CityMusic_Off
Let Flt[4]=1
Wait 500
CommandBlock 1
If Flt[9]>-1,-1,RADIO_OFF
Stream_FadeVol 0,1,0,0
Stream_Play 0
Stream_FadeVol 1,1,0,0
Stream_Play 1
Stream_FadeVol 2,1,0,0
Stream_Play 2
Stream_FadeVol 3,1,0,0
Stream_Play 3
Stream_FadeVol 6,1,1,1
Label RADIO_OFF
CommandBlock 0

GoTo CHECK



Label CAR_OUT
If Flt[4]=1,-1,CHECK
Stream_Fadevol 6,1,0,0
Stream_Pause 0
Stream_Pause 1
Stream_Pause 2
Stream_Pause 3
Let Flt[4]=0
CityMusic_On
GoTo CHECK



Label RADIO_UP
CommandBlock 1
Stream_Fadevol 6,1,0,0

Label CHNGUPTO_1
If Flt[9]=0,-1,CHNGUPTO_2
Let Flt[6]=Flt[1]
GoTo RADIOPLUS

Label CHNGUPTO_2
If Flt[9]=1,-1,CHNGUPTO_3
Let Flt[6]=Flt[2]
GoTo RADIOPLUS

Label CHNGUPTO_3
If Flt[9]=2,-1,CHNGUPTO_0
Let Flt[6]=Flt[3]
GoTo RADIOPLUS

Label CHNGUPTO_0
If Flt[9]=3,-1,RADIOPLUS
Let Flt[6]=Flt[0]

Label RADIOPLUS
Let Flt[9]=Flt[9]+1
If Flt[9]>3,-1,CHANGEDUP
Let Flt[9]=-1
GoTo RADIO_OFF_UP
Label CHANGEDUP
Stream_Fadevol 6,1,1,1
Label RADIO_OFF_UP
CommandBlock 0

Let Flt[7]=0
Label 3333
Ctrl_Read 5,UP1
If Flt[5]=1,-1,READ_DOWN
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<10,3333,-1
GoTo READ_DOWN



Label RADIO_DOWN
CommandBlock 1
Stream_Fadevol 6,1,0,0

Label CHNGDWNTO_3
If Flt[9]=-1,-1,CHNGDWNTO_2
Let Flt[6]=Flt[3]
GoTo RADIOMINUS

Label CHNGDWNTO_2
If Flt[9]=3,-1,CHNGDWNTO_1
Let Flt[6]=Flt[2]
GoTo RADIOMINUS

Label CHNGDWNTO_1
If Flt[9]=2,-1,CHNGDWNTO_0
Let Flt[6]=Flt[1]
GoTo RADIOMINUS

Label CHNGDWNTO_0
If Flt[9]=1,-1,RADIOMINUS
Let Flt[6]=Flt[0]

Label RADIOMINUS
Let Flt[9]=Flt[9]-1
If Flt[9]=-1,RADIO_OFF_DOWN,-1
If Flt[9]<-1,-1,CHANGEDDOWN
Let Flt[9]=3
Label CHANGEDDOWN
Stream_Fadevol 6,1,1,1
Label RADIO_OFF_DOWN
CommandBlock 0

Let Flt[7]=0
Label 2222
Ctrl_Read 5,DOWN1
If Flt[5]=1,-1,CHECKPLAY
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<10,2222,-1
GoTo CHECKPLAY



Label POSITION
If Flt[4]=0,CHECK_IN_CAR,-1
GetGameTime 7
Let Flt[10]=Flt[7]-Flt[8]
If Flt[10]<1000,CHECK_IN_CAR,-1
Let Flt[8]=Flt[7]

Label GETPOS0
Stream_GetPos 0,7
If Flt[7]=Flt[15],RADIO0END,-1
Let Flt[15]=Flt[7]
GoTo GETPOS1
Label RADIO0END
Stream_Fadevol 0,1,0,0
Stream_Pause 0
Stream_Destroy 0
GoTo RADIO00CREATE
Label REPLAY0
Stream_Play 0
Let Flt[15]=-1
If Flt[9]=0,-1,GETPOS1
Let Flt[6]=Flt[0]
Stream_Fadevol 0,1,1,1

Label GETPOS1
Stream_GetPos 1,7
If Flt[7]=Flt[16],RADIO1END,-1
Let Flt[16]=Flt[7]
GoTo GETPOS2
Label RADIO1END
Stream_Fadevol 1,1,0,0
Stream_Pause 1
Stream_Destroy 1
GoTo RADIO01CREATE
Label REPLAY1
Stream_Play 1
Let Flt[16]=-1
If Flt[9]=1,-1,GETPOS2
Let Flt[6]=Flt[1]
Stream_Fadevol 1,1,1,1

Label GETPOS2
Stream_GetPos 2,7
If Flt[7]=Flt[17],RADIO2END,-1
Let Flt[17]=Flt[7]
GoTo GETPOS3
Label RADIO2END
Stream_Fadevol 2,1,0,0
Stream_Pause 2
Stream_Destroy 2
GoTo RADIO02CREATE
Label REPLAY2
Stream_Play 2
Let Flt[17]=-1
If Flt[9]=2,-1,GETPOS3
Let Flt[6]=Flt[2]
Stream_Fadevol 2,1,1,1

Label GETPOS3
Stream_GetPos 3,7
If Flt[7]=Flt[18],RADIO3END,-1
Let Flt[18]=Flt[7]
GoTo CHECK_IN_CAR
Label RADIO3END
Stream_Fadevol 3,1,0,0
Stream_Pause 3
Stream_Destroy 3
GoTo RADIO03CREATE
Label REPLAY3
Stream_Play 3
Let Flt[18]=-1
If Flt[9]=3,-1,CHECK_IN_CAR
Let Flt[6]=Flt[3]
Stream_Fadevol 3,1,1,1

GoTo CHECK_IN_CAR

Единственное, что меня сейчас смущает: при выходе из машины, когда треки ставятся на паузу, не всегда срабатывает команда CityMusic_On.
Причём, чаще не срабатывает.
Хз, почему. В логике скрипта ошибки нет. Все потоки ставятся на паузу.
Капризничает )
Если кто знает, как с этим быть, расскажите, пожалуйста.

Осталось дело за малым.
Ту версию, что рассчитана на 4 станции по 10 треков, адаптировать для реализации идеи, которую предложил Abradox.

Да, кстати, Firefox3860, я нашёл прямые ссылки на mp3 десяти радиостанций, транслирующих джаз и блюз.
Самое то для "Мафии".
Но все они намертво вешают игру.
В игре нормально аботает только та ссылка на джойрадио, которую ты мне скинул.
Не знаешь, почему?

grandshot
11.10.2020, 18:11
Предположу, что формат вещания другой, не поддерживаемый движком из 2001-го

Firefox3860
11.10.2020, 18:30
KlassenAS, Круто ты постарался, далеко не каждый смог бы такое на mafiascript'е сделать :)

Единственное, что меня сейчас смущает: при выходе из машины, когда треки ставятся на паузу, не всегда срабатывает команда CityMusic_On.
Причём, чаще не срабатывает.Я так думаю, что она срабатывает, но музыка не включается сразу потому, что в этот момент игрок находится за пределами области города, в которой включается определённая citymusic. Такое бывает, надо поперемещаться по городу, и тогда она должна заиграть.

Да, кстати, Firefox3860, я нашёл прямые ссылки на mp3 десяти радиостанций, транслирующих джаз и блюз.
Самое то для "Мафии".
Но все они намертво вешают игру.
В игре нормально аботает только та ссылка на джойрадио, которую ты мне скинул.
Не знаешь, почему?Все сразу или по отдельности? Та ссылка, что я кинул, тоже вешает, но не надолго. Я думал, что в это время игра пытается подключиться к сайту через интернет и начать прогрузку. Возможно, в случаях с другими ссылками она не может сделать подключение или действительно с форматом у них что-то не то.

KlassenAS
11.10.2020, 20:14
Ядрёна вошь! Опять этот баг после сохранения появился!
Почему до этого весь день не было?!
Вообще не понимаю, что происходит.
Реально, что-ли, при каждом выходе из машины все потоки уничтожать надо?
И что это будет?
Каждый раз, как садишься в машину, всё заново?

Я так думаю, что она срабатывает, но музыка не включается сразу потому, что в этот момент игрок находится за пределами области города, в которой включается определённая citymusic. Такое бывает, надо поперемещаться по городу, и тогда она должна заиграть.
Ну так я-то не за пределами города, я возде бара Сальери.

Все сразу или по отдельности?
По отдельности. Достаточно одной.

Abradox, родную мафиозную музыку я в скрипт вписал. Первая радиостанция будет.
Какие планы у нас дальше?

UPD: Поздравьте меня, друзья, я идиот!
Я же сам использовал команды Stream_GetPos и Stream_SetPos для определения окончания трека и для его перезапуска, если нужно.
Я же могу, при выходе из машины, запоминать позицию каждого потока, уничтожать потоки, а при возвращении в машину всё восстанавливать!
Похоже, мне предстоит снова хорошенько перелопатить все версии скрипта...

GOLOD55
11.10.2020, 23:53
точно лол, ж есть стрим_сетпос:)
помнится, в музтомате я замутил ею прикол: если один и тот же трек выбирать слушать, то "игла граммафона" начинала иной раз перескакивать "дорожки":)

KlassenAS
12.10.2020, 10:18
Ну вот! Наконец-то!
И команда CityMusic_On нормально работать стала, и сетлупить можно спокойно, не прибегая к изощрённым способам определения длительности, когда это не нужно.

Ver. 1.0
Kaiser, проверяй, теперь у тебя вообще не должно быть проблем с использованием скрипта.
//Radio Script Ver. 1.0 12-10-2020 By KlassenAS For Kaiser
//Одна радиостанция с одним треком.
//Поле окончания трек сбрасывается на начало.
//Этот скрипт хорош, если у Вас файл с длиннющей записью реального либо фейкового радиоэфира.
Dim_Act 2
Dim_Flt 8
GetActivePlayer 0
FindActor 1, "fire"


//Удалить для использования в scene2.bin
//Оставить для использования с патчем от GOLOD55
//Начало удаления
Human_GetProperty 0,0,Energy
If Flt[0]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on
//Конец удаления

Let Flt[0]=0 //поток 00
Let Flt[1]=0 //логика
Let Flt[2]=-1 //сиденье/Время с начала игры/
Let Flt[3]=0 //Прошлое время с начала игры
Let Flt[4]=-1 //разница во времени игры
Let Flt[5]=-1 //прошлое время потока
Let Flt[7]=0 //текущее время потока


Label CHECK
CompareOwnerWithEx 0,1,CAR_IN,CAR_OUT
//Human_GetSeatIdx 0,2
//If Flt[2]=-1,CAR_OUT,CAR_IN

Label CAR_IN
If Flt[1]=0,-,CHECK
CityMusic_Off
Wait 500
CommandBlock 1
Stream_Create 0,"sounds\music\fireradio.ogg"
Stream_SetLoop 0,1
Stream_FadeVol 0,1,0,0
Stream_SetPos 0,7
Stream_Play 0
Stream_FadeVol 0,1,1,1
Let Flt[1]=1
CommandBlock 0
GoTo CHECK

Label CAR_OUT
If Flt[1]=1,-1,CHECK
Stream_GetPos 0,7
Stream_FadeVol 0,1,0,0
Stream_Pause 0
Stream_Destroy 0
CityMusic_On
Let Flt[1]=0
GoTo CHECK
Позже обновлю остальные версии скрипта.

Abradox
12.10.2020, 12:38
Abradox, родную мафиозную музыку я в скрипт вписал. Первая радиостанция будет.
Какие планы у нас дальше?Я думаю, что нужно добавить радиостанции с музыкой из ремейка Мафии.

Kaiser
12.10.2020, 19:58
2 KlassenAS

Спасибо, ты мозг! Давай М4 сделаем))

Firefox3860
12.10.2020, 20:10
KlassenAS, Что, терперь вообще без багов? Не включется само при загрузке? Но теперь получается, что когда ты не в машине, радио останавливает эфир, так?

Я думаю, что нужно добавить радиостанции с музыкой из ремейка Мафии.Я достал из М1DE файлы музыки на радио (скачал выдернутую из стима невзломанную игру, она не запускается, но файлы на месте). Могу отобрать оттуда записи и распределить их по 3-м оставшимся станциям. Или по по 2-м, чтобы одну станцию оставить для какой-то другой музыки, как лучше? Займусь, когда время будет.

Давай М4 сделаем))хехе, "сделаем" )))

Abradox
12.10.2020, 23:21
Я достал из М1DE файлы музыки на радио (скачал выдернутую из стима невзломанную игру, она не запускается, но файлы на месте). Могу отобрать оттуда записи и распределить их по 3-м оставшимся станциям. Или по по 2-м, чтобы одну станцию оставить для какой-то другой музыки, как лучше? Займусь, когда время будет.Сколько радиостанций в M1DE? Делай их столько же сколько их там. Оставшуюся радиостанцию забьем другой музыкой того времени.

KlassenAS
13.10.2020, 09:47
2 KlassenAS

Спасибо, ты мозг! Давай М4 сделаем))
Сколько там стоит купить права на франшизу?
Ты ведь имел в виду игру, а не карабин М4? :D
Сколько радиостанций в M1DE? Делай их столько же сколько их там. Оставшуюся радиостанцию забьем другой музыкой того времени.
Когда скрипт будет полностью отлажен, нет проблем масштабировать его под любое количество радиостанций.
Не обязательно забивать все 4 станции, можно урезать до 3 или расширить до 1024 )
Правда, я пока успел переделать только версию 1.0, 1.1 и 1.2
Так же, нашёл мелкую ошибку в переключении радиостанций, исправил.
С версией 4х10 дела обстоят сложнее, там нюансов больше, ещё не закончил переделку скрипта.
Для личного пользования потом думаю себе сделать версию, в которой будет музыка из оригинала, радио из ремейка, из мафии2, из мафии3, пара кастомных плейлистов с рок-н-роллом типа AC/DC, и ссылочка на реальное "джойрадио".
KlassenAS, Что, теперь вообще без багов? Не включится само при загрузке? Но теперь получается, что когда ты не в машине, радио останавливает эфир, так?
Да, благодаря запоминанию времени трека получается, как будто поставили на паузу.
Вообще, если бы была функция, позволяющая узнать продолжительность трека, можно было бы заморочиться, и реализовать пропуск части радиоэфира, пока находишься не в машине, засекать время вне машины и перематывать на это время трек, если нужно, переключать на следующий и перематывать остаток и всё в таком роде.
Но такой функции нет )

Abradox
13.10.2020, 12:38
Мне хотелось бы так: музыка из Мафии, радиостанции из M1DE, папка куда можно кидать свои свою музыку.
Есть возможность кинуть в папку свою музыку и ничего никуда не прописывать вручную?

Firefox3860
13.10.2020, 13:15
Сколько радиостанций в M1DE? Делай их столько же сколько их там.Не знаю, все записи свалены в одну кучу. Там много записей с разговорами, если их убрать, то музыки на 2 станции должно хватить. Тогда как раз одна свободная останется.
Есть возможность кинуть в папку свою музыку и ничего никуда не прописывать вручную?Да, но имена у файлов придётся изменить под заданные скриптом.

Abradox
13.10.2020, 13:35
это проще, чем прописывать в скрипте названия музыки.

KlassenAS
13.10.2020, 14:29
Итак, товарищи радиолюбители!
Принимайте обновлённые версии скриптов:

Ver. 1.1 Аналог скрипта для Kaiser но с тремя радиостанциями.
//Radio Script Ver. 1.1 13-10-2020 By KlassenAS
//Три радиостанции, на каждой один трек.
//Радиостанции переключаются. Также радио можно выключить.
//Поле окончания трек сбрасывается на начало.
//Этот скрипт хорош, если у Вас файл с длиннющей записью реального либо фейкового радиоэфира.
Dim_Act 1
Dim_Flt 13
GetActivePlayer 0

//Удалить для использования в scene2.bin,
//Оставить для использования с патчем от GOLOD55
//Начало удаления
Human_GetProperty 0,4,Energy
If Flt[4]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on
//Конец удаления


Let Flt[0]=0 //поток 00
Let Flt[1]=0 //поток 01
Let Flt[2]=0 //поток 02
Let Flt[3]=0 //номер радиостанции 0-2
Let Flt[4]=0 //логика
Let Flt[5]=0 //Нажатие клавиш вперёд1 и назад1
Let Flt[6]=0 //Последний активный поток
Let Flt[7]=0 //сиденье
Let Flt[8]=0
Let Flt[9]=0
Let Flt[10]=0 //время потока 0
Let Flt[11]=0 //время потока 1
Let Flt[12]=0 //время потока 2



Label CHECK
Human_GetSeatIdx 0,7
If Flt[7]=-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
If Flt[4]=0,-,CHECK
CityMusic_Off
Wait 500
CommandBlock 1

Label RADIO00CREATE
Stream_Create 0,"radio\radio00.mp3"
Stream_SetLoop 0,1
Stream_Fadevol 0,1,0,0
Stream_SetPos 0,10
Stream_Play 0
If Flt[3]=0,-1,RADIO00CREATED
Let Flt[6]=Flt[0]
Label RADIO00CREATED

Label RADIO01CREATE
Stream_Create 1,"radio\radio01.mp3"
Stream_SetLoop 1,1
Stream_Fadevol 1,1,0,0
Stream_SetPos 1,11
Stream_Play 1
If Flt[3]=1,-1,RADIO01CREATED
Let Flt[6]=Flt[1]
Label RADIO01CREATED

Label RADIO02CREATE
Stream_Create 2,"radio\radio02.mp3"
Stream_SetLoop 2,1
Stream_Fadevol 2,1,0,0
Stream_SetPos 2,12
Stream_Play 2
If Flt[3]=2,-1,RADIO02CREATED
Let Flt[6]=Flt[2]
Label RADIO02CREATED

If Flt[3]>-1,-1,RADIO_OFF
Stream_Fadevol 6,1,1,1
Label RADIO_OFF
Let Flt[4]=1
CommandBlock 0
GoTo CHECK



Label CAR_OUT
If Flt[4]=1,-1,CHECK
CommandBlock 1

Stream_GetPos 0,10
Stream_Fadevol 0,1,0,0
Stream_Pause 0
Stream_Destroy 0

Stream_GetPos 1,11
Stream_Fadevol 1,1,0,0
Stream_Pause 1
Stream_Destroy 1

Stream_GetPos 2,12
Stream_Fadevol 2,1,0,0
Stream_Pause 2
Stream_Destroy 2

Let Flt[4]=0
CityMusic_On
CommandBlock 0
GoTo CHECK



Label RADIO_UP
CommandBlock 1
Stream_Fadevol 6,1,0,0

Label CHNGUPTO_0
If Flt[3]=-1,-1,CHNGUPTO_1
Let Flt[6]=Flt[0]

Label CHNGUPTO_1
If Flt[3]=0,-1,CHNGUPTO_2
Let Flt[6]=Flt[1]
GoTo RADIOPLUS

Label CHNGUPTO_2
If Flt[3]=1,-1,RADIOPLUS
Let Flt[6]=Flt[2]

Label RADIOPLUS
Let Flt[3]=Flt[3]+1
If Flt[3]>2,-1,CHANGEDUP
Let Flt[3]=-1
GoTo RADIO_OFF_UP
Label CHANGEDUP
Stream_Fadevol 6,1,1,1
Label RADIO_OFF_UP
CommandBlock 0

Let Flt[7]=0
Label 3333
Ctrl_Read 5,UP1
If Flt[5]=1,-1,READ_DOWN
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<10,3333,-1
GoTo READ_DOWN



Label RADIO_DOWN
CommandBlock 1
Stream_Fadevol 6,1,0,0

Label CHNGDWNTO_2
If Flt[3]=-1,-1,CHNGDWNTO_1
Let Flt[6]=Flt[2]
GoTo RADIOMINUS

Label CHNGDWNTO_1
If Flt[3]=2,-1,CHNGDWNTO_0
Let Flt[6]=Flt[1]
GoTo RADIOMINUS

Label CHNGDWNTO_0
If Flt[3]=1,-1,RADIOMINUS
Let Flt[6]=Flt[0]

Label RADIOMINUS
Let Flt[3]=Flt[3]-1
If Flt[3]=-1,RADIO_OFF_DOWN,-1
If Flt[3]<-1,-1,CHANGEDDOWN
Let Flt[3]=2
Label CHANGEDDOWN
Stream_Fadevol 6,1,1,1
Label RADIO_OFF_DOWN
CommandBlock 0

Let Flt[7]=0
Label 2222
Ctrl_Read 5,DOWN1
If Flt[5]=1,-1,CHECKPLAY
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<10,2222,-1
GoTo CHECKPLAY

Ver. 1.2 Для реальных радиостанций.
Здесь лишь исправил ошибку с переключением.
//Radio Script Ver. 1.2 13-10-2020 By KlassenAS
//Три радиостанции, каждой можно присвоить ссылку на поток реального интернет-радио.
//При старте миссии игра зависнет нанесколько секунд
//Это нормально, т. к. игра лезет в интернет, чтобы загрузить аудиопоток.
//Радиостанции переключаются. Также радио можно выключить.
Dim_Act 1
Dim_Flt 8
GetActivePlayer 0

//Удалить для использования в scene2.bin,
//Оставить для использования с патчем от GOLOD55
//Начало удаления
Human_GetProperty 0,4,Energy
If Flt[4]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on
//Конец удаления


Let Flt[0]=0 //поток 00
Let Flt[1]=0 //поток 01
Let Flt[2]=0 //поток 02
Let Flt[3]=0 //номер радиостанции 0-2
Let Flt[4]=0 //логика
Let Flt[5]=0 //Нажатие клавиш вперёд1 и назад1
Let Flt[6]=0 //Последний активный поток
Let Flt[7]=0 //сиденье



Stream_Create 0,"http://airtime.joyradio.cc:8000/airtime_192.mp3"
Stream_Fadevol 0,1,0,0

Stream_Create 1,"radio\radio01.mp3"
Stream_Fadevol 1,1,0,0

Stream_Create 2,"radio\radio02.mp3"
Stream_Fadevol 2,1,0,0

Let Flt[6]=Flt[0]



Label CHECK
Human_GetSeatIdx 0,7
If Flt[7]=-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
If Flt[4]=0,-,CHECK
CityMusic_Off
Let Flt[4]=1
Wait 500
CommandBlock 1
If Flt[3]>-1,-1,RADIO_OFF
Stream_Fadevol 0,1,0,0
Stream_Play 0
Stream_Fadevol 1,1,0,0
Stream_Play 1
Stream_Fadevol 2,1,0,0
Stream_Play 2
Stream_Fadevol 6,1,1,1
Label RADIO_OFF
CommandBlock 0
GoTo CHECK



Label CAR_OUT
If Flt[4]=1,-1,CHECK
Stream_Fadevol 6,1,0,0
Stream_Pause 0
Stream_Pause 1
Stream_Pause 2
Let Flt[4]=0
CityMusic_On
GoTo CHECK



Label RADIO_UP
CommandBlock 1
Stream_Fadevol 6,1,0,0

Label CHNGUPTO_0
If Flt[3]=-1,-1,CHNGUPTO_1
Let Flt[6]=Flt[0]

Label CHNGUPTO_1
If Flt[3]=0,-1,CHNGUPTO_2
Let Flt[6]=Flt[1]
GoTo RADIOPLUS

Label CHNGUPTO_2
If Flt[3]=1,-1,RADIOPLUS
Let Flt[6]=Flt[2]

Label RADIOPLUS
Let Flt[3]=Flt[3]+1
If Flt[3]>2,-1,CHANGEDUP
Let Flt[3]=-1
GoTo RADIO_OFF_UP
Label CHANGEDUP
Stream_Fadevol 6,1,1,1
Label RADIO_OFF_UP
CommandBlock 0

Let Flt[7]=0
Label 3333
Ctrl_Read 5,UP1
If Flt[5]=1,-1,READ_DOWN
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<10,3333,-1
GoTo READ_DOWN



Label RADIO_DOWN
CommandBlock 1
Stream_Fadevol 6,1,0,0

Label CHNGDWNTO_2
If Flt[3]=-1,-1,CHNGDWNTO_1
Let Flt[6]=Flt[2]
GoTo RADIOMINUS

Label CHNGDWNTO_1
If Flt[3]=2,-1,CHNGDWNTO_0
Let Flt[6]=Flt[1]
GoTo RADIOMINUS

Label CHNGDWNTO_0
If Flt[3]=1,-1,RADIOMINUS
Let Flt[6]=Flt[0]

Label RADIOMINUS
Let Flt[3]=Flt[3]-1
If Flt[3]=-1,RADIO_OFF_DOWN,-1
If Flt[3]<-1,-1,CHANGEDDOWN
Let Flt[3]=2
Label CHANGEDDOWN
Stream_Fadevol 6,1,1,1
Label RADIO_OFF_DOWN
CommandBlock 0

Let Flt[7]=0
Label 2222
Ctrl_Read 5,DOWN1
If Flt[5]=1,-1,CHECKPLAY
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<10,2222,-1
GoTo CHECKPLAY

Ver. 2.0
Она же 4х10.
Пришлось хорошенько перелопатить, чтобы запоминание/восстановление позиций потоков и номеров треков не конфликтовало с отслеживанием окончания трека и рандомизацией воспроизведения.
//Radio Script Ver. 2.0 13-10-2020 By KlassenAS
//Четыре радиостанции, по 10 треков на каждой
//Радиостанции переключаются. Также радио можно выключить.
//При старте на каждой радиостанции случайным образом
//начинает играть один из 10 треков.
//По окончании трека, следующий выбирается так же, случайным образом.

Dim_Act 1
Dim_Flt 20
GetActivePlayer 0

//Удалить для использования в scene2.bin,
//Оставить для использования с патчем от GOLOD55
//Начало удаления
Human_GetProperty 0,4,Energy
If Flt[4]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on
//Конец удаления



Let Flt[0]=0 //поток 00
Let Flt[1]=0 //поток 01
Let Flt[2]=0 //поток 02
Let Flt[3]=0 //поток 03
Let Flt[4]=0 //логика
Let Flt[5]=0 //Нажатие клавиш вперёд1 и назад1
Let Flt[6]=0 //Последний активный поток
Let Flt[7]=0 //сиденье/Время с начала игры/текущее время потока/
Let Flt[8]=0 //Прошлое время с начала игры
Let Flt[9]=0 //номер радиостанции 0-3
Let Flt[10]=-1 //рандом для radio/разница во времени игры
Let Flt[11]=-1 //трек на radio00
Let Flt[12]=-1 //трек на radio01
Let Flt[13]=-1 //трек на radio02
Let Flt[14]=-1 //трек на radio03
Let Flt[15]=0 //прошлое время потока 0
Let Flt[16]=0 //прошлое время потока 1
Let Flt[17]=0 //прошлое время потока 2
Let Flt[18]=0 //прошлое время потока 3
Let Flt[19]=0 //для перехода на следующий трек

Rnd 11,10
Rnd 12,10
Rnd 13,10
Rnd 14,10

GoTo CHECK



Label RADIOCREATE

Label RADIO00CREATE
CommandBlock 1

Label TRCK0000
If Flt[11]=0,-1,TRCK0001
Stream_Create 0,"radio\radio 00 - 00.mp3"
GoTo RADIO00CREATED

Label TRCK0001
If Flt[11]=1,-1,TRCK0002
Stream_Create 0,"radio\radio 00 - 01.mp3"
GoTo RADIO00CREATED

Label TRCK0002
If Flt[11]=2,-1,TRCK0003
Stream_Create 0,"radio\radio 00 - 02.mp3"
GoTo RADIO00CREATED

Label TRCK0003
If Flt[11]=3,-1,TRCK0004
Stream_Create 0,"radio\radio 00 - 03.mp3"
GoTo RADIO00CREATED

Label TRCK0004
If Flt[11]=4,-1,TRCK0005
Stream_Create 0,"radio\radio 00 - 04.mp3"
GoTo RADIO00CREATED

Label TRCK0005
If Flt[11]=5,-1,TRCK0006
Stream_Create 0,"radio\radio 00 - 05.mp3"
GoTo RADIO00CREATED

Label TRCK0006
If Flt[11]=6,-1,TRCK0007
Stream_Create 0,"radio\radio 00 - 06.mp3"
GoTo RADIO00CREATED

Label TRCK0007
If Flt[11]=7,-1,TRCK0008
Stream_Create 0,"radio\radio 00 - 07.mp3"
GoTo RADIO00CREATED

Label TRCK0008
If Flt[11]=8,-1,TRCK0009
Stream_Create 0,"radio\radio 00 - 08.mp3"
GoTo RADIO00CREATED

Label TRCK0009
If Flt[11]=9,-1,RADIO00CREATED
Stream_Create 0,"radio\radio 00 - 09.mp3"
GoTo RADIO00CREATED

Label RADIO00CREATED
Stream_SetPos 0,15
CommandBlock 0
If Flt[9]=0,-1,ISREPLAY0
Let Flt[6]=Flt[0]
Label ISREPLAY0
If Flt[19]=1,REPLAY0,-1


Label RADIO01CREATE
CommandBlock 1

Label TRCK0100
If Flt[12]=0,-1,TRCK0101
Stream_Create 1,"radio\radio 01 - 00.mp3"
GoTo RADIO01CREATED

Label TRCK0101
If Flt[12]=1,-1,TRCK0102
Stream_Create 1,"radio\radio 01 - 01.mp3"
GoTo RADIO01CREATED

Label TRCK0102
If Flt[12]=2,-1,TRCK0103
Stream_Create 1,"radio\radio 01 - 02.mp3"
GoTo RADIO01CREATED

Label TRCK0103
If Flt[12]=3,-1,TRCK0104
Stream_Create 1,"radio\radio 01 - 03.mp3"
GoTo RADIO01CREATED

Label TRCK0104
If Flt[12]=4,-1,TRCK0105
Stream_Create 1,"radio\radio 01 - 04.mp3"
GoTo RADIO01CREATED

Label TRCK0105
If Flt[12]=5,-1,TRCK0106
Stream_Create 1,"radio\radio 01 - 05.mp3"
GoTo RADIO01CREATED

Label TRCK0106
If Flt[12]=6,-1,TRCK0107
Stream_Create 1,"radio\radio 01 - 06.mp3"
GoTo RADIO01CREATED

Label TRCK0107
If Flt[12]=7,-1,TRCK0108
Stream_Create 1,"radio\radio 01 - 07.mp3"
GoTo RADIO01CREATED

Label TRCK0108
If Flt[12]=8,-1,TRCK0109
Stream_Create 1,"radio\radio 01 - 08.mp3"
GoTo RADIO01CREATED

Label TRCK0109
If Flt[12]=9,-1,RADIO01CREATED
Stream_Create 1,"radio\radio 01 - 09.mp3"
GoTo RADIO01CREATED

Label RADIO01CREATED
Stream_SetPos 1,16
CommandBlock 0
If Flt[9]=1,-1,ISREPLAY1
Let Flt[6]=Flt[1]
Label ISREPLAY1
If Flt[19]=1,REPLAY1,-1


Label RADIO02CREATE
CommandBlock 1

Label TRCK0200
If Flt[13]=0,-1,TRCK0201
Stream_Create 2,"radio\radio 02 - 00.mp3"
GoTo RADIO02CREATED

Label TRCK0201
If Flt[13]=1,-1,TRCK0202
Stream_Create 2,"radio\radio 02 - 01.mp3"
GoTo RADIO02CREATED

Label TRCK0202
If Flt[13]=2,-1,TRCK0203
Stream_Create 2,"radio\radio 02 - 02.mp3"
GoTo RADIO02CREATED

Label TRCK0203
If Flt[13]=3,-1,TRCK0204
Stream_Create 2,"radio\radio 02 - 03.mp3"
GoTo RADIO02CREATED

Label TRCK0204
If Flt[13]=4,-1,TRCK0205
Stream_Create 2,"radio\radio 02 - 04.mp3"
GoTo RADIO02CREATED

Label TRCK0205
If Flt[13]=5,-1,TRCK0206
Stream_Create 2,"radio\radio 02 - 05.mp3"
GoTo RADIO02CREATED

Label TRCK0206
If Flt[13]=6,-1,TRCK0207
Stream_Create 2,"radio\radio 02 - 06.mp3"
GoTo RADIO02CREATED

Label TRCK0207
If Flt[13]=7,-1,TRCK0208
Stream_Create 2,"radio\radio 02 - 07.mp3"
GoTo RADIO02CREATED

Label TRCK0208
If Flt[13]=8,-1,TRCK0209
Stream_Create 2,"radio\radio 02 - 08.mp3"
GoTo RADIO02CREATED

Label TRCK0209
If Flt[13]=9,-1,RADIO02CREATED
Stream_Create 2,"radio\radio 02 - 09.mp3"
GoTo RADIO02CREATED

Label RADIO02CREATED
Stream_SetPos 2,17
CommandBlock 0
If Flt[9]=2,-1,ISREPLAY2
Let Flt[6]=Flt[2]
Label ISREPLAY2
If Flt[19]=1,REPLAY2,-1


Label RADIO03CREATE
CommandBlock 1
Label TRCK0300
If Flt[14]=0,-1,TRCK0301
Stream_Create 3,"radio\radio 03 - 00.mp3"
GoTo RADIO03CREATED

Label TRCK0301
If Flt[14]=1,-1,TRCK0302
Stream_Create 3,"radio\radio 03 - 01.mp3"
GoTo RADIO03CREATED

Label TRCK0302
If Flt[14]=2,-1,TRCK0303
Stream_Create 3,"radio\radio 03 - 02.mp3"
GoTo RADIO03CREATED

Label TRCK0303
If Flt[14]=3,-1,TRCK0304
Stream_Create 3,"radio\radio 03 - 03.mp3"
GoTo RADIO03CREATED

Label TRCK0304
If Flt[14]=4,-1,TRCK0305
Stream_Create 3,"radio\radio 03 - 04.mp3"
GoTo RADIO03CREATED

Label TRCK0305
If Flt[14]=5,-1,TRCK0306
Stream_Create 3,"radio\radio 03 - 05.mp3"
GoTo RADIO03CREATED

Label TRCK0306
If Flt[14]=6,-1,TRCK0307
Stream_Create 3,"radio\radio 03 - 06.mp3"
GoTo RADIO03CREATED

Label TRCK0307
If Flt[14]=7,-1,TRCK0308
Stream_Create 3,"radio\radio 03 - 07.mp3"
GoTo RADIO03CREATED

Label TRCK0308
If Flt[14]=8,-1,TRCK0309
Stream_Create 3,"radio\radio 03 - 08.mp3"
GoTo RADIO03CREATED

Label TRCK0309
If Flt[14]=9,-1,RADIO03CREATED
Stream_Create 3,"radio\radio 03 - 09.mp3"
GoTo RADIO03CREATED

Label RADIO03CREATED
Stream_SetPos 3,18
CommandBlock 0
If Flt[9]=3,-1,ISREPLAY3
Let Flt[6]=Flt[3]
Label ISREPLAY3
If Flt[19]=1,REPLAY3,-1

GoTo RADIOCREATED



Label CHECK
CommandBlock 1
GoTo POSITION
Label CHECK_IN_CAR
CommandBlock 0
Human_GetSeatIdx 0,7
If Flt[7]=-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
If Flt[4]=0,-,CHECK
CityMusic_Off
Wait 500
GoTo RADIOCREATE
Label RADIOCREATED
CommandBlock 1
Stream_Fadevol 0,1,0,0
Stream_Play 0
Stream_Fadevol 1,1,0,0
Stream_Play 1
Stream_Fadevol 2,1,0,0
Stream_Play 2
Stream_Fadevol 3,1,0,0
Stream_Play 3
If Flt[9]>-1,-1,RADIO_OFF
Stream_FadeVol 6,1,1,1
Label RADIO_OFF
Let Flt[4]=1
CommandBlock 0
GoTo CHECK



Label CAR_OUT
If Flt[4]=1,-1,CHECK
CommandBlock 1

Stream_GetPos 0,15
Stream_Fadevol 0,1,0,0
Stream_Pause 0
Stream_Destroy 0

Stream_GetPos 1,16
Stream_Fadevol 1,1,0,0
Stream_Pause 1
Stream_Destroy 1

Stream_GetPos 2,17
Stream_Fadevol 2,1,0,0
Stream_Pause 2
Stream_Destroy 2

Stream_GetPos 3,18
Stream_Fadevol 3,1,0,0
Stream_Pause 3
Stream_Destroy 3

Let Flt[4]=0
CityMusic_On
CommandBlock 0
GoTo CHECK



Label RADIO_UP
CommandBlock 1
Stream_Fadevol 6,1,0,0

Label CHNGUPTO_0
If Flt[9]=-1,-1,CHNGUPTO_1
Let Flt[6]=Flt[0]

Label CHNGUPTO_1
If Flt[9]=0,-1,CHNGUPTO_2
Let Flt[6]=Flt[1]
GoTo RADIOPLUS

Label CHNGUPTO_2
If Flt[9]=1,-1,CHNGUPTO_3
Let Flt[6]=Flt[2]
GoTo RADIOPLUS

Label CHNGUPTO_3
If Flt[9]=2,-1,RADIOPLUS
Let Flt[6]=Flt[3]


Label RADIOPLUS
Let Flt[9]=Flt[9]+1
If Flt[9]>3,-1,CHANGEDUP
Let Flt[9]=-1
GoTo RADIO_OFF_UP
Label CHANGEDUP
Stream_Fadevol 6,1,1,1
Label RADIO_OFF_UP
CommandBlock 0

Let Flt[7]=0
Label 3333
Ctrl_Read 5,UP1
If Flt[5]=1,-1,READ_DOWN
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<5,3333,-1
GoTo READ_DOWN



Label RADIO_DOWN
CommandBlock 1
Stream_Fadevol 6,1,0,0

Label CHNGDWNTO_3
If Flt[9]=-1,-1,CHNGDWNTO_2
Let Flt[6]=Flt[3]
GoTo RADIOMINUS

Label CHNGDWNTO_2
If Flt[9]=3,-1,CHNGDWNTO_1
Let Flt[6]=Flt[2]
GoTo RADIOMINUS

Label CHNGDWNTO_1
If Flt[9]=2,-1,CHNGDWNTO_0
Let Flt[6]=Flt[1]
GoTo RADIOMINUS

Label CHNGDWNTO_0
If Flt[9]=1,-1,RADIOMINUS
Let Flt[6]=Flt[0]

Label RADIOMINUS
Let Flt[9]=Flt[9]-1
If Flt[9]=-1,RADIO_OFF_DOWN,-1
If Flt[9]<-1,-1,CHANGEDDOWN
Let Flt[9]=3
Label CHANGEDDOWN
Stream_Fadevol 6,1,1,1
Label RADIO_OFF_DOWN
CommandBlock 0

Let Flt[7]=0
Label 2222
Ctrl_Read 5,DOWN1
If Flt[5]=1,-1,CHECKPLAY
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<5,2222,-1
GoTo CHECKPLAY



Label POSITION
If Flt[4]=0,CHECK_IN_CAR,-1
GetGameTime 7
Let Flt[10]=Flt[7]-Flt[8]
If Flt[10]<500,CHECK_IN_CAR,-1
Let Flt[8]=Flt[7]

Label GETPOS0
Stream_GetPos 0,7
If Flt[7]=Flt[15],RADIO0END,-1
Let Flt[15]=Flt[7]
GoTo GETPOS1
Label RADIO0END
Stream_Fadevol 0,1,0,0
Stream_Pause 0
Stream_Destroy 0
Label RAND0
Rnd 10,10
If Flt[11]=Flt[10],RAND0,-1
Let Flt[11]=Flt[10]
Let Flt[19]=1
Let Flt[15]=0
GoTo RADIO00CREATE
Label REPLAY0
CommandBlock 1
Stream_Fadevol 0,1,0,0
Stream_Play 0
Let Flt[19]=0
CommandBlock 0
If Flt[9]=0,-1,GETPOS1
Let Flt[6]=Flt[0]
Stream_Fadevol 0,1,1,1

Label GETPOS1
Stream_GetPos 1,7
If Flt[7]=Flt[16],RADIO1END,-1
Let Flt[16]=Flt[7]
GoTo GETPOS2
Label RADIO1END
Stream_Fadevol 1,1,0,0
Stream_Pause 1
Stream_Destroy 1
Label RAND1
Rnd 10,10
If Flt[12]=Flt[10],RAND1,-1
Let Flt[12]=Flt[10]
Let Flt[19]=1
Let Flt[16]=0
GoTo RADIO01CREATE
Label REPLAY1
CommandBlock 1
Stream_Fadevol 1,1,0,0
Stream_Play 1
Let Flt[19]=0
CommandBlock 0
If Flt[9]=1,-1,GETPOS2
Let Flt[6]=Flt[1]
Stream_Fadevol 1,1,1,1

Label GETPOS2
Stream_GetPos 2,7
If Flt[7]=Flt[17],RADIO2END,-1
Let Flt[17]=Flt[7]
GoTo GETPOS3
Label RADIO2END
Stream_Fadevol 2,1,0,0
Stream_Pause 2
Stream_Destroy 2
Label RAND2
Rnd 10,10
If Flt[13]=Flt[10],RAND2,-1
Let Flt[13]=Flt[10]
Let Flt[19]=1
Let Flt[17]=0
GoTo RADIO02CREATE
Label REPLAY2
CommandBlock 1
Stream_Fadevol 2,1,0,0
Stream_Play 2
Let Flt[19]=0
CommandBlock 0
If Flt[9]=2,-1,GETPOS3
Let Flt[6]=Flt[2]
Stream_Fadevol 2,1,1,1

Label GETPOS3
Stream_GetPos 3,7
If Flt[7]=Flt[18],RADIO3END,-1
Let Flt[18]=Flt[7]
GoTo CHECK_IN_CAR
Label RADIO3END
Stream_Fadevol 3,1,0,0
Stream_Pause 3
Stream_Destroy 3
Label RAND3
Rnd 10,10
If Flt[14]=Flt[10],RAND3,-1
Let Flt[14]=Flt[10]
Let Flt[19]=1
Let Flt[18]=0
GoTo RADIO03CREATE
Label REPLAY3
CommandBlock 1
Stream_Fadevol 3,1,0,0
Stream_Play 3
Let Flt[19]=0
CommandBlock 0
If Flt[9]=3,-1,CHECK_IN_CAR
Let Flt[6]=Flt[3]
Stream_Fadevol 3,1,1,1

GoTo CHECK_IN_CAR

Мне хотелось бы так: музыка из Мафии, радиостанции из M1DE, папка куда можно кидать свои свою музыку.
Есть возможность кинуть в папку свою музыку и ничего никуда не прописывать вручную?
Тут неудобство в том, что в скриптах нет функций, с помощью которых можно было бы просканировать папку и получить список имён лежащих в ней файлов.
Так что все имена файлов и их количество записываются в самом скрипте.
это проще, чем прописывать в скрипте названия музыки.
Как по мне, какая разница, открыв скрипт в блокноте, копипастить названия из скрипта в файлы или из файлов в скрипт?
То на то и выходит, в итоге )

KlassenAS
13.10.2020, 14:31
Да простят меня админы за два сообщения подряд!
Но в одно сообщение всё не поместилось!
В качестве доказательства прикрепляю скриншот.

Ver. 2.1 для Abradox, в разработке:
//Radio Script Ver. 2.1 13-10-2020 By KlassenAS For Abradox
//Четыре радиостанции, более 10 треков на каждой
//Первая радиостанция с родной музыкой Mafia
//Радиостанции переключаются. Также радио можно выключить.
//При старте на каждой радиостанции случайным образом
//начинает играть один из треков.
//По окончании трека, следующий выбирается так же, случайным образом.

Dim_Act 1
Dim_Flt 20
GetActivePlayer 0

//Удалить для использования в scene2.bin,
//Оставить для использования с патчем от GOLOD55
//Начало удаления
Human_GetProperty 0,4,Energy
If Flt[4]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on
//Конец удаления



Let Flt[0]=0 //поток 00
Let Flt[1]=0 //поток 01
Let Flt[2]=0 //поток 02
Let Flt[3]=0 //поток 03
Let Flt[4]=0 //логика
Let Flt[5]=0 //Нажатие клавиш вперёд1 и назад1
Let Flt[6]=0 //Последний активный поток
Let Flt[7]=0 //сиденье/Время с начала игры/текущее время потока/
Let Flt[8]=0 //Прошлое время с начала игры
Let Flt[9]=0 //номер радиостанции 0-3
Let Flt[10]=-1 //рандом для radio/разница во времени игры
Let Flt[11]=-1 //трек на radio00
Let Flt[12]=-1 //трек на radio01
Let Flt[13]=-1 //трек на radio02
Let Flt[14]=-1 //трек на radio03
Let Flt[15]=0 //прошлое время потока 0
Let Flt[16]=0 //прошлое время потока 1
Let Flt[17]=0 //прошлое время потока 2
Let Flt[18]=0 //прошлое время потока 3
Let Flt[19]=0 //для перехода на следующий трек

Rnd 11,27
Rnd 12,10
Rnd 13,10
Rnd 14,10

GoTo CHECK



Label RADIOCREATE

Label RADIO00CREATE
CommandBlock 1

Label TRCK0000
If Flt[11]=0,-1,TRCK0001
Stream_Create 0,"sounds\03_music.wav"
GoTo RADIO00CREATED

Label TRCK0001
If Flt[11]=1,-1,TRCK0002
Stream_Create 0,"sounds\10_music.wav"
GoTo RADIO00CREATED

Label TRCK0002
If Flt[11]=2,-1,TRCK0003
Stream_Create 0,"sounds\10_musicin.wav"
GoTo RADIO00CREATED

Label TRCK0003
If Flt[11]=3,-1,TRCK0004
Stream_Create 0,"sounds\12_radio.wav"
GoTo RADIO00CREATED

Label TRCK0004
If Flt[11]=4,-1,TRCK0005
Stream_Create 0,"sounds\13b_music.wav"
GoTo RADIO00CREATED

Label TRCK0005
If Flt[11]=5,-1,TRCK0006
Stream_Create 0,"sounds\14_Coucou.wav"
GoTo RADIO00CREATED

Label TRCK0006
If Flt[11]=6,-1,TRCK0007
Stream_Create 0,"sounds\18_radio.wav"
GoTo RADIO00CREATED

Label TRCK0007
If Flt[11]=7,-1,TRCK0008
Stream_Create 0,"sounds\s_music1.wav"
GoTo RADIO00CREATED

Label TRCK0008
If Flt[11]=8,-1,TRCK0009
Stream_Create 0,"sounds\s_music2.wav"
GoTo RADIO00CREATED

Label TRCK0009
If Flt[11]=9,-1,TRCK0010
Stream_Create 0,"sounds\s_music3.wav"
GoTo RADIO00CREATED

Label TRCK0010
If Flt[11]=10,-1,TRCK0011
Stream_Create 0,"sounds\s_music5.wav"
GoTo RADIO00CREATED

Label TRCK0011
If Flt[11]=11,-1,TRCK0012
Stream_Create 0,"sounds\music\city_music_01.ogg"
GoTo RADIO00CREATED

Label TRCK0012
If Flt[11]=12,-1,TRCK0013
Stream_Create 0,"sounds\music\city_music_02.ogg"
GoTo RADIO00CREATED

Label TRCK0013
If Flt[11]=13,-1,TRCK0014
Stream_Create 0,"sounds\music\city_music_03.ogg"
GoTo RADIO00CREATED

Label TRCK0014
If Flt[11]=14,-1,TRCK0015
Stream_Create 0,"sounds\music\city_music_04.ogg"
GoTo RADIO00CREATED

Label TRCK0015
If Flt[11]=15,-1,TRCK0016
Stream_Create 0,"sounds\music\city_music_05.ogg"
GoTo RADIO00CREATED

Label TRCK0016
If Flt[11]=16,-1,TRCK0017
Stream_Create 0,"sounds\music\city_music_06.ogg"
GoTo RADIO00CREATED

Label TRCK0017
If Flt[11]=17,-1,TRCK0018
Stream_Create 0,"sounds\music\city_music_07.ogg"
GoTo RADIO00CREATED

Label TRCK0018
If Flt[11]=18,-1,TRCK0019
Stream_Create 0,"sounds\music\city_music_08.ogg"
GoTo RADIO00CREATED

Label TRCK0019
If Flt[11]=19,-1,TRCK0020
Stream_Create 0,"sounds\music\city_music_09.ogg"
GoTo RADIO00CREATED

Label TRCK0020
If Flt[11]=20,-1,TRCK0021
Stream_Create 0,"sounds\music\city_music_10.ogg"
GoTo RADIO00CREATED

Label TRCK0021
If Flt[11]=21,-1,TRCK0022
Stream_Create 0,"sounds\music\city_music_11.ogg"
GoTo RADIO00CREATED

Label TRCK0022
If Flt[11]=22,-1,TRCK0023
Stream_Create 0,"sounds\music\city_music_12.ogg"
GoTo RADIO00CREATED

Label TRCK0023
If Flt[11]=23,-1,TRCK0024
Stream_Create 0,"sounds\music\city_music_13.ogg"
GoTo RADIO00CREATED

Label TRCK0024
If Flt[11]=24,-1,TRCK0025
Stream_Create 0,"sounds\music\city_music_15.ogg"
GoTo RADIO00CREATED

Label TRCK0025
If Flt[11]=25,-1,TRCK0026
Stream_Create 0,"sounds\music\12_scene music.ogg"
GoTo RADIO00CREATED

Label TRCK0026
If Flt[11]=26,-1,RADIO00CREATED
Stream_Create 0,"sounds\music\mise02-ulicka.ogg"
GoTo RADIO00CREATED

Label RADIO00CREATED
Stream_SetPos 0,15
CommandBlock 0
If Flt[9]=0,-1,ISREPLAY0
Let Flt[6]=Flt[0]
Label ISREPLAY0
If Flt[19]=1,REPLAY0,-1


Label RADIO01CREATE
CommandBlock 1

Label TRCK0100
If Flt[12]=0,-1,TRCK0101
Stream_Create 1,"radio\radio 01 - 00.mp3"
GoTo RADIO01CREATED

Label TRCK0101
If Flt[12]=1,-1,TRCK0102
Stream_Create 1,"radio\radio 01 - 01.mp3"
GoTo RADIO01CREATED

Label TRCK0102
If Flt[12]=2,-1,TRCK0103
Stream_Create 1,"radio\radio 01 - 02.mp3"
GoTo RADIO01CREATED

Label TRCK0103
If Flt[12]=3,-1,TRCK0104
Stream_Create 1,"radio\radio 01 - 03.mp3"
GoTo RADIO01CREATED

Label TRCK0104
If Flt[12]=4,-1,TRCK0105
Stream_Create 1,"radio\radio 01 - 04.mp3"
GoTo RADIO01CREATED

Label TRCK0105
If Flt[12]=5,-1,TRCK0106
Stream_Create 1,"radio\radio 01 - 05.mp3"
GoTo RADIO01CREATED

Label TRCK0106
If Flt[12]=6,-1,TRCK0107
Stream_Create 1,"radio\radio 01 - 06.mp3"
GoTo RADIO01CREATED

Label TRCK0107
If Flt[12]=7,-1,TRCK0108
Stream_Create 1,"radio\radio 01 - 07.mp3"
GoTo RADIO01CREATED

Label TRCK0108
If Flt[12]=8,-1,TRCK0109
Stream_Create 1,"radio\radio 01 - 08.mp3"
GoTo RADIO01CREATED

Label TRCK0109
If Flt[12]=9,-1,RADIO01CREATED
Stream_Create 1,"radio\radio 01 - 09.mp3"
GoTo RADIO01CREATED

Label RADIO01CREATED
Stream_SetPos 1,16
CommandBlock 0
If Flt[9]=1,-1,ISREPLAY1
Let Flt[6]=Flt[1]
Label ISREPLAY1
If Flt[19]=1,REPLAY1,-1


Label RADIO02CREATE
CommandBlock 1

Label TRCK0200
If Flt[13]=0,-1,TRCK0201
Stream_Create 2,"radio\radio 02 - 00.mp3"
GoTo RADIO02CREATED

Label TRCK0201
If Flt[13]=1,-1,TRCK0202
Stream_Create 2,"radio\radio 02 - 01.mp3"
GoTo RADIO02CREATED

Label TRCK0202
If Flt[13]=2,-1,TRCK0203
Stream_Create 2,"radio\radio 02 - 02.mp3"
GoTo RADIO02CREATED

Label TRCK0203
If Flt[13]=3,-1,TRCK0204
Stream_Create 2,"radio\radio 02 - 03.mp3"
GoTo RADIO02CREATED

Label TRCK0204
If Flt[13]=4,-1,TRCK0205
Stream_Create 2,"radio\radio 02 - 04.mp3"
GoTo RADIO02CREATED

Label TRCK0205
If Flt[13]=5,-1,TRCK0206
Stream_Create 2,"radio\radio 02 - 05.mp3"
GoTo RADIO02CREATED

Label TRCK0206
If Flt[13]=6,-1,TRCK0207
Stream_Create 2,"radio\radio 02 - 06.mp3"
GoTo RADIO02CREATED

Label TRCK0207
If Flt[13]=7,-1,TRCK0208
Stream_Create 2,"radio\radio 02 - 07.mp3"
GoTo RADIO02CREATED

Label TRCK0208
If Flt[13]=8,-1,TRCK0209
Stream_Create 2,"radio\radio 02 - 08.mp3"
GoTo RADIO02CREATED

Label TRCK0209
If Flt[13]=9,-1,RADIO02CREATED
Stream_Create 2,"radio\radio 02 - 09.mp3"
GoTo RADIO02CREATED

Label RADIO02CREATED
Stream_SetPos 2,17
CommandBlock 0
If Flt[9]=2,-1,ISREPLAY2
Let Flt[6]=Flt[2]
Label ISREPLAY2
If Flt[19]=1,REPLAY2,-1


Label RADIO03CREATE
CommandBlock 1
Label TRCK0300
If Flt[14]=0,-1,TRCK0301
Stream_Create 3,"radio\radio 03 - 00.mp3"
GoTo RADIO03CREATED

Label TRCK0301
If Flt[14]=1,-1,TRCK0302
Stream_Create 3,"radio\radio 03 - 01.mp3"
GoTo RADIO03CREATED

Label TRCK0302
If Flt[14]=2,-1,TRCK0303
Stream_Create 3,"radio\radio 03 - 02.mp3"
GoTo RADIO03CREATED

Label TRCK0303
If Flt[14]=3,-1,TRCK0304
Stream_Create 3,"radio\radio 03 - 03.mp3"
GoTo RADIO03CREATED

Label TRCK0304
If Flt[14]=4,-1,TRCK0305
Stream_Create 3,"radio\radio 03 - 04.mp3"
GoTo RADIO03CREATED

Label TRCK0305
If Flt[14]=5,-1,TRCK0306
Stream_Create 3,"radio\radio 03 - 05.mp3"
GoTo RADIO03CREATED

Label TRCK0306
If Flt[14]=6,-1,TRCK0307
Stream_Create 3,"radio\radio 03 - 06.mp3"
GoTo RADIO03CREATED

Label TRCK0307
If Flt[14]=7,-1,TRCK0308
Stream_Create 3,"radio\radio 03 - 07.mp3"
GoTo RADIO03CREATED

Label TRCK0308
If Flt[14]=8,-1,TRCK0309
Stream_Create 3,"radio\radio 03 - 08.mp3"
GoTo RADIO03CREATED

Label TRCK0309
If Flt[14]=9,-1,RADIO03CREATED
Stream_Create 3,"radio\radio 03 - 09.mp3"
GoTo RADIO03CREATED

Label RADIO03CREATED
Stream_SetPos 3,18
CommandBlock 0
If Flt[9]=3,-1,ISREPLAY3
Let Flt[6]=Flt[3]
Label ISREPLAY3
If Flt[19]=1,REPLAY3,-1

GoTo RADIOCREATED



Label CHECK
CommandBlock 1
GoTo POSITION
Label CHECK_IN_CAR
CommandBlock 0
Human_GetSeatIdx 0,7
If Flt[7]=-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
If Flt[4]=0,-,CHECK
CityMusic_Off
Wait 500
GoTo RADIOCREATE
Label RADIOCREATED
CommandBlock 1
Stream_Fadevol 0,1,0,0
Stream_Play 0
Stream_Fadevol 1,1,0,0
Stream_Play 1
Stream_Fadevol 2,1,0,0
Stream_Play 2
Stream_Fadevol 3,1,0,0
Stream_Play 3
If Flt[9]>-1,-1,RADIO_OFF
Stream_FadeVol 6,1,1,1
Label RADIO_OFF
Let Flt[4]=1
CommandBlock 0
GoTo CHECK



Label CAR_OUT
If Flt[4]=1,-1,CHECK
CommandBlock 1

Stream_GetPos 0,15
Stream_Fadevol 0,1,0,0
Stream_Pause 0
Stream_Destroy 0

Stream_GetPos 1,16
Stream_Fadevol 1,1,0,0
Stream_Pause 1
Stream_Destroy 1

Stream_GetPos 2,17
Stream_Fadevol 2,1,0,0
Stream_Pause 2
Stream_Destroy 2

Stream_GetPos 3,18
Stream_Fadevol 3,1,0,0
Stream_Pause 3
Stream_Destroy 3

Let Flt[4]=0
CityMusic_On
CommandBlock 0
GoTo CHECK



Label RADIO_UP
CommandBlock 1
Stream_Fadevol 6,1,0,0

Label CHNGUPTO_0
If Flt[9]=-1,-1,CHNGUPTO_1
Let Flt[6]=Flt[0]

Label CHNGUPTO_1
If Flt[9]=0,-1,CHNGUPTO_2
Let Flt[6]=Flt[1]
GoTo RADIOPLUS

Label CHNGUPTO_2
If Flt[9]=1,-1,CHNGUPTO_3
Let Flt[6]=Flt[2]
GoTo RADIOPLUS

Label CHNGUPTO_3
If Flt[9]=2,-1,RADIOPLUS
Let Flt[6]=Flt[3]


Label RADIOPLUS
Let Flt[9]=Flt[9]+1
If Flt[9]>3,-1,CHANGEDUP
Let Flt[9]=-1
GoTo RADIO_OFF_UP
Label CHANGEDUP
Stream_Fadevol 6,1,1,1
Label RADIO_OFF_UP
CommandBlock 0

Let Flt[7]=0
Label 3333
Ctrl_Read 5,UP1
If Flt[5]=1,-1,READ_DOWN
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<5,3333,-1
GoTo READ_DOWN



Label RADIO_DOWN
CommandBlock 1
Stream_Fadevol 6,1,0,0

Label CHNGDWNTO_3
If Flt[9]=-1,-1,CHNGDWNTO_2
Let Flt[6]=Flt[3]
GoTo RADIOMINUS

Label CHNGDWNTO_2
If Flt[9]=3,-1,CHNGDWNTO_1
Let Flt[6]=Flt[2]
GoTo RADIOMINUS

Label CHNGDWNTO_1
If Flt[9]=2,-1,CHNGDWNTO_0
Let Flt[6]=Flt[1]
GoTo RADIOMINUS

Label CHNGDWNTO_0
If Flt[9]=1,-1,RADIOMINUS
Let Flt[6]=Flt[0]

Label RADIOMINUS
Let Flt[9]=Flt[9]-1
If Flt[9]=-1,RADIO_OFF_DOWN,-1
If Flt[9]<-1,-1,CHANGEDDOWN
Let Flt[9]=3
Label CHANGEDDOWN
Stream_Fadevol 6,1,1,1
Label RADIO_OFF_DOWN
CommandBlock 0

Let Flt[7]=0
Label 2222
Ctrl_Read 5,DOWN1
If Flt[5]=1,-1,CHECKPLAY
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<5,2222,-1
GoTo CHECKPLAY



Label POSITION
If Flt[4]=0,CHECK_IN_CAR,-1
GetGameTime 7
Let Flt[10]=Flt[7]-Flt[8]
If Flt[10]<500,CHECK_IN_CAR,-1
Let Flt[8]=Flt[7]

Label GETPOS0
Stream_GetPos 0,7
If Flt[7]=Flt[15],RADIO0END,-1
Let Flt[15]=Flt[7]
GoTo GETPOS1
Label RADIO0END
Stream_Fadevol 0,1,0,0
Stream_Pause 0
Stream_Destroy 0
Label RAND0
Rnd 10,27
If Flt[11]=Flt[10],RAND0,-1
Let Flt[11]=Flt[10]
Let Flt[19]=1
Let Flt[15]=0
GoTo RADIO00CREATE
Label REPLAY0
CommandBlock 1
Stream_Fadevol 0,1,0,0
Stream_Play 0
Let Flt[19]=0
CommandBlock 0
If Flt[9]=0,-1,GETPOS1
Let Flt[6]=Flt[0]
Stream_Fadevol 0,1,1,1

Label GETPOS1
Stream_GetPos 1,7
If Flt[7]=Flt[16],RADIO1END,-1
Let Flt[16]=Flt[7]
GoTo GETPOS2
Label RADIO1END
Stream_Fadevol 1,1,0,0
Stream_Pause 1
Stream_Destroy 1
Label RAND1
Rnd 10,10
If Flt[12]=Flt[10],RAND1,-1
Let Flt[12]=Flt[10]
Let Flt[19]=1
Let Flt[16]=0
GoTo RADIO01CREATE
Label REPLAY1
CommandBlock 1
Stream_Fadevol 1,1,0,0
Stream_Play 1
Let Flt[19]=0
CommandBlock 0
If Flt[9]=1,-1,GETPOS2
Let Flt[6]=Flt[1]
Stream_Fadevol 1,1,1,1

Label GETPOS2
Stream_GetPos 2,7
If Flt[7]=Flt[17],RADIO2END,-1
Let Flt[17]=Flt[7]
GoTo GETPOS3
Label RADIO2END
Stream_Fadevol 2,1,0,0
Stream_Pause 2
Stream_Destroy 2
Label RAND2
Rnd 10,10
If Flt[13]=Flt[10],RAND2,-1
Let Flt[13]=Flt[10]
Let Flt[19]=1
Let Flt[17]=0
GoTo RADIO02CREATE
Label REPLAY2
CommandBlock 1
Stream_Fadevol 2,1,0,0
Stream_Play 2
Let Flt[19]=0
CommandBlock 0
If Flt[9]=2,-1,GETPOS3
Let Flt[6]=Flt[2]
Stream_Fadevol 2,1,1,1

Label GETPOS3
Stream_GetPos 3,7
If Flt[7]=Flt[18],RADIO3END,-1
Let Flt[18]=Flt[7]
GoTo CHECK_IN_CAR
Label RADIO3END
Stream_Fadevol 3,1,0,0
Stream_Pause 3
Stream_Destroy 3
Label RAND3
Rnd 10,10
If Flt[14]=Flt[10],RAND3,-1
Let Flt[14]=Flt[10]
Let Flt[19]=1
Let Flt[18]=0
GoTo RADIO03CREATE
Label REPLAY3
CommandBlock 1
Stream_Fadevol 3,1,0,0
Stream_Play 3
Let Flt[19]=0
CommandBlock 0
If Flt[9]=3,-1,CHECK_IN_CAR
Let Flt[6]=Flt[3]
Stream_Fadevol 3,1,1,1

GoTo CHECK_IN_CAR

Abradox
14.10.2020, 02:22
Сначала всё было нормально и скрипт работал правильно, потом я стал загружать разные миссии и муызка стала глючить.
Примерно пол секунды муызка играет, следующие пол секунды - тишина, и так постоянно чередуется, как-будто лагает.
Странный глюк, проверял скрипт 2.1

KlassenAS
14.10.2020, 09:10
Примерно пол секунды муызка играет, следующие пол секунды - тишина, и так постоянно чередуется, как-будто лагает
Интересно.
А после тишины трек как играл? Как после паузы? Или сначала? Или как будто во время тишины продолжал играть, но не слышно?
Какие миссии ты при этом загружал?

Я так понимаю, что нормально скрипт работал во фрирайде?

Прошёл " невозможно отказаться", "бегущий человек" и "вечеринка с коктейлями".
Подобных проблем не было.
Что было: во время погони радио играло одновременно с драматичной музыкой, которая звучит во время погони. Радио, конечно, можно отключить.
После погони, во время катсцены, когда Сэм дал Тому деньги, радио продолжало играть. Естественно, ведь Том в машине. Радио можно было выключить.
Во время миссий "бегущий человек" и "вечеринка с коктейлями" во время сохранений Том находится в машине. Радио играет, потоки сохраняются, если запороть миссию и загрузиться с сохранения, то эти потоки начинают играть.
Это проблемы естественные и предсказуемые.
А вот такого, как ты описал, не было.
Единственная мысль: а ты для второй, третьей и четвёртой радиостанции файлы в папку положил?
Если нет, то скрипт безуспешно пытался создавать потоки из несуществующих файлов, это и могло привести к подлагиванию.
В скрипте как раз с интервалом в половину секунды идёт проверка, не закончился ли трек, и если он не играет, то поток пересоздаётся.

Abradox
14.10.2020, 12:16
Нет, я не положил музыку в папки, но в Фрирайде это не было проблемой, при переключении радиостанций просто была тишина. Надо еще будет потестировать.

Музыка как мне кажется во время тишины не играла.

Firefox3860
14.10.2020, 18:01
Покатался я, значит, с музыкой из m1de, и это прекрасно :) Она очень здорово освежает атмосферу, некоторые композиции как будто там и были! :)

Обобщаю. Из 144 аудиозаписей только 48 оказались музыкой. Остальное — разговоры, новостные выпуски и т.д. Их я выкинул. Те 48 композиций я распределил по 2-м станциям (сортировал по своим ощущениям) по 24 на каждую.
Оказалось, что записи там тоже в формате ogg, в mp3 лучше не переделывать — так весят в 2 раза больше. То есть в скрипте надо будет имена им (расширения) подправить. Да и пробелы из имён лучше убрать, чтобы путаницы не было.
Количество композиций в скрипте тоже, соответственно, расширить до 24 на 2 и 3 станциях.

https://mega.nz/file/wz4XjKSa#mp8jMFtAIiA0TzGkLpGDmgNUZxLcFAsKjqVAuXO4w v8
100 мб.

Теперь ещё немного по скрипту.
Всё таки настаиваю на использовании для переключения станций кнопок CROUCH1 и JUMP1 вместо UP1 и DOWN1. Я часто езжу на стрелках и wasd попеременно, из-за чего часто ненамеренно переключал радио. И потом — машина так попросту тормозит и разгоняется когда не надо.

На станции citymisic есть создание потоков из wav-файлов. Они почему-то ни разу не запустились. Их выбор отключен сейчас? Всё же считаю, что их вообще надо убрать из скрипта — они для этого не предназначены (за исключением Coucou, непонятно, почему они её как wav сделали).

Ещё предлагаю реализовать задумку с отображением текста при переключении станций, потому что сейчас плохо заметен сам момент переключения. Команда console_addtext. Строки:
252 - "Music"
18970051 - "Turn off the radio"

KlassenAS, я бы всё это сам проделал, но в таком замысловатом скрипте я уже не разберусь :D Так что прошу учесть, когда будешь его ещё допиливать... Это всё, разумеется, про версию 2.1

А ещё, у тебя в notepad'е синтаксис работает, когда ты пишешь вот так, с большими буквами? Просто у меня шаблон настроен только на нижний регистр.

KlassenAS
14.10.2020, 18:20
Из 144 аудиозаписей только 48 оказались музыкой. Остальное — разговоры, новостные выпуски и т.д. Их я выкинул. Те 48 композиций я распределил по 2-м станциям (сортировал по своим ощущениям) по 24 на каждую.
Оказалось, что записи там тоже в формате ogg, в mp3 лучше не переделывать — так весят в 2 раза больше. То есть в скрипте надо будет имена им (расширения) подправить. Да и пробелы из имён лучше убрать, чтобы путаницы не было.
Количество композиций в скрипте тоже, соответственно, расширить до 24 на 2 и 3 станциях.

https://mega.nz/file/wz4XjKSa#mp8jMFtAIiA0TzGkLpGDmgNUZxLcFAsKjqVAuXO4w v8
100 мб.
Спасибо! Сейчас займусь всем этим делом )

Теперь ещё немного по скрипту.
Всё таки настаиваю на использовании для переключения станций кнопок CROUCH1 и JUMP1 вместо UP1 и DOWN1. Я часто езжу на стрелках и wasd попеременно, из-за чего часто ненамеренно переключал радио. И потом — машина так попросту тормозит и разгоняется когда не надо.
Ладно, уговорил, сделаю на альтернативный присед и прыжок )

На станции citymisic есть создание потоков из wav-файлов. Они почему-то ни разу не запустились. Их выбор отключен сейчас? Всё же считаю, что их вообще надо убрать из скрипта — они для этого не предназначены (за исключением Coucou, непонятно, почему они её как wav сделали).
Странно. У меня, вроде, запускаются. Я проверю, там просто надо рандом изменить с 27 на 12, и тогда будут запускаться только они. Сразу станет понятно, играют они, или нет. А другие номера выпадать не будут.




Ещё предлагаю реализовать задумку с отображением текста при переключении станций, потому что сейчас плохо заметен сам момент переключения. Команда console_addtext. Строки:
252 - "Music"
18970051 - "Turn off the radio"
Спасибо. Прикрутим )
Жаль, конечно, что нет команды для вывода произвольного текста. Это было бы очень кстати.

А ещё, у тебя в notepad'е синтаксис работает, когда ты пишешь вот так, с большими буквами? Просто у меня шаблон настроен только на нижний регистр.
А я залез в настройки синтаксиса и поставил галочку, чтобы работало с любым регистром )

UPD: Проверил, все wav воспроизводятся без проблем. При поощи FreeRide_ScoreSet отслеживал номера треков.
Вопросы возникли к номерам 1, 2, 3 и 8. Там хромает либо качество самой записи, либо громкость, либо и то, и другое.
Это 10_music.wav, 10_musicin.wav, 12_radio.wav и s_music2.wav
Вот их, я думаю, стоило бы из списка удалить, если никто не против.
А остальные, на мой вкус, вполне себе норм.

Kaiser
14.10.2020, 21:07
2 KlassenAS

Я проверил твой обновленный скрипт, все отлично работает. Сварганю теперь мини ДЛС к Angel Pine Mod. Спасибо тебе!

KlassenAS
14.10.2020, 22:06
Ещё предлагаю реализовать задумку с отображением текста при переключении станций, потому что сейчас плохо заметен сам момент переключения. Команда console_addtext. Строки:
252 - "Music"
18970051 - "Turn off the radio"
Я придумал, как мне кажется, более удачный вариант.
Отображать номер радиостанции 1 - 4, а выключение показывать не обязательно.
Если радио выключено, человек и так это слышит.
Пока сделал так.
Впрочем, меня и этот вариант устраивает не полностью.
Я предлагаю добавить новые строки в textdb_ru.def, с названиями радиостанций.
Тогда всё будет красиво.

Удалил из первой радиостанции те 4 записи, что мне не понравились.
Прописал в скрипте файлы с музыкой из M1DE, спасибо за архив!
Сильно помог тем, что всё отсортировал и дал шаблоные имена файлам!
Ну, и переназначил переключение на альтернативный присед и прыжок.
Теперь надо решить, будем ли чем-то заполнять четвёртую станцию. и нужна ли она нам вообще?
И, после этого, от версии 2.1, "каноичной" перейти к созданию полуканоничной версии 2.2 "Трио", в которой будет музыка из всех трёх мафий, и неканоничной расширенной версии 2.3, в которой, кроме всего этого будут две кастомные радиостанции и "джой радио" )

Ver. 2.1
//Radio Script Ver. 2.1 15-10-2020 By KlassenAS For Abradox
//Четыре радиостанции, более 10 треков на каждой
//Первая радиостанция с родной музыкой Mafia
//Радиостанции переключаются. Также радио можно выключить.
//При старте на каждой радиостанции случайным образом
//начинает играть один из треков.
//По окончании трека, следующий выбирается так же, случайным образом.

Dim_Act 1
Dim_Flt 20
GetActivePlayer 0

//Удалить для использования в scene2.bin,
//Оставить для использования с патчем от GOLOD55
//Начало удаления
Human_GetProperty 0,4,Energy
If Flt[4]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on
//Конец удаления



Let Flt[0]=0 //поток 00
Let Flt[1]=0 //поток 01
Let Flt[2]=0 //поток 02
Let Flt[3]=0 //поток 03
Let Flt[4]=0 //логика
Let Flt[5]=0 //Нажатие клавиш вперёд1 и назад1
Let Flt[6]=0 //Последний активный поток
Let Flt[7]=0 //сиденье/Время с начала игры/текущее время потока/
Let Flt[8]=0 //Прошлое время с начала игры
Let Flt[9]=0 //номер радиостанции 0-3
Let Flt[10]=-1 //рандом для radio/разница во времени игры
Let Flt[11]=-1 //трек на radio00
Let Flt[12]=-1 //трек на radio01
Let Flt[13]=-1 //трек на radio02
Let Flt[14]=-1 //трек на radio03
Let Flt[15]=0 //прошлое время потока 0
Let Flt[16]=0 //прошлое время потока 1
Let Flt[17]=0 //прошлое время потока 2
Let Flt[18]=0 //прошлое время потока 3
Let Flt[19]=0 //для перехода на следующий трек

Rnd 11,23
Rnd 12,24
Rnd 13,24
Rnd 14,10

GoTo CHECK



Label RADIOCREATE

Label RADIO00CREATE
CommandBlock 1

Label TRCK0000
If Flt[11]=0,-1,TRCK0001
Stream_Create 0,"sounds\03_music.wav"
GoTo RADIO00CREATED

Label TRCK0001
If Flt[11]=1,-1,TRCK0002
Stream_Create 0,"sounds\13b_music.wav"
GoTo RADIO00CREATED

Label TRCK0002
If Flt[11]=2,-1,TRCK0003
Stream_Create 0,"sounds\14_Coucou.wav"
GoTo RADIO00CREATED

Label TRCK0003
If Flt[11]=3,-1,TRCK0004
Stream_Create 0,"sounds\18_radio.wav"
GoTo RADIO00CREATED

Label TRCK0004
If Flt[11]=4,-1,TRCK0005
Stream_Create 0,"sounds\s_music1.wav"
GoTo RADIO00CREATED

Label TRCK0005
If Flt[11]=5,-1,TRCK0006
Stream_Create 0,"sounds\s_music3.wav"
GoTo RADIO00CREATED

Label TRCK0006
If Flt[11]=6,-1,TRCK0007
Stream_Create 0,"sounds\s_music5.wav"
GoTo RADIO00CREATED

Label TRCK0007
If Flt[11]=7,-1,TRCK0008
Stream_Create 0,"sounds\music\city_music_01.ogg"
GoTo RADIO00CREATED

Label TRCK0008
If Flt[11]=8,-1,TRCK0009
Stream_Create 0,"sounds\music\city_music_02.ogg"
GoTo RADIO00CREATED

Label TRCK0009
If Flt[11]=9,-1,TRCK0010
Stream_Create 0,"sounds\music\city_music_03.ogg"
GoTo RADIO00CREATED

Label TRCK0010
If Flt[11]=10,-1,TRCK0011
Stream_Create 0,"sounds\music\city_music_04.ogg"
GoTo RADIO00CREATED

Label TRCK0011
If Flt[11]=11,-1,TRCK0012
Stream_Create 0,"sounds\music\city_music_05.ogg"
GoTo RADIO00CREATED

Label TRCK0012
If Flt[11]=12,-1,TRCK0013
Stream_Create 0,"sounds\music\city_music_06.ogg"
GoTo RADIO00CREATED

Label TRCK0013
If Flt[11]=13,-1,TRCK0014
Stream_Create 0,"sounds\music\city_music_07.ogg"
GoTo RADIO00CREATED

Label TRCK0014
If Flt[11]=14,-1,TRCK0015
Stream_Create 0,"sounds\music\city_music_08.ogg"
GoTo RADIO00CREATED

Label TRCK0015
If Flt[11]=15,-1,TRCK0016
Stream_Create 0,"sounds\music\city_music_09.ogg"
GoTo RADIO00CREATED

Label TRCK0016
If Flt[11]=16,-1,TRCK0017
Stream_Create 0,"sounds\music\city_music_10.ogg"
GoTo RADIO00CREATED

Label TRCK0017
If Flt[11]=17,-1,TRCK0018
Stream_Create 0,"sounds\music\city_music_11.ogg"
GoTo RADIO00CREATED

Label TRCK0018
If Flt[11]=18,-1,TRCK0019
Stream_Create 0,"sounds\music\city_music_12.ogg"
GoTo RADIO00CREATED

Label TRCK0019
If Flt[11]=19,-1,TRCK0020
Stream_Create 0,"sounds\music\city_music_13.ogg"
GoTo RADIO00CREATED

Label TRCK0020
If Flt[11]=20,-1,TRCK0021
Stream_Create 0,"sounds\music\city_music_15.ogg"
GoTo RADIO00CREATED

Label TRCK0021
If Flt[11]=21,-1,TRCK0022
Stream_Create 0,"sounds\music\12_scene music.ogg"
GoTo RADIO00CREATED

Label TRCK0022
If Flt[11]=22,-1,RADIO00CREATED
Stream_Create 0,"sounds\music\mise02-ulicka.ogg"
GoTo RADIO00CREATED

Label RADIO00CREATED
Stream_SetPos 0,15
CommandBlock 0
If Flt[9]=0,-1,ISREPLAY0
Let Flt[6]=Flt[0]
Label ISREPLAY0
If Flt[19]=1,REPLAY0,-1


Label RADIO01CREATE
CommandBlock 1

Label TRCK0100
If Flt[12]=0,-1,TRCK0101
Stream_Create 1,"radio\radio01-00.ogg"
GoTo RADIO01CREATED

Label TRCK0101
If Flt[12]=1,-1,TRCK0102
Stream_Create 1,"radio\radio01-01.ogg"
GoTo RADIO01CREATED

Label TRCK0102
If Flt[12]=2,-1,TRCK0103
Stream_Create 1,"radio\radio01-02.ogg"
GoTo RADIO01CREATED

Label TRCK0103
If Flt[12]=3,-1,TRCK0104
Stream_Create 1,"radio\radio01-03.ogg"
GoTo RADIO01CREATED

Label TRCK0104
If Flt[12]=4,-1,TRCK0105
Stream_Create 1,"radio\radio01-04.ogg"
GoTo RADIO01CREATED

Label TRCK0105
If Flt[12]=5,-1,TRCK0106
Stream_Create 1,"radio\radio01-05.ogg"
GoTo RADIO01CREATED

Label TRCK0106
If Flt[12]=6,-1,TRCK0107
Stream_Create 1,"radio\radio01-06.ogg"
GoTo RADIO01CREATED

Label TRCK0107
If Flt[12]=7,-1,TRCK0108
Stream_Create 1,"radio\radio01-07.ogg"
GoTo RADIO01CREATED

Label TRCK0108
If Flt[12]=8,-1,TRCK0109
Stream_Create 1,"radio\radio01-08.ogg"
GoTo RADIO01CREATED

Label TRCK0109
If Flt[12]=9,-1,TRCK0110
Stream_Create 1,"radio\radio01-09.ogg"
GoTo RADIO01CREATED

Label TRCK0110
If Flt[12]=10,-1,TRCK0111
Stream_Create 1,"radio\radio01-10.ogg"
GoTo RADIO01CREATED

Label TRCK0111
If Flt[12]=11,-1,TRCK0112
Stream_Create 1,"radio\radio01-11.ogg"
GoTo RADIO01CREATED

Label TRCK0112
If Flt[12]=12,-1,TRCK0113
Stream_Create 1,"radio\radio01-12.ogg"
GoTo RADIO01CREATED

Label TRCK0113
If Flt[12]=13,-1,TRCK0114
Stream_Create 1,"radio\radio01-13.ogg"
GoTo RADIO01CREATED

Label TRCK0114
If Flt[12]=14,-1,TRCK0115
Stream_Create 1,"radio\radio01-14.ogg"
GoTo RADIO01CREATED

Label TRCK0115
If Flt[12]=15,-1,TRCK0116
Stream_Create 1,"radio\radio01-15.ogg"
GoTo RADIO01CREATED

Label TRCK0116
If Flt[12]=16,-1,TRCK0117
Stream_Create 1,"radio\radio01-16.ogg"
GoTo RADIO01CREATED

Label TRCK0117
If Flt[12]=17,-1,TRCK0118
Stream_Create 1,"radio\radio01-17.ogg"
GoTo RADIO01CREATED

Label TRCK0118
If Flt[12]=18,-1,TRCK0119
Stream_Create 1,"radio\radio01-18.ogg"
GoTo RADIO01CREATED

Label TRCK0119
If Flt[12]=19,-1,TRCK0120
Stream_Create 1,"radio\radio01-19.ogg"
GoTo RADIO01CREATED

Label TRCK0120
If Flt[12]=20,-1,TRCK0121
Stream_Create 1,"radio\radio01-20.ogg"
GoTo RADIO01CREATED

Label TRCK0121
If Flt[12]=21,-1,TRCK0122
Stream_Create 1,"radio\radio01-21.ogg"
GoTo RADIO01CREATED

Label TRCK0122
If Flt[12]=22,-1,TRCK0123
Stream_Create 1,"radio\radio01-22.ogg"
GoTo RADIO01CREATED

Label TRCK0123
If Flt[12]=23,-1,RADIO01CREATED
Stream_Create 1,"radio\radio01-23.ogg"
GoTo RADIO01CREATED

Label RADIO01CREATED
Stream_SetPos 1,16
CommandBlock 0
If Flt[9]=1,-1,ISREPLAY1
Let Flt[6]=Flt[1]
Label ISREPLAY1
If Flt[19]=1,REPLAY1,-1


Label RADIO02CREATE
CommandBlock 1

Label TRCK0200
If Flt[13]=0,-1,TRCK0201
Stream_Create 2,"radio\radio02-00.ogg"
GoTo RADIO02CREATED

Label TRCK0201
If Flt[13]=1,-1,TRCK0202
Stream_Create 2,"radio\radio02-01.ogg"
GoTo RADIO02CREATED

Label TRCK0202
If Flt[13]=2,-1,TRCK0203
Stream_Create 2,"radio\radio02-02.ogg"
GoTo RADIO02CREATED

Label TRCK0203
If Flt[13]=3,-1,TRCK0204
Stream_Create 2,"radio\radio02-03.ogg"
GoTo RADIO02CREATED

Label TRCK0204
If Flt[13]=4,-1,TRCK0205
Stream_Create 2,"radio\radio02-04.ogg"
GoTo RADIO02CREATED

Label TRCK0205
If Flt[13]=5,-1,TRCK0206
Stream_Create 2,"radio\radio02-05.ogg"
GoTo RADIO02CREATED

Label TRCK0206
If Flt[13]=6,-1,TRCK0207
Stream_Create 2,"radio\radio02-06.ogg"
GoTo RADIO02CREATED

Label TRCK0207
If Flt[13]=7,-1,TRCK0208
Stream_Create 2,"radio\radio02-07.ogg"
GoTo RADIO02CREATED

Label TRCK0208
If Flt[13]=8,-1,TRCK0209
Stream_Create 2,"radio\radio02-08.ogg"
GoTo RADIO02CREATED

Label TRCK0209
If Flt[13]=9,-1,TRCK0210
Stream_Create 2,"radio\radio02-09.ogg"
GoTo RADIO02CREATED

Label TRCK0210
If Flt[13]=10,-1,TRCK0211
Stream_Create 2,"radio\radio02-10.ogg"
GoTo RADIO02CREATED

Label TRCK0211
If Flt[13]=11,-1,TRCK0212
Stream_Create 2,"radio\radio02-11.ogg"
GoTo RADIO02CREATED

Label TRCK0212
If Flt[13]=12,-1,TRCK0213
Stream_Create 2,"radio\radio02-12.ogg"
GoTo RADIO02CREATED

Label TRCK0213
If Flt[13]=13,-1,TRCK0214
Stream_Create 2,"radio\radio02-13.ogg"
GoTo RADIO02CREATED

Label TRCK0214
If Flt[13]=14,-1,TRCK0215
Stream_Create 2,"radio\radio02-14.ogg"
GoTo RADIO02CREATED

Label TRCK0215
If Flt[13]=15,-1,TRCK0216
Stream_Create 2,"radio\radio02-15.ogg"
GoTo RADIO02CREATED

Label TRCK0216
If Flt[13]=16,-1,TRCK0217
Stream_Create 2,"radio\radio02-16.ogg"
GoTo RADIO02CREATED

Label TRCK0217
If Flt[13]=17,-1,TRCK0218
Stream_Create 2,"radio\radio02-17.ogg"
GoTo RADIO02CREATED

Label TRCK0218
If Flt[13]=18,-1,TRCK0219
Stream_Create 2,"radio\radio02-18.ogg"
GoTo RADIO02CREATED

Label TRCK0219
If Flt[13]=19,-1,TRCK0220
Stream_Create 2,"radio\radio02-19.ogg"
GoTo RADIO02CREATED

Label TRCK0220
If Flt[13]=20,-1,TRCK0221
Stream_Create 2,"radio\radio02-20.ogg"
GoTo RADIO02CREATED

Label TRCK0221
If Flt[13]=21,-1,TRCK0222
Stream_Create 2,"radio\radio02-21.ogg"
GoTo RADIO02CREATED

Label TRCK0222
If Flt[13]=22,-1,TRCK0223
Stream_Create 2,"radio\radio02-22.ogg"
GoTo RADIO02CREATED

Label TRCK0223
If Flt[13]=23,-1,RADIO02CREATED
Stream_Create 2,"radio\radio02-23.ogg"
GoTo RADIO02CREATED

Label RADIO02CREATED
Stream_SetPos 2,17
CommandBlock 0
If Flt[9]=2,-1,ISREPLAY2
Let Flt[6]=Flt[2]
Label ISREPLAY2
If Flt[19]=1,REPLAY2,-1


Label RADIO03CREATE
CommandBlock 1
Label TRCK0300
If Flt[14]=0,-1,TRCK0301
Stream_Create 3,"radio\radio 03 - 00.mp3"
GoTo RADIO03CREATED

Label TRCK0301
If Flt[14]=1,-1,TRCK0302
Stream_Create 3,"radio\radio 03 - 01.mp3"
GoTo RADIO03CREATED

Label TRCK0302
If Flt[14]=2,-1,TRCK0303
Stream_Create 3,"radio\radio 03 - 02.mp3"
GoTo RADIO03CREATED

Label TRCK0303
If Flt[14]=3,-1,TRCK0304
Stream_Create 3,"radio\radio 03 - 03.mp3"
GoTo RADIO03CREATED

Label TRCK0304
If Flt[14]=4,-1,TRCK0305
Stream_Create 3,"radio\radio 03 - 04.mp3"
GoTo RADIO03CREATED

Label TRCK0305
If Flt[14]=5,-1,TRCK0306
Stream_Create 3,"radio\radio 03 - 05.mp3"
GoTo RADIO03CREATED

Label TRCK0306
If Flt[14]=6,-1,TRCK0307
Stream_Create 3,"radio\radio 03 - 06.mp3"
GoTo RADIO03CREATED

Label TRCK0307
If Flt[14]=7,-1,TRCK0308
Stream_Create 3,"radio\radio 03 - 07.mp3"
GoTo RADIO03CREATED

Label TRCK0308
If Flt[14]=8,-1,TRCK0309
Stream_Create 3,"radio\radio 03 - 08.mp3"
GoTo RADIO03CREATED

Label TRCK0309
If Flt[14]=9,-1,RADIO03CREATED
Stream_Create 3,"radio\radio 03 - 09.mp3"
GoTo RADIO03CREATED

Label RADIO03CREATED
Stream_SetPos 3,18
CommandBlock 0
If Flt[9]=3,-1,ISREPLAY3
Let Flt[6]=Flt[3]
Label ISREPLAY3
If Flt[19]=1,REPLAY3,-1

GoTo RADIOCREATED



Label CHECK
CommandBlock 1
GoTo POSITION
Label CHECK_IN_CAR
CommandBlock 0
Human_GetSeatIdx 0,7
If Flt[7]=-1,CAR_OUT,CAR_IN



Label CAR_IN
Ctrl_Read 5,JUMP1
If Flt[5]=0,-1,RADIO_UP
Label READ_DOWN
Ctrl_Read 5,CROUCH1
If Flt[5]=0,-1,RADIO_DOWN
Label CHECKPLAY
If Flt[4]=0,-,CHECK
CityMusic_Off
Wait 500
GoTo RADIOCREATE
Label RADIOCREATED
CommandBlock 1
Stream_Fadevol 0,1,0,0
Stream_Play 0
Stream_Fadevol 1,1,0,0
Stream_Play 1
Stream_Fadevol 2,1,0,0
Stream_Play 2
Stream_Fadevol 3,1,0,0
Stream_Play 3
If Flt[9]>-1,-1,RADIO_OFF
Stream_FadeVol 6,1,1,1
Label RADIO_OFF
Let Flt[4]=1
CommandBlock 0
GoTo CHECK



Label CAR_OUT
If Flt[4]=1,-1,CHECK
CommandBlock 1

Stream_GetPos 0,15
Stream_Fadevol 0,1,0,0
Stream_Pause 0
Stream_Destroy 0

Stream_GetPos 1,16
Stream_Fadevol 1,1,0,0
Stream_Pause 1
Stream_Destroy 1

Stream_GetPos 2,17
Stream_Fadevol 2,1,0,0
Stream_Pause 2
Stream_Destroy 2

Stream_GetPos 3,18
Stream_Fadevol 3,1,0,0
Stream_Pause 3
Stream_Destroy 3

Let Flt[4]=0
CityMusic_On
CommandBlock 0
GoTo CHECK



Label RADIO_UP
CommandBlock 1
Stream_Fadevol 6,1,0,0

Label CHNGUPTO_0
If Flt[9]=-1,-1,CHNGUPTO_1
Let Flt[6]=Flt[0]
Console_AddText 7336
GoTo RADIOPLUS

Label CHNGUPTO_1
If Flt[9]=0,-1,CHNGUPTO_2
Let Flt[6]=Flt[1]
Console_AddText 7337
GoTo RADIOPLUS

Label CHNGUPTO_2
If Flt[9]=1,-1,CHNGUPTO_3
Let Flt[6]=Flt[2]
Console_AddText 7338
GoTo RADIOPLUS

Label CHNGUPTO_3
If Flt[9]=2,-1,RADIOPLUS
Let Flt[6]=Flt[3]
Console_AddText 7339


Label RADIOPLUS
Let Flt[9]=Flt[9]+1
If Flt[9]>3,-1,CHANGEDUP
Let Flt[9]=-1
Console_AddText 18970051
GoTo RADIO_OFF_UP
Label CHANGEDUP
Stream_Fadevol 6,1,1,1
Label RADIO_OFF_UP
CommandBlock 0

Let Flt[7]=0
Label 3333
Ctrl_Read 5,JUMP1
If Flt[5]=1,-1,READ_DOWN
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<5,3333,-1
GoTo READ_DOWN



Label RADIO_DOWN
CommandBlock 1
Stream_Fadevol 6,1,0,0

Label CHNGDWNTO_3
If Flt[9]=-1,-1,CHNGDWNTO_2
Let Flt[6]=Flt[3]
Console_AddText 7339
GoTo RADIOMINUS

Label CHNGDWNTO_2
If Flt[9]=3,-1,CHNGDWNTO_1
Let Flt[6]=Flt[2]
Console_AddText 7338
GoTo RADIOMINUS

Label CHNGDWNTO_1
If Flt[9]=2,-1,CHNGDWNTO_0
Let Flt[6]=Flt[1]
Console_AddText 7337
GoTo RADIOMINUS

Label CHNGDWNTO_0
If Flt[9]=1,-1,RADIOMINUS
Let Flt[6]=Flt[0]
Console_AddText 7336

Label RADIOMINUS
Let Flt[9]=Flt[9]-1
If Flt[9]=-1,RADIO_OFF_DOWN,-1
If Flt[9]<-1,-1,CHANGEDDOWN
Let Flt[9]=3
Label CHANGEDDOWN
Stream_Fadevol 6,1,1,1
Label RADIO_OFF_DOWN
CommandBlock 0

Let Flt[7]=0
Label 2222
Ctrl_Read 5,CROUCH1
If Flt[5]=1,-1,CHECKPLAY
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<5,2222,-1
GoTo CHECKPLAY



Label POSITION
If Flt[4]=0,CHECK_IN_CAR,-1
GetGameTime 7
Let Flt[10]=Flt[7]-Flt[8]
If Flt[10]<500,CHECK_IN_CAR,-1
Let Flt[8]=Flt[7]

Label GETPOS0
Stream_GetPos 0,7
If Flt[7]=Flt[15],RADIO0END,-1
Let Flt[15]=Flt[7]
GoTo GETPOS1
Label RADIO0END
Stream_Fadevol 0,1,0,0
Stream_Pause 0
Stream_Destroy 0
Label RAND0
Rnd 10,23
If Flt[11]=Flt[10],RAND0,-1
Let Flt[11]=Flt[10]
Let Flt[19]=1
Let Flt[15]=0
GoTo RADIO00CREATE
Label REPLAY0
CommandBlock 1
Stream_Fadevol 0,1,0,0
Stream_Play 0
Let Flt[19]=0
CommandBlock 0
If Flt[9]=0,-1,GETPOS1
Let Flt[6]=Flt[0]
Stream_Fadevol 0,1,1,1

Label GETPOS1
Stream_GetPos 1,7
If Flt[7]=Flt[16],RADIO1END,-1
Let Flt[16]=Flt[7]
GoTo GETPOS2
Label RADIO1END
Stream_Fadevol 1,1,0,0
Stream_Pause 1
Stream_Destroy 1
Label RAND1
Rnd 10,24
If Flt[12]=Flt[10],RAND1,-1
Let Flt[12]=Flt[10]
Let Flt[19]=1
Let Flt[16]=0
GoTo RADIO01CREATE
Label REPLAY1
CommandBlock 1
Stream_Fadevol 1,1,0,0
Stream_Play 1
Let Flt[19]=0
CommandBlock 0
If Flt[9]=1,-1,GETPOS2
Let Flt[6]=Flt[1]
Stream_Fadevol 1,1,1,1

Label GETPOS2
Stream_GetPos 2,7
If Flt[7]=Flt[17],RADIO2END,-1
Let Flt[17]=Flt[7]
GoTo GETPOS3
Label RADIO2END
Stream_Fadevol 2,1,0,0
Stream_Pause 2
Stream_Destroy 2
Label RAND2
Rnd 10,24
If Flt[13]=Flt[10],RAND2,-1
Let Flt[13]=Flt[10]
Let Flt[19]=1
Let Flt[17]=0
GoTo RADIO02CREATE
Label REPLAY2
CommandBlock 1
Stream_Fadevol 2,1,0,0
Stream_Play 2
Let Flt[19]=0
CommandBlock 0
If Flt[9]=2,-1,GETPOS3
Let Flt[6]=Flt[2]
Stream_Fadevol 2,1,1,1

Label GETPOS3
Stream_GetPos 3,7
If Flt[7]=Flt[18],RADIO3END,-1
Let Flt[18]=Flt[7]
GoTo CHECK_IN_CAR
Label RADIO3END
Stream_Fadevol 3,1,0,0
Stream_Pause 3
Stream_Destroy 3
Label RAND3
Rnd 10,10
If Flt[14]=Flt[10],RAND3,-1
Let Flt[14]=Flt[10]
Let Flt[19]=1
Let Flt[18]=0
GoTo RADIO03CREATE
Label REPLAY3
CommandBlock 1
Stream_Fadevol 3,1,0,0
Stream_Play 3
Let Flt[19]=0
CommandBlock 0
If Flt[9]=3,-1,CHECK_IN_CAR
Let Flt[6]=Flt[3]
Stream_Fadevol 3,1,1,1

GoTo CHECK_IN_CAR

Firefox3860
14.10.2020, 23:26
Отображать номер радиостанции 1 - 4, а выключение показывать не обязательно. Если радио выключено, человек и так это слышит.А я чё-то не понял, это как у тебя работает-то? Что за строки 7336, 7337, 7338, 7339? В файле нет таких ID. У меня ничего не отображается.

Я предлагаю добавить новые строки в textdb_ru.def, с названиями радиостанций.
Тогда всё будет красиво.Идеальный на первый взгляд вариант, но при детальном рассмотрении оказывается, что его надо бояться как огня. Файлы типа textdb_ru.def (_en, _cz, _de,..) крайне нежелательно менять по разным поводам. Они сильно отличаются во всех версиях (да хотя бы по языкам) и уже по 100 раз поменяны. В сборке модов уж точно и так много версий этих файлов...Так что очень желательно обойтись имеющимися строками.
Теперь надо решить, будем ли чем-то заполнять четвёртую станцию. и нужна ли она нам вообще?Это к Abradox'у надо, он что-то хотел туда положить.
И, после этого, от версии 2.1, "каноичной" перейти к созданию полуканоничной версии 2.2 "Трио", в которой будет музыка из всех трёх мафий, и неканоничной расширенной версии 2.3, в которой, кроме всего этого будут две кастомные радиостанции и "джой радио" )Ага)

Кнопки-то ты переназначил, вот только местами их перепутал :D И забыл убрать пробелы на 4 станции. Короче вот так надо пока (расширение изменить на .sc).

Abradox
14.10.2020, 23:58
Я хотел туда добавить еще музыку 30-х.
Давайте так: пока делаем 4 радио пустым, а в самом конце, когда всё будет готово, я забираю эту версию и потом удаляем 4-ю радиостанцию.
Хотел просмотреть музыку из Мафии 2 и L.A. Noir и забрать ту, что относится к 30-м годам.

Firefox3860
15.10.2020, 00:17
Abradox, Что-то я не понял, зачем удалять 4 станцию, если ты хотел на неё поставить музыку 30-х?

Abradox
15.10.2020, 00:18
Я не знаю, Вам вроде она не нужна была... хотели удалить...
Тогда оставляем.

Firefox3860
15.10.2020, 00:24
Да нет, удалять не собирались. Просто тогда думали, что с ней можно сделать.

KlassenAS
15.10.2020, 00:52
А я чё-то не понял, это как у тебя работает-то? Что за строки 7336, 7337, 7338, 7339? В файле нет таких ID. У меня ничего не отображается.
Странно, у меня под этими номерами идут строки с цифрами 1 - 4.
Подумаю ещё.

Кнопки-то ты переназначил, вот только местами их перепутал :D И забыл убрать пробелы на 4 станции. Короче вот так надо пока (расширение изменить на .sc).
Ничего не перепутал ) У меня всё логично было Вперёд - прыжок, назад - присесть.
Я их на квадратные скобки назначил.
А у тебя там какие клавиши?
А на четвёртой я не то, чтобы забыл. Просто подумал, оно не к спеху, ещё ж не решили ничего.
Нафига вордовский .doc? там же другой формат вообще, обычный txt нужен.
У тебя у самого-то переименованные вордовские файлы работают? Патчер их понимает, вообще? Я чёт не уверен на этот счёт.
Или закопипастил бы под спойлер.

Я хотел туда добавить еще музыку 30-х.
Хотел просмотреть музыку из Мафии 2 и L.A. Noir и забрать ту, что относится к 30-м годам.
Не обязательно ограничиваться 30-ми.
В то время оставалась популярной и музыка конца 19 века. А музыка нулевых и двадцатых, подавно была в ходу. Регтаймы, например, Скотта Джоплина и др. авторов.
Знаменитый How Long Blues, написанный Лероем Карром, а ещё танго, фокстроты.
Я по этой теме завтра вечерком тоже пройдусь, найду чего интересного )

Firefox3860
15.10.2020, 01:10
Странно, у меня под этими номерами идут строки с цифрами 1 - 4.Файл что ли какой-то заменённый?.. Или версия странная. У меня в этих файлах ID примерно на 5300 заканчиваются.

Ничего не перепутал ) У меня всё логично было Вперёд - прыжок, назад - присесть. Я их на квадратные скобки назначил. А у тебя там какие клавиши?Всё таки странное у тебя назначение клавиш) У меня это всегда были левые shift и ctrl. То есть вперёд - shift, назад - ctrl.

Нафига вордовский .doc? там же другой формат вообще, обычный txt нужен. У тебя у самого-то переименованные вордовские файлы работают?ох... Да нет, конечно, я же написал: расширение изменить на .sc. Ну или .txt. Это не вордовский файл, просто пришлось подмахнуть расширение, чтобы форум пропустил файл во вложения.

Firefox3860
15.10.2020, 13:56
Что за строки 7336, 7337, 7338, 7339? В файле нет таких ID. У меня ничего не отображается.У меня в этих файлах ID примерно на 5300 заканчиваются.Это я тут ошибся немного. Посмортел русский файл - действетильно, строки с такими id есть, в них - цифры. Но в английском файле таких id нет. Вот поэтому и говорю, что эти файлы менять нельзя, так как они у каждой версии игры свои. Вот даже с использованием имеющихся строк проблемы бывают.
И конечно, ID на 5300 не заканчиваются, это я id с номером порядковым перепутал.

KlassenAS
15.10.2020, 17:44
А может, замутить юзерам инструкцию по установке скрипта, с картинками?
Типа, для полноценной работы скрипта откройте такой-то файл с помощью такой-то проги (положить её в архив), вставьте такие-то строки с такими-то номерами.
Кому нужно, у тех будут красивые подписи радиостанций. Кому пофиг - те на слух )

Я тут ещё одну мысль родил, после того, как прошёл с этим скриптом несколько миссий:
Может, выключение радио сделать не при переключении радиостанций, а на отдельную клавишу?
Это поможет избежать проблем в миссиях. Если знаешь, что приближаешься к контрольной точке, типа, отвозишь пассажира, или к Луке Бертоне, то можно заранее выключить радио, потоки отдестроятся, и проблем с последующим сохранением не будет.

Чуть позже напишу, что там я по музыке присмотрел из тех времён. )
Куда будет удобнее всего залить архив с музыкой?

Abradox
15.10.2020, 18:02
Идея хорошая.

на какой-нибудь гугл-диск/яндекс-диск

Firefox3860
15.10.2020, 18:04
Типа, для полноценной работы скрипта откройте такой-то файл с помощью такой-то проги (положить её в архив), вставьте такие-то строки с такими-то номерами.Боюсь, это не будет никто делать, да и даже если так, всё равно id добавляемой строки не выбирает пользователь, его выставляет сама программа. А это опять же приводит к путанице на разных файлах. В принципе, нужно же просто момент видеть, а какой номер станции - и так не запутаешься) Так что лучше оставить просто 252 строку при переключении.

Может, выключение радио сделать не при переключении радиостанций, а на отдельную клавишу?И будешь каждому объяснять, что на подъезде к контрольной точке надо отключать радио, да ещё и специальной кнопкой, чтобы потоки дестроились, агаа :D Больше двух кнопок на такую фичу - уже сложно для пользователя, так что, мне кажется, без необходимости.

KlassenAS
15.10.2020, 19:05
Боюсь, это не будет никто делать, да и даже если так, всё равно id добавляемой строки не выбирает пользователь, его выставляет сама программа. А это опять же приводит к путанице на разных файлах. В принципе, нужно же просто момент видеть, а какой номер станции - и так не запутаешься) Так что лучше оставить просто 252 строку при переключении.
А вот и нифига. Mafia Text Editor 1.1 можно самому назначать id.
И во всех textdb полно незанятых номеров. Например, не заняты все 90000000 и более.
Там есть, где разгуляться, не опасаясь конфликтов.

В принципе, нужно же просто момент видеть, а какой номер станции - и так не запутаешься) Так что лучше оставить просто 252 строку при переключении.
В Mafia 2 полноценно отображались названия радиостанций и никто не жаловался )

Firefox3860
15.10.2020, 19:13
А вот и нифига. Mafia Text Editor 1.1 можно самому назначать id.каво... Ха, и вправду можно. А я всё с 1.0 сижу и на автоназначаемые id гляжу.

Ну ладно, давай так, если хочшь.

KlassenAS
15.10.2020, 19:32
Так, вот архивчик с музыкой, которая, по моему мнению, подходит для радиостанции Lost Heaven Dance.
Рэгтаймы и фокстроты - типичная танцевальная музыка тех лет.
https://drive.google.com/file/d/1f20ndg1723mzECqBsefm_BmK1bzzIeP-/view?usp=sharing
Послушайте, может быть, по вашему мнению, с какими-то треками я промахнулся и их стоит удалить.
Ну и поделитесь, что интересного сами нашли )

Ещё я просёк фишку с использованием чисел и переменных для переходов по меткам и оптимизировал алгоритм рандомизации треков.
Скрипт стал более, чем на 50 строк короче )

Firefox3860
16.10.2020, 00:54
KlassenAS, А неплохо :) Композиции хорошие, подходят. Мне только 4 и 10 (при сортировке по имени) не очень зашли. Надо подождать, чтоб ещё кто-то послушал.
Только ты уверен, что они все не позже 30-х? Просто некоторые блещут относительно современным качеством записи. Будет странновато выглядеть, учитывая, что они ещё ведь и передаются по радио :)

KlassenAS
16.10.2020, 10:14
KlassenAS,
Только ты уверен, что они все не позже 30-х? Просто некоторые блещут относительно современным качеством записи. Будет странновато выглядеть, учитывая, что они ещё ведь и передаются по радио :)
Возможно, мне попались современные записи некоторых произведений. Некоторые я нашёл просто по слову "фокстрот", и для них не было указано ни название, ни исполнитель. Мол, искал фокстрот - вот тебе )
Надо будет те, для которых есть названия, прогуглить ещё раз, проверить год, когда их написали, и для тех, что слишком хорошо звучат, поискать более старые записи.
Или ещё проще - я могу в аудиоредакторе обработать запись, чтобы звучала, как старая, с виниловой пластинки.
Тогда можно будет вообще не париться с тем, чтобы записи были обязательно тех лет.
Главное, чтобы написана была в те годы.
Ещё думаю, всё-таки, погуглить несколько танго. Тоже популярный жанр тех лет.
И тогда, если больше никто ничего интеиесного из музыки не подскажет, плейлист можно будет считать готовым.

Мне только 4 и 10 (при сортировке по имени) не очень зашли.
А, ну это понятно, среди рэгтаймов и фокстротов пара традиционных, для того времени, блюзов затесалась. Не танцевальная музыка, выделяется на общем фоне.
Я, в начале, хотел сделать эдакий "разносол" из разных жанров того времени, но потом так получилось, что собралась подборка произведений именно с танцевальным характером.
Блюзы можно приберечь для чего-нибудь другого.

Firefox3860
16.10.2020, 12:10
Да, желательно бы найти старые записи песенок

Abradox
16.10.2020, 12:43
Лучше искать старые версии, чем обрабатывать аудиофайлы делая "искуственое старение" (это только в крайнем случае).
(сортировал по имени)
01. Инес, румба-фокстрот - звучит достоверно, но слишком "кричащая"
Ambrose & His Orchestra — Manhattan (Foxtrot) - современное исполнение (найти исполнение 30-х).
Cezary Skubiszewski — Foxtrot Foxtrot - современное исполнение (найти исполнение 30-х).
Count_Basie_-_How_Long_Blues_64037789 - норм блюз + явно исполнение 30-х. годится
Enrique Santeugini — Rio Rita - слишком "попсовый" известный трек. Думаю что не подходит.
Fokstrot_-_Muzyka_30-40-h_godov_Fokstrot_(iPleer.com) - Тоже известная композиция, но ассоциируется с Америкой. сойдет.
Gabriel Yared — Foxtrot Dance - современное исполнение (найти исполнение 30-х).
Jiří Malásek se svojí skupinou — Foxtrot - годится.
John Leighton — Ballroom Foxtrot - отлично.
Leroy_Carr_-_How_Long_How_Long_Blues_48614676 - невыразительная + плохое качество звука.
muzyka_30-h_godov_-_fokstrot_(iPleer.com) - хороший вариант, но современное исполнение.
Muzyka_iz_filma_Dzhivs_i_Vuster_-_Fokstrot_(iPleer.com) - современное исполнение (найти исполнение 30-х).
Scott_Joplin_-_Magnetic_Rag_48740883 - только одно пианино + современное исполнение.
Scott_Joplin_-_Maple_Leaf_Rag_57595994 - известный трек + современное исполнение
Scott_Joplin_-_March_Majestic_48740868 - современное исполнение (найти исполнение 30-х).
Scott_Joplin_-_The_Entertainer_48323639 - известный трек + современное исполнение
Scott_Joplin_-_The_Ragtime_Dance_64575863 - современное исполнение (найти исполнение 30-х).
фокстрот музыка в MP3 - годится

Нужно что-то ближе к этому
https://www.youtube.com/watch?v=9G5BuumJ5xA
https://www.youtube.com/watch?v=8_sOiE8G_cA

KlassenAS
16.10.2020, 13:20
Нужно что-то ближе к этому
https://www.youtube.com/watch?v=9G5BuumJ5xA
https://www.youtube.com/watch?v=8_sOiE8G_cA
По тому что есть пройдусь, поищу более старые записи.
Выдрать музыку с ютубовского видео - вообще пара пустяков )
Щас этим займусь и у нас будет готовый годный плейлист.

Firefox3860
16.10.2020, 13:27
muzyka_30-h_godov_-_fokstrot_(iPleer.com) - хороший вариант, но современное исполнение.Единственная песня, у которой я узнал название, потому что она есть на радио в М2. Это "Sing, Sing, Sing 300 minutes", нашёл запись в старом исполнении - https://dropmefiles.com/SUvB2

Потом, когда список будет готов, надо будет ещё их все переконвертировать под одинаковый формат - битрейт всем под 128 подогнать (больше не надо), ну и чтобы оттуда всякие метаданные выкинуть, вроде картинок и названий альбомов.

EmptyBowl
16.10.2020, 15:31
Потом, когда список будет готов, надо будет ещё их все переконвертировать под одинаковый формат - битрейт всем под 128 подогнать (больше не надо), ну и чтобы оттуда всякие метаданные выкинуть, вроде картинок и названий альбомов.

128 не стоит слишком мало. Звук будет "так себе" для тех у кого колонки хорошие или наушники.

256 хотя бы

Abradox
16.10.2020, 15:33
минимум 192, а то и 256, а можно оставить и исходные.

Firefox3860
16.10.2020, 17:29
Вы сами-то слышите разницу между 128 и 256? У записей из m1de вообще примерно 110.

KlassenAS
16.10.2020, 17:39
Нужно что-то ближе к этому
https://www.youtube.com/watch?v=9G5BuumJ5xA
https://www.youtube.com/watch?v=8_sOiE8G_cA
Вот композиции из видео, что ты скинул:
https://drive.google.com/file/d/1Da3hFGpLQyFaAKpKyeYCAzzr_e2jFNyJ/view?usp=sharing
Всего 21 трек. Немало.

Вот здесь те треки, которые ты одобрил, плюс я скачал кое-чего ещё.
https://drive.google.com/file/d/1hmHUJGz4ZtQp4Xg9OvKslm8j0f5etRpF/view?usp=sharing

Думаю, можно больше не тратить время на поиски, и решить, что войдёт в плейлист четвёртой радиостанции.

Вы сами-то слышите разницу между 128 и 256? У записей из m1de вообще примерно 110.
Ты даже не представляешь, как хорошо слышно разницу, когда у тебя звуковуха Focusrite, уши AKG и колонки DynAudio )
Я даже слушая профессиональные студийные записи во FLAC слышу разницу: Вот у Линдеманна барабаны звучат ярко и свежо. А в последнем альбоме Тарьи косорукий звукарь избыточной компрессией и лимитером всю динамику задушил.
Ещё, конечно, нужно уметь понимать детали того, что ты слышишь.
Но быть для этого музыкантом не обязательно, достаточно быть внимательным. У кого нормальные колонки/наушники, и собственные уши правильно настроены, тот от низкого битрейта начнёт в монитор плеваться.
Впрочем, есть ещё важная деталь: когда музыка смешана с огромным количеством звуков в игре, разобрать её качество уже не так легко, даже с хорошим аппаратом.
Так что я склоняюсь к золотой середине, 192 kbps

Firefox3860
18.10.2020, 02:15
Ты даже не представляешь, как хорошо слышно разницу, когда у тебя звуковуха Focusrite, уши AKG и колонки DynAudio )То есть прямо одни и те же записи на таком оборудовании в разном битрейте звучат заметно по-разному? Честно говоря, специально раньше брал песни в 320 (изначально отлично записанные), снижал до 160, и, как ни вслушивался, разницы не смог различить :) Звуковая карта у меня, конечно, не такая крутая - Creative Sound Blaster Audigy Fx, но с ушами вроде бы не совсем всё плохо :D

А у тебя же многие из тех, что ты скинул, уже в 128 идут. Не заметил? :) Предлагаешь, чтобы было одни с одним битрейтом, другие с другим?
А вот в файле "Ambrose_his_orchestra_-_Love_me_or_leave_me_(iPleer.com).mp3" из "всякого" посмотри-ка, сколько kb/s, ну-ка? :D

Да и это же вам радио 30-х годов будет, а не современная аудиоаппаратура :D

В принципе, список композиций во "всяком" меня устраивает, решайте, если что-то ещё захотите поменять, и составим итоговый вариант :)

KlassenAS
18.10.2020, 11:10
А у тебя же многие из тех, что ты скинул, уже в 128 идут. Не заметил? :) Предлагаешь, чтобы было одни с одним битрейтом, другие с другим?

То, что я слышу разницу в качестве, не значит, что я к нему привередлив.
Хотя и понимаю тех, кто к качеству придирчив.
И я не вижу проблемы в том, чтобы битрейт был разный.
Кому нужна эта стандартизация под одну гребёнку?
Если записям с низким битрейтом начать битрейт повышать, качество лучше не станет.
Но зачем из-за этого чрезмерно занижать записи, которые звучат хорошо?
Мне кажется, ты придумал сложность, где её нет.

Firefox3860
18.10.2020, 14:51
KlassenAS, Ну, возможно. Я её придумал просто для того, чтобы занимаемое ими место сократить. Ладно, тогда по-твоему подгоним под 192 kbps нужные, и всё.

Abradox
18.10.2020, 17:04
Вот композиции из видео, что ты скинул:
https://drive.google.com/file/d/1Da3hFGpLQyFaAKpKyeYCAzzr_e2jFNyJ/view?usp=sharing
Всего 21 трек. Немало.immie Lunceford Blues In The Night наверное лучше вычеркнуть.

Вот здесь те треки, которые ты одобрил, плюс я скачал кое-чего ещё.
https://drive.google.com/file/d/1hmHUJGz4ZtQp4Xg9OvKslm8j0f5etRpF/view?usp=sharingТут всё годится.

Думаю, можно больше не тратить время на поиски, и решить, что войдёт в плейлист четвёртой радиостанции.Треков достаточно. Я думаю надо перемешать их так, чтобы пара песен чередовалась с музыкой где нет слов или почти нет, и жанры тоже можно чередовать.

KlassenAS
18.10.2020, 17:51
Треков достаточно. Я думаю надо перемешать их так, чтобы пара песен чередовалась с музыкой где нет слов или почти нет, и жанры тоже можно чередовать.
У нас же и так рандомное воспроизведение.

Щас займусь переименованием записей для плейлиста радио, проверю битрейт, и соберу всё вместе в один архив для удобной установки мода.

Я её придумал просто для того, чтобы занимаемое ими место сократить.
Не такой уж и большой мод, чтобы над экономией места думать.
Ты видел мод HD Reworked Project для Ведьмак 3? 9,3 ГБ текстур!
В сравнении с ним весь наш плейлист для радио - так, пустяк.

grandshot
18.10.2020, 18:29
Ты даже не представляешь, как хорошо слышно разницу, когда у тебя звуковуха Focusrite, уши AKG и колонки DynAudio

Но быть для этого музыкантом не обязательно, достаточно быть внимательным. У кого нормальные колонки/наушники, и собственные уши правильно настроены, тот от низкого битрейта начнёт в монитор плеваться.


У меня в некотором роде дисбаланс: бюджетная звуковая Asus Xonar DGX и изодинамические Fostex T40 RP. Музыка лишь в Foobar'е, в режиме Asio, звучит мелодичнее. Разница между flac и mp3, правда, не всегда ощущается. А вот в роликах на Ютубе, между плохим и хорошим битрейтом, различия уже конкретно воспринимаются на слух.

Andrey
18.10.2020, 22:42
То есть прямо одни и те же записи на таком оборудовании в разном битрейте звучат заметно по-разному?

Как ни странно, но да. Разницу можно услышать :D


Да и это же вам радио 30-х годов будет, а не современная аудиоаппаратура :D

Чтобы в игре воссоздать радио 30ых годов, надо музыку, которая играет в цифре пропустить через фильтры, которые наложат гармоник, шумов, искажений и т.д., и создадут иллюзию аналогового аудиотракта, поэтому проще, всё-таки, вложить записи с максимальным качеством и наслаждаться ими, а не ворчать что из дедового приемника это звучало атмосфернее :D

KlassenAS
20.10.2020, 12:36
Так, друзья радиолюбители.
Архив с модом получился небольшой, меньше 300 Мб.
Я даже не стал записям битрейт резать, т.к. тут нечего экономить.
https://drive.google.com/file/d/18GmxE4BHk1_WJSE38YK9SSdqSvvDTSGB/view?usp=sharing

Вопросы:
1 Какие файлы надо добавить в мод, чтобы пользователь мог поставить его на "чистую" игру?
2 Не забыли ли мы чего-нибудь? Может, надо сделать чего-нибудь ещё, перед тем, как подготовить мод к релизу.

Abradox
20.10.2020, 14:16
Нужен Патчер Голода55 с правильными настройками

Firefox3860
20.10.2020, 14:42
Вопросы:
1 Какие файлы надо добавить в мод, чтобы пользователь мог поставить его на "чистую" игру?
2 Не забыли ли мы чего-нибудь? Может, надо сделать чего-нибудь ещё, перед тем, как подготовить мод к релизу.Файлов хватает. Надо только написать текстовое описание мода и инструкцию по установке и использованию. Отдельно написать про добавление строк в texdb и указать, что это вообще необязательно для работы мода. А то будет возникать очень много вопросов по этому поводу.
Только ты забыл удалить из файлов мусор в виде метаданных и картинок :loosed:

Нужен Патчер Голода55 с правильными настройкамиПатчер он положил, с настройками только для работы скрипта радио.

KlassenAS
20.10.2020, 15:00
Только ты забыл удалить из файлов мусор в виде метаданных и картинок :loosed:
Значит, щас буду удалять )

И описание писать.

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

Abradox
20.10.2020, 15:28
А вот на счет dll я уже не помню какая именно ему нужна.

Firefox3860
20.10.2020, 15:33
А щас что-то не так пошло. Начал тестировать. Оказалось, что первоначально выпадает постоянно 1-я музыка, причём на всех 4 станциях. Которая первая в перечислении в скрипте. И когда она заканчивается, то начинается она же опять. Что-то не так, видимо, с переходом по label'ам.
И всё таки wav-файлы у меня почему-то никак не хотят воспроизводиться (из-за этого щас на первой станции вообще тишина). Перенеси их что ли тогда в конец перечисления, чтобы можно было ограничить диапозоном значений случайной величины.

А вот на счет dll я уже не помню какая именно ему нужна.Никакая ему не нужна, в самом архиве патчера их нет. Значит, все нужные должны быть вместе с игрой. Правда, в read me пишут, что с версией 1.1 игры не работает.


И я понял, из-за чего скрипт не переходит по меткам. Ты добавил 20 переменную, а Dim_Flt на 21 изменить забыл. Так работает :)

И что-то ты, на мой взгляд, много скучноватых песенок накидал на "City Swing".

grandshot
20.10.2020, 15:47
Насколько я знаю, патчер сам по себе работать не будет, ему какая-то dll для работы нужна. И не факт, что она по умолчанию присутствует в любом репаке.

Чтобы .asi подхватилась необходим ultimate asi loader (https://github.com/ThirteenAG/Ultimate-ASI-Loader/releases). Он идет вместе с widescreen fix'ом (файл d3d8.dll). Так всем у кого фикс установлен, ничего дополнительно ставить не надо. Лишь копировать asi файл патчера в папку scripts.

KlassenAS
20.10.2020, 16:16
Ты добавил 20 переменную, а Dim_Flt на 21 изменить забыл. Так работает :)
Однако накосепорил малость, когда алгоритм оптимизировал )
Спасибо, исправил.
Он идет вместе с widescreen fix'ом (файл d3d8.dll).
Не, по твоей ссылке на Ultimate ASI Loader в архиве лежит тлько файл dinput8.dll
И в архиве с widescreen fix тоже только этот файл.
Значит, добавим его в архив, вдруг кто-то играет без widescreen fix.
Мало ли, вдруг у человека моник старый 1024х768.

Любопытно: в сборке модов Mafia_widescreen_fix.asi лежит в папке scrips.
А патчер из неё работать отказывается, ему только корневую папку игры подавай.

Abradox
20.10.2020, 16:53
И что-то ты, на мой взгляд, много скучноватых песенок накидал на "City Swing".Можно сделать 5-е радио со скучным блюзом, а на 4-м оставить веселые/танцевальные. Отсортируй тогда.

Добавлено через 2 минуты
Любопытно: в сборке модов Mafia_widescreen_fix.asi лежит в папке scrips.
А патчер из неё работать отказывается, ему только корневую папку игры подавай.У меня Patcher.asi и Patcher.cfg лежат в папке scripts и успешно работают из нее.

KlassenAS
20.10.2020, 17:13
Можно сделать 5-е радио со скучным блюзом, а на 4-м оставить веселые/танцевальные. Отсортируй тогда.
Весёлых тогда не хватит )
Я потому и поменял первоначальное название "Lost Heaven Dance" на "City Swing", что стало много не танцевальных композиций.
У меня Patcher.asi и Patcher.cfg лежат в папке scripts и успешно работают из нее.
Разобрался.
И так и так работает, просто скрипт должен обязательно лежать в той же папке, что и патчер. А я его всё время оставлял в корневой.

Haku
20.10.2020, 17:24
KlassenAS, https://thirteenag.github.io/wfp#mafia https://github.com/ThirteenAG/WidescreenFixesPack/releases/tag/mafia

KlassenAS
20.10.2020, 17:36
KlassenAS, https://thirteenag.github.io/wfp#mafia https://github.com/ThirteenAG/WidescreenFixesPack/releases/tag/mafia
Я уже взял Dll из сборки модов, но всё равно спасибо!

grandshot
20.10.2020, 20:43
по твоей ссылке на Ultimate ASI Loader в архиве лежит тлько файл dinput8.dll

В описании по ссылке есть информация, что .dll файл лоадера может быть переименован под любую из служебных .dll, которые могут подхватываться движками из корневых директорий: d3d8.dll, dinput8.dll, dsound.dll и др.

KlassenAS
20.10.2020, 21:08
В описании по ссылке есть информация, что .dll файл лоадера может быть переименован под любую из служебных .dll, которые могут подхватываться движками из корневых директорий: d3d8.dll, dinput8.dll, dsound.dll и др.
Тогда надо разбираться, какая из всех этих dll в сборке Community Mod Pack - та самая. Потому, что я хочу, чтобы у Auto Radio Mod была полная совместимость с модпаком и ничего не конфликтовало. А если щас начать от балды dll переименовывать, то без косяков не обойдётся.

Abradox
21.10.2020, 00:55
Вытащи эту песню начиная с 0:56 и дабавь в список 4-го радио.

bFBx3qYGxL8

Если взял dll из сборки, то должно работать

KlassenAS
21.10.2020, 12:32
Вытащи эту песню начиная с 0:56 и дабавь в список 4-го радио.
Загуглил, её можно просто скачать без танцев с бубном, кто-то уже слил в mp3 в сеть, похоже, как раз из этого видео и извлекли.
Из видео есть смысл извлекать, если с самого начала. Зачем терять вступление? Оно тоже классное.
Песня и мульт - просто шик!

Написал Readme.
У кого какие будут замечания, предложения?
Auto Radio Mod

Автор KlassenAS

Помощь в создании: Abradox, Firefox3860

Эксклюзивно для сайта Mafia-Game.ru

Если Вы опубликуете этот мод на другом сайте без указания авторства и ссылки на сайт mafia-game.ru, то будете наказаны трёхэтажным матом в Ваш адрес.

Данный мод представляет собой скрипт, работающий благодаря плагину patcher.asi авторства GOLOD55

Теперь у Вас есть возможность слушать радио в автомобиле.
Когда Томми садится в автомобиль, автоматически включается радио.
Дотупны 4 радиостанции:
1 Радио с родной музыкой Mafia: The City Of Lost Heaven, 23 трека.
2 Радио с музыкой из Mafia: Definitive Edition, 24 трека.
3 Радио с музыкой из Mafia: Definitive Edition, 24 трека.
4 Радио с подборкой музыки начала 20 века, вплоть до 40-х гг. 35 треков.

Вы можете переключать радиостанции при помощи дополнительных клавиш "присесть" и "прыжок"
Также, переключая радиостанции, вы можете выключить радио.
Композиции на радио играют в случайном порядке.

УСТАНОВКА:
Скопировать содержимое папки "mod" в папку с игрой.

ВАЖНО: Если Вы будете проходить с этим модом сюжет, и произойдёт сохранение во время того, как Томми находится в машине, то при загрузке этого сохранения произойдёт баг, музыка начнёт играть сама собой. Это вызвано особенностями работы игрового движка.
Во всех остальных случаях багов не замечено.

ДОПОЛНИТЕЛЬНО:
Скрипт может отображать названия радиостанций при переключении и при посадке в машину.
Чтобы данная опция работала, необходимо отредактировать файл textdb_??.def, лежащий в папке tables в папке с игрой.
Для редактирования этого файла к моду прилагается программа Mafia Text Editor 1.1
С помощью этой программы добавьте в файл следующие строки с идентификаторами:
90000000 Radio Off
90000001 Radio "Lost Heaven"
90000002 Radio "Definitive 1"
90000003 Radio "Definitive 2"
90000004 Radio "City Swing"
В папке с программой Вы найдёте иллюстрации, демонстрирующие её использование.
Важно не менять идентификаторы строк, иначе скрипт их не найдёт.
Если Вы желаете, вы можете заменить музыку в папке "radio" на собственную и придумать собственные названия радиостанций.
При этом необходимо, чтобы имена файлов остались неизменными, иначе скрипт их не найдёт и Вам придётся наслаждаться тишиной.

Приятных Вам поездок по Лост-Хевену!

Если взял dll из сборки, то должно работать
Ещё быть бы уверенным, что взял нужную )

Firefox3860
21.10.2020, 14:29
Данный мод представляет собой скрипт, работающий благодаря плагину patcher.asi авторства GOLOD55Плагин называется "Mafia Patcher".

Ну, к 5-му предложению осталось только добавить: "© Команда Mafia-Game.ru. Все права нарушены.:koza:" :D

Всё таки 35 треков на одной станции - слишком много, тем более, что они скучные. Будут просто так место занимать. Не против, если я немного отсортирую и некоторые повыкидываю? :nyam:

grandshot
21.10.2020, 14:43
я хочу, чтобы у Auto Radio Mod была полная совместимость с модпаком и ничего не конфликтовало. А если щас начать от балды dll переименовывать, то без косяков не обойдётся.

*.asi файлы - это те же самые .dll, содержащие в себе изменения, влияющие на адреса памяти в процессе движка игры. Loader их лишь подгружает, потому что сами по себе .dll обычно не погружаются, кроме тех что со служебными названиями: d3d8.dll, dinput8.dll, dsound.dll и др. Именно поэтому dll лоадера следует переименовать под одну из них. И как бы ты dll не переименовывал, оригинальная библиотека с тем же названием в любом случае будет подгружена из системных файлов.

Коллизии могут быть, разве что, с ENB Series (подгружается как d3d8.dll) или Creative ALchemy\ DSOAL (dsound.dll). Но первый можно переименовать в .asi файл и переместить в папку scripts. По крайней мере, у меня когда-то работало.

И да, два Loader'a в папке с игрой, например под названиями d3d8.dll и dinput8.dll, проблем также вызвать не должны. Возможно, такой случай предусмотрен, и второй лоадер не подгружается. Либо они срабатывают друг за другом, подгружая те же самые .asi файлы и заменяя те же самые адреса в памяти. Но к вылету это не приводит.

Abradox
21.10.2020, 15:13
Всё таки 35 треков на одной станции - слишком много, тем более, что они скучные. Будут просто так место занимать. Не против, если я немного отсортирую и некоторые повыкидываю? :nyam:ну окей отсортируй, выкинь "лишнее", только не выкидывай cab callaway


Зачем вообще переименовывать эти .dll? Какой именно нужен для работы мода, если не установлены другие? Некоторые будут ставить радио на уже установленную сбрку и если заменить "не тот" .dll то всё перестанеть работать.

KlassenAS
21.10.2020, 15:15
И как бы ты dll не переименовывал, оригинальная библиотека с тем же названием в любом случае будет подгружена из системных файлов.

И да, два Loader'a в папке с игрой, например под названиями d3d8.dll и dinput8.dll, проблем также вызвать не должны.
Спасибо. Тогда просто возьму dinput8.dll из Widescreen Fix.

Всё таки 35 треков на одной станции - слишком много, тем более, что они скучные. Будут просто так место занимать. Не против, если я немного отсортирую и некоторые повыкидываю? :nyam:
Я у себя успел уже все переименовать, пронумеровать и теги удалил.
Вот обновлённый архив:
https://drive.google.com/file/d/1vDXyC_BlOHeHM9h6b_rYYmTMAZN2Q5S6/view?usp=sharing
Напиши тогда список номеров на удаление, подумаем.
Может, мы с Abradox и не одобрим удаление некоторых )

Abradox
21.10.2020, 15:15
Написал Readme.
У кого какие будут замечания, предложения?
[SPOILER]Auto Radio ModПо readme замечаний/предложений нет.

Когда Том выходит из машины, то через некоторое время начинает играть обычная мафийная музыка по районам. Как её выключить вообще? Это не всегда бывает, но бывает. Проверь сам. Я в фрирайде это заметил.

KlassenAS
21.10.2020, 15:18
По readme замечаний/предложений нет.
Когда Том выходит из машины, то начинает играть обычная мафийная музыка по районам. Как её выключить вообще?
Удалить команду CityMusic_On из блока CarOut
И прописать CityMusic_Off где-нибудь в начале, возле присвоения значений переменным.
Мне, наоборот, нравится под музыку по городу слоняться.

ну окей отсортируй, выкинь "лишнее", только не выкидывай cab callaway
Если что, она последним номером идёт в списке.

Зачем вообще переименовывать эти .dll? Какой именно нужен для работы мода, если не установлены другие? Некоторые будут ставить радио на уже установленную сбрку и если заменить "не тот" .dll то всё перестанеть работать.
Grandshot написал, что конфликт, скорее всего, невозможен.
Можно убрать dinput8.dll в отдельную папку, и прописать в ридми, что если игрок не использует сборку модов и у него не установлены никакие asi плагины, то чтобы скопировал её тоже.

Abradox
21.10.2020, 15:47
В концепции Радио в автомобилях, музыки на улице быть не должно, я считаю.
Компактные плееры со встроенным радио еще не изобрели :D

Жду последнюю версию скрипта с отключенной городской музыкой и отобранные треки 4-й радиостанции.


Да, лучше убрать в отдельную папку.


У меня не работает 4 радио (которое с .mp4)

KlassenAS
21.10.2020, 16:21
Abradox, если тебе интересно, я нашёл пару торрентов с почти полным (или полным?) собранием короткометражных мультфильмов из цикла "Betty Boop", к которому относится то видео, что ты скинул, с белоснежкой.
Джаз 30-х годов, всё, как мы любим.
В наше время такой гениальный треш не снимают )

Abradox
21.10.2020, 16:29
В каком качестве? В очень плохом качестве у меня есть 70 серий.
Я гоняюсь за The Essential Collection в HD качестве (720p) Vol.3 и vol.4 (удалось найти только vol.1 и vol.2 по 12 серий в каждой).

Скинь мне ссылку на тот вариант что ты нашел.

Firefox3860
21.10.2020, 18:35
список на выкидывание:
03-04, 03-05, 03-08, 03-09, 03-11, 03-13, 03-15, 03-21
8 штук. Выбрал "невыразительные" и некрасивые. Осталось 27 нормальных :)

Если что, она последним номером идёт в списке.Это 03-34? Честно говоря, не понял, какая из них "cab callaway" (названий нету), но её оставил.

KlassenAS
21.10.2020, 19:21
Это 03-34? Честно говоря, не понял, какая из них "cab callaway" (названий нету), но её оставил.
Всё правильно )

Abradox
21.10.2020, 21:06
список на выкидывание:
03-04, 03-05, 03-08, 03-09, 03-11, 03-13, 03-15, 03-21
8 штук. Выбрал "невыразительные" и некрасивые. Осталось 27 нормальных :)Можно удалять их.

KlassenAS
21.10.2020, 21:28
Если больше замечаний и предложений не будет, то данную редакцию мода можно оформлять в релиз.
https://drive.google.com/file/d/1CNHcfwZ4PJT-sKRwApcWj8-CAxzQGZZm/view?usp=sharing

Firefox3860
21.10.2020, 22:59
Если больше замечаний и предложений не будет, то данную редакцию мода можно оформлять в релиз.Ага, только в Readme "4 Радио с подборкой музыки начала 20 века, вплоть до 40-х гг. 35 треков." - 35 на 27, и всё.

Abradox
21.10.2020, 23:04
Если больше замечаний и предложений не будет, то данную редакцию мода можно оформлять в релиз.
https://drive.google.com/file/d/1CNHcfwZ4PJT-sKRwApcWj8-CAxzQGZZm/view?usp=sharingтрэк radio03-26 в несколько раз тише чем все остальные.

Staghound
22.10.2020, 00:30
Без .dll-ки радио не работает
С .dll-кой игра пишет Unsupported game version detected и вообще не запускается

Firefox3860
22.10.2020, 00:37
С .dll-кой игра пишет Unsupported game version detected и вообще не запускаетсяА ну вот, о чём я раньше нписал - версия игры 1.1 не поддерживается патчером. Я щас тоже на ней попробовал, и то же самое случилось.

Staghound
22.10.2020, 01:56
Накатил сверху ремастер, патчер ругаться перестал - игра вроде как стала 1,2 и теперь запускается, но радио не работает. Либо я что то не так делаю. Не знаю -музыка как играла оригинальная, так и играет. И в машине и вне машины, и ничего не переключается.

Abradox
22.10.2020, 02:06
Я знаю почему. Когда ты накатываешь Патчер из сборки, то там использование скрипта выключено в Patcher.cfg

Вот попробуй этот файл
https://dropmefiles.com/soRXG

Сейчас как раз прохожу оригинальную Мафию, включил скрипт автомобильного радио и мне нравится! А то оригинальная музыка уже приелась, за столько лет. Особенно в ночных миссиях классно, в которых музыки обычно нет. После миссии Включаю 4-ю радиостанцию и катаюсь по ночному Лост Хэвену, атмосферненько! :music:

Staghound
22.10.2020, 02:34
Вот, теперь заработало! А скрипт и вправду вышел потрясный - как будто так и было в игре. Работает без рывков и фризов, очень здорово дополняет игру - мне понравилось!

KlassenAS
22.10.2020, 09:04
Значит, надо ещё добавить в ридми про версию игры и установку после модпака.

1MAMOHT1
22.10.2020, 11:23
Может быть добавить готовые варианты в первые посты темы!? Или на сайт выложить, в раздел скрипты... А то тема выросла и найти готовые варианты сложно :)
Сейчас как раз прохожу оригинальную тоже прохожу:beer: хотелось бы с радио попробовать

Abradox
22.10.2020, 13:13
Значит, надо ещё добавить в ридми про версию игры и установку после модпака.Возьми вот этот файл и помести его в архив. Он настроен и для патчера и для скрипта.

https://dropmefiles.com/soRXG

Добавлено через 1 минуту
тоже прохожу:beer: хотелось бы с радио попробоватьтак пробуй! вот мод https://drive.google.com/file/d/1CNH...ew?usp=sharing
а вот файл патчера настроенный для работы скрипта https://dropmefiles.com/soRXG
Если у тебя установлена наша сборка модов, то копирей только папку Radio и script.sc
а из другой ссылки бери Patcher.cfg

Когда подъезжаешь к чекпоинту, где будет катсцена, то просто выключаешь радио.

1MAMOHT1
22.10.2020, 18:56
Abradox
Ссылка на мод битая, только приехал с работы не успел скачать :shy: Patcher.cfg скачал Спасибо

Firefox3860
22.10.2020, 19:01
1MAMOHT1, Щас KlassenAS соберёт окончательную версию, и скачаем.
Осталось решить вопрос с треком 03-26, который был слишком тихий.

KlassenAS
22.10.2020, 19:25
Не всё верно:
Если у тебя установлена наша сборка модов, то копирей только папку Radio и script.sc
а из другой ссылки бери Patcher.cfg
Инсталлятор сборки модов, при выборе версии 1.2 не добавляет Mafia Patcher.
По крайней мере, у меня его не было, пока не поставил вручную.
Так что Patcher.asi тоже желательно копировать.

Когда подъезжаешь к чекпоинту, где будет катсцена, то просто выключаешь радио.
Сейчас в скрипте потоки уничтожаются только при выходе из машины.
В машине, при "выключении" радио просто убирается громкость.

Возьми вот этот файл и помести его в архив. Он настроен и для патчера и для скрипта.

https://dropmefiles.com/soRXG

Так может, мне стоит использовать с модом именно этот конфиг?

Сейчас проверяю все аудиофайлы, нормализую громкость.

Firefox3860
22.10.2020, 19:33
Может тогда просто положить в мод cfg, настоенный только для радио? А в инструкции написать, что если патчер уже установлен, то включить там (раскомментировать 2 строки) эти 2 функции.

KlassenAS
22.10.2020, 20:10
Может тогда просто положить в мод cfg, настоенный только для радио? А в инструкции написать, что если патчер уже установлен, то включить там (раскомментировать 2 строки) эти 2 функции.
Или положить в мод оба конфига, чтобы пользователь выбрал сам.
Например, config1 и config2 , удалите из названия цифру и скопируйте в папку с игрой.

Щас KlassenAS соберёт окончательную версию, и скачаем.
Я вообще хз, будет ли она окончательная сейчас )
Щас проверяю одну мысль, если заработает, я смогу ещё улучшить скрипт.

Abradox
23.10.2020, 01:29
Так может, мне стоит использовать с модом именно этот конфиг?Да, наверное лучше его.

Добавлено через 1 минуту
Я вообще хз, будет ли она окончательная сейчас )
Щас проверяю одну мысль, если заработает, я смогу ещё улучшить скрипт.

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

Abradox
23.10.2020, 12:02
Там оказывается у многих треков проблемы с уровнем громкости, не только у последнего.
Посмотри radio03-17 и radio03-19, может нужно их сделать громче.

Например radio03-13 слышно хорошо, а некоторые другие треки очень тихо играют. Я не знаю с чем это связано, хотя через обычный плеер они более менее одинаковой громкости.

grandshot
23.10.2020, 14:23
Например radio03-13 слышно хорошо, а некоторые другие треки очень тихо играют. Я не знаю с чем это связано, хотя через обычный плеер они более менее одинаковой громкости.

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

KlassenAS
23.10.2020, 16:54
Наверное это движок мафии не может корректно воспроизводить звуковые файлы некоторого битрейта или частоты дискретизации. Эта проблема встречается и среди оригинальных звуков - некоторые реплики персонажей воспроизводятся тише чем должны.
Там некоторые треки действительно звучат тише, это даже хорошо видно, когда открываешь их в Adobe Audition.

Я их все нормализовал, теперь должны звучать примерно одинаково.

Я не знаю с чем это связано, хотя через обычный плеер они более менее одинаковой громкости.
Скорее всего, плеер, открывая файл, считывает максимальные пики громкости, и по ним автоматичеки нормализует громкость при воспроизведении.
Сейчас во многих плеерах в настройках можно автоматическую нормализацию найти.

Может быть добавить готовые варианты в первые посты темы!? Или на сайт выложить, в раздел скрипты... А то тема выросла и найти готовые варианты сложно :)
Их я теперь тоже буду допиливать.
Опять.
Допилю, и в релиз пойдут сразу несколько )

Кстати, задумка удалась.
Я существенно доработал алгоритм скрипта, так-то это заметно только глядя в код, но есть существенная деталь: теперь потоки уничтожаются не только при выходе из машины, но и при выключении радио в машине. Так что выключение радио перед чекпоинтом теперь будет спасать от багов при загрузке этого сейва.
Просто просёк фишку с использованием перехода GoSub и Return, благодаря которым можно блок команд под меткой использовать как отдельную процедуру, вызываемую из либого места скрипта по необходимости, и не нужно заморачиваться со сложной логикой переходов и меток, если одну и ту же процедуру надо использовать несколько раз.

Также, теперь радио при старте скрипта выключено, что позволит избежать одновременного звучания вместе с сюжетной музыкой, например, в начале миссии "отказаться нельзя" и других подобных ситуациях. Включаем сами, своими руками )

Итак, вот обновлённая редакция мода:

Auto Radio Mod Ver. 2.1
https://drive.google.com/file/d/1r_umNb-UuY6wJzxWx0Aj18TUKQavctFc/view?usp=sharing

Auto Radio Mod Ver. 2.0
Перенёс доработки из 2.1, и теперь не 4х10, а 4х15
https://drive.google.com/file/d/1dolJwC3-rtZ-LP4_UA3pHyRb8LTJI447/view?usp=sharing

Firefox3860
23.10.2020, 18:59
теперь потоки уничтожаются не только при выходе из машиныА значит, теперь при выключении радио в машине радио тоже останавивает эфир?

Return возвращает управление в место вызова процелуры, независимо от того, откуда она была вызвана, да? А в чём отличие GoSub от goto?

1MAMOHT1
23.10.2020, 19:14
Что ж за непруха, у меня оказывается версия мафии 1.1 :fp: если подменить екзешник заработает или надо другую мафу качать!?

GoSub возвращает в тоже место скрипта через ретурн ;)

KlassenAS
23.10.2020, 19:15
А значит, теперь при выключении радио в машине радио тоже останавивает эфир?
Да. Потоки уничтожаются и можно спокойно сейвиться на чекпоинте не выходя из машины.

Return возвращает управление в место вызова процелуры, независимо от того, откуда она была вызвана, да?
Да.

А в чём отличие GoSub от goto?
GoTo - не возвратный переход, он не используется совместно с Return, хочешь после GoTo вернуться назад - делай дополнительные метки и переходы.
А GoSub - переход с возвратом и используется вместе с Return. Всё становится проще и не надо огород городить.
Причём, из под метки, переход на которую вызван оператором GoSub, можно тоже с помощью этого оператора перейти на другую процедуру, а оттуда на третью и т.д., и движок в многочисленных Return не запутается, я проверил.
Можно мутить "матрешку" с рекурсивным вызовом процедур.
Если внимательно посмотришь скрипт, у меня там есть такое.

Что ж за непруха, у меня оказывается версия мафии 1.1 :fp: если подменить екзешник заработает или надо другую мафу качать!?
Этот вопрос лучше адресовать к тем, кто сборку модов Mafia Community Modpack делал.
Там в инсталляторе есть выбор версии игры.
Они знают, что почём )
Я, пока что, только в скриптописании более-менее разобрался.

UPD:
Нашёл ошибку.
Сейчас заново буду архивы перезаливать.

Щас KlassenAS соберёт окончательную версию, и скачаем.
Ага, щас KlassenAS ещё +100500 ошибок исправит и обязательно соберёт! :D

UPD2:
Вот теперь похоже, что всё работает )

Ver. 1.1
https://drive.google.com/file/d/1A3ILWUu_bzImEX0Cwe6uToWdnNsDWJe4/view?usp=sharing

Ver. 1.2
https://drive.google.com/file/d/1bkUIvW82BjtVVCHOCukwnvNzp8LOTNzs/view?usp=sharing

Ver. 2.0
https://drive.google.com/file/d/1PQW-8Do-Kg0iU1uPciPKQyhKgCGGm8O3/view?usp=sharing

Ver. 2.1
https://drive.google.com/file/d/1lx1faG0VIdSmw910k_6xCmCs6iVAEXIu/view?usp=sharing

Хотя я допускаю, что ещё могут возникнуть вопросы к аудиофайлам.

Firefox3860
23.10.2020, 21:19
KlassenAS, Круто, собрал :D А я не понял про v2.0, там написано, что на первой станции ориг. музыка, а в скрипте и в папке radio там файлы от 4 станции. Это как?

KlassenAS
23.10.2020, 21:29
KlassenAS, Круто, собрал :D А я не понял про v2.0, там написано, что на первой станции ориг. музыка, а в скрипте и в папке radio там файлы от 4 станции. Это как?
Это я в ридми накосячил.
Я ж копировал из версии 2.1
Опять перезаливать )
В этой версии аудиофайлы чисто для иллюстрации работы скрипта.
При отсутствующих файлах скрипт нормально работать не будет.

UPD:
Исправил, перезалил, заменил ссылку.

У меня есть ещё подозрение, что некоторые mp3 игра не понимает и воспроизводит вместо них тишину.
Надо проверить и пошаманить над форматом, если что.

Abradox
23.10.2020, 23:29
Также, теперь радио при старте скрипта выключено, что позволит избежать одновременного звучания вместе с сюжетной музыкой, например, в начале миссии "отказаться нельзя" и других подобных ситуациях. Включаем сами, своими руками )Вот, это то чего не хватало, отличная идея!

Я правильно понимаю, версия 2.0 отличается от версии 2.1 тем что в ней нет оригинальной музыки из Мафии и треки из 3-х радиостанций разбиты на 4 радиостанции по 15 штук?

Добавлено через 21 минуту
Что ж за непруха, у меня оказывается версия мафии 1.1 :fp: если подменить екзешник заработает или надо другую мафу качать!?Помоему оно просто так не заработает.
Могу предложить попробовать exe отверсии 1.2 - https://dropmefiles.com/AOM8W
Game.exe наверное от версии 1.0 - https://dropmefiles.com/i1JqV

KlassenAS
24.10.2020, 06:37
Я правильно понимаю, версия 2.0 отличается от версии 2.1 тем что в ней нет оригинальной музыки из Мафии и треки из 3-х радиостанций разбиты на 4 радиостанции по 15 штук?
Да. Это связано с тем, что я позиционирую данную версию как шаблон для пользовательских плейлистов.
Наличие треков в папке необходимо просто потому, что без них стабильная работа скрипта не гарантирована.
А там уже пусть пользователь заменяет их своими записями, по вкусу.

1MAMOHT1
24.10.2020, 08:41
Помоему оно просто так не заработает.
Совершенно верно, буду переустанавливать, СПАСИБО

KlassenAS
24.10.2020, 15:43
Abradox, я не допёр, а нафига я извлекал блюз Cab Calloway "St James Infirmary Blues" из того видео и добавлял его в четвёртую радиостанцию, если эта песня у нас уже есть в "Radio Definitive"?
Трек 01-22
Кстати, оказалось, что именно его 03-26 игра и не воспроизводит, скрипт его после ожидания пропускает и запускает следующий.
Можем сделать так:
Раз эта песня уже есть в Radio Definitive, то выбери, какой вариант тебе больше нравится, из дефинитива или из видео. Если из видео, то я его конвертирую в ogg и заменю им дефинитивовский.

Забавно, оказывается, в нём не был удалён один из тэгов. После удаления игра стала его воспроизводить нормально. Но это не отменяет того, что эта песня у нас в двух экземплярах.

Firefox3860
24.10.2020, 18:56
Ну и пусть в двух экземплярах, ничего страшного. Они немного отличаются, да и могут ведь на разных станциях одинаковые композиции появляться :)

Abradox, а у тебя wav-файлы на первой станции воспроизводятся?

KlassenAS
24.10.2020, 19:08
Ну и пусть в двух экземплярах, ничего страшного. Они немного отличаются, да и могут ведь на разных станциях одинаковые композиции появляться :)
А сам говорил - место экономить )
Тогда сейчас заново заархивирую с исправленным треком и снова перезалью.
Как ни стараюсь, больше не нахожу, к чему придраться.

UPD:
Обновил архивы, перезалил, обновил ссылки для версий 2.1 и 2.0

Ждём день, если больше никто ни до чего не докопается, и обойдётся без исправлений, то оформим релиз.

UPD:
Abradox, а у тебя wav-файлы на первой станции воспроизводятся?
Вставь строку FreeRide_ScoreSet Flt[11] после метки RADIO00CREATE, перед строкой с переходом GoTo.
Сможешь отслеживать номера воспроизводимых треков.
Получишь точный ответ на вопрос.
У меня всё работает.

Кстати, я только что снова архивы 2.0 и 2.1 обновил )

UPD:
У меня родился коварный план: Что, если запоминать последние пять машин, в которые садился Томми, и запоминать состояние радио в этих машинах. Номер активной радиостанции или выкл, номера треков, их позиции, и если Томми повторно садится в одну из этих машин, то восстанавливать их?
А когда Томми лезет в какую-то новую машину, не ту, в которую сел первой в начале миссии, и не в ту, в которой был в последний раз, то присваивать радио рандомное состояние.
Всё это в рамках одной миссии, естественно. При переходе в новую миссию или при загрузке сейва всё будет сбрасываться.
Элемент реализьма )

Firefox3860
24.10.2020, 23:19
Вставь строку FreeRide_ScoreSet Flt[11] после метки RADIO00CREATE, перед строкой с переходом GoTo.
Сможешь отслеживать номера воспроизводимых треков.Как я и думал — числа генерируются, переходы по меткам тоже происходят, но когда дело доходит до воспроизведения, файл почему-то не читается. Когда случайная величина попадает в диапозон 0 - 6, то игра думает, что стрим оказался пустым, и величина сразу же генерируется заново. Так до тех пор, пока она не примет значение от 7 до 22. Страно, с файлами что-то не так, хотя они не заменены.

Кстати, я только что снова архивы 2.0 и 2.1 обновил )Что на этот раз? )

У меня родился коварный план: Что, если запоминать последние пять машин, в которые садился Томми, и запоминать состояние радио в этих машинах. Номер активной радиостанции или выкл, номера треков, их позиции, и если Томми повторно садится в одну из этих машин, то восстанавливать их?Привет, 2000 строк и 50 переменных? :D Если хочешь, конечно, было бы интересно. Но, по-моему, для релиза излишне :)

Abradox
24.10.2020, 23:31
Я не знал что она уже есть в Mafia Defenitive Edition :D
Если хочешь, то можешь заменить ее на другой трек, из тех что мы отбраковали ранее, или можешь оставить т.к. они всё-таки отличаются.

Abradox, а у тебя wav-файлы на первой станции воспроизводятся?да, wav-файлы работают, например Coucou играла и не только она.

Добавлено через 3 минуты
UPD:
У меня родился коварный план: Что, если запоминать последние пять машин, в которые садился Томми, и запоминать состояние радио в этих машинах. Номер активной радиостанции или выкл, номера треков, их позиции, и если Томми повторно садится в одну из этих машин, то восстанавливать их?
А когда Томми лезет в какую-то новую машину, не ту, в которую сел первой в начале миссии, и не в ту, в которой был в последний раз, то присваивать радио рандомное состояние.
Всё это в рамках одной миссии, естественно. При переходе в новую миссию или при загрузке сейва всё будет сбрасываться.
Элемент реализьма )Совершенству нет предела! :aee:
Я только за, крутой мод получается.

KlassenAS
24.10.2020, 23:39
Как я и думал — числа генерируются, переходы по меткам тоже происходят, но когда дело доходит до воспроизведения, файл почему-то не читается. Когда случайная величина попадает в диапозон 0 - 6, то игра думает, что стрим оказался пустым, и величина сразу же генерируется заново. Так до тех пор, пока она не примет значение от 7 до 22. Страно, с файлами что-то не так, хотя они не заменены.
Странно, файлы-то родные...
Может, сконвертировать их, нафиг, в ogg да кинуть в папку?
Тогда точно проблем не будет.

Что на этот раз? )
Перепутал номер переменной с активной радиостанцией, когда Томми садится в тачку.
Исправлено.

Привет, 2000 строк и 50 переменных? :D Если хочешь, конечно, было бы интересно. Но, по-моему, для релиза излишне :)
Да брось, 500 строк должно хватить, ещё запас останется для запуска Нила Армстронга на Луну.
В моём злом уме уже зреет жуткая логика замысловатого алгоритма.:devil:

Я не знал что она уже есть в Mafia Defenitive Edition :D
Если хочешь, то можешь заменить ее на другой трек, из тех что мы отбраковали ранее, или можешь оставить т.к. они всё-таки отличаются.

Тоже не ожидал, что в саундтреке Дефинитива такая годнота окажется )
Я её оставил.

Совершенству нет предела! :aee:
Даёшь народу настоящий скриптовый беспредел!!!

Abradox
24.10.2020, 23:45
Странно, почему у меня работают wav-файлы, а у Firefox3860 нет? :hz:

KlassenAS
24.10.2020, 23:48
Почему у меня работают wav-файлы, а у Firefox3860 нет?
Может, разные версии игры?
У меня версия 1.2 репак от R.G. Element Arts.
Тоже не понимаю. Загадка природы. Жумбактас!

Firefox3860
25.10.2020, 00:22
У меня 1.0 обычная, английская.
А у вас sounds не распакованы? Щас положил Coucou из dta в sounds - заиграла как следует. Получается, игра смотрит в dta только если путь указывает на папку music?

Abradox
25.10.2020, 00:55
У меня тоже версия 1.2 (steam) и папка sounds распакована.

KlassenAS
25.10.2020, 10:57
У меня распакована только sounds/music
В папке sounds лежат только звуки оружия из сборки модов.
Может, это у тебя особенность работы версии 1.0?
Попробуй для разнообразия поставить ещё 1.2 и сравнить.
С другой стороны, у нас и так уже есть ограничения по версиям игры, связанные с патчером.
Не вижу смысла заставлять игроков выбирать только версию 1.2
Думаю, лучше положить эти файлы в папку radio, чтобы игра к архивам не обращалась.

У меня родился коварный план: Что, если запоминать последние пять машин, в которые садился Томми, и запоминать состояние радио в этих машинах. Номер активной радиостанции или выкл, номера треков, их позиции, и если Томми повторно садится в одну из этих машин, то восстанавливать их?
А когда Томми лезет в какую-то новую машину, не ту, в которую сел первой в начале миссии, и не в ту, в которой был в последний раз, то присваивать радио рандомное состояние.
Всё это в рамках одной миссии, естественно. При переходе в новую миссию или при загрузке сейва всё будет сбрасываться.
Элемент реализьма )
Что-то я перемудрил. Радиоэфир-то для всех машин общий ) Достаточно запоминать только выбранную радиостанцию.
Сути это, конечно, не меняет. Без разницы, присваивать значение пяти переменным, или 50. Главное - логика процесса.

Firefox3860
25.10.2020, 13:37
Понятно. А ну и пусть тогда не воспроизводятся, я всё равно не хотел их в скрипт добавлять :)

KlassenAS
25.10.2020, 22:16
Написал процедуру, чтобы скрипт помнил последние девять тачек, в которых побывал Томми и радиостанции в них.
Также, теперь в каждой тачке, которая не первая, радиостанция или выкл задаются рандомно.

Перезалил архивы, обновил ссылки для 2.0 и 2.1.
Сам скрипт, если кому интересно подобное чтение:
//Radio Script Ver. 2.1 26-10-2020 By KlassenAS For Abradox
//Четыре радиостанции, более 20 треков на каждой
//Первая радиостанция с родной музыкой Mafia
//Радиостанции переключаются. Также радио можно выключить.
//При старте на каждой радиостанции случайным образом
//начинает играть один из треков.
//По окончании трека, следующий выбирается так же, случайным образом.

Dim_Act 13
Dim_Flt 31
GetActivePlayer 0
FindActor 1
FindActor 2
FindActor 3
FindActor 4
FindActor 5
FindActor 6
FindActor 7
FindActor 8
FindActor 9
FindActor 10
FindActor 11
FindActor 12
//Акторы 1-9 - для запоминания машин
//Актор 10 - для текущей машины
//Актор 11 - для прошлой машины
//Актор 12 - данный скрипт

//Удалить для использования в scene2.bin,
//Оставить для использования с патчем от GOLOD55
//Начало удаления
Human_GetProperty 0,4,Energy
If Flt[4]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on
//Конец удаления

CityMusic_Off

Let Flt[0]=0 //Поток 00
Let Flt[1]=0 //Поток 01
Let Flt[2]=0 //Поток 02
Let Flt[3]=0 //Поток 03
Let Flt[4]=0 //Логика
Let Flt[5]=0 //Нажатие клавиш вперёд1 и назад1
Let Flt[6]=0 //Последний активный поток
Let Flt[7]=0 //Сиденье/Время с начала игры/текущее время потока/
Let Flt[8]=0 //Прошлое время с начала игры
//Номер радиостанции
Let Flt[9]=-1
Let Flt[10]=-1 //Рандом для radio/разница во времени игры
Let Flt[11]=-1 //Трек на radio00
Let Flt[12]=-1 //Трек на radio01
Let Flt[13]=-1 //Трек на radio02
Let Flt[14]=-1 //Трек на radio03
Let Flt[15]=0 //Прошлое время потока 0
Let Flt[16]=0 //Прошлое время потока 1
Let Flt[17]=0 //Прошлое время потока 2
Let Flt[18]=0 //Прошлое время потока 3
Let Flt[19]=0 //Для перехода на следующий трек
Let Flt[20]=0 //Для перехода к меткам треков
//Номера радиостанций в запомненных тачках 1-9:
Let Flt[21]=-1
Let Flt[22]=-1
Let Flt[23]=-1
Let Flt[24]=-1
Let Flt[25]=-1
Let Flt[26]=-1
Let Flt[27]=-1
Let Flt[28]=-1
Let Flt[29]=-1
//Логика запоминания тачек:
Let Flt[30]=0

Rnd 11,23
Rnd 12,24
Rnd 13,24
Rnd 14,27

GoTo CHECK



Label RADIOCREATE

Label RADIO00CREATE
CommandBlock 1
Let Flt[20]=Flt[11]+100000
GoTo Flt[20]

Label 100000
Stream_Create 0,"sounds\03_music.wav"
GoTo RADIO00CREATED

Label 100001
Stream_Create 0,"sounds\13b_music.wav"
GoTo RADIO00CREATED

Label 100002
Stream_Create 0,"sounds\14_Coucou.wav"
GoTo RADIO00CREATED

Label 100003
Stream_Create 0,"sounds\18_radio.wav"
GoTo RADIO00CREATED

Label 100004
Stream_Create 0,"sounds\s_music1.wav"
GoTo RADIO00CREATED

Label 100005
Stream_Create 0,"sounds\s_music3.wav"
GoTo RADIO00CREATED

Label 100006
Stream_Create 0,"sounds\s_music5.wav"
GoTo RADIO00CREATED

Label 100007
Stream_Create 0,"sounds\music\city_music_01.ogg"
GoTo RADIO00CREATED

Label 100008
Stream_Create 0,"sounds\music\city_music_02.ogg"
GoTo RADIO00CREATED

Label 100009
Stream_Create 0,"sounds\music\city_music_03.ogg"
GoTo RADIO00CREATED

Label 100010
Stream_Create 0,"sounds\music\city_music_04.ogg"
GoTo RADIO00CREATED

Label 100011
Stream_Create 0,"sounds\music\city_music_05.ogg"
GoTo RADIO00CREATED

Label 100012
Stream_Create 0,"sounds\music\city_music_06.ogg"
GoTo RADIO00CREATED

Label 100013
Stream_Create 0,"sounds\music\city_music_07.ogg"
GoTo RADIO00CREATED

Label 100014
Stream_Create 0,"sounds\music\city_music_08.ogg"
GoTo RADIO00CREATED

Label 100015
Stream_Create 0,"sounds\music\city_music_09.ogg"
GoTo RADIO00CREATED

Label 100016
Stream_Create 0,"sounds\music\city_music_10.ogg"
GoTo RADIO00CREATED

Label 100017
Stream_Create 0,"sounds\music\city_music_11.ogg"
GoTo RADIO00CREATED

Label 100018
Stream_Create 0,"sounds\music\city_music_12.ogg"
GoTo RADIO00CREATED

Label 100019
Stream_Create 0,"sounds\music\city_music_13.ogg"
GoTo RADIO00CREATED

Label 100020
Stream_Create 0,"sounds\music\city_music_15.ogg"
GoTo RADIO00CREATED

Label 100021
Stream_Create 0,"sounds\music\12_scene music.ogg"
GoTo RADIO00CREATED

Label 100022
Stream_Create 0,"sounds\music\mise02-ulicka.ogg"
GoTo RADIO00CREATED

Label RADIO00CREATED
Stream_SetPos 0,15
CommandBlock 0
If Flt[9]=0,-1,ISREPLAY0
Let Flt[6]=Flt[0]
Label ISREPLAY0
If Flt[19]=1,REPLAY0,-1


Label RADIO01CREATE
CommandBlock 1
Let Flt[20]=Flt[12]+100100
GoTo Flt[20]

Label 100100
Stream_Create 1,"radio\radio01-00.ogg"
GoTo RADIO01CREATED

Label 100101
Stream_Create 1,"radio\radio01-01.ogg"
GoTo RADIO01CREATED

Label 100102
Stream_Create 1,"radio\radio01-02.ogg"
GoTo RADIO01CREATED

Label 100103
Stream_Create 1,"radio\radio01-03.ogg"
GoTo RADIO01CREATED

Label 100104
Stream_Create 1,"radio\radio01-04.ogg"
GoTo RADIO01CREATED

Label 100105
Stream_Create 1,"radio\radio01-05.ogg"
GoTo RADIO01CREATED

Label 100106
Stream_Create 1,"radio\radio01-06.ogg"
GoTo RADIO01CREATED

Label 100107
Stream_Create 1,"radio\radio01-07.ogg"
GoTo RADIO01CREATED

Label 100108
Stream_Create 1,"radio\radio01-08.ogg"
GoTo RADIO01CREATED

Label 100109
Stream_Create 1,"radio\radio01-09.ogg"
GoTo RADIO01CREATED

Label 100110
Stream_Create 1,"radio\radio01-10.ogg"
GoTo RADIO01CREATED

Label 100111
Stream_Create 1,"radio\radio01-11.ogg"
GoTo RADIO01CREATED

Label 100112
Stream_Create 1,"radio\radio01-12.ogg"
GoTo RADIO01CREATED

Label 100113
Stream_Create 1,"radio\radio01-13.ogg"
GoTo RADIO01CREATED

Label 100114
Stream_Create 1,"radio\radio01-14.ogg"
GoTo RADIO01CREATED

Label 100115
Stream_Create 1,"radio\radio01-15.ogg"
GoTo RADIO01CREATED

Label 100116
Stream_Create 1,"radio\radio01-16.ogg"
GoTo RADIO01CREATED

Label 100117
Stream_Create 1,"radio\radio01-17.ogg"
GoTo RADIO01CREATED

Label 100118
Stream_Create 1,"radio\radio01-18.ogg"
GoTo RADIO01CREATED

Label 100119
Stream_Create 1,"radio\radio01-19.ogg"
GoTo RADIO01CREATED

Label 100120
Stream_Create 1,"radio\radio01-20.ogg"
GoTo RADIO01CREATED

Label 100121
Stream_Create 1,"radio\radio01-21.ogg"
GoTo RADIO01CREATED

Label 100122
Stream_Create 1,"radio\radio01-22.ogg"
GoTo RADIO01CREATED

Label 100123
Stream_Create 1,"radio\radio01-23.ogg"
GoTo RADIO01CREATED

Label RADIO01CREATED
Stream_SetPos 1,16
CommandBlock 0
If Flt[9]=1,-1,ISREPLAY1
Let Flt[6]=Flt[1]
Label ISREPLAY1
If Flt[19]=1,REPLAY1,-1


Label RADIO02CREATE
CommandBlock 1
Let Flt[20]=Flt[13]+100200
GoTo Flt[20]

Label 100200
Stream_Create 2,"radio\radio02-00.ogg"
GoTo RADIO02CREATED

Label 100201
Stream_Create 2,"radio\radio02-01.ogg"
GoTo RADIO02CREATED

Label 100202
Stream_Create 2,"radio\radio02-02.ogg"
GoTo RADIO02CREATED

Label 100203
Stream_Create 2,"radio\radio02-03.ogg"
GoTo RADIO02CREATED

Label 100204
Stream_Create 2,"radio\radio02-04.ogg"
GoTo RADIO02CREATED

Label 100205
Stream_Create 2,"radio\radio02-05.ogg"
GoTo RADIO02CREATED

Label 100206
Stream_Create 2,"radio\radio02-06.ogg"
GoTo RADIO02CREATED

Label 100207
Stream_Create 2,"radio\radio02-07.ogg"
GoTo RADIO02CREATED

Label 100208
Stream_Create 2,"radio\radio02-08.ogg"
GoTo RADIO02CREATED

Label 100209
Stream_Create 2,"radio\radio02-09.ogg"
GoTo RADIO02CREATED

Label 100210
Stream_Create 2,"radio\radio02-10.ogg"
GoTo RADIO02CREATED

Label 100211
Stream_Create 2,"radio\radio02-11.ogg"
GoTo RADIO02CREATED

Label 100212
Stream_Create 2,"radio\radio02-12.ogg"
GoTo RADIO02CREATED

Label 100213
Stream_Create 2,"radio\radio02-13.ogg"
GoTo RADIO02CREATED

Label 100214
Stream_Create 2,"radio\radio02-14.ogg"
GoTo RADIO02CREATED

Label 100215
Stream_Create 2,"radio\radio02-15.ogg"
GoTo RADIO02CREATED

Label 100216
Stream_Create 2,"radio\radio02-16.ogg"
GoTo RADIO02CREATED

Label 100217
Stream_Create 2,"radio\radio02-17.ogg"
GoTo RADIO02CREATED

Label 100218
Stream_Create 2,"radio\radio02-18.ogg"
GoTo RADIO02CREATED

Label 100219
Stream_Create 2,"radio\radio02-19.ogg"
GoTo RADIO02CREATED

Label 100220
Stream_Create 2,"radio\radio02-20.ogg"
GoTo RADIO02CREATED

Label 100221
Stream_Create 2,"radio\radio02-21.ogg"
GoTo RADIO02CREATED

Label 100222
Stream_Create 2,"radio\radio02-22.ogg"
GoTo RADIO02CREATED

Label 100223
Stream_Create 2,"radio\radio02-23.ogg"
GoTo RADIO02CREATED

Label RADIO02CREATED
Stream_SetPos 2,17
CommandBlock 0
If Flt[9]=2,-1,ISREPLAY2
Let Flt[6]=Flt[2]
Label ISREPLAY2
If Flt[19]=1,REPLAY2,-1


Label RADIO03CREATE
CommandBlock 1
Let Flt[20]=Flt[14]+100300
GoTo Flt[20]

Label 100300
Stream_Create 3,"radio\radio03-00.mp3"
GoTo RADIO03CREATED

Label 100301
Stream_Create 3,"radio\radio03-01.mp3"
GoTo RADIO03CREATED

Label 100302
Stream_Create 3,"radio\radio03-02.mp3"
GoTo RADIO03CREATED

Label 100303
Stream_Create 3,"radio\radio03-03.mp3"
GoTo RADIO03CREATED

Label 100304
Stream_Create 3,"radio\radio03-04.mp3"
GoTo RADIO03CREATED

Label 100305
Stream_Create 3,"radio\radio03-05.mp3"
GoTo RADIO03CREATED

Label 100306
Stream_Create 3,"radio\radio03-06.mp3"
GoTo RADIO03CREATED

Label 100307
Stream_Create 3,"radio\radio03-07.mp3"
GoTo RADIO03CREATED

Label 100308
Stream_Create 3,"radio\radio03-08.mp3"
GoTo RADIO03CREATED

Label 100309
Stream_Create 3,"radio\radio03-09.mp3"
GoTo RADIO03CREATED

Label 100310
Stream_Create 3,"radio\radio03-10.mp3"
GoTo RADIO03CREATED

Label 100311
Stream_Create 3,"radio\radio03-11.mp3"
GoTo RADIO03CREATED

Label 100312
Stream_Create 3,"radio\radio03-12.mp3"
GoTo RADIO03CREATED

Label 100313
Stream_Create 3,"radio\radio03-13.mp3"
GoTo RADIO03CREATED

Label 100314
Stream_Create 3,"radio\radio03-14.mp3"
GoTo RADIO03CREATED

Label 100315
Stream_Create 3,"radio\radio03-15.mp3"
GoTo RADIO03CREATED

Label 100316
Stream_Create 3,"radio\radio03-16.mp3"
GoTo RADIO03CREATED

Label 100317
Stream_Create 3,"radio\radio03-17.mp3"
GoTo RADIO03CREATED

Label 100318
Stream_Create 3,"radio\radio03-18.mp3"
GoTo RADIO03CREATED

Label 100319
Stream_Create 3,"radio\radio03-19.mp3"
GoTo RADIO03CREATED

Label 100320
Stream_Create 3,"radio\radio03-20.mp3"
GoTo RADIO03CREATED

Label 100321
Stream_Create 3,"radio\radio03-21.mp3"
GoTo RADIO03CREATED

Label 100322
Stream_Create 3,"radio\radio03-22.mp3"
GoTo RADIO03CREATED

Label 100323
Stream_Create 3,"radio\radio03-23.mp3"
GoTo RADIO03CREATED

Label 100324
Stream_Create 3,"radio\radio03-24.mp3"
GoTo RADIO03CREATED

Label 100325
Stream_Create 3,"radio\radio03-25.mp3"
GoTo RADIO03CREATED

Label 100326
Stream_Create 3,"radio\radio03-26.mp3"
GoTo RADIO03CREATED

Label RADIO03CREATED
Stream_SetPos 3,18
CommandBlock 0
If Flt[9]=3,-1,ISREPLAY3
Let Flt[6]=Flt[3]
Label ISREPLAY3
If Flt[19]=1,REPLAY3,-1

Return


Label CHECK
CommandBlock 1
GoSub POSITION
CommandBlock 0
Human_GetSeatIdx 0,7
If Flt[7]=-1,CAR_OUT,CAR_IN



Label CAR_IN
Ctrl_Read 5,JUMP1
If Flt[5]=0,-1,RADIO_UP
Label READ_DOWN
Ctrl_Read 5,CROUCH1
If Flt[5]=0,-1,RADIO_DOWN
Label CHECKPLAY

If Flt[4]=0,-,CHECK
//CityMusic_Off
Wait 500
GoSub RADIO_READ
If Flt[9]>-1,-1,RADIO_OFF
GoSub RADIOCREATE
GoSub RADIO_PLAY
Let Flt[20]=Flt[9]+2000
GoSub Flt[20]
Label RADIO_OFF
If Flt[9]=-1,-1,ADIRDA
Console_AddText 90000000
Label ADIRDA
Let Flt[4]=1
GoTo CHECK



Label CAR_OUT
If Flt[4]=1,-1,CHECK
CommandBlock 1
GoSub RADIO_DESTROY
Let Flt[4]=0
GoSub RADIO_SAVE
CommandBlock 0
GoTo CHECK



Label RADIO_UP
CommandBlock 1
If Flt[9]=-1,-1,CHANGEUP
GoSub RADIOCREATE
GoSub RADIO_PLAY
Label CHANGEUP
Stream_Fadevol 6,1,0,0
Let Flt[9]=Flt[9]+1
If Flt[9]>3,-1,CHANGEDUP
Let Flt[9]=-1
Label CHANGEDUP
Let Flt[20]=Flt[9]+2000
GoSub Flt[20]
CommandBlock 0

Let Flt[7]=0
Label 3333
Ctrl_Read 5,JUMP1
If Flt[5]=1,-1,READ_DOWN
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<5,3333,-1
GoTo READ_DOWN



Label RADIO_DOWN
CommandBlock 1
If Flt[9]=-1,-1,CHANGEDOWN
GoSub RADIOCREATE
GoSub RADIO_PLAY
Label CHANGEDOWN
Stream_Fadevol 6,1,0,0
Let Flt[9]=Flt[9]-1
If Flt[9]<-1,-1,CHANGEDDOWN
Let Flt[9]=3
Label CHANGEDDOWN
Let Flt[20]=Flt[9]+2000
GoSub Flt[20]
CommandBlock 0

Let Flt[7]=0
Label 2222
Ctrl_Read 5,CROUCH1
If Flt[5]=1,-1,CHECKPLAY
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<5,2222,-1
GoTo CHECKPLAY


Label 1999
GoSub RADIO_DESTROY
Console_AddText 90000000
Return

Label 2000
Let Flt[6]=Flt[0]
Stream_Fadevol 6,1,1,1
Console_AddText 90000001
Return

Label 2001
Let Flt[6]=Flt[1]
Stream_Fadevol 6,1,1,1
Console_AddText 90000002
Return

Label 2002
Let Flt[6]=Flt[2]
Stream_Fadevol 6,1,1,1
Console_AddText 90000003
Return

Label 2003
Let Flt[6]=Flt[3]
Stream_Fadevol 6,1,1,1
Console_AddText 90000004
Return



Label RADIO_PLAY
CommandBlock 1
Stream_Fadevol 0,1,0,0
Stream_Play 0
Stream_Fadevol 1,1,0,0
Stream_Play 1
Stream_Fadevol 2,1,0,0
Stream_Play 2
Stream_Fadevol 3,1,0,0
Stream_Play 3
CommandBlock 0
Return



Label RADIO_DESTROY
Stream_GetPos 0,15
Stream_Fadevol 0,1,0,0
Stream_Pause 0
Stream_Destroy 0

Stream_GetPos 1,16
Stream_Fadevol 1,1,0,0
Stream_Pause 1
Stream_Destroy 1

Stream_GetPos 2,17
Stream_Fadevol 2,1,0,0
Stream_Pause 2
Stream_Destroy 2

Stream_GetPos 3,18
Stream_Fadevol 3,1,0,0
Stream_Pause 3
Stream_Destroy 3
Return



Label POSITION
If Flt[4]=0,POSITION_END,-1
If Flt[9]=-1,POSITION_END,-1
GetGameTime 7
Let Flt[10]=Flt[7]-Flt[8]
If Flt[10]<500,POSITION_END,-1
Let Flt[8]=Flt[7]

Label GETPOS0
Stream_GetPos 0,7
If Flt[7]=Flt[15],RADIO0END,-1
Let Flt[15]=Flt[7]
GoTo GETPOS1
Label RADIO0END
Stream_Fadevol 0,1,0,0
Stream_Pause 0
Stream_Destroy 0
Label RAND0
Rnd 10,23
If Flt[11]=Flt[10],RAND0,-1
Let Flt[11]=Flt[10]
Let Flt[19]=1
Let Flt[15]=0
GoTo RADIO00CREATE
Label REPLAY0
CommandBlock 1
Stream_Fadevol 0,1,0,0
Stream_Play 0
Let Flt[19]=0
CommandBlock 0
If Flt[9]=0,-1,GETPOS1
Let Flt[6]=Flt[0]
Stream_Fadevol 0,1,1,1

Label GETPOS1
Stream_GetPos 1,7
If Flt[7]=Flt[16],RADIO1END,-1
Let Flt[16]=Flt[7]
GoTo GETPOS2
Label RADIO1END
Stream_Fadevol 1,1,0,0
Stream_Pause 1
Stream_Destroy 1
Label RAND1
Rnd 10,24
If Flt[12]=Flt[10],RAND1,-1
Let Flt[12]=Flt[10]
Let Flt[19]=1
Let Flt[16]=0
GoTo RADIO01CREATE
Label REPLAY1
CommandBlock 1
Stream_Fadevol 1,1,0,0
Stream_Play 1
Let Flt[19]=0
CommandBlock 0
If Flt[9]=1,-1,GETPOS2
Let Flt[6]=Flt[1]
Stream_Fadevol 1,1,1,1

Label GETPOS2
Stream_GetPos 2,7
If Flt[7]=Flt[17],RADIO2END,-1
Let Flt[17]=Flt[7]
GoTo GETPOS3
Label RADIO2END
Stream_Fadevol 2,1,0,0
Stream_Pause 2
Stream_Destroy 2
Label RAND2
Rnd 10,24
If Flt[13]=Flt[10],RAND2,-1
Let Flt[13]=Flt[10]
Let Flt[19]=1
Let Flt[17]=0
GoTo RADIO02CREATE
Label REPLAY2
CommandBlock 1
Stream_Fadevol 2,1,0,0
Stream_Play 2
Let Flt[19]=0
CommandBlock 0
If Flt[9]=2,-1,GETPOS3
Let Flt[6]=Flt[2]
Stream_Fadevol 2,1,1,1

Label GETPOS3
Stream_GetPos 3,7
If Flt[7]=Flt[18],RADIO3END,-1
Let Flt[18]=Flt[7]
GoTo POSITION_END
Label RADIO3END
Stream_Fadevol 3,1,0,0
Stream_Pause 3
Stream_Destroy 3
Label RAND3
Rnd 10,27
If Flt[14]=Flt[10],RAND3,-1
Let Flt[14]=Flt[10]
Let Flt[19]=1
Let Flt[18]=0
GoTo RADIO03CREATE
Label REPLAY3
CommandBlock 1
Stream_Fadevol 3,1,0,0
Stream_Play 3
Let Flt[19]=0
CommandBlock 0
If Flt[9]=3,-1,POSITION_END
Let Flt[6]=Flt[3]
Stream_Fadevol 3,1,1,1

Label POSITION_END
Return



Label RADIO_READ
CommandBlock 1
Let Flt[30]=0
FindNearActor 0,10,Car

CompareActors 11,12,7
If Flt[7]=0,-1,FIRSTCAR
CompareActors 11,10,7
If Flt[7]=0,-1,FIRSTCAR
Rnd 9,5
Let Flt[9]=Flt[9]-1
Label FIRSTCAR

CompareActors 10,11,7
Set_Remote_Actor 10,12,11
If Flt[7]=0,-1,RADIO_READED

Label COMPARE_ENT1
CompareActors 10,1,7
If Flt[7]=1,-1,COMPARE_ENT2
Let Flt[9]=Flt[21]
Let Flt[30]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT2
CompareActors 10,2,7
If Flt[7]=1,-1,COMPARE_ENT3
Let Flt[9]=Flt[22]
Let Flt[30]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT3
CompareActors 10,3,7
If Flt[7]=1,-1,COMPARE_ENT4
Let Flt[9]=Flt[23]
Let Flt[30]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT4
CompareActors 10,4,7
If Flt[7]=1,-1,COMPARE_ENT5
Let Flt[9]=Flt[24]
Let Flt[30]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT5
CompareActors 10,5,7
If Flt[7]=1,-1,COMPARE_ENT6
Let Flt[9]=Flt[25]
Let Flt[30]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT6
CompareActors 10,6,7
If Flt[7]=1,-1,COMPARE_ENT7
Let Flt[9]=Flt[26]
Let Flt[30]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT7
CompareActors 10,7,7
If Flt[7]=1,-1,COMPARE_ENT8
Let Flt[9]=Flt[27]
Let Flt[30]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT8
CompareActors 10,8,7
If Flt[7]=1,-1,COMPARE_ENT9
Let Flt[9]=Flt[28]
Let Flt[30]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT9
CompareActors 10,9,7
If Flt[7]=1,-1,COMPARE_ENT0
Let Flt[9]=Flt[29]
Let Flt[30]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT0
If Flt[30]=1,RADIO_READED,-1
GoSub RADIO_WRITE
Label RADIO_READED
CommandBlock 0
Return



Label RADIO_SAVE
CommandBlock 1

Label COMPARE_EXIT1
CompareActors 10,1,7
If Flt[7]=1,-1,COMPARE_EXIT2
Let Flt[21]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT2
CompareActors 10,2,7
If Flt[7]=1,-1,COMPARE_EXIT3
Let Flt[22]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT3
CompareActors 10,3,7
If Flt[7]=1,-1,COMPARE_EXIT4
Let Flt[23]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT4
CompareActors 10,4,7
If Flt[7]=1,-1,COMPARE_EXIT5
Let Flt[24]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT5
CompareActors 10,5,7
If Flt[7]=1,-1,COMPARE_EXIT6
Let Flt[25]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT6
CompareActors 10,6,7
If Flt[7]=1,-1,COMPARE_EXIT7
Let Flt[26]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT7
CompareActors 10,7,7
If Flt[7]=1,-1,COMPARE_EXIT8
Let Flt[27]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT8
CompareActors 10,8,7
If Flt[7]=1,-1,COMPARE_EXIT9
Let Flt[28]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT9
CompareActors 10,9,7
If Flt[7]=1,-1,COMPARE_EXIT0
Let Flt[29]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT0
CommandBlock 0
Return



Label RADIO_WRITE
Set_Remote_Actor 8,12,9
Let Flt[29]=Flt[28]
Set_Remote_Actor 7,12,8
Let Flt[28]=Flt[27]
Set_Remote_Actor 6,12,7
Let Flt[27]=Flt[26]
Set_Remote_Actor 5,12,6
Let Flt[26]=Flt[25]
Set_Remote_Actor 4,12,5
Let Flt[25]=Flt[24]
Set_Remote_Actor 3,12,4
Let Flt[24]=Flt[23]
Set_Remote_Actor 2,12,3
Let Flt[23]=Flt[22]
Set_Remote_Actor 1,12,2
Let Flt[22]=Flt[21]
Set_Remote_Actor 10,12,1
Let Flt[21]=Flt[9]
Return

1MAMOHT1
26.10.2020, 07:21
У меня тоже версия 1.2 (steam) и папка sounds распакована.У меня версия 1.2 репак от R.G. Element Arts
Как же вы скрипт юзаете, из сцены!? А как миссии проходить с радио..?
Написал процедуру, чтобы скрипт помнил последние девять тачек
На сколько я помню, в екзе есть функция, которая следит за количеством юзанных тачек, каждая пятая, юзанная нами тачка, уничтожает первую, которая вне видимости Томми...
На девять тачек наверное многовато даже для фрирайда ;) Хотя это мега круто :)

KlassenAS
26.10.2020, 08:26
Как же вы скрипт юзаете, из сцены!? А как миссии проходить с радио..?
Нормально юзаем. С Mafia Parcher.
Даже включили его в архив.
Он как раз и сделан для версий 1.0 и 1.2
Работает во всех сценах, без исключения, специально в сцены импортировать не нужно.
На сколько я помню, в екзе есть функция, которая следит за количеством юзанных тачек, каждая пятая, юзанная нами тачка, уничтожает первую, которая вне видимости Томми...
На девять тачек наверное многовато даже для фрирайда ;) Хотя это мега круто :)
Во-первых, кроме трафиковых авто, есть ещё и помещённые в сцены. В стандартном фрирайде "Город - День", например, их четыре, вроде: Сильвер Флэтчер, Бруно Спидстер, и два Ласситера. Вместе с трафиком уже девять.
Плюс у тебя целый гараж Сальери. При старте новой миссии или загрузке сейва все скриптовые "запоминалки" сбрасываются, но зато в рамках одной миссии раздолье )
Плюс, запоминание авто безупречно работает только с авто из сцены, а тачки из трафика, иногда, запоминает по два раза.
Хз, почему. Следовательно, с учётом игровых глюков, для пяти авто нужен резерв.
Поэтому девять.
Три тачки запоминать, или девять - скрипт от этого принципиально сложнее не становится, в нём лишь появляется больше копипаста с однообразными блоками команд.
То же самое, если приспичит увеличить количество радиостанций с 4 до 100.
По три дополнительных переменных на каждую радиостанцию, всё остальное - копипаст с исправлением номеров.

Abradox
26.10.2020, 11:16
А как миссии проходить с радио..?Всё просто. По умолчанию, радио во всех машинах выключено и его нужно включить самому. Т.е. даже, если Том садится в машину в катсцене, то радио не включается и не мешает (раньше включалось :D). А когда ты подъезжаешь к миссии и знаешь что будет катсцена с машиной, то нужно самому выключить радио, чтобы оно не мешало.
В общем это не сложно, но играть приятнее. Треки из Mafia Defenitive Edition и те что мы подобрали сами, очень хорошо подходят к атмосфере оригинальной Mafia.

GOLOD55
26.10.2020, 23:21
чуток оптимизации скрипту..

1. а есть необходимость определять акторы 1-11 актором скрипта?
оно сработает только один раз(при старте скрипта), а при этом данный стек все равно пустой.

2. фильтр перед Label dan_on-овский не мешает в сценах2 и его не требуется удалять. он просто инактивирует скрипт в миссиях без плеер_актора.
а вот флт4 обнулить не мешает ниже, ога.

3. аналогично актор_стеку, стек флт-х также при старте скрипта пустой. другими словами говоря, изначально все значения переменных равны 0 и нет необходимости в командах типа Let Flt[]=0 (кроме флт4).
А присвоение значение "-1" компактнее сделать через вектор.

Итого кусочек скрипта наверное может выглядеть так:
Human_GetProperty 0,4,Energy
If Flt[4]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on

CityMusic_Off

Let Flt[4]=0
vect_set 9,-1,-1,-1
vect_set 12,-1,-1,-1
vect_set 21,-1,-1,-1
vect_set 24,-1,-1,-1
vect_set 27,-1,-1,-1

KlassenAS
27.10.2020, 00:07
1. а есть необходимость определять акторы 1-11 актором скрипта?
оно сработает только один раз(при старте скрипта), а при этом данный стек все равно пустой.
Присвоение всех акторов, пожалуй, действительно лишнее. Но 10 и 11 я сравниваю между собой и с 12 актором, чтобы определить, первый ли раз, после старта миссии Томми сел в машину. Чтобы радио было выкл. Хотя я ещё подумаю. Может, эту часть тоже можно оптимизировать.

2. фильтр перед Label dan_on-овский не мешает в сценах2 и его не требуется удалять. он просто инактивирует скрипт в миссиях без плеер_актора.
а вот флт4 обнулить не мешает ниже, ога
Знаю, что не мешает, это, скорее, для оптимизации. Хотя, мне ли говорить об оптимизации, с таким размером скрипта )

3. аналогично актор_стеку, стек флт-х также при старте скрипта пустой. другими словами говоря, изначально все значения переменных равны 0 и нет необходимости в командах типа Let Flt[]=0 (кроме флт4).
А присвоение значение "-1" компактнее сделать через вектор.

Итого кусочек скрипта наверное может выглядеть так:
Human_GetProperty 0,4,Energy
If Flt[4]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on

CityMusic_Off

Let Flt[4]=0
vect_set 9,-1,-1,-1
vect_set 12,-1,-1,-1
vect_set 21,-1,-1,-1
vect_set 24,-1,-1,-1
vect_set 27,-1,-1,-1
А с вектором ты хитро придумал, одной командой три переменные присваивать )
Умён!
Я не был уверен, что переменные создаются с нулём и страховался от возможных рандомных значений.
Кроме того, мне нужно было расписать значение каждой переменной и комментарий к ней, чтобы не запутаться.
Всё-таки удержать в голове значения и назначение тридцати переменных - задача нетривиальная.

Большое спасибо за советы и замечания!
Поколдую теперь немного над оптимизацией.
Тем более, у меня ещё была мысль насчёт процедуры создания потоков. Тоже оптимизировать и выкинуть одну переменную.


UPD:
Поработал над оптимизацией версий 2.0 и 2.1
В архив с версией 2.1 положил папку sounds с шестью wav-файлами. чтобы гарантированно воспроизводились у всех.
Ждём день. если новых замечаний и идей для улучшения не найдётся, тогда, наконец-то, оформим релиз.

Ver. 2.1
https://drive.google.com/file/d/1jQKQbznx-iAt_INZZSxiX5gYqnQbDkP1/view?usp=sharing

Ver. 2.0
https://drive.google.com/file/d/1bJV3TeWR0hXqyHWk2-LBpoxx5-bgSV1Q/view?usp=sharing

//Radio Script Ver. 2.1 27-10-2020 By KlassenAS For Abradox

Dim_Act 13
Dim_Flt 30
GetActivePlayer 0
FindActor 10
FindActor 11
FindActor 12
//Акторы 1-9 - для запоминания машин
//Актор 10 - для текущей машины
//Актор 11 - для прошлой машины
//Актор 12 - данный скрипт

Human_GetProperty 0,4,Energy
If Flt[4]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on

CityMusic_Off

//ПЕРЕМЕННЫЕ:
//0-3 - идентификаторы потоков
//4 - Логика
//5 - Нажатие клавиш вперёд1 и назад1
//6 - Последний активный поток
//7 - Сиденье/Время с начала игры/текущее время потока/
//8 - Прошлое время с начала игры
//Номер радиостанции
//9 - Номер играющей радиостанции
//10 - Рандом для radio/разница во времени игры
//11-14 - Номера треков на радиостанциях 0 - 3
//15-18 - для позиций потоков 0-3
//19 - Логика запоминания тачек
//20 - Для перехода к меткам треков
//21-29 - Номера радиостанций в запомненных тачках 1-9
Let Flt[4]=0
Vect_Set 9,-1,-1,-1
Vect_Set 21,-1,-1,-1
Vect_Set 24,-1,-1,-1
Vect_Set 27,-1,-1,-1

Rnd 11,23
Rnd 12,24
Rnd 13,24
Rnd 14,27

GoTo CHECK



Label RADIOCREATE
GoSub RADIO00CREATE
GoSub RADIO01CREATE
GoSub RADIO02CREATE
GoSub RADIO03CREATE
Return



Label RADIO00CREATE
CommandBlock 1
Let Flt[20]=Flt[11]+100000
GoTo Flt[20]

Label 100000
Stream_Create 0,"sounds\03_music.wav"
GoTo RADIO00CREATED

Label 100001
Stream_Create 0,"sounds\13b_music.wav"
GoTo RADIO00CREATED

Label 100002
Stream_Create 0,"sounds\14_Coucou.wav"
GoTo RADIO00CREATED

Label 100003
Stream_Create 0,"sounds\18_radio.wav"
GoTo RADIO00CREATED

Label 100004
Stream_Create 0,"sounds\s_music1.wav"
GoTo RADIO00CREATED

Label 100005
Stream_Create 0,"sounds\s_music3.wav"
GoTo RADIO00CREATED

Label 100006
Stream_Create 0,"sounds\s_music5.wav"
GoTo RADIO00CREATED

Label 100007
Stream_Create 0,"sounds\music\city_music_01.ogg"
GoTo RADIO00CREATED

Label 100008
Stream_Create 0,"sounds\music\city_music_02.ogg"
GoTo RADIO00CREATED

Label 100009
Stream_Create 0,"sounds\music\city_music_03.ogg"
GoTo RADIO00CREATED

Label 100010
Stream_Create 0,"sounds\music\city_music_04.ogg"
GoTo RADIO00CREATED

Label 100011
Stream_Create 0,"sounds\music\city_music_05.ogg"
GoTo RADIO00CREATED

Label 100012
Stream_Create 0,"sounds\music\city_music_06.ogg"
GoTo RADIO00CREATED

Label 100013
Stream_Create 0,"sounds\music\city_music_07.ogg"
GoTo RADIO00CREATED

Label 100014
Stream_Create 0,"sounds\music\city_music_08.ogg"
GoTo RADIO00CREATED

Label 100015
Stream_Create 0,"sounds\music\city_music_09.ogg"
GoTo RADIO00CREATED

Label 100016
Stream_Create 0,"sounds\music\city_music_10.ogg"
GoTo RADIO00CREATED

Label 100017
Stream_Create 0,"sounds\music\city_music_11.ogg"
GoTo RADIO00CREATED

Label 100018
Stream_Create 0,"sounds\music\city_music_12.ogg"
GoTo RADIO00CREATED

Label 100019
Stream_Create 0,"sounds\music\city_music_13.ogg"
GoTo RADIO00CREATED

Label 100020
Stream_Create 0,"sounds\music\city_music_15.ogg"
GoTo RADIO00CREATED

Label 100021
Stream_Create 0,"sounds\music\12_scene music.ogg"
GoTo RADIO00CREATED

Label 100022
Stream_Create 0,"sounds\music\mise02-ulicka.ogg"
GoTo RADIO00CREATED

Label RADIO00CREATED
Stream_SetPos 0,15
CommandBlock 0
If Flt[9]=0,-1,CREATED00
Let Flt[6]=Flt[0]
Label CREATED00
Return


Label RADIO01CREATE
CommandBlock 1
Let Flt[20]=Flt[12]+100100
GoTo Flt[20]

Label 100100
Stream_Create 1,"radio\radio01-00.ogg"
GoTo RADIO01CREATED

Label 100101
Stream_Create 1,"radio\radio01-01.ogg"
GoTo RADIO01CREATED

Label 100102
Stream_Create 1,"radio\radio01-02.ogg"
GoTo RADIO01CREATED

Label 100103
Stream_Create 1,"radio\radio01-03.ogg"
GoTo RADIO01CREATED

Label 100104
Stream_Create 1,"radio\radio01-04.ogg"
GoTo RADIO01CREATED

Label 100105
Stream_Create 1,"radio\radio01-05.ogg"
GoTo RADIO01CREATED

Label 100106
Stream_Create 1,"radio\radio01-06.ogg"
GoTo RADIO01CREATED

Label 100107
Stream_Create 1,"radio\radio01-07.ogg"
GoTo RADIO01CREATED

Label 100108
Stream_Create 1,"radio\radio01-08.ogg"
GoTo RADIO01CREATED

Label 100109
Stream_Create 1,"radio\radio01-09.ogg"
GoTo RADIO01CREATED

Label 100110
Stream_Create 1,"radio\radio01-10.ogg"
GoTo RADIO01CREATED

Label 100111
Stream_Create 1,"radio\radio01-11.ogg"
GoTo RADIO01CREATED

Label 100112
Stream_Create 1,"radio\radio01-12.ogg"
GoTo RADIO01CREATED

Label 100113
Stream_Create 1,"radio\radio01-13.ogg"
GoTo RADIO01CREATED

Label 100114
Stream_Create 1,"radio\radio01-14.ogg"
GoTo RADIO01CREATED

Label 100115
Stream_Create 1,"radio\radio01-15.ogg"
GoTo RADIO01CREATED

Label 100116
Stream_Create 1,"radio\radio01-16.ogg"
GoTo RADIO01CREATED

Label 100117
Stream_Create 1,"radio\radio01-17.ogg"
GoTo RADIO01CREATED

Label 100118
Stream_Create 1,"radio\radio01-18.ogg"
GoTo RADIO01CREATED

Label 100119
Stream_Create 1,"radio\radio01-19.ogg"
GoTo RADIO01CREATED

Label 100120
Stream_Create 1,"radio\radio01-20.ogg"
GoTo RADIO01CREATED

Label 100121
Stream_Create 1,"radio\radio01-21.ogg"
GoTo RADIO01CREATED

Label 100122
Stream_Create 1,"radio\radio01-22.ogg"
GoTo RADIO01CREATED

Label 100123
Stream_Create 1,"radio\radio01-23.ogg"
GoTo RADIO01CREATED

Label RADIO01CREATED
Stream_SetPos 1,16
CommandBlock 0
If Flt[9]=1,-1,CREATED01
Let Flt[6]=Flt[1]
Label CREATED01
Return


Label RADIO02CREATE
CommandBlock 1
Let Flt[20]=Flt[13]+100200
GoTo Flt[20]

Label 100200
Stream_Create 2,"radio\radio02-00.ogg"
GoTo RADIO02CREATED

Label 100201
Stream_Create 2,"radio\radio02-01.ogg"
GoTo RADIO02CREATED

Label 100202
Stream_Create 2,"radio\radio02-02.ogg"
GoTo RADIO02CREATED

Label 100203
Stream_Create 2,"radio\radio02-03.ogg"
GoTo RADIO02CREATED

Label 100204
Stream_Create 2,"radio\radio02-04.ogg"
GoTo RADIO02CREATED

Label 100205
Stream_Create 2,"radio\radio02-05.ogg"
GoTo RADIO02CREATED

Label 100206
Stream_Create 2,"radio\radio02-06.ogg"
GoTo RADIO02CREATED

Label 100207
Stream_Create 2,"radio\radio02-07.ogg"
GoTo RADIO02CREATED

Label 100208
Stream_Create 2,"radio\radio02-08.ogg"
GoTo RADIO02CREATED

Label 100209
Stream_Create 2,"radio\radio02-09.ogg"
GoTo RADIO02CREATED

Label 100210
Stream_Create 2,"radio\radio02-10.ogg"
GoTo RADIO02CREATED

Label 100211
Stream_Create 2,"radio\radio02-11.ogg"
GoTo RADIO02CREATED

Label 100212
Stream_Create 2,"radio\radio02-12.ogg"
GoTo RADIO02CREATED

Label 100213
Stream_Create 2,"radio\radio02-13.ogg"
GoTo RADIO02CREATED

Label 100214
Stream_Create 2,"radio\radio02-14.ogg"
GoTo RADIO02CREATED

Label 100215
Stream_Create 2,"radio\radio02-15.ogg"
GoTo RADIO02CREATED

Label 100216
Stream_Create 2,"radio\radio02-16.ogg"
GoTo RADIO02CREATED

Label 100217
Stream_Create 2,"radio\radio02-17.ogg"
GoTo RADIO02CREATED

Label 100218
Stream_Create 2,"radio\radio02-18.ogg"
GoTo RADIO02CREATED

Label 100219
Stream_Create 2,"radio\radio02-19.ogg"
GoTo RADIO02CREATED

Label 100220
Stream_Create 2,"radio\radio02-20.ogg"
GoTo RADIO02CREATED

Label 100221
Stream_Create 2,"radio\radio02-21.ogg"
GoTo RADIO02CREATED

Label 100222
Stream_Create 2,"radio\radio02-22.ogg"
GoTo RADIO02CREATED

Label 100223
Stream_Create 2,"radio\radio02-23.ogg"
GoTo RADIO02CREATED

Label RADIO02CREATED
Stream_SetPos 2,17
CommandBlock 0
If Flt[9]=2,-1,CREATED02
Let Flt[6]=Flt[2]
Label CREATED02
Return


Label RADIO03CREATE
CommandBlock 1
Let Flt[20]=Flt[14]+100300
GoTo Flt[20]

Label 100300
Stream_Create 3,"radio\radio03-00.mp3"
GoTo RADIO03CREATED

Label 100301
Stream_Create 3,"radio\radio03-01.mp3"
GoTo RADIO03CREATED

Label 100302
Stream_Create 3,"radio\radio03-02.mp3"
GoTo RADIO03CREATED

Label 100303
Stream_Create 3,"radio\radio03-03.mp3"
GoTo RADIO03CREATED

Label 100304
Stream_Create 3,"radio\radio03-04.mp3"
GoTo RADIO03CREATED

Label 100305
Stream_Create 3,"radio\radio03-05.mp3"
GoTo RADIO03CREATED

Label 100306
Stream_Create 3,"radio\radio03-06.mp3"
GoTo RADIO03CREATED

Label 100307
Stream_Create 3,"radio\radio03-07.mp3"
GoTo RADIO03CREATED

Label 100308
Stream_Create 3,"radio\radio03-08.mp3"
GoTo RADIO03CREATED

Label 100309
Stream_Create 3,"radio\radio03-09.mp3"
GoTo RADIO03CREATED

Label 100310
Stream_Create 3,"radio\radio03-10.mp3"
GoTo RADIO03CREATED

Label 100311
Stream_Create 3,"radio\radio03-11.mp3"
GoTo RADIO03CREATED

Label 100312
Stream_Create 3,"radio\radio03-12.mp3"
GoTo RADIO03CREATED

Label 100313
Stream_Create 3,"radio\radio03-13.mp3"
GoTo RADIO03CREATED

Label 100314
Stream_Create 3,"radio\radio03-14.mp3"
GoTo RADIO03CREATED

Label 100315
Stream_Create 3,"radio\radio03-15.mp3"
GoTo RADIO03CREATED

Label 100316
Stream_Create 3,"radio\radio03-16.mp3"
GoTo RADIO03CREATED

Label 100317
Stream_Create 3,"radio\radio03-17.mp3"
GoTo RADIO03CREATED

Label 100318
Stream_Create 3,"radio\radio03-18.mp3"
GoTo RADIO03CREATED

Label 100319
Stream_Create 3,"radio\radio03-19.mp3"
GoTo RADIO03CREATED

Label 100320
Stream_Create 3,"radio\radio03-20.mp3"
GoTo RADIO03CREATED

Label 100321
Stream_Create 3,"radio\radio03-21.mp3"
GoTo RADIO03CREATED

Label 100322
Stream_Create 3,"radio\radio03-22.mp3"
GoTo RADIO03CREATED

Label 100323
Stream_Create 3,"radio\radio03-23.mp3"
GoTo RADIO03CREATED

Label 100324
Stream_Create 3,"radio\radio03-24.mp3"
GoTo RADIO03CREATED

Label 100325
Stream_Create 3,"radio\radio03-25.mp3"
GoTo RADIO03CREATED

Label 100326
Stream_Create 3,"radio\radio03-26.mp3"
GoTo RADIO03CREATED

Label RADIO03CREATED
Stream_SetPos 3,18
CommandBlock 0
If Flt[9]=3,-1,CREATED03
Let Flt[6]=Flt[3]
Label CREATED03
Return


Label CHECK
CommandBlock 1
GoSub POSITION
CommandBlock 0
Human_GetSeatIdx 0,7
If Flt[7]=-1,CAR_OUT,CAR_IN



Label CAR_IN
Ctrl_Read 5,JUMP1
If Flt[5]=0,-1,RADIO_UP
Label READ_DOWN
Ctrl_Read 5,CROUCH1
If Flt[5]=0,-1,RADIO_DOWN
Label CHECKPLAY

If Flt[4]=0,-,CHECK
//CityMusic_Off
Wait 500
GoSub RADIO_READ
If Flt[9]>-1,-1,RADIO_OFF
GoSub RADIOCREATE
GoSub RADIO_PLAY
Let Flt[20]=Flt[9]+2000
GoSub Flt[20]
Label RADIO_OFF
If Flt[9]=-1,-1,ADIRDA
Console_AddText 90000000
Label ADIRDA
Let Flt[4]=1
GoTo CHECK



Label CAR_OUT
If Flt[4]=1,-1,CHECK
CommandBlock 1
GoSub RADIO_DESTROY
Let Flt[4]=0
GoSub RADIO_SAVE
CommandBlock 0
GoTo CHECK



Label RADIO_UP
CommandBlock 1
If Flt[9]=-1,-1,CHANGEUP
GoSub RADIOCREATE
GoSub RADIO_PLAY
Label CHANGEUP
Stream_Fadevol 6,1,0,0
Let Flt[9]=Flt[9]+1
If Flt[9]>3,-1,CHANGEDUP
Let Flt[9]=-1
Label CHANGEDUP
Let Flt[20]=Flt[9]+2000
GoSub Flt[20]
CommandBlock 0

Let Flt[7]=0
Label 3333
Ctrl_Read 5,JUMP1
If Flt[5]=1,-1,READ_DOWN
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<5,3333,-1
GoTo READ_DOWN



Label RADIO_DOWN
CommandBlock 1
If Flt[9]=-1,-1,CHANGEDOWN
GoSub RADIOCREATE
GoSub RADIO_PLAY
Label CHANGEDOWN
Stream_Fadevol 6,1,0,0
Let Flt[9]=Flt[9]-1
If Flt[9]<-1,-1,CHANGEDDOWN
Let Flt[9]=3
Label CHANGEDDOWN
Let Flt[20]=Flt[9]+2000
GoSub Flt[20]
CommandBlock 0

Let Flt[7]=0
Label 2222
Ctrl_Read 5,CROUCH1
If Flt[5]=1,-1,CHECKPLAY
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<5,2222,-1
GoTo CHECKPLAY


Label 1999
GoSub RADIO_DESTROY
Console_AddText 90000000
Return

Label 2000
Let Flt[6]=Flt[0]
Stream_Fadevol 6,1,1,1
Console_AddText 90000001
Return

Label 2001
Let Flt[6]=Flt[1]
Stream_Fadevol 6,1,1,1
Console_AddText 90000002
Return

Label 2002
Let Flt[6]=Flt[2]
Stream_Fadevol 6,1,1,1
Console_AddText 90000003
Return

Label 2003
Let Flt[6]=Flt[3]
Stream_Fadevol 6,1,1,1
Console_AddText 90000004
Return



Label RADIO_PLAY
CommandBlock 1
Stream_Fadevol 0,1,0,0
Stream_Play 0
Stream_Fadevol 1,1,0,0
Stream_Play 1
Stream_Fadevol 2,1,0,0
Stream_Play 2
Stream_Fadevol 3,1,0,0
Stream_Play 3
CommandBlock 0
Return



Label RADIO_DESTROY
Stream_GetPos 0,15
Stream_Fadevol 0,1,0,0
Stream_Pause 0
Stream_Destroy 0

Stream_GetPos 1,16
Stream_Fadevol 1,1,0,0
Stream_Pause 1
Stream_Destroy 1

Stream_GetPos 2,17
Stream_Fadevol 2,1,0,0
Stream_Pause 2
Stream_Destroy 2

Stream_GetPos 3,18
Stream_Fadevol 3,1,0,0
Stream_Pause 3
Stream_Destroy 3
Return



Label POSITION
If Flt[4]=0,POSITION_END,-1
If Flt[9]=-1,POSITION_END,-1
GetGameTime 7
Let Flt[10]=Flt[7]-Flt[8]
If Flt[10]<500,POSITION_END,-1
Let Flt[8]=Flt[7]

Label GETPOS0
Stream_GetPos 0,7
If Flt[7]=Flt[15],RADIO0END,-1
Let Flt[15]=Flt[7]
GoTo GETPOS1
Label RADIO0END
Stream_Fadevol 0,1,0,0
Stream_Pause 0
Stream_Destroy 0
Label RAND0
Rnd 10,23
If Flt[11]=Flt[10],RAND0,-1
Let Flt[11]=Flt[10]
Let Flt[19]=1
Let Flt[15]=0
GoSub RADIO00CREATE
CommandBlock 1
Stream_Fadevol 0,1,0,0
Stream_Play 0
Let Flt[19]=0
CommandBlock 0
If Flt[9]=0,-1,GETPOS1
Let Flt[6]=Flt[0]
Stream_Fadevol 0,1,1,1

Label GETPOS1
Stream_GetPos 1,7
If Flt[7]=Flt[16],RADIO1END,-1
Let Flt[16]=Flt[7]
GoTo GETPOS2
Label RADIO1END
Stream_Fadevol 1,1,0,0
Stream_Pause 1
Stream_Destroy 1
Label RAND1
Rnd 10,24
If Flt[12]=Flt[10],RAND1,-1
Let Flt[12]=Flt[10]
Let Flt[19]=1
Let Flt[16]=0
GoSub RADIO01CREATE
CommandBlock 1
Stream_Fadevol 1,1,0,0
Stream_Play 1
Let Flt[19]=0
CommandBlock 0
If Flt[9]=1,-1,GETPOS2
Let Flt[6]=Flt[1]
Stream_Fadevol 1,1,1,1

Label GETPOS2
Stream_GetPos 2,7
If Flt[7]=Flt[17],RADIO2END,-1
Let Flt[17]=Flt[7]
GoTo GETPOS3
Label RADIO2END
Stream_Fadevol 2,1,0,0
Stream_Pause 2
Stream_Destroy 2
Label RAND2
Rnd 10,24
If Flt[13]=Flt[10],RAND2,-1
Let Flt[13]=Flt[10]
Let Flt[19]=1
Let Flt[17]=0
GoSub RADIO02CREATE
CommandBlock 1
Stream_Fadevol 2,1,0,0
Stream_Play 2
Let Flt[19]=0
CommandBlock 0
If Flt[9]=2,-1,GETPOS3
Let Flt[6]=Flt[2]
Stream_Fadevol 2,1,1,1

Label GETPOS3
Stream_GetPos 3,7
If Flt[7]=Flt[18],RADIO3END,-1
Let Flt[18]=Flt[7]
GoTo POSITION_END
Label RADIO3END
Stream_Fadevol 3,1,0,0
Stream_Pause 3
Stream_Destroy 3
Label RAND3
Rnd 10,27
If Flt[14]=Flt[10],RAND3,-1
Let Flt[14]=Flt[10]
Let Flt[19]=1
Let Flt[18]=0
GoSub RADIO03CREATE
CommandBlock 1
Stream_Fadevol 3,1,0,0
Stream_Play 3
Let Flt[19]=0
CommandBlock 0
If Flt[9]=3,-1,POSITION_END
Let Flt[6]=Flt[3]
Stream_Fadevol 3,1,1,1

Label POSITION_END
Return



Label RADIO_READ
CommandBlock 1
Let Flt[19]=0

CompareActors 10,12,7
If Flt[7]=0,-1,NORANDOMRADIO
CompareActors 10,11,7
If Flt[7]=0,-1,NORANDOMRADIO
Rnd 9,5
Let Flt[9]=Flt[9]-1
Label NORANDOMRADIO

FindNearActor 0,10,Car
CompareActors 10,11,7
Set_Remote_Actor 10,12,11
If Flt[7]=0,-1,RADIO_READED



Label COMPARE_ENT1
CompareActors 10,1,7
If Flt[7]=1,-1,COMPARE_ENT2
Let Flt[9]=Flt[21]
Let Flt[19]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT2
CompareActors 10,2,7
If Flt[7]=1,-1,COMPARE_ENT3
Let Flt[9]=Flt[22]
Let Flt[19]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT3
CompareActors 10,3,7
If Flt[7]=1,-1,COMPARE_ENT4
Let Flt[9]=Flt[23]
Let Flt[19]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT4
CompareActors 10,4,7
If Flt[7]=1,-1,COMPARE_ENT5
Let Flt[9]=Flt[24]
Let Flt[19]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT5
CompareActors 10,5,7
If Flt[7]=1,-1,COMPARE_ENT6
Let Flt[9]=Flt[25]
Let Flt[19]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT6
CompareActors 10,6,7
If Flt[7]=1,-1,COMPARE_ENT7
Let Flt[9]=Flt[26]
Let Flt[19]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT7
CompareActors 10,7,7
If Flt[7]=1,-1,COMPARE_ENT8
Let Flt[9]=Flt[27]
Let Flt[19]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT8
CompareActors 10,8,7
If Flt[7]=1,-1,COMPARE_ENT9
Let Flt[9]=Flt[28]
Let Flt[19]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT9
CompareActors 10,9,7
If Flt[7]=1,-1,COMPARE_ENT0
Let Flt[9]=Flt[29]
Let Flt[19]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT0
If Flt[19]=1,RADIO_READED,-1
GoSub RADIO_WRITE
Label RADIO_READED
CommandBlock 0
Return



Label RADIO_SAVE
CommandBlock 1

Label COMPARE_EXIT1
CompareActors 10,1,7
If Flt[7]=1,-1,COMPARE_EXIT2
Let Flt[21]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT2
CompareActors 10,2,7
If Flt[7]=1,-1,COMPARE_EXIT3
Let Flt[22]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT3
CompareActors 10,3,7
If Flt[7]=1,-1,COMPARE_EXIT4
Let Flt[23]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT4
CompareActors 10,4,7
If Flt[7]=1,-1,COMPARE_EXIT5
Let Flt[24]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT5
CompareActors 10,5,7
If Flt[7]=1,-1,COMPARE_EXIT6
Let Flt[25]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT6
CompareActors 10,6,7
If Flt[7]=1,-1,COMPARE_EXIT7
Let Flt[26]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT7
CompareActors 10,7,7
If Flt[7]=1,-1,COMPARE_EXIT8
Let Flt[27]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT8
CompareActors 10,8,7
If Flt[7]=1,-1,COMPARE_EXIT9
Let Flt[28]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT9
CompareActors 10,9,7
If Flt[7]=1,-1,COMPARE_EXIT0
Let Flt[29]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT0
CommandBlock 0
Return



Label RADIO_WRITE
Set_Remote_Actor 8,12,9
Let Flt[29]=Flt[28]
Set_Remote_Actor 7,12,8
Let Flt[28]=Flt[27]
Set_Remote_Actor 6,12,7
Let Flt[27]=Flt[26]
Set_Remote_Actor 5,12,6
Let Flt[26]=Flt[25]
Set_Remote_Actor 4,12,5
Let Flt[25]=Flt[24]
Set_Remote_Actor 3,12,4
Let Flt[24]=Flt[23]
Set_Remote_Actor 2,12,3
Let Flt[23]=Flt[22]
Set_Remote_Actor 1,12,2
Let Flt[22]=Flt[21]
Set_Remote_Actor 10,12,1
Let Flt[21]=Flt[9]
Return




UPD:
Прошло даже два дня.
Новых косяков не обнаружилось. Идей для улучшения и большего усложнения скрипта пока нет.
Все работает, как задумано.
Думаю, можно оформить релиз.

Вопрос: А как будем оформлять?

Abradox
30.10.2020, 23:09
Вроде скрипт не должен был затрагивать сюжетную музыку?
В Миссии Creme de la Creme, когда в аэропорту глохнет машина, то при выходе из нее перестает играть сюжетная музыка. Включается она уже только в катсцене с падением самолета.

Добавлено через 2 минуты
Ты темой промахнулся )
Я проверю, но уйдёт время, у меня сохранения заглючило, теперь всё с начала прохожу.
Ты тоже проверь, загрузи без скрипта. Вдруг, так и должно быть, а мы забыли.Проверил. Нет, так не должно быть, без скрипта музыка играет, со скриптом выключается при выходе из машины.

Kaiser
31.10.2020, 11:33
Ребята, у меня уже складывается впечатление, что я попал на экзамен по высшей математике))

KlassenAS
31.10.2020, 13:54
Проверил. Нет, так не должно быть, без скрипта музыка играет, со скриптом выключается при выходе из машины.
А вот это очень странно.
Потому, что активная команда SityMusic_Off только в начале скрипта.
И, при выходе из машины, скрипт либо уничтожает аудиопотоки, если радио играло, либо не делает ничего.
По крайней мере, по логике так.
Буду разбираться, чё как.

Ребята, у меня уже складывается впечатление, что я попал на экзамен по высшей математике))
Ты близок к истине.
Разработка подобного сложного алгоритма - обычное дело, когда пишешь курсач по программированию )
Я больше скажу - программа, которую я писал для дипломной работы, лишь пять раз объёмнее этого скрипта.


UPD:
Наконец-то дошли руки.
Действительно, была ошибка в логике скрипта.
После того, как я сделал, чтобы радио по умолчанию при старте скрипта было выключено, потоки не создавались, а при выходе из машины либо при выключении радио, уничтожались, я не уследил за логикой и при выходе из машины, при выключенном радио, скрипт выполнял ненужную процедуру уничтожения потоков.
Любопытно, что не имея доступа к "своим" потокам, скрипт уничтожал "чужие" потоки, вырубая миссионную музыку.
Жаль только, что это работает лишь в отношении потоков, созданных в миссии, а не загруженных из сохранения.

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

Обновлённые версии скриптов:
Ver. 2.1
https://drive.google.com/file/d/1ARuTdA84Jff9zybC6veDL-t5Fdw4HBYA/view?usp=sharing

Ver. 2.0
https://drive.google.com/file/d/1kb08W3Zruumk8KN4Csx73GYb9G7XqBKW/view?usp=sharing

Ver. 1.1
https://drive.google.com/file/d/13kAGAnnvFXzkXN3ekYTOdgUBci8yIbS1/view?usp=sharing

Firefox3860
08.11.2020, 20:42
Обновлённые версии скриптов:Круто, работает. Случайный выбор станции в машине и вправду добавляет реализма.
Надо как-нибудь целый релиз тогда оформить...

KlassenAS
09.11.2020, 20:49
Случайный выбор станции в машине и вправду добавляет реализма.

Кстати, о реализьме.

Я подумал: при старте скрипта все треки на радио начинают играть с начала.
Это неправильно. Ведь радио не начинает эфир тогда, когда мы его включаем.
Надо при первом включении радио позиции треков рандомизировать.
Но рандомизировать-то надо по уму!
Надо чтобы случайное значение укладывалось в длительность трека.
А как узнать длительность трека?
Ведь такой скриптовой функции нет.

Гипотеза: если указать потоку с помощью команды Stream_SetPos некорректное значение, заведомо выходящее за пределы длительности трека, например 4 000 000, то потоку присвоится максимально возможное значение, соответствующее окончанию трека, и считав его с помощью команды Stream_GetPos мы узнаем длину трека.

Проверил гипотезу экспериментом.
Let Flt[15]=4000000
Stream_SetPos 0,15
Stream_GetPos 0,15
FreeRide_ScoreSet Flt[15]

И получил неожиданный результат: После попытки присвоения потоку некорректного значения позиции, команда Stream_GetPos показывает погоду на Марсе!
Т. е. возвращает рандомное значение.
Правда, чаще всего в диапазоне от 3 000 до 15 000 миллисекунд, и нам это не вполне подходит.

Таким образом, мы можем, при первом включении радио, смело назначать трекам рандомные позиции в диапазоне от 0 до 5 минут, а если рандомное значение выйдет за пределы реальной длительности трека, то ничего плохого не будет, значение будет рандомизировано по новой.

А реализовать эту фичу - пара пустяков.
Четыре строки в начале скрипта.
Что я уже и сделал.
Для версий 2.1 и 2.0 архивы по ссылкам обновлены.

Abradox
09.11.2020, 23:20
Я подумал: при старте скрипта все треки на радио начинают играть с начала.
Это неправильно. Ведь радио не начинает эфир тогда, когда мы его включаем.Если так рассуждать, то радио должно играть даже тогда, когда Том выходит из машины, а не ставиться на паузу.

Как обстоит дело с выключением сюжетной музыки при выходе из машины в аэропорту в миссии Сливки общества (Creme de la Creme)?

P.S. пока разработка идет, и до релиза ещё не дошло, давай лучше ссылку на файл script.sc, чтобы не перекачивать каждый раз архив в 236 мнгабайт, ведь по трекам изменений уже не будет.

CurtisTea
10.11.2020, 04:34
Кста не знаю вспоминал ли кто-то уже тут, но команда stream_create отлично воспринимает ссылки на онлайн радио (вот прям так, в формате stream_create x,"http://87.230.103.107:80/top100station.mp3" - это мой старый пример, ссылка дохлая уже давно походу). Правда сам поток как я понял должен быть строго в .mp3 закодирован, иначе игра тупо виснет. И ещё года четыре назад, когда я это выкупил именно такое онлайн радио уже было практически не найти... Я не сильно компетентен в кодировке потокового музла, может можно какой-то костыль придумать и себе во фрирайд пускать какую-то oldies радиостанцию и сейчас, я хз)

fzPRaeq3oow

KlassenAS
10.11.2020, 06:48
Если так рассуждать, то радио должно играть даже тогда, когда Том выходит из машины, а не ставиться на паузу
Так-то да, но глюки из-за сохранения потоков и отсутствие функции для определения длительности трека ставят на этом крест.
Если бы можно было определять длительность трека, я бы засекал, сколько времени радио было выключено, и при включении перематывал трек и/или переключал на следующий и ещё перематывал на нужное время, чтобы имитировать продолжение эфира, пока радио выключено.
А если бы не было глюка из-за сохранения потоков, то этого вопроса вообще бы не было и скрипт был вдвое проще и всё работало бы по фен-шую.
А так довольствуемся тем, что есть.

Как обстоит дело с выключением сюжетной музыки при выходе из машины в аэропорту в миссии Сливки общества (Creme de la Creme)?
Я ещё 3 ноября это исправил и обновил архивы. Посмотри сообщение №229 оно отредактировано.

P.S. пока разработка идет, и до релиза ещё не дошло, давай лучше ссылку на файл script.sc, чтобы не перекачивать каждый раз архив в 236 мнгабайт, ведь по трекам изменений уже не будет.
Чуть позже, как с работы вернусь.

Кста не знаю вспоминал ли кто-то уже тут, но команда stream_create отлично воспринимает ссылки на онлайн радио (вот прям так, в формате stream_create x,"http://87.230.103.107:80/top100station.mp3" - это мой старый пример, ссылка дохлая уже давно походу). Правда сам поток как я понял должен быть строго в .mp3 закодирован, иначе игра тупо виснет. И ещё года четыре назад, когда я это выкупил именно такое онлайн радио уже было практически не найти... Я не сильно компетентен в кодировке потокового музла, может можно какой-то костыль придумать и себе во фрирайд пускать какую-то oldies радиостанцию и сейчас, я хз)
Не просто вспоминали, но ещё и сетовали на то, что кроме джойрадио не удаётся найти ни одной ссылки на радиовещание, которая не вешала бы игру намертво.
И даже есть отдельная версия скрипта - 1.2, ориентированная именно на реальное радио.

Блин, если бы я умел правильно писать dll и знал, как из собственного кода обратиться к функциям движка, чтобы получить доступ к акторам и их свойствам, я бы этот скрипт сделал в виде asi плагина, и плеер у меня работал бы из самой dll, и никаких проблем бы не было. А плейлист бы считывался из ini-файла. И работало бы и любое радио, и любые аудио форматы. Так-то я в Delphi программы писать умею, можно и плагин замутить. Только я не знаю, как реализовать обмен данными с игровым движком.


UPD:
Вот сами скрипты в виде сферических коней в вакууме:

Ver. 2.1
https://drive.google.com/file/d/1zjlqPef5REGVv9ZW0peO3TR18wmtSqYH/view?usp=sharing

Ver. 2.0
https://drive.google.com/file/d/1MOsucYymrFJGVVeoba4cwdp1unPexfqx/view?usp=sharing

Haku
10.11.2020, 12:59
KlassenAS, если рассмотреть на этом примере? Подойдет ли он для Мафии?

оффтоп

http://gtabuilder.ru/gta_vc/modding/lessons_on_programming/31-asi-plaginy-vvedenie.html
http://gtabuilder.ru/gta_vc/modding/lessons_on_programming/40-sozdaem-pervyy-plagin-asi-na-c-chast-1.html
http://gtabuilder.ru/gta_vc/modding/lessons_on_programming/41-sozdaem-pervyy-plagin-asi-na-c-chast-2.html
http://gtabuilder.ru/gta_vc/modding/lessons_on_programming/42-sozdaem-pervyy-plagin-asi-na-c-chast-3.html

KlassenAS
10.11.2020, 13:14
KlassenAS, если рассмотреть на этом примере? Подойдет ли он для Мафии?
Подойдёт, но лишь потому, что это общая информация о dll и их подключении к основному игровому процессу.
Здесь нет информации о том, как из dll обращаться к функциям движка и обмениваться с ним данными.
Тупо присосались к процессу и вывели окошко с текстом и кнопкой ОК.
Я такой плагин хоть щас могу сделать. Толку будет, как от козла молока.
Вопрос ведь в том, как к акторам доступ получить. В идеале, к некоторым функциям, вызываемым командами из скриптов.
В частности, это необходимо для определения нахождения Томми в машине и для сравнения машин.

Abradox
10.11.2020, 17:51
Я ещё 3 ноября это исправил и обновил архивы. Посмотри сообщение №229 оно отредактировано.Отлично, спасибо.

CurtisTea
11.11.2020, 00:23
И даже есть отдельная версия скрипта - 1.2, ориентированная именно на реальное радио.
Я просто к чему эту тему вспомнил, зачем эти манипуляции с аудио-файлами (что не есть "настоящее" радио)? Можно было бы залаунчить что-то типа mafia community radio с таким аудио-кодеком, который прочитала бы наша старушка и пускай бы оно себе работало в фоновом режиме.

Мож если не лень будет даже погуглю как оно работает вообще)

KlassenAS
11.11.2020, 00:48
Можно было бы залаунчить что-то типа mafia community radio с таким аудио-кодеком, который прочитала бы наша старушка и пускай бы оно себе работало в фоновом режиме.
Предлагаешь сделать специально для игры мафиозное онлайн-радио?
Плохая идея. Вся музыка лицензированная, без официальной покупки прав такую интернет-радиостанцию забанят нафиг.
Другое дело, если написать программу, которая локально, на компе будет имитировать радиоэфир, крутить треки, притворяясь сервером, к которому игра сможет обращаться по ссылке. Т.к. "вещание" и игра будут работать на одном компе, это освободит от потребности в интернет-подключении и избавит от подвисаний при загрузке. Кроме того, по моим наблюдениям, игра игнорирует интернет-поток при сохранении, и глюков с непрошенным воспроизведением после этого не происходит.
Так же можно было бы имитировать любое количество радиостанций.
Но я хз, как такое реализовать.
Хотя такую программу тоже можно под asi плагин оформить, это был бы большой плюс.

Abradox
11.11.2020, 02:02
Как отделить городскую музыку от миссионной?
Нужно чтобы при выходе из машины городская музыка не играла, а миссионная в миссиях играла.

CurtisTea
11.11.2020, 06:35
Есть же команда citymusic_on/off. Или я неправильно понял вопрос?


но глюки из-за сохранения потоков и отсутствие функции для определения длительности трека ставят на этом крест
А что именно у тебя не выходит сохранить? И можно было бы все треки в один свести и запоминать/восстанавливать его позицию (хотя раньше кто-то писал вроде что оно в память трек целиком выгружает, извините, я очень быстро тред пролистывал). Та и на самом деле зачем тебе функция определения длительности трека если ты эти длительности изначально и так знаешь (ну если пользователь свои личные не закинул конечно)?

KlassenAS
11.11.2020, 11:12
Как отделить городскую музыку от миссионной?
Нужно чтобы при выходе из машины городская музыка не играла, а миссионная в миссиях играла.
Ну так городская выключается в начале скрипта командой CityMusic_Off.
А миссионная создаётся в игровых скриптах потоками, как и наше радио.
Ты что, ещё какой-то конфликт нашёл?

А что именно у тебя не выходит сохранить?
Скорее наоборот, проблема в том, что сохраняется то, что нам сохранять нафиг не нужно.
Если во время сохранения играет поток, то игра его сохраняет.
А после загрузки из сохранения, если нажать ESC, начинает их воспроизводить.
Баг такой в игре, при нажатии на ESC.
Четыре "радиостанции" - четыре сохранённых потока, и все могут начать играть одновременно, когда это нафиг не надо.
Такая вот засада из-за особенностей сохранения и игровых багов.
Из-за этого я при выключении радио вынужден запоминать позиции треков, уничтожать все потоки, и потом создавать их заново и восстанавливать позиции. Это вносит в скрипт дополнительную сложность.
Ты сам скрипт почитай, тебе понравится )
//Radio Script Ver. 2.1 09-11-2020 By KlassenAS For Abradox

Dim_Act 13
Dim_Flt 30
GetActivePlayer 0
FindActor 10
FindActor 11
FindActor 12
//Акторы 1-9 - для запоминания машин
//Актор 10 - для текущей машины
//Актор 11 - для прошлой машины
//Актор 12 - данный скрипт

Human_GetProperty 0,4,Energy
If Flt[4]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on

CityMusic_Off

//ПЕРЕМЕННЫЕ:
//0-3 - идентификаторы потоков
//4 - Логика
//5 - Нажатие клавиш вперёд1 и назад1
//6 - Последний активный поток
//7 - Сиденье/Время с начала игры/текущее время потока/
//8 - Прошлое время с начала игры
//Номер радиостанции
//9 - Номер играющей радиостанции
//10 - Рандом для radio/разница во времени игры
//11-14 - Номера треков на радиостанциях 0 - 3
//15-18 - для позиций потоков 0-3
//19 - Логика запоминания тачек
//20 - Для перехода к меткам треков
//21-29 - Номера радиостанций в запомненных тачках 1-9
Let Flt[4]=0
Vect_Set 9,-1,-1,-1
Vect_Set 21,-1,-1,-1
Vect_Set 24,-1,-1,-1
Vect_Set 27,-1,-1,-1

Rnd 11,23
Rnd 12,24
Rnd 13,24
Rnd 14,27

Rnd 15,300000
Rnd 16,300000
Rnd 17,300000
Rnd 18,300000

GoTo CHECK



Label RADIOCREATE
GoSub RADIO00CREATE
GoSub RADIO01CREATE
GoSub RADIO02CREATE
GoSub RADIO03CREATE
Return



Label RADIO00CREATE
CommandBlock 1
Let Flt[20]=Flt[11]+100000
GoTo Flt[20]

Label 100000
Stream_Create 0,"sounds\03_music.wav"
GoTo RADIO00CREATED

Label 100001
Stream_Create 0,"sounds\13b_music.wav"
GoTo RADIO00CREATED

Label 100002
Stream_Create 0,"sounds\14_Coucou.wav"
GoTo RADIO00CREATED

Label 100003
Stream_Create 0,"sounds\18_radio.wav"
GoTo RADIO00CREATED

Label 100004
Stream_Create 0,"sounds\s_music1.wav"
GoTo RADIO00CREATED

Label 100005
Stream_Create 0,"sounds\s_music3.wav"
GoTo RADIO00CREATED

Label 100006
Stream_Create 0,"sounds\s_music5.wav"
GoTo RADIO00CREATED

Label 100007
Stream_Create 0,"sounds\music\city_music_01.ogg"
GoTo RADIO00CREATED

Label 100008
Stream_Create 0,"sounds\music\city_music_02.ogg"
GoTo RADIO00CREATED

Label 100009
Stream_Create 0,"sounds\music\city_music_03.ogg"
GoTo RADIO00CREATED

Label 100010
Stream_Create 0,"sounds\music\city_music_04.ogg"
GoTo RADIO00CREATED

Label 100011
Stream_Create 0,"sounds\music\city_music_05.ogg"
GoTo RADIO00CREATED

Label 100012
Stream_Create 0,"sounds\music\city_music_06.ogg"
GoTo RADIO00CREATED

Label 100013
Stream_Create 0,"sounds\music\city_music_07.ogg"
GoTo RADIO00CREATED

Label 100014
Stream_Create 0,"sounds\music\city_music_08.ogg"
GoTo RADIO00CREATED

Label 100015
Stream_Create 0,"sounds\music\city_music_09.ogg"
GoTo RADIO00CREATED

Label 100016
Stream_Create 0,"sounds\music\city_music_10.ogg"
GoTo RADIO00CREATED

Label 100017
Stream_Create 0,"sounds\music\city_music_11.ogg"
GoTo RADIO00CREATED

Label 100018
Stream_Create 0,"sounds\music\city_music_12.ogg"
GoTo RADIO00CREATED

Label 100019
Stream_Create 0,"sounds\music\city_music_13.ogg"
GoTo RADIO00CREATED

Label 100020
Stream_Create 0,"sounds\music\city_music_15.ogg"
GoTo RADIO00CREATED

Label 100021
Stream_Create 0,"sounds\music\12_scene music.ogg"
GoTo RADIO00CREATED

Label 100022
Stream_Create 0,"sounds\music\mise02-ulicka.ogg"
GoTo RADIO00CREATED

Label RADIO00CREATED
Stream_SetPos 0,15
If Flt[9]=0,-1,CREATED00
Let Flt[6]=Flt[0]
Label CREATED00
CommandBlock 0
Return


Label RADIO01CREATE
CommandBlock 1
Let Flt[20]=Flt[12]+100100
GoTo Flt[20]

Label 100100
Stream_Create 1,"radio\radio01-00.ogg"
GoTo RADIO01CREATED

Label 100101
Stream_Create 1,"radio\radio01-01.ogg"
GoTo RADIO01CREATED

Label 100102
Stream_Create 1,"radio\radio01-02.ogg"
GoTo RADIO01CREATED

Label 100103
Stream_Create 1,"radio\radio01-03.ogg"
GoTo RADIO01CREATED

Label 100104
Stream_Create 1,"radio\radio01-04.ogg"
GoTo RADIO01CREATED

Label 100105
Stream_Create 1,"radio\radio01-05.ogg"
GoTo RADIO01CREATED

Label 100106
Stream_Create 1,"radio\radio01-06.ogg"
GoTo RADIO01CREATED

Label 100107
Stream_Create 1,"radio\radio01-07.ogg"
GoTo RADIO01CREATED

Label 100108
Stream_Create 1,"radio\radio01-08.ogg"
GoTo RADIO01CREATED

Label 100109
Stream_Create 1,"radio\radio01-09.ogg"
GoTo RADIO01CREATED

Label 100110
Stream_Create 1,"radio\radio01-10.ogg"
GoTo RADIO01CREATED

Label 100111
Stream_Create 1,"radio\radio01-11.ogg"
GoTo RADIO01CREATED

Label 100112
Stream_Create 1,"radio\radio01-12.ogg"
GoTo RADIO01CREATED

Label 100113
Stream_Create 1,"radio\radio01-13.ogg"
GoTo RADIO01CREATED

Label 100114
Stream_Create 1,"radio\radio01-14.ogg"
GoTo RADIO01CREATED

Label 100115
Stream_Create 1,"radio\radio01-15.ogg"
GoTo RADIO01CREATED

Label 100116
Stream_Create 1,"radio\radio01-16.ogg"
GoTo RADIO01CREATED

Label 100117
Stream_Create 1,"radio\radio01-17.ogg"
GoTo RADIO01CREATED

Label 100118
Stream_Create 1,"radio\radio01-18.ogg"
GoTo RADIO01CREATED

Label 100119
Stream_Create 1,"radio\radio01-19.ogg"
GoTo RADIO01CREATED

Label 100120
Stream_Create 1,"radio\radio01-20.ogg"
GoTo RADIO01CREATED

Label 100121
Stream_Create 1,"radio\radio01-21.ogg"
GoTo RADIO01CREATED

Label 100122
Stream_Create 1,"radio\radio01-22.ogg"
GoTo RADIO01CREATED

Label 100123
Stream_Create 1,"radio\radio01-23.ogg"
GoTo RADIO01CREATED

Label RADIO01CREATED
Stream_SetPos 1,16
If Flt[9]=1,-1,CREATED01
Let Flt[6]=Flt[1]
Label CREATED01
CommandBlock 0
Return


Label RADIO02CREATE
CommandBlock 1
Let Flt[20]=Flt[13]+100200
GoTo Flt[20]

Label 100200
Stream_Create 2,"radio\radio02-00.ogg"
GoTo RADIO02CREATED

Label 100201
Stream_Create 2,"radio\radio02-01.ogg"
GoTo RADIO02CREATED

Label 100202
Stream_Create 2,"radio\radio02-02.ogg"
GoTo RADIO02CREATED

Label 100203
Stream_Create 2,"radio\radio02-03.ogg"
GoTo RADIO02CREATED

Label 100204
Stream_Create 2,"radio\radio02-04.ogg"
GoTo RADIO02CREATED

Label 100205
Stream_Create 2,"radio\radio02-05.ogg"
GoTo RADIO02CREATED

Label 100206
Stream_Create 2,"radio\radio02-06.ogg"
GoTo RADIO02CREATED

Label 100207
Stream_Create 2,"radio\radio02-07.ogg"
GoTo RADIO02CREATED

Label 100208
Stream_Create 2,"radio\radio02-08.ogg"
GoTo RADIO02CREATED

Label 100209
Stream_Create 2,"radio\radio02-09.ogg"
GoTo RADIO02CREATED

Label 100210
Stream_Create 2,"radio\radio02-10.ogg"
GoTo RADIO02CREATED

Label 100211
Stream_Create 2,"radio\radio02-11.ogg"
GoTo RADIO02CREATED

Label 100212
Stream_Create 2,"radio\radio02-12.ogg"
GoTo RADIO02CREATED

Label 100213
Stream_Create 2,"radio\radio02-13.ogg"
GoTo RADIO02CREATED

Label 100214
Stream_Create 2,"radio\radio02-14.ogg"
GoTo RADIO02CREATED

Label 100215
Stream_Create 2,"radio\radio02-15.ogg"
GoTo RADIO02CREATED

Label 100216
Stream_Create 2,"radio\radio02-16.ogg"
GoTo RADIO02CREATED

Label 100217
Stream_Create 2,"radio\radio02-17.ogg"
GoTo RADIO02CREATED

Label 100218
Stream_Create 2,"radio\radio02-18.ogg"
GoTo RADIO02CREATED

Label 100219
Stream_Create 2,"radio\radio02-19.ogg"
GoTo RADIO02CREATED

Label 100220
Stream_Create 2,"radio\radio02-20.ogg"
GoTo RADIO02CREATED

Label 100221
Stream_Create 2,"radio\radio02-21.ogg"
GoTo RADIO02CREATED

Label 100222
Stream_Create 2,"radio\radio02-22.ogg"
GoTo RADIO02CREATED

Label 100223
Stream_Create 2,"radio\radio02-23.ogg"
GoTo RADIO02CREATED

Label RADIO02CREATED
Stream_SetPos 2,17
If Flt[9]=2,-1,CREATED02
Let Flt[6]=Flt[2]
Label CREATED02
CommandBlock 0
Return


Label RADIO03CREATE
CommandBlock 1
Let Flt[20]=Flt[14]+100300
GoTo Flt[20]

Label 100300
Stream_Create 3,"radio\radio03-00.mp3"
GoTo RADIO03CREATED

Label 100301
Stream_Create 3,"radio\radio03-01.mp3"
GoTo RADIO03CREATED

Label 100302
Stream_Create 3,"radio\radio03-02.mp3"
GoTo RADIO03CREATED

Label 100303
Stream_Create 3,"radio\radio03-03.mp3"
GoTo RADIO03CREATED

Label 100304
Stream_Create 3,"radio\radio03-04.mp3"
GoTo RADIO03CREATED

Label 100305
Stream_Create 3,"radio\radio03-05.mp3"
GoTo RADIO03CREATED

Label 100306
Stream_Create 3,"radio\radio03-06.mp3"
GoTo RADIO03CREATED

Label 100307
Stream_Create 3,"radio\radio03-07.mp3"
GoTo RADIO03CREATED

Label 100308
Stream_Create 3,"radio\radio03-08.mp3"
GoTo RADIO03CREATED

Label 100309
Stream_Create 3,"radio\radio03-09.mp3"
GoTo RADIO03CREATED

Label 100310
Stream_Create 3,"radio\radio03-10.mp3"
GoTo RADIO03CREATED

Label 100311
Stream_Create 3,"radio\radio03-11.mp3"
GoTo RADIO03CREATED

Label 100312
Stream_Create 3,"radio\radio03-12.mp3"
GoTo RADIO03CREATED

Label 100313
Stream_Create 3,"radio\radio03-13.mp3"
GoTo RADIO03CREATED

Label 100314
Stream_Create 3,"radio\radio03-14.mp3"
GoTo RADIO03CREATED

Label 100315
Stream_Create 3,"radio\radio03-15.mp3"
GoTo RADIO03CREATED

Label 100316
Stream_Create 3,"radio\radio03-16.mp3"
GoTo RADIO03CREATED

Label 100317
Stream_Create 3,"radio\radio03-17.mp3"
GoTo RADIO03CREATED

Label 100318
Stream_Create 3,"radio\radio03-18.mp3"
GoTo RADIO03CREATED

Label 100319
Stream_Create 3,"radio\radio03-19.mp3"
GoTo RADIO03CREATED

Label 100320
Stream_Create 3,"radio\radio03-20.mp3"
GoTo RADIO03CREATED

Label 100321
Stream_Create 3,"radio\radio03-21.mp3"
GoTo RADIO03CREATED

Label 100322
Stream_Create 3,"radio\radio03-22.mp3"
GoTo RADIO03CREATED

Label 100323
Stream_Create 3,"radio\radio03-23.mp3"
GoTo RADIO03CREATED

Label 100324
Stream_Create 3,"radio\radio03-24.mp3"
GoTo RADIO03CREATED

Label 100325
Stream_Create 3,"radio\radio03-25.mp3"
GoTo RADIO03CREATED

Label 100326
Stream_Create 3,"radio\radio03-26.mp3"
GoTo RADIO03CREATED

Label RADIO03CREATED
Stream_SetPos 3,18
If Flt[9]=3,-1,CREATED03
Let Flt[6]=Flt[3]
Label CREATED03
CommandBlock 0
Return


Label CHECK
CommandBlock 1
GoSub POSITION
CommandBlock 0
Human_GetSeatIdx 0,7
If Flt[7]=-1,CAR_OUT,CAR_IN



Label CAR_IN
Ctrl_Read 5,JUMP1
If Flt[5]=0,-1,RADIO_UP
Label READ_DOWN
Ctrl_Read 5,CROUCH1
If Flt[5]=0,-1,RADIO_DOWN
Label CHECKPLAY

If Flt[4]=0,-,CHECK
Wait 500
GoSub RADIO_READ
If Flt[9]>-1,-1,RADIO_OFF
GoSub RADIOCREATE
GoSub RADIO_PLAY
Let Flt[20]=Flt[9]+2000
GoSub Flt[20]
Label RADIO_OFF
If Flt[9]=-1,-1,ADIRDA
Console_AddText 90000000
Label ADIRDA
Let Flt[4]=1
GoTo CHECK



Label CAR_OUT
If Flt[4]=1,-1,CHECK
CommandBlock 1
If Flt[9]>-1,-1,NO_DESTROY
GoSub RADIO_DESTROY
Label NO_DESTROY
Let Flt[4]=0
GoSub RADIO_SAVE
CommandBlock 0
GoTo CHECK



Label RADIO_UP
CommandBlock 1
If Flt[9]=-1,-1,CHANGEUP
GoSub RADIOCREATE
GoSub RADIO_PLAY
Label CHANGEUP
Stream_Fadevol 6,1,0,0
Let Flt[9]=Flt[9]+1
If Flt[9]>3,-1,CHANGEDUP
Let Flt[9]=-1
Label CHANGEDUP
Let Flt[20]=Flt[9]+2000
GoSub Flt[20]
CommandBlock 0

Let Flt[7]=0
Label 3333
Ctrl_Read 5,JUMP1
If Flt[5]=1,-1,READ_DOWN
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<5,3333,-1
GoTo READ_DOWN



Label RADIO_DOWN
CommandBlock 1
If Flt[9]=-1,-1,CHANGEDOWN
GoSub RADIOCREATE
GoSub RADIO_PLAY
Label CHANGEDOWN
Stream_Fadevol 6,1,0,0
Let Flt[9]=Flt[9]-1
If Flt[9]<-1,-1,CHANGEDDOWN
Let Flt[9]=3
Label CHANGEDDOWN
Let Flt[20]=Flt[9]+2000
GoSub Flt[20]
CommandBlock 0

Let Flt[7]=0
Label 2222
Ctrl_Read 5,CROUCH1
If Flt[5]=1,-1,CHECKPLAY
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<5,2222,-1
GoTo CHECKPLAY


Label 1999
GoSub RADIO_DESTROY
Console_AddText 90000000
Return

Label 2000
Let Flt[6]=Flt[0]
Stream_Fadevol 6,1,1,1
Console_AddText 90000001
Return

Label 2001
Let Flt[6]=Flt[1]
Stream_Fadevol 6,1,1,1
Console_AddText 90000002
Return

Label 2002
Let Flt[6]=Flt[2]
Stream_Fadevol 6,1,1,1
Console_AddText 90000003
Return

Label 2003
Let Flt[6]=Flt[3]
Stream_Fadevol 6,1,1,1
Console_AddText 90000004
Return



Label RADIO_PLAY
CommandBlock 1
Stream_Fadevol 0,1,0,0
Stream_Play 0
Stream_Fadevol 1,1,0,0
Stream_Play 1
Stream_Fadevol 2,1,0,0
Stream_Play 2
Stream_Fadevol 3,1,0,0
Stream_Play 3
CommandBlock 0
Return



Label RADIO_DESTROY
CommandBlock 1
Stream_GetPos 0,15
Stream_Fadevol 0,1,0,0
Stream_Pause 0
Stream_Destroy 0

Stream_GetPos 1,16
Stream_Fadevol 1,1,0,0
Stream_Pause 1
Stream_Destroy 1

Stream_GetPos 2,17
Stream_Fadevol 2,1,0,0
Stream_Pause 2
Stream_Destroy 2

Stream_GetPos 3,18
Stream_Fadevol 3,1,0,0
Stream_Pause 3
Stream_Destroy 3
CommandBlock 0
Return



Label POSITION
If Flt[4]=0,POSITION_END,-1
If Flt[9]=-1,POSITION_END,-1
GetGameTime 7
Let Flt[10]=Flt[7]-Flt[8]
If Flt[10]<500,POSITION_END,-1
Let Flt[8]=Flt[7]

Label GETPOS0
Stream_GetPos 0,7
If Flt[7]=Flt[15],RADIO0END,-1
Let Flt[15]=Flt[7]
GoTo GETPOS1
Label RADIO0END
Stream_Fadevol 0,1,0,0
Stream_Pause 0
Stream_Destroy 0
Label RAND0
Rnd 10,23
If Flt[11]=Flt[10],RAND0,-1
Let Flt[11]=Flt[10]
Let Flt[19]=1
Let Flt[15]=0
GoSub RADIO00CREATE
CommandBlock 1
Stream_Fadevol 0,1,0,0
Stream_Play 0
Let Flt[19]=0
CommandBlock 0
If Flt[9]=0,-1,GETPOS1
Let Flt[6]=Flt[0]
Stream_Fadevol 0,1,1,1

Label GETPOS1
Stream_GetPos 1,7
If Flt[7]=Flt[16],RADIO1END,-1
Let Flt[16]=Flt[7]
GoTo GETPOS2
Label RADIO1END
Stream_Fadevol 1,1,0,0
Stream_Pause 1
Stream_Destroy 1
Label RAND1
Rnd 10,24
If Flt[12]=Flt[10],RAND1,-1
Let Flt[12]=Flt[10]
Let Flt[19]=1
Let Flt[16]=0
GoSub RADIO01CREATE
CommandBlock 1
Stream_Fadevol 1,1,0,0
Stream_Play 1
Let Flt[19]=0
CommandBlock 0
If Flt[9]=1,-1,GETPOS2
Let Flt[6]=Flt[1]
Stream_Fadevol 1,1,1,1

Label GETPOS2
Stream_GetPos 2,7
If Flt[7]=Flt[17],RADIO2END,-1
Let Flt[17]=Flt[7]
GoTo GETPOS3
Label RADIO2END
Stream_Fadevol 2,1,0,0
Stream_Pause 2
Stream_Destroy 2
Label RAND2
Rnd 10,24
If Flt[13]=Flt[10],RAND2,-1
Let Flt[13]=Flt[10]
Let Flt[19]=1
Let Flt[17]=0
GoSub RADIO02CREATE
CommandBlock 1
Stream_Fadevol 2,1,0,0
Stream_Play 2
Let Flt[19]=0
CommandBlock 0
If Flt[9]=2,-1,GETPOS3
Let Flt[6]=Flt[2]
Stream_Fadevol 2,1,1,1

Label GETPOS3
Stream_GetPos 3,7
If Flt[7]=Flt[18],RADIO3END,-1
Let Flt[18]=Flt[7]
GoTo POSITION_END
Label RADIO3END
Stream_Fadevol 3,1,0,0
Stream_Pause 3
Stream_Destroy 3
Label RAND3
Rnd 10,27
If Flt[14]=Flt[10],RAND3,-1
Let Flt[14]=Flt[10]
Let Flt[19]=1
Let Flt[18]=0
GoSub RADIO03CREATE
CommandBlock 1
Stream_Fadevol 3,1,0,0
Stream_Play 3
Let Flt[19]=0
CommandBlock 0
If Flt[9]=3,-1,POSITION_END
Let Flt[6]=Flt[3]
Stream_Fadevol 3,1,1,1

Label POSITION_END
Return



Label RADIO_READ
CommandBlock 1
Let Flt[19]=0
FindNearActor 0,10,Car

CompareActors 11,12,7
If Flt[7]=0,-1,NORANDOMRADIO
CompareActors 10,11,7
If Flt[7]=0,-1,NORANDOMRADIO
Rnd 9,5
Let Flt[9]=Flt[9]-1
Label NORANDOMRADIO

CompareActors 10,11,7
Set_Remote_Actor 10,12,11
If Flt[7]=0,-1,RADIO_READED

Label COMPARE_ENT1
CompareActors 10,1,7
If Flt[7]=1,-1,COMPARE_ENT2
Let Flt[9]=Flt[21]
Let Flt[19]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT2
CompareActors 10,2,7
If Flt[7]=1,-1,COMPARE_ENT3
Let Flt[9]=Flt[22]
Let Flt[19]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT3
CompareActors 10,3,7
If Flt[7]=1,-1,COMPARE_ENT4
Let Flt[9]=Flt[23]
Let Flt[19]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT4
CompareActors 10,4,7
If Flt[7]=1,-1,COMPARE_ENT5
Let Flt[9]=Flt[24]
Let Flt[19]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT5
CompareActors 10,5,7
If Flt[7]=1,-1,COMPARE_ENT6
Let Flt[9]=Flt[25]
Let Flt[19]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT6
CompareActors 10,6,7
If Flt[7]=1,-1,COMPARE_ENT7
Let Flt[9]=Flt[26]
Let Flt[19]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT7
CompareActors 10,7,7
If Flt[7]=1,-1,COMPARE_ENT8
Let Flt[9]=Flt[27]
Let Flt[19]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT8
CompareActors 10,8,7
If Flt[7]=1,-1,COMPARE_ENT9
Let Flt[9]=Flt[28]
Let Flt[19]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT9
CompareActors 10,9,7
If Flt[7]=1,-1,COMPARE_ENT0
Let Flt[9]=Flt[29]
Let Flt[19]=1
GoTo COMPARE_ENT0

Label COMPARE_ENT0
If Flt[19]=1,RADIO_READED,-1
GoSub RADIO_WRITE
Label RADIO_READED
CommandBlock 0
Return



Label RADIO_SAVE
CommandBlock 1

Label COMPARE_EXIT1
CompareActors 10,1,7
If Flt[7]=1,-1,COMPARE_EXIT2
Let Flt[21]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT2
CompareActors 10,2,7
If Flt[7]=1,-1,COMPARE_EXIT3
Let Flt[22]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT3
CompareActors 10,3,7
If Flt[7]=1,-1,COMPARE_EXIT4
Let Flt[23]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT4
CompareActors 10,4,7
If Flt[7]=1,-1,COMPARE_EXIT5
Let Flt[24]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT5
CompareActors 10,5,7
If Flt[7]=1,-1,COMPARE_EXIT6
Let Flt[25]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT6
CompareActors 10,6,7
If Flt[7]=1,-1,COMPARE_EXIT7
Let Flt[26]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT7
CompareActors 10,7,7
If Flt[7]=1,-1,COMPARE_EXIT8
Let Flt[27]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT8
CompareActors 10,8,7
If Flt[7]=1,-1,COMPARE_EXIT9
Let Flt[28]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT9
CompareActors 10,9,7
If Flt[7]=1,-1,COMPARE_EXIT0
Let Flt[29]=Flt[9]
GoTo COMPARE_EXIT0

Label COMPARE_EXIT0
CommandBlock 0
Return



Label RADIO_WRITE
CommandBlock 1
Set_Remote_Actor 8,12,9
Let Flt[29]=Flt[28]
Set_Remote_Actor 7,12,8
Let Flt[28]=Flt[27]
Set_Remote_Actor 6,12,7
Let Flt[27]=Flt[26]
Set_Remote_Actor 5,12,6
Let Flt[26]=Flt[25]
Set_Remote_Actor 4,12,5
Let Flt[25]=Flt[24]
Set_Remote_Actor 3,12,4
Let Flt[24]=Flt[23]
Set_Remote_Actor 2,12,3
Let Flt[23]=Flt[22]
Set_Remote_Actor 1,12,2
Let Flt[22]=Flt[21]
Set_Remote_Actor 10,12,1
Let Flt[21]=Flt[9]
CommandBlock 0
Return


раньше кто-то писал вроде что оно в память трек целиком выгружает, извините, я очень быстро тред пролистывал
Совершенно верно.
У нас и так со сборкой модов движок большой объём памяти использует, а тут ещё четыре двухчасовых аудиозаписи в памяти.
Оно нам надо? Лучше отдельными треками.
А ещё FreeRide Extended тоже память жрёт как бегемот)

Та и на самом деле зачем тебе функция определения длительности трека если ты эти длительности изначально и так знаешь (ну если пользователь свои личные не закинул конечно)?
То-то и оно, я вынужден учитывать возможность того, что пользователь заменит треки на свои.
Плюс, порядок воспроизведения треков рандомизирован.

Abradox
11.11.2020, 14:20
Ты что, ещё какой-то конфликт нашёл?не, если найду, то напишу.

GOLOD55
14.11.2020, 01:54
...переложить радиво со скрипта в asi?
Теоретичски, гутт, ибо может убрать опр. сложности и ограничения, ога.
Но, сдается мине, енто непросто. компилить скрипт в ассемблер_код - архисложно и малоосмысленно, но вот если логику писать свою в длл и на, напр, с++, то может быть все намного проще: тада всю кухню с потоками можно иметь свою(а также хнопичное управление ею в игре), а от игры требуется совсем немного - лишь несколько фильтров а-ля "is Tommy in car"(с подобным я могу помочь).

KlassenAS
14.11.2020, 12:02
если логику писать свою в длл и на, напр, с++, то может быть все намного проще: тада всю кухню с потоками можно иметь свою(а также хнопичное управление ею в игре), а от игры требуется совсем немного - лишь несколько фильтров а-ля "is Tommy in car"(с подобным я могу помочь).
Именно это я и имел в виду - mp3 плеер в виде dll, имитирующий радио
Правда, я только в Delphi умею.
Для меня основная загвоздка именно в том, что я не имею ни малейшего понятия о том, как из своей dll к акторам доступ получить. Чтобы, например, последние несколько машин запоминать, как я это в скрипте сделал, и проверять нахождение Томми в машине. CityMusic_Off, опять же.
А так-то всё, что связано с воспроизведением музыки сделать легче лёгкого.
Дефолтных функций Delphi хватит за глаза.

UPD: погуглил, на C++ тоже вроде не сложно )

Firefox3860
14.11.2020, 14:46
Если скрипт пока не будет меняться, хочу опубликовать мод 2.1 на одном популярном англоязычном ресурсе (описание переведу сам). И, может быть, на mafiascene потом. Ты не против?

mp3-проигрыватель на с++ это интересно, хотел бы посмотреть :)

KlassenAS
14.11.2020, 15:59
Если скрипт пока не будет меняться, хочу опубликовать мод 2.1 на одном популярном англоязычном ресурсе (описание переведу сам). И, может быть, на mafiascene потом. Ты не против?

Неужто на Нексусе?
Валяй, публикуй, только благодарен буду!

mp3-проигрыватель на с++ это интересно, хотел бы посмотреть :)
Да хоть на С++, хоть на Delphi, есть дефолтные виндовские библиотеки и функции, к которым можно обратиться, чтобы это реализовать.

Firefox3860
14.11.2020, 16:53
Неужто на Нексусе?Не, (кто такой етот ваш нексус?) в дискорде сервер MafiaHub, мож кто знает, там многим зайдёт, думаю.

Да хоть на С++, хоть на Delphi, есть дефолтные виндовские библиотеки и функции, к которым можно обратиться, чтобы это реализовать.Ну да. А ведь сама Мафия это и есть mp3-проигрыватель на с++ :D

KlassenAS
15.11.2020, 13:39
Товарищи, нужен совет!
Начал писать asi плагин для нашего радио.
Писать начал на своём родном Delphi, т. к. его я знаю лучше, чем С++
Оказался перед выбором )

Вариант 1, более простой - использовать для воспроизведения музыки стандартный компонент Delphi.
Но тогда можно будет использовать только MP3.

Вариант 2 - использовать библиотеку bass.dll, можно будет играть любой формат, и не сказать, чтобы это слишком сложно.
Но тогда вместе с asi придётся ещё bass.dll использовать.
Писать dll, чтобы из неё обращаться к другой dll это довольно забавно )

Так с обработкой нажатий клавиш уже разобрался, сейчас мой несчастный asi включает/выключает музыку по нажатию клавиши.

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

Abradox
15.11.2020, 14:16
Вариант 2 предпочтительнее конечно, но если не получится значит будет только mp3