|
||||||||||||||||
|
||||||||||||||||
|
|
Ответ |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
04.10.2020, 10:37 | #1 | ||
Mafia Modding Crew Сообщений: 229
Репутация: 242
Judge
|
Ребята! Коллеги! Друзья!
Помогите разобраться со скриптом пожалуйста. Намедни мне Фаерфокс прислал один скрипт, который к сожалению, нормально отказался работать. И мы не можем понять почему. На деле происходит следующее: 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 [свернуть]
__________________
Моя моддинговая страничка: https://vk.com/kaiser_edition |
||
цитата |
04.10.2020, 11:53 | #2 | ||
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)
|
04.10.2020, 15:17 | #3 | ||
Mafia Modding Crew Сообщений: 687
Репутация: 771
Priest
|
KlassenAS, Спасибо за хороший разбор логики. Видимо, основная проблема была в конфликте переменной потока с логической переменной. Я этого не заметил.
Ещё круто, что ты показал команду Human_GetSeatidx. Наверное, это лучший способ отслеживания сидения чела в любой машине Последний раз редактировалось Firefox3860; 04.10.2020 в 15:19. |
||
цитата |
04.10.2020, 15:21 | #4 | |||
Senior Member Сообщений: 341
Репутация: 287
Enforcer
|
Цитата:
А подсказал мне этот способ GOLOD55, за что ему огромное спасибо! ) Последний раз редактировалось KlassenAS; 04.10.2020 в 15:33. |
|||
цитата |
Поблагодарил: |
Kaiser (04.10.2020)
|
04.10.2020, 18:24 | #5 | ||
VIP Сообщений: 100
Репутация: 152
Thug
|
возможно, саунд_стрим лучше вдобавок хорошенько отдестроить после выключения, а то у мафы бажок был...что-то типа перезапуска стрима при юзании хнопички ESC.
|
||
цитата |
04.10.2020, 18:41 | #6 | ||
Mafia Modding Crew Сообщений: 229
Репутация: 242
Judge
|
2 KlassenAS
Спасибо огромное, поставил твой скрипт, все прекрасно работает. Только вот оно работает во всех автомобилях, а мне бы надо в одном. Тогда мне гетактивплейер просто заменить на нужный мне файндактор?
__________________
Моя моддинговая страничка: https://vk.com/kaiser_edition |
||
цитата |
Поблагодарил: |
KlassenAS (04.10.2020)
|
04.10.2020, 19:53 | #7 | |||
Senior Member Сообщений: 341
Репутация: 287
Enforcer
|
Цитата:
А тебе нужно конкретное авто. Я сделал, чтобы работало во всех, потому, что посчитал, что так лучше ) Тогда сделаем с одной: Развернуть для просмотра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 //Возвращаемся к проверке [свернуть] Последний раз редактировалось KlassenAS; 04.10.2020 в 19:54. |
|||
цитата |
Поблагодарил: |
Kaiser (04.10.2020)
|
04.10.2020, 20:06 | #8 | ||
Mafia Modding Crew Сообщений: 229
Репутация: 242
Judge
|
2 KlassenAS
Некорректно работает. Срабатывает в одной машине, но! Садишься в машине запускается первая секунда трека, после чего выключается. После чего опять включается на секунду и так по кругу. Причем, когда выходишь из машины, тогда начинает проигрываться нормально.
__________________
Моя моддинговая страничка: https://vk.com/kaiser_edition Последний раз редактировалось Kaiser; 04.10.2020 в 20:07. |
||
цитата |
04.10.2020, 20:15 | #9 | |||
Senior Member Сообщений: 341
Репутация: 287
Enforcer
|
Цитата:
Убрал лишнее, пробуем ещё раз: Развернуть для просмотра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 [свернуть] Последний раз редактировалось KlassenAS; 04.10.2020 в 20:19. |
|||
цитата |
Поблагодарил: |
Kaiser (04.10.2020)
|
04.10.2020, 20:22 | #10 | ||
Mafia Modding Crew Сообщений: 229
Репутация: 242
Judge
|
Пробежался по скрипту, вроде он без изменений. Что принципиально изменено?
__________________
Моя моддинговая страничка: https://vk.com/kaiser_edition |
||
цитата |
Ответ |
|
|
|
Регистрация × |