Mafia-Game Forum

Mafia-Game Forum (https://mafia-game.ru/forum/index.php)
-   Скриптинг (https://mafia-game.ru/forum/forumdisplay.php?f=10)
-   -   Скрипт автомобильного радио (https://mafia-game.ru/forum/showthread.php?t=1047)

Kaiser 04.10.2020 10:37

Ребята! Коллеги! Друзья!

Помогите разобраться со скриптом пожалуйста.

Намедни мне Фаерфокс прислал один скрипт, который к сожалению, нормально отказался работать. И мы не можем понять почему.

На деле происходит следующее:

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
[свернуть]

KlassenAS 04.10.2020 11:53

Цитата:

Сообщение от Kaiser (Сообщение 12185)
Ребята! Коллеги! Друзья!
Помогите разобраться со скриптом пожалуйста.

У тебя проблема с присвоением значения переменой 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 //Возвращаемся к проверке

[свернуть]


Вроде, всё верно, проверяй )

А ещё можно расширить скрипт и рандомно воспроизводить одну из нескольких аудиозаписей. Хоть сто песен можно в скрипт воткнуть. Только затрахаешься строки кода копипастить и имена файлов прописывать )

Firefox3860 04.10.2020 15:17

KlassenAS, Спасибо за хороший разбор логики. Видимо, основная проблема была в конфликте переменной потока с логической переменной. Я этого не заметил.

Ещё круто, что ты показал команду Human_GetSeatidx. Наверное, это лучший способ отслеживания сидения чела в любой машине :)

KlassenAS 04.10.2020 15:21

Цитата:

Сообщение от Firefox3860 (Сообщение 12192)
Ещё круто, что ты покакзал команду Human_GetSeatidx. Наверное, это лучший способ отслеживания сидения чела в любой машине :)

Я этот способ использовал, когда писал систему скриптов для Sity Bars +, чтобы тачка, припаркованная возле загружаемой локации, типа отеля или порта, при возвращении была на месте.

А подсказал мне этот способ GOLOD55, за что ему огромное спасибо! )

GOLOD55 04.10.2020 18:24

возможно, саунд_стрим лучше вдобавок хорошенько отдестроить после выключения, а то у мафы бажок был...что-то типа перезапуска стрима при юзании хнопички ESC.

Kaiser 04.10.2020 18:41

2 KlassenAS

Спасибо огромное, поставил твой скрипт, все прекрасно работает. Только вот оно работает во всех автомобилях, а мне бы надо в одном. Тогда мне гетактивплейер просто заменить на нужный мне файндактор?

KlassenAS 04.10.2020 19:53

Цитата:

Сообщение от Kaiser (Сообщение 12197)
Только вот оно работает во всех автомобилях, а мне бы надо в одном. Тогда мне гетактивплейер просто заменить на нужный мне файндактор?

GetActivePlayer 0 - это поиск управляемого игроком персонажа. К машине отношения не имеет.
А тебе нужно конкретное авто.
Я сделал, чтобы работало во всех, потому, что посчитал, что так лучше )
Тогда сделаем с одной:

Развернуть для просмотра



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 //Возвращаемся к проверке

[свернуть]

Kaiser 04.10.2020 20:06

2 KlassenAS

Некорректно работает. Срабатывает в одной машине, но! Садишься в машине запускается первая секунда трека, после чего выключается. После чего опять включается на секунду и так по кругу.

Причем, когда выходишь из машины, тогда начинает проигрываться нормально.

KlassenAS 04.10.2020 20:15

Цитата:

Сообщение от Kaiser (Сообщение 12204)
2 KlassenAS

Некорректно работает. Срабатывает в одной машине, но! Садишься в машине запускается первая секунда трека, после чего выключается. После чего опять включается на секунду и так по кругу.

Причем, когда выходишь из машины, тогда начинает проигрываться нормально.

Хз, может, опечатку допустил, или движку пробелы мои в скриптах не понравились.
Убрал лишнее, пробуем ещё раз:

Развернуть для просмотра



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

[свернуть]

Kaiser 04.10.2020 20:22

Пробежался по скрипту, вроде он без изменений. Что принципиально изменено?

Firefox3860 04.10.2020 20:24

Kaiser, пробелы убрал

Kaiser 04.10.2020 20:28

2 KlassenAS

