|
||||||||||||||||
|
|
||||||||||||||||
|
|
||||||||||||||||
|
|
#3 | ||
|
Senior Member Сообщений: 341
Репутация: 287
Enforcer
|
У тебя проблема с присвоением значения переменой 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 //Возвращаемся к проверке [свернуть] Вроде, всё верно, проверяй ) А ещё можно расширить скрипт и рандомно воспроизводить одну из нескольких аудиозаписей. Хоть сто песен можно в скрипт воткнуть. Только затрахаешься строки кода копипастить и имена файлов прописывать ) Последний раз редактировалось KlassenAS; 04.10.2020 в 14:02. |
||
| цитата |
| Поблагодарили: 2 |
Firefox3860 (04.10.2020),
Kaiser (04.10.2020)
|