Показать сообщение отдельно
Старый 09.10.2020, 17:26   #86
KlassenAS вне форума KlassenAS
Аватар для KlassenAS
Senior Member
Сообщений: 341
Репутация: 285
KlassenAS is a jewel in the rough KlassenAS is a jewel in the rough KlassenAS is a jewel in the rough
Enforcer
Информация о репутации (KlassenAS)
×
За активное участие в жизни форума и помощь пользователям вы можете получить очки репутации. За определённое количество очков репутации вам будет присвоенно соответствующее звание. Полученное звание всегда будет отображаться в нижней части области Вашего профиля, слева от сообщения.
Detective
0
Gangster
55
Thug
100
Judge
159
KlassenAS / 285
Enforcer
260
Priest
396
Snitch
780
Hitman
800
Councilor
1200
Deputy
2501
Overseer
4896
Press
6020
Don
20000
Цитата:
Сообщение от Firefox3860 Посмотреть сообщение
А, тут даже специальные команды есть. Это точно стоит попробовать.
Ну и всё равно же этот стэк будет в оперативной памяти находиться.
Попробовал. Не помогло.
Кажется, я начинаю понимать, почему.
Похоже, что, когда загружается сохранение, и игра воссоздаёт сохранённые потоки, они получают новые идентификаторы.
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
[свернуть]

Последний раз редактировалось KlassenAS; 09.10.2020 в 23:02.
цитата
Поблагодарили: 2
Firefox3860 (09.10.2020), Kaiser (09.10.2020)