На самом деле очень круто получилось, все прекрасно работает. Проверил неоднократно. Спасибо тебе большое, с твоего разрешения, использую этот скрипт в своем дополнении к Angel Pine Mod.

п.с.Плохо только то, что скрипт постоянно сначала начинается, при каждой очередной посадке в автомобиль. Так наверное никогда радио до конца не дослушать))).

KlassenAS 04.10.2020 20:29

Цитата:

Сообщение от Firefox3860 (Сообщение 12211)
Kaiser, пробелы убрал

Это у меня со второй вышки привычка осталась, когда Delphi изучал. С пробелами и заглавными буквами читаемость кода улучшается, переменные и операторы не сливаются в единый поток. Delphi к пробелам лоялен, а вот движок Мафии закапризничал )

Цитата:

Сообщение от Kaiser (Сообщение 12213)
п.с.Плохо только то, что скрипт постоянно сначала начинается, при каждой очередной посадке в автомобиль. Так наверное никогда радио до конца не дослушать))).

По идее, есть ещё команда Stream_Pause
Так что, можно заморочиться и при выходе из машины паузить скрипт. Ввести дополнительные переменные для отслеживания проигрываемого стрима на паузе, чтобы не создавать заново и не дестроить его лишний раз. Отслеживать окончание воспроизведения и перезапускать.
Но тогда возникает вопрос: не появится ли баг с ненужным воспроизведением при нажатии ESC, о котором упомянул GOLOD55?

Firefox3860 04.10.2020 20:36

Цитата:

Сообщение от KlassenAS (Сообщение 12214)
С пробелами и заглавными буквами читаемость кода улучшается, переменные и операторы не сливаются в единый поток. Delphi к пробелам лоялен, а вот движок Мафии закапризничал )

Ага, а я привык без пробелов лепить :) Мне кажется, в выражениях Flt[х] не прокатил пробел.

Цитата:

Сообщение от Kaiser (Сообщение 12213)
Плохо только то, что скрипт постоянно сначала начинается, при каждой очередной посадке в автомобиль. Так наверное никогда радио до конца не дослушать))).

А может кто-нибудь знает, можно ли такой стрим на паузу ставить или вообще отключать звук на время?

KlassenAS 04.10.2020 20:40

Цитата:

Сообщение от Firefox3860 (Сообщение 12215)
А может кто-нибудь знает, можно ли такой стрим на паузу ставить или вообще отключать звук на время?

Только что предыдущее сообщение отредактировал, ответив на этот вопрос )

Ну-ка, попробуй такой вариант:

Развернуть для просмотра

Dim_Act 2
Dim_Flt 3
GetActivePlayer 0
FindActor 1, "fire"

Let Flt[0]=0
Let Flt[1]=0
Let Flt[2]=0 //Для паузы

Label CHECK
Wait 100
CompareOwnerWithEx 0,1,-,CAR_OUT

If Flt[0]=0,-,CHECK
CityMusic_Off
If Flt[2]=0,-1,ALREADYCREATED //Проверяем, создан ли уже поток, вдруг он на паузе
Stream_Create 1, "sounds\music\fireradio.ogg"
Label ALREADYCREATED //Поток уже создан
Stream_Play 1
Let Flt[0]=1
Let Flt[2]=0
Wait 2000
GoTo CHECK

Label CAR_OUT
If Flt[0]=1,-,CHECK
Stream_Pause 1
Let Flt[2]=1 //Запоминаем, что на паузе
CityMusic_On
Let Flt[0]=0
Wait 2000
GoTo CHECK
[свернуть]


Теперь он должен ставить на паузу и возобновлять воспроизведение.
Проверь, нет ли бага с клавишей ESC, когда аудиопоток на паузе.
Пока простой вариант, без проверки окончания воспроизведения.

Kaiser 04.10.2020 21:08

2 KlassenAS

Я проверил. Все работает!!! Спасибо тебе огромное, теперь у меня в дополнение будет прям идеальное радио. Все отлично! Выходишь из машины, радио выключается, садишься в машину, продолжается с того момента, когда ты вышел из автомобиля. Я как раз не успел радио запихнуть в ЭП. Теперь выпущу в виде дополнения, в РидМи укажу, что скрипт твой.

KlassenAS 04.10.2020 21:11

Цитата:

Сообщение от Kaiser (Сообщение 12217)
2 KlassenAS

Я проверил. Все работает!!!

