|
|||||||||||||||||
|
|||||||||||||||||
|
09.10.2020, 15:38 | #81 | ||
Mafia Modding Crew Сообщений: 669
Репутация: 739
Priest
|
Выследить намерение игрока вряд ли можно, но есть точный способ определить, была ли игра загружена из сохранения или из меню.
|
||
цитата |
Поблагодарил: |
KlassenAS (09.10.2020)
|
09.10.2020, 15:44 | #82 | |||
Senior Member Сообщений: 341
Репутация: 285
Enforcer
|
Цитата:
Хотя, если честно, не уверен, что это поможет. Ведь игра уже загрузилась. А с ней загрузились и ненужные аудиопотоки. Ещё мысль появилась. А что там со стэком? Он работает, кажется, независимо от сохранения? Что, если в него сохранять идентификаторы потоков, а при загрузке из сохранения считывать их и дестроить их потоки? Последний раз редактировалось KlassenAS; 09.10.2020 в 15:53. |
|||
цитата |
09.10.2020, 16:00 | #83 | ||
Mafia Modding Crew Сообщений: 669
Репутация: 739
Priest
|
Вот он - https://mafia-game.ru/forum/showpost...&postcount=143
Он немного костыльный, используется у меня в моде для загрузки chg-файлов и других начальных присвоений. Но вряд ли тут, конечно, поможет. Прямой доступ к оперативной памяти? Не знаю, можно ли такое сделать в скрипте. |
||
цитата |
09.10.2020, 16:08 | #84 | |||
Senior Member Сообщений: 341
Репутация: 285
Enforcer
|
Цитата:
Развернуть для просмотраfloatreg_pop xx \\ есть в mise19mesto
найти последнее значение в стеке и записать его в переменную xx. Если стек пустой то команда вообще не сработает(даже не перепишет флт xx нулем). xx - назначаемая переменная floatreg_push xx \\ есть в mise19mesto\banka закинуть значение переменной xx в стек(перед загрузкой другой карты, например). в стек можно скидывать много флт. считывание стека floatreg_pop-ом происходит в обратном порядке. считанное из стека значение укорачивает его(причем даже нуля не остается(?)) xx - переменная, значение которой запоминаем [свернуть] |
|||
цитата |
09.10.2020, 16:44 | #85 | ||
Mafia Modding Crew Сообщений: 669
Репутация: 739
Priest
|
|||
цитата |
09.10.2020, 17:26 | #86 | |||
Senior Member Сообщений: 341
Репутация: 285
Enforcer
|
Цитата:
Кажется, я начинаю понимать, почему. Похоже, что, когда загружается сохранение, и игра воссоздаёт сохранённые потоки, они получают новые идентификаторы. 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)
|
09.10.2020, 21:06 | #87 | ||
Mafia Modding Crew Сообщений: 229
Репутация: 241
Judge
|
2 KlassenAS
Я немного запутался. Ты проверял скрипт с коммандоблоками или мне нужно протестировать?
__________________
Моя моддинговая страничка: https://vk.com/kaiser_edition |
||
цитата |
09.10.2020, 21:26 | #88 | |||
Senior Member Сообщений: 341
Репутация: 285
Enforcer
|
Цитата:
Это не тот скрипт, что нужен для твоего мода, это другая версия. Написанная с подачи Abradox. Этот скрипт, что я сейчас выложил, я проверил вдоль и поперёк. 4 радиостанции по 10 треков на каждой, с рандомизацией. Работает хорошо, но из-за кривых особенностей игры после сохранения начинаются проблемы с непрошеным воспроизведением потоков, которые не удалось решить средствами скриптинга. Если хочешь, - можешь попробовать этот скрипт в деле. Не хочешь - так и не заморачивайся ) Я планировал сегодня исправить версию скрипта для твоего мода, но после тщетных попыток побороть ошибки в своей, "флагманской", версии, силы мои иссякли, увы. |
|||
цитата |
09.10.2020, 21:29 | #89 | ||
Mafia Modding Crew Сообщений: 229
Репутация: 241
Judge
|
Так может тогда убрать из него функцию запоминания? Пусть тогда каждый раз сначала играет, коли команда несовершенна.
__________________
Моя моддинговая страничка: https://vk.com/kaiser_edition |
||
цитата |
09.10.2020, 21:31 | #90 | ||
Senior Member Сообщений: 341
Репутация: 285
Enforcer
|
|||
цитата |