Цитата:
Сообщение от Kaiser
Ребята! Коллеги! Друзья!
Помогите разобраться со скриптом пожалуйста.
|
У тебя проблема с присвоением значения переменой 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 //Возвращаемся к проверке
[свернуть]
Вроде, всё верно, проверяй )
А ещё можно расширить скрипт и рандомно воспроизводить одну из нескольких аудиозаписей. Хоть сто песен можно в скрипт воткнуть. Только затрахаешься строки кода копипастить и имена файлов прописывать )