1 А проверил, нет ли бага с ESC?
2 Если работает без багов, то его ещё доделать надо ) Чтобы по окончании мелодии начинал воспроизведение заново. Он, по логике, не должен сам понимать, что песня закончилась. Доиграл, - и всё )
3 И вообще, тебе что, хватает одной мелодии? Давай, заморочимся, чтобы несколько было, с рандомным воспроизведением )

Kaiser 04.10.2020 21:17

1. Нет. Сейчас проверю. (Все работает нормально).
2. А ты можешь зациклить воспроизведение?
3. Там не одна песня. Там на час музыки и болтовни. Как выйдет дополнение, зацени)))

KlassenAS 04.10.2020 21:23

Цитата:

Сообщение от Kaiser (Сообщение 12220)
2. А ты можешь зациклить воспроизведение?

Для этого тоже команда есть ) Stream_SetLoop x,y

Цитата:

Сообщение от Kaiser (Сообщение 12220)
3. Там не одна песня. Там на час музыки и болтовни. Как выйдет дополнение, зацени)))

А, ну если там целый радиоэфир, то это ж совсем другой калинкор )

Вот тебе с зацикливанием, всего одну команду дописал:

Развернуть для просмотра

Dim_Act 2
Dim_Flt 3
GetActivePlayer 0
FindActor 1, "fire"

Let Flt[0]=0
Let Flt[1]=0
Let Flt[2]=0 //Для паузы

Label CHECK
Wait 100
CompareOwnerWithEx 0,1,-,CAR_OUT

If Flt[0]=0,-,CHECK
CityMusic_Off
If Flt[2]=0,-1,ALREADYCREATED //Проверяем, создан ли уже поток, вдруг он на паузе
Stream_Create 1, "sounds\music\fireradio.ogg"
Stream_SetLoop 1,1 //Зацикливаем
Label ALREADYCREATED //Поток уже создан
Stream_Play 1
Let Flt[0]=1
Let Flt[2]=0
Wait 2000
GoTo CHECK

Label CAR_OUT
If Flt[0]=1,-,CHECK
Stream_Pause 1
Let Flt[2]=1 //Запоминаем, что на паузе
CityMusic_On
Let Flt[0]=0
Wait 2000
GoTo CHECK
[свернуть]

Kaiser 04.10.2020 21:26

Блин, ну теперь надо час играть, чтобы посмотреть, работает ли воспроизведение)) Сегодня точно тебе не дам ответ)

KlassenAS 04.10.2020 22:06

Я вот ещё, чё удумал:
В реале, когда слушаешь радио, выходишь из машины, но эфир-то продолжается.
Садишься в машину и продолжаешь слушать, пропустив часть эфира.
И в Мафии 2 эта фича реализована.
Так что я глянул, есть команда для управления громкостью аудиопотока.

Stream_FadeVol ww, xx, yy, zz
изменить громкость стрима
ww - номер стрима
xx - время (мс) (не м.б. флт, недопустим 0)
yy - громкость1 (не м.б. флт)
zz - громкость2 (не м.б. флт)

Можно не ставить на паузу, а убрать громкость, и потом восстанавливать.
Но в описании не указано, используются ли с этой командой значения громкости, или переменные. Так же не указано, в каком диапазоне значений изменяется громкость.
Поэтому я предположил, что вместо переменных там числа и громкость от 0 до 100.
Если тебе интересна такая фича, то можешь попробовать этот экспериментальный вариант, но я хз, будет ли он вообще работать:

Развернуть для просмотра

Dim_Act 2
Dim_Flt 3
GetActivePlayer 0
FindActor 1, "fire"

Let Flt[0]=0
Let Flt[1]=0
Let Flt[2]=0 //Для паузы

Label CHECK
Wait 100
CompareOwnerWithEx 0,1,-,CAR_OUT

If Flt[0]=0,-,CHECK
CityMusic_Off
If Flt[2]=0,-1,ALREADYCREATED
Stream_Create 1, "sounds\music\fireradio.ogg"
Stream_Play 1
Label ALREADYCREATED
Stream_FadeVol 1, 200, 100, 0
Let Flt[0]=1
Wait 2000
GoTo CHECK

Label CAR_OUT
If Flt[0]=1,-,CHECK
Stream_FadeVol 1, 200, 0, 100
Let Flt[2]=1
CityMusic_On
Let Flt[0]=0
Wait 2000
GoTo CHECK
[свернуть]

Или второй вариант, из предположения, что команда использует переменные:

Развернуть для просмотра

Dim_Act 2
Dim_Flt 6
GetActivePlayer 0
FindActor 1, "fire"

Let Flt[0]=0
Let Flt[1]=0
Let Flt[2]=0 //Для паузы
Let Flt[3]=200
Let Flt[4]=0
Let Flt[5]=100

Label CHECK
Wait 100
CompareOwnerWithEx 0,1,-,CAR_OUT

If Flt[0]=0,-,CHECK
CityMusic_Off
If Flt[2]=0,-1,ALREADYCREATED
Stream_Create 1, "sounds\music\fireradio.ogg"
Stream_Play 1
Label ALREADYCREATED
Stream_FadeVol 1, 3, 5, 4
Let Flt[0]=1
Wait 2000
GoTo CHECK

Label CAR_OUT
If Flt[0]=1,-,CHECK
Stream_FadeVol 1, 3, 4, 5
Let Flt[2]=1
CityMusic_On
Let Flt[0]=0
Wait 2000
GoTo CHECK
[свернуть]

Но тут я тоже хз, будет ли работать )
И я хз, надо ли это тебе вообще, просто Остапа понесло )

Kaiser 04.10.2020 22:08

Вообще меня устраивает тот вариант, который есть, так как хочется, чтобы в итоге человек, который играет в мод, прослушал весь часовой эфир. Но тебе все равно огромное спасибо за участие!

Abradox 04.10.2020 23:40

Ребята такой полезный скрипт. Можно ли его финальную версию сделать для любой машины? Может быть потом вытащим из Мафии ДЕ радиостанции и засунем в оригинальную Мафию... Как реализовывается использование аудиофайлов? Игра подхватывает их из какой-то папки? Собственно сам скрип как реализован, в каком файле?

А можно ли отключить обычную музыку скриптом?
Есть идея сделать несколько радиостанций, на одной из которых будет играть обычная мафийная музыка.

KlassenAS 05.10.2020 00:10

Цитата:

Сообщение от Abradox (Сообщение 12229)
Можно ли его финальную версию сделать для любой машины?

Да
Цитата:

Сообщение от Abradox (Сообщение 12229)
Может быть потом вытащим из Мафии ДЕ радиостанции и засунем в оригинальную Мафию

Да
Цитата:

Сообщение от Abradox (Сообщение 12229)
Как реализовывается использование аудиофайлов? Игра подхватывает их из какой-то папки?

Специальная команда проигрывает файл. Этой команде нужно написать относительный путь к файлу и его имя, это можно увидеть в тексте скрипта.
Цитата:

Сообщение от Abradox (Сообщение 12229)
А можно ли отключить обычную музыку скриптом?

Да, и скрипт это делает.
Цитата:

Сообщение от Abradox (Сообщение 12229)
Собственно сам скрип как реализован, в каком файле?

Обычный мафиозный скрипт, воткнутый в миссионную сцену.
Цитата:

Сообщение от Abradox (Сообщение 12229)
Есть идея сделать несколько радиостанций, на одной из которых будет играть обычная мафийная музыка.

Готов к труду и обороне )
Когда приступаем?

Abradox 05.10.2020 01:38

А возможно сделать эти скрипты через asi плагин? Чтобы не модифицировать файлы миссий.

grandshot 05.10.2020 02:17

Цитата:

Сообщение от Abradox (Сообщение 12231)
А возможно сделать эти скрипты через asi плагин? Чтобы не модифицировать файлы миссий.

Можно сделать еще лучше, обращаясь непосредственно к функциям воспроизведения музыки в коде игры. Но для этого нужен толковый программист способный написать подобный хук.

Либо можно использовать старинный способ, добавив скрипт в taxi_pas.dat

Abradox 05.10.2020 02:27

В общем, если реализуете, без необходимости модифицировать файлы миссий, то честь вам и хвала.
Пусть путь ведет в папку Radio

KlassenAS 05.10.2020 08:44

Цитата:

Сообщение от Abradox (Сообщение 12231)
А возможно сделать эти скрипты через asi плагин? Чтобы не модифицировать файлы миссий.

Вот это я не умею, никогда с asi не работал.
Но для того, кто умеет, думаю, не сложно.
Цитата:

Сообщение от grandshot (Сообщение 12234)
Либо можно использовать старинный способ, добавив скрипт в taxi_pas.dat

А что там, с этим taxi_pas.dat?
Ни разу в нём не копался, но, я так понимаю, скрипты там так же устроены, как и в сценах?
Тогда и в нём можно сделать.
Можно мне краткий ликбез по taxi_pas.dat?
В нём, как я понимаю, находятся скрипты, общие для всех сцен?
Чем и как его редактировать?

GOLOD55 05.10.2020 09:58

мафияпатчер имеет файл для внешнего скрипта(опция ThunderboltCheatReplacementScriptPath = script.sc) и также функцию его активирования не только в городских-миссиях(DisableThunderboltCheatScriptMissio nCheck = 1).

KlassenAS 05.10.2020 10:29

Цитата:

Сообщение от GOLOD55 (Сообщение 12239)
мафияпатчер имеет файл для внешнего скрипта(опция ThunderboltCheatReplacementScriptPath = script.sc) и также функцию его активирования не только в городских-миссиях(DisableThunderboltCheatScriptMissio nCheck = 1).

А вот сейчас я мало что понял.
Можно объяснить, чтобы мне, неандертальцу, было понятно, что к чему?
Что за зверь этот патчер, в каком месте к нему прикручиваются скрипты, и как эти скрипты пишутся? То есть, так же, как скрипты в сценах? Или как-то иначе?

Haku 05.10.2020 11:57

KlassenAS, вот здесь http://mafiascene.com/forum/viewtopic.php?p=128823 и здесь http://mafiascene.com/forum/viewtopic.php?p=127693

Abradox 05.10.2020 11:59

Цитата:

Сообщение от GOLOD55 (Сообщение 12239)
мафияпатчер имеет файл для внешнего скрипта(опция ThunderboltCheatReplacementScriptPath = script.sc) и также функцию его активирования не только в городских-миссиях(DisableThunderboltCheatScriptMissio nCheck = 1).

Я так понял что мафияпатчер уже позволяет использовать любые скрипты подгружая отдельный файл.
Цитата:

Сообщение от Haku (Сообщение 12245)

А вот и связь с ASMом появилась через мафиасцену ;)


Дайте готовый файл со скриптами и я протестирую.
путь там сделайте Mafia/radio

GOLOD55 05.10.2020 15:30

ога внешний скрипт по типу таксипаса, но работает со сначала миссии.
файл script.sc создаем в папке с мафой, и(при активированиии опции(й) патчера) он работает как скрипт_объект(по статусу ближе к инит_скриптам).
еще там небольшая шапочка предлагалась в скрипте, чтоб какую-то проблему решить сопутствующую...нипомню... а вот:

dim_act 1
dim_flt 1
getactiveplayer 0
human_getproperty 0,0,energy
if flt[0]=0,-1,dan_on
act_setstate 100,off
Label dan_on

енту шапку можно в файл сразу вписать(а ниже уже - тело любого скрипта(начиная со своих dim-ов)); как видно, шапка призвана завейтить скрипт до момента пока миссиия не активируется полностью.

KlassenAS 05.10.2020 17:09

Цитата:

Сообщение от Haku (Сообщение 12245)

Спасибо! Сейчас внимательно ознакомлюсь.

Цитата:

Сообщение от Abradox (Сообщение 12246)
Дайте готовый файл со скриптами и я протестирую.
путь там сделайте Mafia/radio

Не вопрос. Тестовый скрипт сделаю под один аудиофайл "radio/radio.ogg"
А дальше, когда будут извлечены записи радиоэфиров из Mafia DE, тогда его допилю.

Цитата:

Сообщение от GOLOD55 (Сообщение 12251)
файл script.sc создаем в папке с мафой, и(при активированиии опции(й) патчера) он работает как скрипт_объект(по статусу ближе к инит_скриптам).

В readme не указано, какой формат должен иметь файл script.sc
Просто текстовый файл, созданный в блокноте? В какой кодировке?
Или я могу просто сделать копию taxi_pas.dat и переименовать?

GOLOD55 05.10.2020 18:23

txt в sc переименовываем и норм.

KlassenAS 05.10.2020 18:42

Вложений: 4
Цитата:

Сообщение от GOLOD55 (Сообщение 12254)
txt в sc переименовываем и норм.

Вроде, всё сделал по фен-шую, а не пашет.
Даже два раза патчер закинул и в папку игры, и в папку scripts, а работать не хочет.
Версия игры 1.2

Сам скрипт:

Развернуть для просмотра

Dim_Act 1
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

If Flt[0]=0,-,CHECK
CityMusic_Off
If Flt[2]=0,-1,ALREADYCREATED
Stream_Create 1,"radio\radio.ogg"
Stream_SetLoop 1,1
Label ALREADYCREATED
Stream_Play 1
Let Flt[0]=1
Let Flt[2]=0
Wait 2000
GoTo CHECK

Label CAR_OUT
If Flt[0]=1,-,CHECK
Stream_Pause 1
Let Flt[2]=1
CityMusic_On
Let Flt[0]=0
Wait 2000
GoTo CHECK
[свернуть]

Если вставить в сцену, будет работать как надо.

GOLOD55 05.10.2020 20:06

Цитата:

Сообщение от KlassenAS (Сообщение 12253)
при активированиии опции(й) патчера

по-умолчанию опции сии неактивны. идем в конфиг с снимаем решетки где надо.

KlassenAS 05.10.2020 20:46

Цитата:

Сообщение от GOLOD55 (Сообщение 12258)
по-умолчанию опции сии неактивны. идем в конфиг с снимаем решетки где надо.

Во я блин даю ) Про решётки не врубился!
Теперь всё пашет.
Исправил ошибку из-за которой поток пересоздавался, добавил переменную.
Теперь работает правильно:

Развернуть для просмотра

dim_act 1
dim_flt 1
getactiveplayer 0
human_getproperty 0,0,energy
if flt[0]=0,-1,dan_on
act_setstate 100,off
Label dan_on

Dim_Act 1
Dim_Flt 4
GetActivePlayer 0

Let Flt[0]=0
Let Flt[1]=0
Let Flt[2]=-1
Let Flt[3]=0

Label CHECK
Wait 100
Human_GetSeatIdx 0,2
If Flt[2]=-1,CAR_OUT,-1

If Flt[0]=0,-,CHECK
CityMusic_Off
If Flt[3]=0,-1,ALREADYCREATED
Stream_Create 1,"radio\radio.ogg"
Stream_SetLoop 1,1
Label ALREADYCREATED
Stream_Play 1
Let Flt[0]=1
Let Flt[3]=0
Wait 2000
GoTo CHECK

Label CAR_OUT
If Flt[0]=1,-,CHECK
Stream_Pause 1
Let Flt[3]=1
CityMusic_On
Let Flt[0]=0
Wait 2000
GoTo CHECK
[свернуть]

Прикольно кататься по Лост-Хэвену под Paul Wardingham - Assimilate Regenerate )
Так можно в скрипт целый плейлист зафигачить.
Жаль, что патчер, как я понял, только один скрипт может использовать. Так было бы круто, если бы в настройках патчера прописывалось количество скриптов и их имена. Можно было бы дофига всего в игру наскриптить.

А вот тут интересно: после того, как сохранился с работающим скриптом, вышел из миссии, при загрузке из сохранения начинает играть аудиопоток.
Буду думать.

Выяснил, что это происходит, если зациклить аудиопоток командой Stream_SetLoop
Пришлось убрать её из кода. Теперь надо повтор реализовать обходным путем, через определение времени воспроизведения.

Abradox 05.10.2020 23:15

Цитата:

Сообщение от KlassenAS (Сообщение 12253)
Не вопрос. Тестовый скрипт сделаю под один аудиофайл "radio/radio.ogg"
А дальше, когда будут извлечены записи радиоэфиров из Mafia DE, тогда его допилю.

это хорошо, но почему .ogg ? Можно сделать чтобы любые аудио-файлы в этой папке воспроизводились .mp3 .wav?

Еще момент, в каждой миссии музыка будет начинаться с первого трека и с начала.
Можно ли выбор трека рандомизировать?

еще надо исключить работу скрипта в главном меню.

GOLOD55 06.10.2020 01:36

Цитата:

Сообщение от Abradox (Сообщение 12266)
исключить работу скрипта в главном меню.

юзайте шапку для скри пта, я писял выше; она тормознет в главменю скрипт.

мафа понимает мп3, наскоко помню. путь указать также и все.


Текущее время: 19:55. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.11 Release Candidate 2
Copyright ©2000 - 2024, vBulletin Solutions Inc. Перевод: zCarot