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)

Firefox3860 23.10.2020 18:59

Цитата:

Сообщение от KlassenAS (Сообщение 12825)
теперь потоки уничтожаются не только при выходе из машины

А значит, теперь при выключении радио в машине радио тоже останавивает эфир?

Return возвращает управление в место вызова процелуры, независимо от того, откуда она была вызвана, да? А в чём отличие GoSub от goto?

1MAMOHT1 23.10.2020 19:14

Что ж за непруха, у меня оказывается версия мафии 1.1 :fp: если подменить екзешник заработает или надо другую мафу качать!?

GoSub возвращает в тоже место скрипта через ретурн ;)

KlassenAS 23.10.2020 19:15

Цитата:

Сообщение от Firefox3860 (Сообщение 12828)
А значит, теперь при выключении радио в машине радио тоже останавивает эфир?

Да. Потоки уничтожаются и можно спокойно сейвиться на чекпоинте не выходя из машины.

Цитата:

Сообщение от Firefox3860 (Сообщение 12828)
Return возвращает управление в место вызова процелуры, независимо от того, откуда она была вызвана, да?

Да.

Цитата:

Сообщение от Firefox3860 (Сообщение 12828)
А в чём отличие GoSub от goto?

GoTo - не возвратный переход, он не используется совместно с Return, хочешь после GoTo вернуться назад - делай дополнительные метки и переходы.
А GoSub - переход с возвратом и используется вместе с Return. Всё становится проще и не надо огород городить.
Причём, из под метки, переход на которую вызван оператором GoSub, можно тоже с помощью этого оператора перейти на другую процедуру, а оттуда на третью и т.д., и движок в многочисленных Return не запутается, я проверил.
Можно мутить "матрешку" с рекурсивным вызовом процедур.
Если внимательно посмотришь скрипт, у меня там есть такое.

Цитата:

Сообщение от 1MAMOHT1 (Сообщение 12829)
Что ж за непруха, у меня оказывается версия мафии 1.1 :fp: если подменить екзешник заработает или надо другую мафу качать!?

Этот вопрос лучше адресовать к тем, кто сборку модов Mafia Community Modpack делал.
Там в инсталляторе есть выбор версии игры.
Они знают, что почём )
Я, пока что, только в скриптописании более-менее разобрался.

UPD:
Нашёл ошибку.
Сейчас заново буду архивы перезаливать.

Цитата:

Сообщение от Firefox3860 (Сообщение 12810)
Щас KlassenAS соберёт окончательную версию, и скачаем.

Ага, щас KlassenAS ещё +100500 ошибок исправит и обязательно соберёт! :D

UPD2:
Вот теперь похоже, что всё работает )

Ver. 1.1
https://drive.google.com/file/d/1A3I...ew?usp=sharing

Ver. 1.2
https://drive.google.com/file/d/1bkU...ew?usp=sharing

Ver. 2.0
https://drive.google.com/file/d/1PQW...ew?usp=sharing

Ver. 2.1
https://drive.google.com/file/d/1lx1...ew?usp=sharing

Хотя я допускаю, что ещё могут возникнуть вопросы к аудиофайлам.

Firefox3860 23.10.2020 21:19

KlassenAS, Круто, собрал :D А я не понял про v2.0, там написано, что на первой станции ориг. музыка, а в скрипте и в папке radio там файлы от 4 станции. Это как?

KlassenAS 23.10.2020 21:29

Цитата:

Сообщение от Firefox3860 (Сообщение 12834)
KlassenAS, Круто, собрал :D А я не понял про v2.0, там написано, что на первой станции ориг. музыка, а в скрипте и в папке radio там файлы от 4 станции. Это как?

Это я в ридми накосячил.
Я ж копировал из версии 2.1
Опять перезаливать )
В этой версии аудиофайлы чисто для иллюстрации работы скрипта.
При отсутствующих файлах скрипт нормально работать не будет.

UPD:
Исправил, перезалил, заменил ссылку.

У меня есть ещё подозрение, что некоторые mp3 игра не понимает и воспроизводит вместо них тишину.
Надо проверить и пошаманить над форматом, если что.

Abradox 23.10.2020 23:29

Цитата:

Сообщение от KlassenAS (Сообщение 12825)
Также, теперь радио при старте скрипта выключено, что позволит избежать одновременного звучания вместе с сюжетной музыкой, например, в начале миссии "отказаться нельзя" и других подобных ситуациях. Включаем сами, своими руками )

Вот, это то чего не хватало, отличная идея!

Я правильно понимаю, версия 2.0 отличается от версии 2.1 тем что в ней нет оригинальной музыки из Мафии и треки из 3-х радиостанций разбиты на 4 радиостанции по 15 штук?

Добавлено через 21 минуту
Цитата:

Сообщение от 1MAMOHT1 (Сообщение 12829)
Что ж за непруха, у меня оказывается версия мафии 1.1 :fp: если подменить екзешник заработает или надо другую мафу качать!?

Помоему оно просто так не заработает.
Могу предложить попробовать exe отверсии 1.2 - https://dropmefiles.com/AOM8W
Game.exe наверное от версии 1.0 - https://dropmefiles.com/i1JqV

KlassenAS 24.10.2020 06:37

Цитата:

Сообщение от Abradox (Сообщение 12836)
Я правильно понимаю, версия 2.0 отличается от версии 2.1 тем что в ней нет оригинальной музыки из Мафии и треки из 3-х радиостанций разбиты на 4 радиостанции по 15 штук?

Да. Это связано с тем, что я позиционирую данную версию как шаблон для пользовательских плейлистов.
Наличие треков в папке необходимо просто потому, что без них стабильная работа скрипта не гарантирована.
А там уже пусть пользователь заменяет их своими записями, по вкусу.

1MAMOHT1 24.10.2020 08:41

Цитата:

Помоему оно просто так не заработает.
Совершенно верно, буду переустанавливать, СПАСИБО

KlassenAS 24.10.2020 15:43

Abradox, я не допёр, а нафига я извлекал блюз Cab Calloway "St James Infirmary Blues" из того видео и добавлял его в четвёртую радиостанцию, если эта песня у нас уже есть в "Radio Definitive"?
Трек 01-22
Кстати, оказалось, что именно его 03-26 игра и не воспроизводит, скрипт его после ожидания пропускает и запускает следующий.
Можем сделать так:
Раз эта песня уже есть в Radio Definitive, то выбери, какой вариант тебе больше нравится, из дефинитива или из видео. Если из видео, то я его конвертирую в ogg и заменю им дефинитивовский.

Забавно, оказывается, в нём не был удалён один из тэгов. После удаления игра стала его воспроизводить нормально. Но это не отменяет того, что эта песня у нас в двух экземплярах.

Firefox3860 24.10.2020 18:56

Ну и пусть в двух экземплярах, ничего страшного. Они немного отличаются, да и могут ведь на разных станциях одинаковые композиции появляться :)

Abradox, а у тебя wav-файлы на первой станции воспроизводятся?

KlassenAS 24.10.2020 19:08

Цитата:

Сообщение от Firefox3860 (Сообщение 12857)
Ну и пусть в двух экземплярах, ничего страшного. Они немного отличаются, да и могут ведь на разных станциях одинаковые композиции появляться :)

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

UPD:
Обновил архивы, перезалил, обновил ссылки для версий 2.1 и 2.0

Ждём день, если больше никто ни до чего не докопается, и обойдётся без исправлений, то оформим релиз.

UPD:
Цитата:

Сообщение от Firefox3860 (Сообщение 12857)
Abradox, а у тебя wav-файлы на первой станции воспроизводятся?

Вставь строку FreeRide_ScoreSet Flt[11] после метки RADIO00CREATE, перед строкой с переходом GoTo.
Сможешь отслеживать номера воспроизводимых треков.
Получишь точный ответ на вопрос.
У меня всё работает.

Кстати, я только что снова архивы 2.0 и 2.1 обновил )

UPD:
У меня родился коварный план: Что, если запоминать последние пять машин, в которые садился Томми, и запоминать состояние радио в этих машинах. Номер активной радиостанции или выкл, номера треков, их позиции, и если Томми повторно садится в одну из этих машин, то восстанавливать их?
А когда Томми лезет в какую-то новую машину, не ту, в которую сел первой в начале миссии, и не в ту, в которой был в последний раз, то присваивать радио рандомное состояние.
Всё это в рамках одной миссии, естественно. При переходе в новую миссию или при загрузке сейва всё будет сбрасываться.
Элемент реализьма )

Firefox3860 24.10.2020 23:19

Цитата:

Сообщение от KlassenAS (Сообщение 12858)
Вставь строку FreeRide_ScoreSet Flt[11] после метки RADIO00CREATE, перед строкой с переходом GoTo.
Сможешь отслеживать номера воспроизводимых треков.

Как я и думал — числа генерируются, переходы по меткам тоже происходят, но когда дело доходит до воспроизведения, файл почему-то не читается. Когда случайная величина попадает в диапозон 0 - 6, то игра думает, что стрим оказался пустым, и величина сразу же генерируется заново. Так до тех пор, пока она не примет значение от 7 до 22. Страно, с файлами что-то не так, хотя они не заменены.

Цитата:

Сообщение от KlassenAS (Сообщение 12858)
Кстати, я только что снова архивы 2.0 и 2.1 обновил )

Что на этот раз? )

Цитата:

Сообщение от KlassenAS (Сообщение 12858)
У меня родился коварный план: Что, если запоминать последние пять машин, в которые садился Томми, и запоминать состояние радио в этих машинах. Номер активной радиостанции или выкл, номера треков, их позиции, и если Томми повторно садится в одну из этих машин, то восстанавливать их?

Привет, 2000 строк и 50 переменных? :D Если хочешь, конечно, было бы интересно. Но, по-моему, для релиза излишне :)

Abradox 24.10.2020 23:31

Я не знал что она уже есть в Mafia Defenitive Edition :D
Если хочешь, то можешь заменить ее на другой трек, из тех что мы отбраковали ранее, или можешь оставить т.к. они всё-таки отличаются.

Цитата:

Сообщение от Firefox3860 (Сообщение 12857)
Abradox, а у тебя wav-файлы на первой станции воспроизводятся?

да, wav-файлы работают, например Coucou играла и не только она.

Добавлено через 3 минуты
Цитата:

Сообщение от KlassenAS (Сообщение 12858)
UPD:
У меня родился коварный план: Что, если запоминать последние пять машин, в которые садился Томми, и запоминать состояние радио в этих машинах. Номер активной радиостанции или выкл, номера треков, их позиции, и если Томми повторно садится в одну из этих машин, то восстанавливать их?
А когда Томми лезет в какую-то новую машину, не ту, в которую сел первой в начале миссии, и не в ту, в которой был в последний раз, то присваивать радио рандомное состояние.
Всё это в рамках одной миссии, естественно. При переходе в новую миссию или при загрузке сейва всё будет сбрасываться.
Элемент реализьма )

Совершенству нет предела! :aee:
Я только за, крутой мод получается.

KlassenAS 24.10.2020 23:39

Цитата:

Сообщение от Firefox3860 (Сообщение 12862)
Как я и думал — числа генерируются, переходы по меткам тоже происходят, но когда дело доходит до воспроизведения, файл почему-то не читается. Когда случайная величина попадает в диапозон 0 - 6, то игра думает, что стрим оказался пустым, и величина сразу же генерируется заново. Так до тех пор, пока она не примет значение от 7 до 22. Страно, с файлами что-то не так, хотя они не заменены.

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

Цитата:

Сообщение от Firefox3860 (Сообщение 12862)
Что на этот раз? )

Перепутал номер переменной с активной радиостанцией, когда Томми садится в тачку.
Исправлено.

Цитата:

Сообщение от Firefox3860 (Сообщение 12862)
Привет, 2000 строк и 50 переменных? :D Если хочешь, конечно, было бы интересно. Но, по-моему, для релиза излишне :)

Да брось, 500 строк должно хватить, ещё запас останется для запуска Нила Армстронга на Луну.
В моём злом уме уже зреет жуткая логика замысловатого алгоритма.:devil:

Цитата:

Сообщение от Abradox (Сообщение 12863)
Я не знал что она уже есть в Mafia Defenitive Edition :D
Если хочешь, то можешь заменить ее на другой трек, из тех что мы отбраковали ранее, или можешь оставить т.к. они всё-таки отличаются.

Тоже не ожидал, что в саундтреке Дефинитива такая годнота окажется )
Я её оставил.

Цитата:

Сообщение от Abradox (Сообщение 12863)
Совершенству нет предела! :aee:

Даёшь народу настоящий скриптовый беспредел!!!

Abradox 24.10.2020 23:45

Странно, почему у меня работают wav-файлы, а у Firefox3860 нет? :hz:

KlassenAS 24.10.2020 23:48

Цитата:

Сообщение от Abradox (Сообщение 12866)
Почему у меня работают wav-файлы, а у Firefox3860 нет?

Может, разные версии игры?
У меня версия 1.2 репак от R.G. Element Arts.
Тоже не понимаю. Загадка природы. Жумбактас!

Firefox3860 25.10.2020 00:22

У меня 1.0 обычная, английская.
А у вас sounds не распакованы? Щас положил Coucou из dta в sounds - заиграла как следует. Получается, игра смотрит в dta только если путь указывает на папку music?

Abradox 25.10.2020 00:55

У меня тоже версия 1.2 (steam) и папка sounds распакована.

KlassenAS 25.10.2020 10:57

У меня распакована только sounds/music
В папке sounds лежат только звуки оружия из сборки модов.
Может, это у тебя особенность работы версии 1.0?
Попробуй для разнообразия поставить ещё 1.2 и сравнить.
С другой стороны, у нас и так уже есть ограничения по версиям игры, связанные с патчером.
Не вижу смысла заставлять игроков выбирать только версию 1.2
Думаю, лучше положить эти файлы в папку radio, чтобы игра к архивам не обращалась.

Цитата:

Сообщение от KlassenAS (Сообщение 12858)
У меня родился коварный план: Что, если запоминать последние пять машин, в которые садился Томми, и запоминать состояние радио в этих машинах. Номер активной радиостанции или выкл, номера треков, их позиции, и если Томми повторно садится в одну из этих машин, то восстанавливать их?
А когда Томми лезет в какую-то новую машину, не ту, в которую сел первой в начале миссии, и не в ту, в которой был в последний раз, то присваивать радио рандомное состояние.
Всё это в рамках одной миссии, естественно. При переходе в новую миссию или при загрузке сейва всё будет сбрасываться.
Элемент реализьма )

Что-то я перемудрил. Радиоэфир-то для всех машин общий ) Достаточно запоминать только выбранную радиостанцию.
Сути это, конечно, не меняет. Без разницы, присваивать значение пяти переменным, или 50. Главное - логика процесса.

Firefox3860 25.10.2020 13:37

Понятно. А ну и пусть тогда не воспроизводятся, я всё равно не хотел их в скрипт добавлять :)

KlassenAS 25.10.2020 22:16

Написал процедуру, чтобы скрипт помнил последние девять тачек, в которых побывал Томми и радиостанции в них.
Также, теперь в каждой тачке, которая не первая, радиостанция или выкл задаются рандомно.

Перезалил архивы, обновил ссылки для 2.0 и 2.1.
Сам скрипт, если кому интересно подобное чтение:

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

Код:

//Radio Script Ver. 2.1 26-10-2020 By KlassenAS For Abradox
//Четыре радиостанции, более 20 треков на каждой
//Первая радиостанция с родной музыкой Mafia
//Радиостанции переключаются. Также радио можно выключить.
//При старте на каждой радиостанции случайным образом
//начинает играть один из треков.
//По окончании трека, следующий выбирается так же, случайным образом.

Dim_Act 13
Dim_Flt 31
GetActivePlayer 0
FindActor 1
FindActor 2
FindActor 3
FindActor 4
FindActor 5
FindActor 6
FindActor 7
FindActor 8
FindActor 9
FindActor 10
FindActor 11
FindActor 12
//Акторы 1-9 - для запоминания машин
//Актор 10 - для текущей машины
//Актор 11 - для прошлой машины
//Актор 12 - данный скрипт

//Удалить для использования в scene2.bin,
//Оставить для использования с патчем от GOLOD55
//Начало удаления
Human_GetProperty 0,4,Energy
If Flt[4]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on
//Конец удаления

CityMusic_Off

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]=-1
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]=0 //Прошлое время потока 0
Let Flt[16]=0 //Прошлое время потока 1
Let Flt[17]=0 //Прошлое время потока 2
Let Flt[18]=0 //Прошлое время потока 3
Let Flt[19]=0 //Для перехода на следующий трек
Let Flt[20]=0 //Для перехода к меткам треков
//Номера радиостанций в запомненных тачках 1-9:
Let Flt[21]=-1
Let Flt[22]=-1
Let Flt[23]=-1
Let Flt[24]=-1
Let Flt[25]=-1
Let Flt[26]=-1
Let Flt[27]=-1
Let Flt[28]=-1
Let Flt[29]=-1
//Логика запоминания тачек:
Let Flt[30]=0

Rnd 11,23
Rnd 12,24
Rnd 13,24
Rnd 14,27

GoTo CHECK



Label RADIOCREATE

Label RADIO00CREATE
CommandBlock 1
Let Flt[20]=Flt[11]+100000
GoTo Flt[20]

        Label 100000
        Stream_Create 0,"sounds\03_music.wav"
        GoTo RADIO00CREATED

        Label 100001
        Stream_Create 0,"sounds\13b_music.wav"
        GoTo RADIO00CREATED

        Label 100002
        Stream_Create 0,"sounds\14_Coucou.wav"
        GoTo RADIO00CREATED

        Label 100003
        Stream_Create 0,"sounds\18_radio.wav"
        GoTo RADIO00CREATED

        Label 100004
        Stream_Create 0,"sounds\s_music1.wav"
        GoTo RADIO00CREATED

        Label 100005
        Stream_Create 0,"sounds\s_music3.wav"
        GoTo RADIO00CREATED

        Label 100006
        Stream_Create 0,"sounds\s_music5.wav"
        GoTo RADIO00CREATED

        Label 100007
        Stream_Create 0,"sounds\music\city_music_01.ogg"
        GoTo RADIO00CREATED

        Label 100008
        Stream_Create 0,"sounds\music\city_music_02.ogg"
        GoTo RADIO00CREATED

        Label 100009
        Stream_Create 0,"sounds\music\city_music_03.ogg"
        GoTo RADIO00CREATED

        Label 100010
        Stream_Create 0,"sounds\music\city_music_04.ogg"
        GoTo RADIO00CREATED

        Label 100011
        Stream_Create 0,"sounds\music\city_music_05.ogg"
        GoTo RADIO00CREATED

        Label 100012
        Stream_Create 0,"sounds\music\city_music_06.ogg"
        GoTo RADIO00CREATED

        Label 100013
        Stream_Create 0,"sounds\music\city_music_07.ogg"
        GoTo RADIO00CREATED

        Label 100014
        Stream_Create 0,"sounds\music\city_music_08.ogg"
        GoTo RADIO00CREATED

        Label 100015
        Stream_Create 0,"sounds\music\city_music_09.ogg"
        GoTo RADIO00CREATED

        Label 100016
        Stream_Create 0,"sounds\music\city_music_10.ogg"
        GoTo RADIO00CREATED

        Label 100017
        Stream_Create 0,"sounds\music\city_music_11.ogg"
        GoTo RADIO00CREATED

        Label 100018
        Stream_Create 0,"sounds\music\city_music_12.ogg"
        GoTo RADIO00CREATED

        Label 100019
        Stream_Create 0,"sounds\music\city_music_13.ogg"
        GoTo RADIO00CREATED

        Label 100020
        Stream_Create 0,"sounds\music\city_music_15.ogg"
        GoTo RADIO00CREATED

        Label 100021
        Stream_Create 0,"sounds\music\12_scene music.ogg"
        GoTo RADIO00CREATED

        Label 100022
        Stream_Create 0,"sounds\music\mise02-ulicka.ogg"
        GoTo RADIO00CREATED

Label RADIO00CREATED
Stream_SetPos 0,15
CommandBlock 0
If Flt[9]=0,-1,ISREPLAY0
Let Flt[6]=Flt[0]
Label ISREPLAY0
If Flt[19]=1,REPLAY0,-1


Label RADIO01CREATE
CommandBlock 1
Let Flt[20]=Flt[12]+100100
GoTo Flt[20]

        Label 100100
        Stream_Create 1,"radio\radio01-00.ogg"
        GoTo RADIO01CREATED

        Label 100101
        Stream_Create 1,"radio\radio01-01.ogg"
        GoTo RADIO01CREATED

        Label 100102
        Stream_Create 1,"radio\radio01-02.ogg"
        GoTo RADIO01CREATED       

        Label 100103
        Stream_Create 1,"radio\radio01-03.ogg"
        GoTo RADIO01CREATED

        Label 100104
        Stream_Create 1,"radio\radio01-04.ogg"
        GoTo RADIO01CREATED

        Label 100105
        Stream_Create 1,"radio\radio01-05.ogg"
        GoTo RADIO01CREATED

        Label 100106
        Stream_Create 1,"radio\radio01-06.ogg"
        GoTo RADIO01CREATED

        Label 100107
        Stream_Create 1,"radio\radio01-07.ogg"
        GoTo RADIO01CREATED

        Label 100108
        Stream_Create 1,"radio\radio01-08.ogg"
        GoTo RADIO01CREATED
       
        Label 100109
        Stream_Create 1,"radio\radio01-09.ogg"
        GoTo RADIO01CREATED

        Label 100110
        Stream_Create 1,"radio\radio01-10.ogg"
        GoTo RADIO01CREATED

        Label 100111
        Stream_Create 1,"radio\radio01-11.ogg"
        GoTo RADIO01CREATED

        Label 100112
        Stream_Create 1,"radio\radio01-12.ogg"
        GoTo RADIO01CREATED       
       
        Label 100113
        Stream_Create 1,"radio\radio01-13.ogg"
        GoTo RADIO01CREATED

        Label 100114
        Stream_Create 1,"radio\radio01-14.ogg"
        GoTo RADIO01CREATED

        Label 100115
        Stream_Create 1,"radio\radio01-15.ogg"
        GoTo RADIO01CREATED

        Label 100116
        Stream_Create 1,"radio\radio01-16.ogg"
        GoTo RADIO01CREATED       
       
        Label 100117
        Stream_Create 1,"radio\radio01-17.ogg"
        GoTo RADIO01CREATED

        Label 100118
        Stream_Create 1,"radio\radio01-18.ogg"
        GoTo RADIO01CREATED

        Label 100119
        Stream_Create 1,"radio\radio01-19.ogg"
        GoTo RADIO01CREATED

        Label 100120
        Stream_Create 1,"radio\radio01-20.ogg"
        GoTo RADIO01CREATED       
       
        Label 100121
        Stream_Create 1,"radio\radio01-21.ogg"
        GoTo RADIO01CREATED

        Label 100122
        Stream_Create 1,"radio\radio01-22.ogg"
        GoTo RADIO01CREATED

        Label 100123
        Stream_Create 1,"radio\radio01-23.ogg"
        GoTo RADIO01CREATED

Label RADIO01CREATED
Stream_SetPos 1,16
CommandBlock 0
If Flt[9]=1,-1,ISREPLAY1
Let Flt[6]=Flt[1]
Label ISREPLAY1
If Flt[19]=1,REPLAY1,-1


Label RADIO02CREATE
CommandBlock 1
Let Flt[20]=Flt[13]+100200
GoTo Flt[20]

        Label 100200
        Stream_Create 2,"radio\radio02-00.ogg"
        GoTo RADIO02CREATED

        Label 100201
        Stream_Create 2,"radio\radio02-01.ogg"
        GoTo RADIO02CREATED

        Label 100202
        Stream_Create 2,"radio\radio02-02.ogg"
        GoTo RADIO02CREATED

        Label 100203
        Stream_Create 2,"radio\radio02-03.ogg"
        GoTo RADIO02CREATED

        Label 100204
        Stream_Create 2,"radio\radio02-04.ogg"
        GoTo RADIO02CREATED

        Label 100205
        Stream_Create 2,"radio\radio02-05.ogg"
        GoTo RADIO02CREATED

        Label 100206
        Stream_Create 2,"radio\radio02-06.ogg"
        GoTo RADIO02CREATED

        Label 100207
        Stream_Create 2,"radio\radio02-07.ogg"
        GoTo RADIO02CREATED

        Label 100208
        Stream_Create 2,"radio\radio02-08.ogg"
        GoTo RADIO02CREATED

        Label 100209
        Stream_Create 2,"radio\radio02-09.ogg"
        GoTo RADIO02CREATED

        Label 100210
        Stream_Create 2,"radio\radio02-10.ogg"
        GoTo RADIO02CREATED

        Label 100211
        Stream_Create 2,"radio\radio02-11.ogg"
        GoTo RADIO02CREATED

        Label 100212
        Stream_Create 2,"radio\radio02-12.ogg"
        GoTo RADIO02CREATED

        Label 100213
        Stream_Create 2,"radio\radio02-13.ogg"
        GoTo RADIO02CREATED

        Label 100214
        Stream_Create 2,"radio\radio02-14.ogg"
        GoTo RADIO02CREATED

        Label 100215
        Stream_Create 2,"radio\radio02-15.ogg"
        GoTo RADIO02CREATED

        Label 100216
        Stream_Create 2,"radio\radio02-16.ogg"
        GoTo RADIO02CREATED

        Label 100217
        Stream_Create 2,"radio\radio02-17.ogg"
        GoTo RADIO02CREATED

        Label 100218
        Stream_Create 2,"radio\radio02-18.ogg"
        GoTo RADIO02CREATED

        Label 100219
        Stream_Create 2,"radio\radio02-19.ogg"
        GoTo RADIO02CREATED

        Label 100220
        Stream_Create 2,"radio\radio02-20.ogg"
        GoTo RADIO02CREATED

        Label 100221
        Stream_Create 2,"radio\radio02-21.ogg"
        GoTo RADIO02CREATED

        Label 100222
        Stream_Create 2,"radio\radio02-22.ogg"
        GoTo RADIO02CREATED

        Label 100223
        Stream_Create 2,"radio\radio02-23.ogg"
        GoTo RADIO02CREATED

Label RADIO02CREATED
Stream_SetPos 2,17
CommandBlock 0
If Flt[9]=2,-1,ISREPLAY2
Let Flt[6]=Flt[2]
Label ISREPLAY2
If Flt[19]=1,REPLAY2,-1


Label RADIO03CREATE
CommandBlock 1
Let Flt[20]=Flt[14]+100300
GoTo Flt[20]

        Label 100300
        Stream_Create 3,"radio\radio03-00.mp3"
        GoTo RADIO03CREATED

        Label 100301
        Stream_Create 3,"radio\radio03-01.mp3"
        GoTo RADIO03CREATED

        Label 100302
        Stream_Create 3,"radio\radio03-02.mp3"
        GoTo RADIO03CREATED

        Label 100303
        Stream_Create 3,"radio\radio03-03.mp3"
        GoTo RADIO03CREATED

        Label 100304
        Stream_Create 3,"radio\radio03-04.mp3"
        GoTo RADIO03CREATED

        Label 100305
        Stream_Create 3,"radio\radio03-05.mp3"
        GoTo RADIO03CREATED

        Label 100306
        Stream_Create 3,"radio\radio03-06.mp3"
        GoTo RADIO03CREATED

        Label 100307
        Stream_Create 3,"radio\radio03-07.mp3"
        GoTo RADIO03CREATED

        Label 100308
        Stream_Create 3,"radio\radio03-08.mp3"
        GoTo RADIO03CREATED

        Label 100309
        Stream_Create 3,"radio\radio03-09.mp3"
        GoTo RADIO03CREATED

        Label 100310
        Stream_Create 3,"radio\radio03-10.mp3"
        GoTo RADIO03CREATED

        Label 100311
        Stream_Create 3,"radio\radio03-11.mp3"
        GoTo RADIO03CREATED

        Label 100312
        Stream_Create 3,"radio\radio03-12.mp3"
        GoTo RADIO03CREATED

        Label 100313
        Stream_Create 3,"radio\radio03-13.mp3"
        GoTo RADIO03CREATED

        Label 100314
        Stream_Create 3,"radio\radio03-14.mp3"
        GoTo RADIO03CREATED

        Label 100315
        Stream_Create 3,"radio\radio03-15.mp3"
        GoTo RADIO03CREATED

        Label 100316
        Stream_Create 3,"radio\radio03-16.mp3"
        GoTo RADIO03CREATED

        Label 100317
        Stream_Create 3,"radio\radio03-17.mp3"
        GoTo RADIO03CREATED

        Label 100318
        Stream_Create 3,"radio\radio03-18.mp3"
        GoTo RADIO03CREATED

        Label 100319
        Stream_Create 3,"radio\radio03-19.mp3"
        GoTo RADIO03CREATED
       
        Label 100320
        Stream_Create 3,"radio\radio03-20.mp3"
        GoTo RADIO03CREATED

        Label 100321
        Stream_Create 3,"radio\radio03-21.mp3"
        GoTo RADIO03CREATED

        Label 100322
        Stream_Create 3,"radio\radio03-22.mp3"
        GoTo RADIO03CREATED

        Label 100323
        Stream_Create 3,"radio\radio03-23.mp3"
        GoTo RADIO03CREATED

        Label 100324
        Stream_Create 3,"radio\radio03-24.mp3"
        GoTo RADIO03CREATED

        Label 100325
        Stream_Create 3,"radio\radio03-25.mp3"
        GoTo RADIO03CREATED

        Label 100326
        Stream_Create 3,"radio\radio03-26.mp3"
        GoTo RADIO03CREATED

Label RADIO03CREATED
Stream_SetPos 3,18
CommandBlock 0
If Flt[9]=3,-1,ISREPLAY3
Let Flt[6]=Flt[3]
Label ISREPLAY3
If Flt[19]=1,REPLAY3,-1

Return


Label CHECK
CommandBlock 1
GoSub POSITION
CommandBlock 0
Human_GetSeatIdx 0,7
If Flt[7]=-1,CAR_OUT,CAR_IN



Label CAR_IN
        Ctrl_Read 5,JUMP1
        If Flt[5]=0,-1,RADIO_UP
        Label READ_DOWN
        Ctrl_Read 5,CROUCH1
        If Flt[5]=0,-1,RADIO_DOWN
Label CHECKPLAY

If Flt[4]=0,-,CHECK
//CityMusic_Off
Wait 500
GoSub RADIO_READ
If Flt[9]>-1,-1,RADIO_OFF
GoSub RADIOCREATE
GoSub RADIO_PLAY
Let Flt[20]=Flt[9]+2000
GoSub Flt[20]
Label RADIO_OFF
If Flt[9]=-1,-1,ADIRDA
Console_AddText 90000000
Label ADIRDA
Let Flt[4]=1
GoTo CHECK



Label CAR_OUT
If Flt[4]=1,-1,CHECK
CommandBlock 1
GoSub RADIO_DESTROY
Let Flt[4]=0
GoSub RADIO_SAVE
CommandBlock 0
GoTo CHECK



Label RADIO_UP
CommandBlock 1
If Flt[9]=-1,-1,CHANGEUP
GoSub RADIOCREATE
GoSub RADIO_PLAY
Label CHANGEUP
Stream_Fadevol 6,1,0,0
Let Flt[9]=Flt[9]+1
If Flt[9]>3,-1,CHANGEDUP
Let Flt[9]=-1
Label CHANGEDUP
Let Flt[20]=Flt[9]+2000
GoSub Flt[20]
CommandBlock 0

Let Flt[7]=0
Label 3333
Ctrl_Read 5,JUMP1
If Flt[5]=1,-1,READ_DOWN
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<5,3333,-1
GoTo READ_DOWN



Label RADIO_DOWN
CommandBlock 1
If Flt[9]=-1,-1,CHANGEDOWN
GoSub RADIOCREATE
GoSub RADIO_PLAY
Label CHANGEDOWN
Stream_Fadevol 6,1,0,0
Let Flt[9]=Flt[9]-1
If Flt[9]<-1,-1,CHANGEDDOWN
Let Flt[9]=3
Label CHANGEDDOWN
Let Flt[20]=Flt[9]+2000
GoSub Flt[20]
CommandBlock 0

Let Flt[7]=0
Label 2222
Ctrl_Read 5,CROUCH1
If Flt[5]=1,-1,CHECKPLAY
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<5,2222,-1
GoTo CHECKPLAY


Label 1999
GoSub RADIO_DESTROY
Console_AddText 90000000
Return

Label 2000
Let Flt[6]=Flt[0]
Stream_Fadevol 6,1,1,1
Console_AddText 90000001
Return

Label 2001
Let Flt[6]=Flt[1]
Stream_Fadevol 6,1,1,1
Console_AddText 90000002
Return

Label 2002
Let Flt[6]=Flt[2]
Stream_Fadevol 6,1,1,1
Console_AddText 90000003
Return

Label 2003
Let Flt[6]=Flt[3]
Stream_Fadevol 6,1,1,1
Console_AddText 90000004
Return



Label RADIO_PLAY
CommandBlock 1
Stream_Fadevol 0,1,0,0
Stream_Play 0
Stream_Fadevol 1,1,0,0
Stream_Play 1
Stream_Fadevol 2,1,0,0
Stream_Play 2
Stream_Fadevol 3,1,0,0
Stream_Play 3
CommandBlock 0
Return



Label RADIO_DESTROY
Stream_GetPos 0,15
Stream_Fadevol 0,1,0,0
Stream_Pause 0
Stream_Destroy 0

Stream_GetPos 1,16
Stream_Fadevol 1,1,0,0
Stream_Pause 1
Stream_Destroy 1

Stream_GetPos 2,17
Stream_Fadevol 2,1,0,0
Stream_Pause 2
Stream_Destroy 2

Stream_GetPos 3,18
Stream_Fadevol 3,1,0,0
Stream_Pause 3
Stream_Destroy 3
Return



Label POSITION
If Flt[4]=0,POSITION_END,-1
If Flt[9]=-1,POSITION_END,-1
GetGameTime 7
Let Flt[10]=Flt[7]-Flt[8]
If Flt[10]<500,POSITION_END,-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_Fadevol 0,1,0,0
        Stream_Pause 0
        Stream_Destroy 0
        Label RAND0
        Rnd 10,23
        If Flt[11]=Flt[10],RAND0,-1
        Let Flt[11]=Flt[10]
        Let Flt[19]=1
        Let Flt[15]=0
        GoTo RADIO00CREATE
        Label REPLAY0
        CommandBlock 1
        Stream_Fadevol 0,1,0,0
        Stream_Play 0
        Let Flt[19]=0
        CommandBlock 0
        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_Fadevol 1,1,0,0
        Stream_Pause 1
        Stream_Destroy 1
        Label RAND1
        Rnd 10,24
        If Flt[12]=Flt[10],RAND1,-1
        Let Flt[12]=Flt[10]
        Let Flt[19]=1
        Let Flt[16]=0
        GoTo RADIO01CREATE
        Label REPLAY1
        CommandBlock 1
        Stream_Fadevol 1,1,0,0
        Stream_Play 1
        Let Flt[19]=0
        CommandBlock 0
        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_Fadevol 2,1,0,0
        Stream_Pause 2
        Stream_Destroy 2
        Label RAND2
        Rnd 10,24
        If Flt[13]=Flt[10],RAND2,-1
        Let Flt[13]=Flt[10]
        Let Flt[19]=1
        Let Flt[17]=0
        GoTo RADIO02CREATE
        Label REPLAY2
        CommandBlock 1
        Stream_Fadevol 2,1,0,0
        Stream_Play 2
        Let Flt[19]=0
        CommandBlock 0
        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 POSITION_END
        Label RADIO3END
        Stream_Fadevol 3,1,0,0
        Stream_Pause 3
        Stream_Destroy 3
        Label RAND3
        Rnd 10,27
        If Flt[14]=Flt[10],RAND3,-1
        Let Flt[14]=Flt[10]
        Let Flt[19]=1
        Let Flt[18]=0
        GoTo RADIO03CREATE
        Label REPLAY3
        CommandBlock 1
        Stream_Fadevol 3,1,0,0
        Stream_Play 3
        Let Flt[19]=0
        CommandBlock 0
        If Flt[9]=3,-1,POSITION_END
        Let Flt[6]=Flt[3]
        Stream_Fadevol 3,1,1,1

Label POSITION_END
Return



Label RADIO_READ
CommandBlock 1
Let Flt[30]=0
FindNearActor 0,10,Car

CompareActors 11,12,7
If Flt[7]=0,-1,FIRSTCAR
CompareActors 11,10,7
If Flt[7]=0,-1,FIRSTCAR
Rnd 9,5
Let Flt[9]=Flt[9]-1
Label FIRSTCAR

CompareActors 10,11,7
Set_Remote_Actor 10,12,11
If Flt[7]=0,-1,RADIO_READED

        Label COMPARE_ENT1
        CompareActors 10,1,7
        If Flt[7]=1,-1,COMPARE_ENT2
        Let Flt[9]=Flt[21]
        Let Flt[30]=1
        GoTo COMPARE_ENT0

        Label COMPARE_ENT2
        CompareActors 10,2,7
        If Flt[7]=1,-1,COMPARE_ENT3
        Let Flt[9]=Flt[22]
        Let Flt[30]=1
        GoTo COMPARE_ENT0

        Label COMPARE_ENT3
        CompareActors 10,3,7
        If Flt[7]=1,-1,COMPARE_ENT4
        Let Flt[9]=Flt[23]
        Let Flt[30]=1
        GoTo COMPARE_ENT0

        Label COMPARE_ENT4
        CompareActors 10,4,7
        If Flt[7]=1,-1,COMPARE_ENT5
        Let Flt[9]=Flt[24]
        Let Flt[30]=1
        GoTo COMPARE_ENT0

        Label COMPARE_ENT5
        CompareActors 10,5,7
        If Flt[7]=1,-1,COMPARE_ENT6
        Let Flt[9]=Flt[25]
        Let Flt[30]=1
        GoTo COMPARE_ENT0

        Label COMPARE_ENT6
        CompareActors 10,6,7
        If Flt[7]=1,-1,COMPARE_ENT7
        Let Flt[9]=Flt[26]
        Let Flt[30]=1
        GoTo COMPARE_ENT0

        Label COMPARE_ENT7
        CompareActors 10,7,7
        If Flt[7]=1,-1,COMPARE_ENT8
        Let Flt[9]=Flt[27]
        Let Flt[30]=1
        GoTo COMPARE_ENT0

        Label COMPARE_ENT8
        CompareActors 10,8,7
        If Flt[7]=1,-1,COMPARE_ENT9
        Let Flt[9]=Flt[28]
        Let Flt[30]=1
        GoTo COMPARE_ENT0

        Label COMPARE_ENT9
        CompareActors 10,9,7
        If Flt[7]=1,-1,COMPARE_ENT0
        Let Flt[9]=Flt[29]
        Let Flt[30]=1
        GoTo COMPARE_ENT0

Label COMPARE_ENT0
If Flt[30]=1,RADIO_READED,-1
GoSub RADIO_WRITE
Label RADIO_READED
CommandBlock 0
Return



Label RADIO_SAVE
CommandBlock 1

        Label COMPARE_EXIT1
        CompareActors 10,1,7
        If Flt[7]=1,-1,COMPARE_EXIT2
        Let Flt[21]=Flt[9]
        GoTo COMPARE_EXIT0

        Label COMPARE_EXIT2
        CompareActors 10,2,7
        If Flt[7]=1,-1,COMPARE_EXIT3
        Let Flt[22]=Flt[9]
        GoTo COMPARE_EXIT0

        Label COMPARE_EXIT3
        CompareActors 10,3,7
        If Flt[7]=1,-1,COMPARE_EXIT4
        Let Flt[23]=Flt[9]
        GoTo COMPARE_EXIT0

        Label COMPARE_EXIT4
        CompareActors 10,4,7
        If Flt[7]=1,-1,COMPARE_EXIT5
        Let Flt[24]=Flt[9]
        GoTo COMPARE_EXIT0

        Label COMPARE_EXIT5
        CompareActors 10,5,7
        If Flt[7]=1,-1,COMPARE_EXIT6
        Let Flt[25]=Flt[9]
        GoTo COMPARE_EXIT0

        Label COMPARE_EXIT6
        CompareActors 10,6,7
        If Flt[7]=1,-1,COMPARE_EXIT7
        Let Flt[26]=Flt[9]
        GoTo COMPARE_EXIT0

        Label COMPARE_EXIT7
        CompareActors 10,7,7
        If Flt[7]=1,-1,COMPARE_EXIT8
        Let Flt[27]=Flt[9]
        GoTo COMPARE_EXIT0

        Label COMPARE_EXIT8
        CompareActors 10,8,7
        If Flt[7]=1,-1,COMPARE_EXIT9
        Let Flt[28]=Flt[9]
        GoTo COMPARE_EXIT0

        Label COMPARE_EXIT9
        CompareActors 10,9,7
        If Flt[7]=1,-1,COMPARE_EXIT0
        Let Flt[29]=Flt[9]
        GoTo COMPARE_EXIT0

Label COMPARE_EXIT0
CommandBlock 0
Return



Label RADIO_WRITE
Set_Remote_Actor 8,12,9
Let Flt[29]=Flt[28]
Set_Remote_Actor 7,12,8
Let Flt[28]=Flt[27]
Set_Remote_Actor 6,12,7
Let Flt[27]=Flt[26]
Set_Remote_Actor 5,12,6
Let Flt[26]=Flt[25]
Set_Remote_Actor 4,12,5
Let Flt[25]=Flt[24]
Set_Remote_Actor 3,12,4
Let Flt[24]=Flt[23]
Set_Remote_Actor 2,12,3
Let Flt[23]=Flt[22]
Set_Remote_Actor 1,12,2
Let Flt[22]=Flt[21]
Set_Remote_Actor 10,12,1
Let Flt[21]=Flt[9]
Return

[свернуть]

1MAMOHT1 26.10.2020 07:21

Цитата:

У меня тоже версия 1.2 (steam) и папка sounds распакована.
Цитата:

У меня версия 1.2 репак от R.G. Element Arts
Как же вы скрипт юзаете, из сцены!? А как миссии проходить с радио..?
Цитата:

Написал процедуру, чтобы скрипт помнил последние девять тачек
На сколько я помню, в екзе есть функция, которая следит за количеством юзанных тачек, каждая пятая, юзанная нами тачка, уничтожает первую, которая вне видимости Томми...
На девять тачек наверное многовато даже для фрирайда ;) Хотя это мега круто :)

KlassenAS 26.10.2020 08:26

Цитата:

Сообщение от 1MAMOHT1 (Сообщение 12887)
Как же вы скрипт юзаете, из сцены!? А как миссии проходить с радио..?

Нормально юзаем. С Mafia Parcher.
Даже включили его в архив.
Он как раз и сделан для версий 1.0 и 1.2
Работает во всех сценах, без исключения, специально в сцены импортировать не нужно.
Цитата:

Сообщение от 1MAMOHT1 (Сообщение 12887)
На сколько я помню, в екзе есть функция, которая следит за количеством юзанных тачек, каждая пятая, юзанная нами тачка, уничтожает первую, которая вне видимости Томми...
На девять тачек наверное многовато даже для фрирайда ;) Хотя это мега круто :)

Во-первых, кроме трафиковых авто, есть ещё и помещённые в сцены. В стандартном фрирайде "Город - День", например, их четыре, вроде: Сильвер Флэтчер, Бруно Спидстер, и два Ласситера. Вместе с трафиком уже девять.
Плюс у тебя целый гараж Сальери. При старте новой миссии или загрузке сейва все скриптовые "запоминалки" сбрасываются, но зато в рамках одной миссии раздолье )
Плюс, запоминание авто безупречно работает только с авто из сцены, а тачки из трафика, иногда, запоминает по два раза.
Хз, почему. Следовательно, с учётом игровых глюков, для пяти авто нужен резерв.
Поэтому девять.
Три тачки запоминать, или девять - скрипт от этого принципиально сложнее не становится, в нём лишь появляется больше копипаста с однообразными блоками команд.
То же самое, если приспичит увеличить количество радиостанций с 4 до 100.
По три дополнительных переменных на каждую радиостанцию, всё остальное - копипаст с исправлением номеров.

Abradox 26.10.2020 11:16

Цитата:

Сообщение от 1MAMOHT1 (Сообщение 12887)
А как миссии проходить с радио..?

Всё просто. По умолчанию, радио во всех машинах выключено и его нужно включить самому. Т.е. даже, если Том садится в машину в катсцене, то радио не включается и не мешает (раньше включалось :D). А когда ты подъезжаешь к миссии и знаешь что будет катсцена с машиной, то нужно самому выключить радио, чтобы оно не мешало.
В общем это не сложно, но играть приятнее. Треки из Mafia Defenitive Edition и те что мы подобрали сами, очень хорошо подходят к атмосфере оригинальной Mafia.

GOLOD55 26.10.2020 23:21

чуток оптимизации скрипту..

1. а есть необходимость определять акторы 1-11 актором скрипта?
оно сработает только один раз(при старте скрипта), а при этом данный стек все равно пустой.

2. фильтр перед Label dan_on-овский не мешает в сценах2 и его не требуется удалять. он просто инактивирует скрипт в миссиях без плеер_актора.
а вот флт4 обнулить не мешает ниже, ога.

3. аналогично актор_стеку, стек флт-х также при старте скрипта пустой. другими словами говоря, изначально все значения переменных равны 0 и нет необходимости в командах типа Let Flt[]=0 (кроме флт4).
А присвоение значение "-1" компактнее сделать через вектор.

Итого кусочек скрипта наверное может выглядеть так:
Human_GetProperty 0,4,Energy
If Flt[4]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on

CityMusic_Off

Let Flt[4]=0
vect_set 9,-1,-1,-1
vect_set 12,-1,-1,-1
vect_set 21,-1,-1,-1
vect_set 24,-1,-1,-1
vect_set 27,-1,-1,-1

KlassenAS 27.10.2020 00:07

Цитата:

Сообщение от GOLOD55 (Сообщение 12904)
1. а есть необходимость определять акторы 1-11 актором скрипта?
оно сработает только один раз(при старте скрипта), а при этом данный стек все равно пустой.

Присвоение всех акторов, пожалуй, действительно лишнее. Но 10 и 11 я сравниваю между собой и с 12 актором, чтобы определить, первый ли раз, после старта миссии Томми сел в машину. Чтобы радио было выкл. Хотя я ещё подумаю. Может, эту часть тоже можно оптимизировать.

Цитата:

Сообщение от GOLOD55 (Сообщение 12904)
2. фильтр перед Label dan_on-овский не мешает в сценах2 и его не требуется удалять. он просто инактивирует скрипт в миссиях без плеер_актора.
а вот флт4 обнулить не мешает ниже, ога

Знаю, что не мешает, это, скорее, для оптимизации. Хотя, мне ли говорить об оптимизации, с таким размером скрипта )

Цитата:

Сообщение от GOLOD55 (Сообщение 12904)
3. аналогично актор_стеку, стек флт-х также при старте скрипта пустой. другими словами говоря, изначально все значения переменных равны 0 и нет необходимости в командах типа Let Flt[]=0 (кроме флт4).
А присвоение значение "-1" компактнее сделать через вектор.

Итого кусочек скрипта наверное может выглядеть так:
Human_GetProperty 0,4,Energy
If Flt[4]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on

CityMusic_Off

Let Flt[4]=0
vect_set 9,-1,-1,-1
vect_set 12,-1,-1,-1
vect_set 21,-1,-1,-1
vect_set 24,-1,-1,-1
vect_set 27,-1,-1,-1

А с вектором ты хитро придумал, одной командой три переменные присваивать )
Умён!
Я не был уверен, что переменные создаются с нулём и страховался от возможных рандомных значений.
Кроме того, мне нужно было расписать значение каждой переменной и комментарий к ней, чтобы не запутаться.
Всё-таки удержать в голове значения и назначение тридцати переменных - задача нетривиальная.

Большое спасибо за советы и замечания!
Поколдую теперь немного над оптимизацией.
Тем более, у меня ещё была мысль насчёт процедуры создания потоков. Тоже оптимизировать и выкинуть одну переменную.


UPD:
Поработал над оптимизацией версий 2.0 и 2.1
В архив с версией 2.1 положил папку sounds с шестью wav-файлами. чтобы гарантированно воспроизводились у всех.
Ждём день. если новых замечаний и идей для улучшения не найдётся, тогда, наконец-то, оформим релиз.

Ver. 2.1
https://drive.google.com/file/d/1jQK...ew?usp=sharing

Ver. 2.0
https://drive.google.com/file/d/1bJV...ew?usp=sharing

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

Код:

//Radio Script Ver. 2.1 27-10-2020 By KlassenAS For Abradox

Dim_Act 13
Dim_Flt 30
GetActivePlayer 0
FindActor 10
FindActor 11
FindActor 12
//Акторы 1-9 - для запоминания машин
//Актор 10 - для текущей машины
//Актор 11 - для прошлой машины
//Актор 12 - данный скрипт

Human_GetProperty 0,4,Energy
If Flt[4]=0,-1,dan_on
Act_SetState 100,Off
Label dan_on

CityMusic_Off

//ПЕРЕМЕННЫЕ:
//0-3 - идентификаторы потоков
//4 - Логика
//5 - Нажатие клавиш вперёд1 и назад1
//6 - Последний активный поток
//7 - Сиденье/Время с начала игры/текущее время потока/
//8 - Прошлое время с начала игры
//Номер радиостанции
//9 - Номер играющей радиостанции
//10 - Рандом для radio/разница во времени игры
//11-14 - Номера треков на радиостанциях 0 - 3
//15-18 - для позиций потоков 0-3
//19 - Логика запоминания тачек
//20 - Для перехода к меткам треков
//21-29 - Номера радиостанций в запомненных тачках 1-9
Let Flt[4]=0
Vect_Set 9,-1,-1,-1
Vect_Set 21,-1,-1,-1
Vect_Set 24,-1,-1,-1
Vect_Set 27,-1,-1,-1

Rnd 11,23
Rnd 12,24
Rnd 13,24
Rnd 14,27

GoTo CHECK



Label RADIOCREATE
        GoSub RADIO00CREATE
        GoSub RADIO01CREATE
        GoSub RADIO02CREATE
        GoSub RADIO03CREATE
Return



Label RADIO00CREATE
CommandBlock 1
Let Flt[20]=Flt[11]+100000
GoTo Flt[20]

        Label 100000
        Stream_Create 0,"sounds\03_music.wav"
        GoTo RADIO00CREATED

        Label 100001
        Stream_Create 0,"sounds\13b_music.wav"
        GoTo RADIO00CREATED

        Label 100002
        Stream_Create 0,"sounds\14_Coucou.wav"
        GoTo RADIO00CREATED

        Label 100003
        Stream_Create 0,"sounds\18_radio.wav"
        GoTo RADIO00CREATED

        Label 100004
        Stream_Create 0,"sounds\s_music1.wav"
        GoTo RADIO00CREATED

        Label 100005
        Stream_Create 0,"sounds\s_music3.wav"
        GoTo RADIO00CREATED

        Label 100006
        Stream_Create 0,"sounds\s_music5.wav"
        GoTo RADIO00CREATED

        Label 100007
        Stream_Create 0,"sounds\music\city_music_01.ogg"
        GoTo RADIO00CREATED

        Label 100008
        Stream_Create 0,"sounds\music\city_music_02.ogg"
        GoTo RADIO00CREATED

        Label 100009
        Stream_Create 0,"sounds\music\city_music_03.ogg"
        GoTo RADIO00CREATED

        Label 100010
        Stream_Create 0,"sounds\music\city_music_04.ogg"
        GoTo RADIO00CREATED

        Label 100011
        Stream_Create 0,"sounds\music\city_music_05.ogg"
        GoTo RADIO00CREATED

        Label 100012
        Stream_Create 0,"sounds\music\city_music_06.ogg"
        GoTo RADIO00CREATED

        Label 100013
        Stream_Create 0,"sounds\music\city_music_07.ogg"
        GoTo RADIO00CREATED

        Label 100014
        Stream_Create 0,"sounds\music\city_music_08.ogg"
        GoTo RADIO00CREATED

        Label 100015
        Stream_Create 0,"sounds\music\city_music_09.ogg"
        GoTo RADIO00CREATED

        Label 100016
        Stream_Create 0,"sounds\music\city_music_10.ogg"
        GoTo RADIO00CREATED

        Label 100017
        Stream_Create 0,"sounds\music\city_music_11.ogg"
        GoTo RADIO00CREATED

        Label 100018
        Stream_Create 0,"sounds\music\city_music_12.ogg"
        GoTo RADIO00CREATED

        Label 100019
        Stream_Create 0,"sounds\music\city_music_13.ogg"
        GoTo RADIO00CREATED

        Label 100020
        Stream_Create 0,"sounds\music\city_music_15.ogg"
        GoTo RADIO00CREATED

        Label 100021
        Stream_Create 0,"sounds\music\12_scene music.ogg"
        GoTo RADIO00CREATED

        Label 100022
        Stream_Create 0,"sounds\music\mise02-ulicka.ogg"
        GoTo RADIO00CREATED

Label RADIO00CREATED
Stream_SetPos 0,15
CommandBlock 0
If Flt[9]=0,-1,CREATED00
Let Flt[6]=Flt[0]
Label CREATED00
Return


Label RADIO01CREATE
CommandBlock 1
Let Flt[20]=Flt[12]+100100
GoTo Flt[20]

        Label 100100
        Stream_Create 1,"radio\radio01-00.ogg"
        GoTo RADIO01CREATED

        Label 100101
        Stream_Create 1,"radio\radio01-01.ogg"
        GoTo RADIO01CREATED

        Label 100102
        Stream_Create 1,"radio\radio01-02.ogg"
        GoTo RADIO01CREATED       

        Label 100103
        Stream_Create 1,"radio\radio01-03.ogg"
        GoTo RADIO01CREATED

        Label 100104
        Stream_Create 1,"radio\radio01-04.ogg"
        GoTo RADIO01CREATED

        Label 100105
        Stream_Create 1,"radio\radio01-05.ogg"
        GoTo RADIO01CREATED

        Label 100106
        Stream_Create 1,"radio\radio01-06.ogg"
        GoTo RADIO01CREATED

        Label 100107
        Stream_Create 1,"radio\radio01-07.ogg"
        GoTo RADIO01CREATED

        Label 100108
        Stream_Create 1,"radio\radio01-08.ogg"
        GoTo RADIO01CREATED
       
        Label 100109
        Stream_Create 1,"radio\radio01-09.ogg"
        GoTo RADIO01CREATED

        Label 100110
        Stream_Create 1,"radio\radio01-10.ogg"
        GoTo RADIO01CREATED

        Label 100111
        Stream_Create 1,"radio\radio01-11.ogg"
        GoTo RADIO01CREATED

        Label 100112
        Stream_Create 1,"radio\radio01-12.ogg"
        GoTo RADIO01CREATED       
       
        Label 100113
        Stream_Create 1,"radio\radio01-13.ogg"
        GoTo RADIO01CREATED

        Label 100114
        Stream_Create 1,"radio\radio01-14.ogg"
        GoTo RADIO01CREATED

        Label 100115
        Stream_Create 1,"radio\radio01-15.ogg"
        GoTo RADIO01CREATED

        Label 100116
        Stream_Create 1,"radio\radio01-16.ogg"
        GoTo RADIO01CREATED       
       
        Label 100117
        Stream_Create 1,"radio\radio01-17.ogg"
        GoTo RADIO01CREATED

        Label 100118
        Stream_Create 1,"radio\radio01-18.ogg"
        GoTo RADIO01CREATED

        Label 100119
        Stream_Create 1,"radio\radio01-19.ogg"
        GoTo RADIO01CREATED

        Label 100120
        Stream_Create 1,"radio\radio01-20.ogg"
        GoTo RADIO01CREATED       
       
        Label 100121
        Stream_Create 1,"radio\radio01-21.ogg"
        GoTo RADIO01CREATED

        Label 100122
        Stream_Create 1,"radio\radio01-22.ogg"
        GoTo RADIO01CREATED

        Label 100123
        Stream_Create 1,"radio\radio01-23.ogg"
        GoTo RADIO01CREATED

Label RADIO01CREATED
Stream_SetPos 1,16
CommandBlock 0
If Flt[9]=1,-1,CREATED01
Let Flt[6]=Flt[1]
Label CREATED01
Return


Label RADIO02CREATE
CommandBlock 1
Let Flt[20]=Flt[13]+100200
GoTo Flt[20]

        Label 100200
        Stream_Create 2,"radio\radio02-00.ogg"
        GoTo RADIO02CREATED

        Label 100201
        Stream_Create 2,"radio\radio02-01.ogg"
        GoTo RADIO02CREATED

        Label 100202
        Stream_Create 2,"radio\radio02-02.ogg"
        GoTo RADIO02CREATED

        Label 100203
        Stream_Create 2,"radio\radio02-03.ogg"
        GoTo RADIO02CREATED

        Label 100204
        Stream_Create 2,"radio\radio02-04.ogg"
        GoTo RADIO02CREATED

        Label 100205
        Stream_Create 2,"radio\radio02-05.ogg"
        GoTo RADIO02CREATED

        Label 100206
        Stream_Create 2,"radio\radio02-06.ogg"
        GoTo RADIO02CREATED

        Label 100207
        Stream_Create 2,"radio\radio02-07.ogg"
        GoTo RADIO02CREATED

        Label 100208
        Stream_Create 2,"radio\radio02-08.ogg"
        GoTo RADIO02CREATED

        Label 100209
        Stream_Create 2,"radio\radio02-09.ogg"
        GoTo RADIO02CREATED

        Label 100210
        Stream_Create 2,"radio\radio02-10.ogg"
        GoTo RADIO02CREATED

        Label 100211
        Stream_Create 2,"radio\radio02-11.ogg"
        GoTo RADIO02CREATED

        Label 100212
        Stream_Create 2,"radio\radio02-12.ogg"
        GoTo RADIO02CREATED

        Label 100213
        Stream_Create 2,"radio\radio02-13.ogg"
        GoTo RADIO02CREATED

        Label 100214
        Stream_Create 2,"radio\radio02-14.ogg"
        GoTo RADIO02CREATED

        Label 100215
        Stream_Create 2,"radio\radio02-15.ogg"
        GoTo RADIO02CREATED

        Label 100216
        Stream_Create 2,"radio\radio02-16.ogg"
        GoTo RADIO02CREATED

        Label 100217
        Stream_Create 2,"radio\radio02-17.ogg"
        GoTo RADIO02CREATED

        Label 100218
        Stream_Create 2,"radio\radio02-18.ogg"
        GoTo RADIO02CREATED

        Label 100219
        Stream_Create 2,"radio\radio02-19.ogg"
        GoTo RADIO02CREATED

        Label 100220
        Stream_Create 2,"radio\radio02-20.ogg"
        GoTo RADIO02CREATED

        Label 100221
        Stream_Create 2,"radio\radio02-21.ogg"
        GoTo RADIO02CREATED

        Label 100222
        Stream_Create 2,"radio\radio02-22.ogg"
        GoTo RADIO02CREATED

        Label 100223
        Stream_Create 2,"radio\radio02-23.ogg"
        GoTo RADIO02CREATED

Label RADIO02CREATED
Stream_SetPos 2,17
CommandBlock 0
If Flt[9]=2,-1,CREATED02
Let Flt[6]=Flt[2]
Label CREATED02
Return


Label RADIO03CREATE
CommandBlock 1
Let Flt[20]=Flt[14]+100300
GoTo Flt[20]

        Label 100300
        Stream_Create 3,"radio\radio03-00.mp3"
        GoTo RADIO03CREATED

        Label 100301
        Stream_Create 3,"radio\radio03-01.mp3"
        GoTo RADIO03CREATED

        Label 100302
        Stream_Create 3,"radio\radio03-02.mp3"
        GoTo RADIO03CREATED

        Label 100303
        Stream_Create 3,"radio\radio03-03.mp3"
        GoTo RADIO03CREATED

        Label 100304
        Stream_Create 3,"radio\radio03-04.mp3"
        GoTo RADIO03CREATED

        Label 100305
        Stream_Create 3,"radio\radio03-05.mp3"
        GoTo RADIO03CREATED

        Label 100306
        Stream_Create 3,"radio\radio03-06.mp3"
        GoTo RADIO03CREATED

        Label 100307
        Stream_Create 3,"radio\radio03-07.mp3"
        GoTo RADIO03CREATED

        Label 100308
        Stream_Create 3,"radio\radio03-08.mp3"
        GoTo RADIO03CREATED

        Label 100309
        Stream_Create 3,"radio\radio03-09.mp3"
        GoTo RADIO03CREATED

        Label 100310
        Stream_Create 3,"radio\radio03-10.mp3"
        GoTo RADIO03CREATED

        Label 100311
        Stream_Create 3,"radio\radio03-11.mp3"
        GoTo RADIO03CREATED

        Label 100312
        Stream_Create 3,"radio\radio03-12.mp3"
        GoTo RADIO03CREATED

        Label 100313
        Stream_Create 3,"radio\radio03-13.mp3"
        GoTo RADIO03CREATED

        Label 100314
        Stream_Create 3,"radio\radio03-14.mp3"
        GoTo RADIO03CREATED

        Label 100315
        Stream_Create 3,"radio\radio03-15.mp3"
        GoTo RADIO03CREATED

        Label 100316
        Stream_Create 3,"radio\radio03-16.mp3"
        GoTo RADIO03CREATED

        Label 100317
        Stream_Create 3,"radio\radio03-17.mp3"
        GoTo RADIO03CREATED

        Label 100318
        Stream_Create 3,"radio\radio03-18.mp3"
        GoTo RADIO03CREATED

        Label 100319
        Stream_Create 3,"radio\radio03-19.mp3"
        GoTo RADIO03CREATED
       
        Label 100320
        Stream_Create 3,"radio\radio03-20.mp3"
        GoTo RADIO03CREATED

        Label 100321
        Stream_Create 3,"radio\radio03-21.mp3"
        GoTo RADIO03CREATED

        Label 100322
        Stream_Create 3,"radio\radio03-22.mp3"
        GoTo RADIO03CREATED

        Label 100323
        Stream_Create 3,"radio\radio03-23.mp3"
        GoTo RADIO03CREATED

        Label 100324
        Stream_Create 3,"radio\radio03-24.mp3"
        GoTo RADIO03CREATED

        Label 100325
        Stream_Create 3,"radio\radio03-25.mp3"
        GoTo RADIO03CREATED

        Label 100326
        Stream_Create 3,"radio\radio03-26.mp3"
        GoTo RADIO03CREATED

Label RADIO03CREATED
Stream_SetPos 3,18
CommandBlock 0
If Flt[9]=3,-1,CREATED03
Let Flt[6]=Flt[3]
Label CREATED03
Return


Label CHECK
CommandBlock 1
GoSub POSITION
CommandBlock 0
Human_GetSeatIdx 0,7
If Flt[7]=-1,CAR_OUT,CAR_IN



Label CAR_IN
        Ctrl_Read 5,JUMP1
        If Flt[5]=0,-1,RADIO_UP
        Label READ_DOWN
        Ctrl_Read 5,CROUCH1
        If Flt[5]=0,-1,RADIO_DOWN
Label CHECKPLAY

If Flt[4]=0,-,CHECK
//CityMusic_Off
Wait 500
GoSub RADIO_READ
If Flt[9]>-1,-1,RADIO_OFF
GoSub RADIOCREATE
GoSub RADIO_PLAY
Let Flt[20]=Flt[9]+2000
GoSub Flt[20]
Label RADIO_OFF
If Flt[9]=-1,-1,ADIRDA
Console_AddText 90000000
Label ADIRDA
Let Flt[4]=1
GoTo CHECK



Label CAR_OUT
If Flt[4]=1,-1,CHECK
CommandBlock 1
GoSub RADIO_DESTROY
Let Flt[4]=0
GoSub RADIO_SAVE
CommandBlock 0
GoTo CHECK



Label RADIO_UP
CommandBlock 1
If Flt[9]=-1,-1,CHANGEUP
GoSub RADIOCREATE
GoSub RADIO_PLAY
Label CHANGEUP
Stream_Fadevol 6,1,0,0
Let Flt[9]=Flt[9]+1
If Flt[9]>3,-1,CHANGEDUP
Let Flt[9]=-1
Label CHANGEDUP
Let Flt[20]=Flt[9]+2000
GoSub Flt[20]
CommandBlock 0

Let Flt[7]=0
Label 3333
Ctrl_Read 5,JUMP1
If Flt[5]=1,-1,READ_DOWN
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<5,3333,-1
GoTo READ_DOWN



Label RADIO_DOWN
CommandBlock 1
If Flt[9]=-1,-1,CHANGEDOWN
GoSub RADIOCREATE
GoSub RADIO_PLAY
Label CHANGEDOWN
Stream_Fadevol 6,1,0,0
Let Flt[9]=Flt[9]-1
If Flt[9]<-1,-1,CHANGEDDOWN
Let Flt[9]=3
Label CHANGEDDOWN
Let Flt[20]=Flt[9]+2000
GoSub Flt[20]
CommandBlock 0

Let Flt[7]=0
Label 2222
Ctrl_Read 5,CROUCH1
If Flt[5]=1,-1,CHECKPLAY
Wait 200
Let Flt[7]=Flt[7]+1
If Flt[7]<5,2222,-1
GoTo CHECKPLAY


Label 1999
GoSub RADIO_DESTROY
Console_AddText 90000000
Return

Label 2000
Let Flt[6]=Flt[0]
Stream_Fadevol 6,1,1,1
Console_AddText 90000001
Return

Label 2001
Let Flt[6]=Flt[1]
Stream_Fadevol 6,1,1,1
Console_AddText 90000002
Return

Label 2002
Let Flt[6]=Flt[2]
Stream_Fadevol 6,1,1,1
Console_AddText 90000003
Return

Label 2003
Let Flt[6]=Flt[3]
Stream_Fadevol 6,1,1,1
Console_AddText 90000004
Return



Label RADIO_PLAY
CommandBlock 1
Stream_Fadevol 0,1,0,0
Stream_Play 0
Stream_Fadevol 1,1,0,0
Stream_Play 1
Stream_Fadevol 2,1,0,0
Stream_Play 2
Stream_Fadevol 3,1,0,0
Stream_Play 3
CommandBlock 0
Return



Label RADIO_DESTROY
Stream_GetPos 0,15
Stream_Fadevol 0,1,0,0
Stream_Pause 0
Stream_Destroy 0

Stream_GetPos 1,16
Stream_Fadevol 1,1,0,0
Stream_Pause 1
Stream_Destroy 1

Stream_GetPos 2,17
Stream_Fadevol 2,1,0,0
Stream_Pause 2
Stream_Destroy 2

Stream_GetPos 3,18
Stream_Fadevol 3,1,0,0
Stream_Pause 3
Stream_Destroy 3
Return



Label POSITION
If Flt[4]=0,POSITION_END,-1
If Flt[9]=-1,POSITION_END,-1
GetGameTime 7
Let Flt[10]=Flt[7]-Flt[8]
If Flt[10]<500,POSITION_END,-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_Fadevol 0,1,0,0
        Stream_Pause 0
        Stream_Destroy 0
        Label RAND0
        Rnd 10,23
        If Flt[11]=Flt[10],RAND0,-1
        Let Flt[11]=Flt[10]
        Let Flt[19]=1
        Let Flt[15]=0
        GoSub RADIO00CREATE
        CommandBlock 1
        Stream_Fadevol 0,1,0,0
        Stream_Play 0
        Let Flt[19]=0
        CommandBlock 0
        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_Fadevol 1,1,0,0
        Stream_Pause 1
        Stream_Destroy 1
        Label RAND1
        Rnd 10,24
        If Flt[12]=Flt[10],RAND1,-1
        Let Flt[12]=Flt[10]
        Let Flt[19]=1
        Let Flt[16]=0
        GoSub RADIO01CREATE
        CommandBlock 1
        Stream_Fadevol 1,1,0,0
        Stream_Play 1
        Let Flt[19]=0
        CommandBlock 0
        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_Fadevol 2,1,0,0
        Stream_Pause 2
        Stream_Destroy 2
        Label RAND2
        Rnd 10,24
        If Flt[13]=Flt[10],RAND2,-1
        Let Flt[13]=Flt[10]
        Let Flt[19]=1
        Let Flt[17]=0
        GoSub RADIO02CREATE
        CommandBlock 1
        Stream_Fadevol 2,1,0,0
        Stream_Play 2
        Let Flt[19]=0
        CommandBlock 0
        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 POSITION_END
        Label RADIO3END
        Stream_Fadevol 3,1,0,0
        Stream_Pause 3
        Stream_Destroy 3
        Label RAND3
        Rnd 10,27
        If Flt[14]=Flt[10],RAND3,-1
        Let Flt[14]=Flt[10]
        Let Flt[19]=1
        Let Flt[18]=0
        GoSub RADIO03CREATE
        CommandBlock 1
        Stream_Fadevol 3,1,0,0
        Stream_Play 3
        Let Flt[19]=0
        CommandBlock 0
        If Flt[9]=3,-1,POSITION_END
        Let Flt[6]=Flt[3]
        Stream_Fadevol 3,1,1,1

Label POSITION_END
Return



Label RADIO_READ
CommandBlock 1
Let Flt[19]=0

CompareActors 10,12,7
If Flt[7]=0,-1,NORANDOMRADIO
CompareActors 10,11,7
If Flt[7]=0,-1,NORANDOMRADIO
Rnd 9,5
Let Flt[9]=Flt[9]-1
Label NORANDOMRADIO

FindNearActor 0,10,Car
CompareActors 10,11,7
Set_Remote_Actor 10,12,11
If Flt[7]=0,-1,RADIO_READED



        Label COMPARE_ENT1
        CompareActors 10,1,7
        If Flt[7]=1,-1,COMPARE_ENT2
        Let Flt[9]=Flt[21]
        Let Flt[19]=1
        GoTo COMPARE_ENT0

        Label COMPARE_ENT2
        CompareActors 10,2,7
        If Flt[7]=1,-1,COMPARE_ENT3
        Let Flt[9]=Flt[22]
        Let Flt[19]=1
        GoTo COMPARE_ENT0

        Label COMPARE_ENT3
        CompareActors 10,3,7
        If Flt[7]=1,-1,COMPARE_ENT4
        Let Flt[9]=Flt[23]
        Let Flt[19]=1
        GoTo COMPARE_ENT0

        Label COMPARE_ENT4
        CompareActors 10,4,7
        If Flt[7]=1,-1,COMPARE_ENT5
        Let Flt[9]=Flt[24]
        Let Flt[19]=1
        GoTo COMPARE_ENT0

        Label COMPARE_ENT5
        CompareActors 10,5,7
        If Flt[7]=1,-1,COMPARE_ENT6
        Let Flt[9]=Flt[25]
        Let Flt[19]=1
        GoTo COMPARE_ENT0

        Label COMPARE_ENT6
        CompareActors 10,6,7
        If Flt[7]=1,-1,COMPARE_ENT7
        Let Flt[9]=Flt[26]
        Let Flt[19]=1
        GoTo COMPARE_ENT0

        Label COMPARE_ENT7
        CompareActors 10,7,7
        If Flt[7]=1,-1,COMPARE_ENT8
        Let Flt[9]=Flt[27]
        Let Flt[19]=1
        GoTo COMPARE_ENT0

        Label COMPARE_ENT8
        CompareActors 10,8,7
        If Flt[7]=1,-1,COMPARE_ENT9
        Let Flt[9]=Flt[28]
        Let Flt[19]=1
        GoTo COMPARE_ENT0

        Label COMPARE_ENT9
        CompareActors 10,9,7
        If Flt[7]=1,-1,COMPARE_ENT0
        Let Flt[9]=Flt[29]
        Let Flt[19]=1
        GoTo COMPARE_ENT0

Label COMPARE_ENT0
If Flt[19]=1,RADIO_READED,-1
GoSub RADIO_WRITE
Label RADIO_READED
CommandBlock 0
Return



Label RADIO_SAVE
CommandBlock 1

        Label COMPARE_EXIT1
        CompareActors 10,1,7
        If Flt[7]=1,-1,COMPARE_EXIT2
        Let Flt[21]=Flt[9]
        GoTo COMPARE_EXIT0

        Label COMPARE_EXIT2
        CompareActors 10,2,7
        If Flt[7]=1,-1,COMPARE_EXIT3
        Let Flt[22]=Flt[9]
        GoTo COMPARE_EXIT0

        Label COMPARE_EXIT3
        CompareActors 10,3,7
        If Flt[7]=1,-1,COMPARE_EXIT4
        Let Flt[23]=Flt[9]
        GoTo COMPARE_EXIT0

        Label COMPARE_EXIT4
        CompareActors 10,4,7
        If Flt[7]=1,-1,COMPARE_EXIT5
        Let Flt[24]=Flt[9]
        GoTo COMPARE_EXIT0

        Label COMPARE_EXIT5
        CompareActors 10,5,7
        If Flt[7]=1,-1,COMPARE_EXIT6
        Let Flt[25]=Flt[9]
        GoTo COMPARE_EXIT0

        Label COMPARE_EXIT6
        CompareActors 10,6,7
        If Flt[7]=1,-1,COMPARE_EXIT7
        Let Flt[26]=Flt[9]
        GoTo COMPARE_EXIT0

        Label COMPARE_EXIT7
        CompareActors 10,7,7
        If Flt[7]=1,-1,COMPARE_EXIT8
        Let Flt[27]=Flt[9]
        GoTo COMPARE_EXIT0

        Label COMPARE_EXIT8
        CompareActors 10,8,7
        If Flt[7]=1,-1,COMPARE_EXIT9
        Let Flt[28]=Flt[9]
        GoTo COMPARE_EXIT0

        Label COMPARE_EXIT9
        CompareActors 10,9,7
        If Flt[7]=1,-1,COMPARE_EXIT0
        Let Flt[29]=Flt[9]
        GoTo COMPARE_EXIT0

Label COMPARE_EXIT0
CommandBlock 0
Return



Label RADIO_WRITE
Set_Remote_Actor 8,12,9
Let Flt[29]=Flt[28]
Set_Remote_Actor 7,12,8
Let Flt[28]=Flt[27]
Set_Remote_Actor 6,12,7
Let Flt[27]=Flt[26]
Set_Remote_Actor 5,12,6
Let Flt[26]=Flt[25]
Set_Remote_Actor 4,12,5
Let Flt[25]=Flt[24]
Set_Remote_Actor 3,12,4
Let Flt[24]=Flt[23]
Set_Remote_Actor 2,12,3
Let Flt[23]=Flt[22]
Set_Remote_Actor 1,12,2
Let Flt[22]=Flt[21]
Set_Remote_Actor 10,12,1
Let Flt[21]=Flt[9]
Return

[свернуть]




UPD:
Прошло даже два дня.
Новых косяков не обнаружилось. Идей для улучшения и большего усложнения скрипта пока нет.
Все работает, как задумано.
Думаю, можно оформить релиз.

Вопрос: А как будем оформлять?

Abradox 30.10.2020 23:09

Вроде скрипт не должен был затрагивать сюжетную музыку?
В Миссии Creme de la Creme, когда в аэропорту глохнет машина, то при выходе из нее перестает играть сюжетная музыка. Включается она уже только в катсцене с падением самолета.

Добавлено через 2 минуты
Цитата:

Сообщение от KlassenAS (Сообщение 12961)
Ты темой промахнулся )
Я проверю, но уйдёт время, у меня сохранения заглючило, теперь всё с начала прохожу.
Ты тоже проверь, загрузи без скрипта. Вдруг, так и должно быть, а мы забыли.

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

Kaiser 31.10.2020 11:33

Ребята, у меня уже складывается впечатление, что я попал на экзамен по высшей математике))

KlassenAS 31.10.2020 13:54

Цитата:

Сообщение от Abradox (Сообщение 12966)
Проверил. Нет, так не должно быть, без скрипта музыка играет, со скриптом выключается при выходе из машины.

А вот это очень странно.
Потому, что активная команда SityMusic_Off только в начале скрипта.
И, при выходе из машины, скрипт либо уничтожает аудиопотоки, если радио играло, либо не делает ничего.
По крайней мере, по логике так.
Буду разбираться, чё как.

Цитата:

Сообщение от Kaiser (Сообщение 12971)
Ребята, у меня уже складывается впечатление, что я попал на экзамен по высшей математике))

Ты близок к истине.
Разработка подобного сложного алгоритма - обычное дело, когда пишешь курсач по программированию )
Я больше скажу - программа, которую я писал для дипломной работы, лишь пять раз объёмнее этого скрипта.


UPD:
Наконец-то дошли руки.
Действительно, была ошибка в логике скрипта.
После того, как я сделал, чтобы радио по умолчанию при старте скрипта было выключено, потоки не создавались, а при выходе из машины либо при выключении радио, уничтожались, я не уследил за логикой и при выходе из машины, при выключенном радио, скрипт выполнял ненужную процедуру уничтожения потоков.
Любопытно, что не имея доступа к "своим" потокам, скрипт уничтожал "чужие" потоки, вырубая миссионную музыку.
Жаль только, что это работает лишь в отношении потоков, созданных в миссии, а не загруженных из сохранения.

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

Обновлённые версии скриптов:
Ver. 2.1
https://drive.google.com/file/d/1ARu...ew?usp=sharing

Ver. 2.0
https://drive.google.com/file/d/1kb0...ew?usp=sharing

Ver. 1.1
https://drive.google.com/file/d/13kA...ew?usp=sharing

Firefox3860 08.11.2020 20:42

Цитата:

Сообщение от KlassenAS (Сообщение 12975)
Обновлённые версии скриптов:

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

KlassenAS 09.11.2020 20:49

Цитата:

Сообщение от Firefox3860 (Сообщение 13091)
Случайный выбор станции в машине и вправду добавляет реализма.

Кстати, о реализьме.

Я подумал: при старте скрипта все треки на радио начинают играть с начала.
Это неправильно. Ведь радио не начинает эфир тогда, когда мы его включаем.
Надо при первом включении радио позиции треков рандомизировать.
Но рандомизировать-то надо по уму!
Надо чтобы случайное значение укладывалось в длительность трека.
А как узнать длительность трека?
Ведь такой скриптовой функции нет.

Гипотеза: если указать потоку с помощью команды Stream_SetPos некорректное значение, заведомо выходящее за пределы длительности трека, например 4 000 000, то потоку присвоится максимально возможное значение, соответствующее окончанию трека, и считав его с помощью команды Stream_GetPos мы узнаем длину трека.

Проверил гипотезу экспериментом.
Let Flt[15]=4000000
Stream_SetPos 0,15
Stream_GetPos 0,15
FreeRide_ScoreSet Flt[15]

И получил неожиданный результат: После попытки присвоения потоку некорректного значения позиции, команда Stream_GetPos показывает погоду на Марсе!
Т. е. возвращает рандомное значение.
Правда, чаще всего в диапазоне от 3 000 до 15 000 миллисекунд, и нам это не вполне подходит.

Таким образом, мы можем, при первом включении радио, смело назначать трекам рандомные позиции в диапазоне от 0 до 5 минут, а если рандомное значение выйдет за пределы реальной длительности трека, то ничего плохого не будет, значение будет рандомизировано по новой.

А реализовать эту фичу - пара пустяков.
Четыре строки в начале скрипта.
Что я уже и сделал.
Для версий 2.1 и 2.0 архивы по ссылкам обновлены.

Abradox 09.11.2020 23:20

Цитата:

Сообщение от KlassenAS (Сообщение 13096)
Я подумал: при старте скрипта все треки на радио начинают играть с начала.
Это неправильно. Ведь радио не начинает эфир тогда, когда мы его включаем.

Если так рассуждать, то радио должно играть даже тогда, когда Том выходит из машины, а не ставиться на паузу.

Как обстоит дело с выключением сюжетной музыки при выходе из машины в аэропорту в миссии Сливки общества (Creme de la Creme)?

P.S. пока разработка идет, и до релиза ещё не дошло, давай лучше ссылку на файл script.sc, чтобы не перекачивать каждый раз архив в 236 мнгабайт, ведь по трекам изменений уже не будет.

CurtisTea 10.11.2020 04:34

Кста не знаю вспоминал ли кто-то уже тут, но команда stream_create отлично воспринимает ссылки на онлайн радио (вот прям так, в формате stream_create x,"http://87.230.103.107:80/top100station.mp3" - это мой старый пример, ссылка дохлая уже давно походу). Правда сам поток как я понял должен быть строго в .mp3 закодирован, иначе игра тупо виснет. И ещё года четыре назад, когда я это выкупил именно такое онлайн радио уже было практически не найти... Я не сильно компетентен в кодировке потокового музла, может можно какой-то костыль придумать и себе во фрирайд пускать какую-то oldies радиостанцию и сейчас, я хз)


KlassenAS 10.11.2020 06:48

Цитата:

Сообщение от Abradox (Сообщение 13097)
Если так рассуждать, то радио должно играть даже тогда, когда Том выходит из машины, а не ставиться на паузу

Так-то да, но глюки из-за сохранения потоков и отсутствие функции для определения длительности трека ставят на этом крест.
Если бы можно было определять длительность трека, я бы засекал, сколько времени радио было выключено, и при включении перематывал трек и/или переключал на следующий и ещё перематывал на нужное время, чтобы имитировать продолжение эфира, пока радио выключено.
А если бы не было глюка из-за сохранения потоков, то этого вопроса вообще бы не было и скрипт был вдвое проще и всё работало бы по фен-шую.
А так довольствуемся тем, что есть.

Цитата:

Сообщение от Abradox (Сообщение 13097)
Как обстоит дело с выключением сюжетной музыки при выходе из машины в аэропорту в миссии Сливки общества (Creme de la Creme)?

Я ещё 3 ноября это исправил и обновил архивы. Посмотри сообщение №229 оно отредактировано.

Цитата:

Сообщение от Abradox (Сообщение 13097)
P.S. пока разработка идет, и до релиза ещё не дошло, давай лучше ссылку на файл script.sc, чтобы не перекачивать каждый раз архив в 236 мнгабайт, ведь по трекам изменений уже не будет.

Чуть позже, как с работы вернусь.

Цитата:

Сообщение от CurtisTea (Сообщение 13101)
Кста не знаю вспоминал ли кто-то уже тут, но команда stream_create отлично воспринимает ссылки на онлайн радио (вот прям так, в формате stream_create x,"http://87.230.103.107:80/top100station.mp3" - это мой старый пример, ссылка дохлая уже давно походу). Правда сам поток как я понял должен быть строго в .mp3 закодирован, иначе игра тупо виснет. И ещё года четыре назад, когда я это выкупил именно такое онлайн радио уже было практически не найти... Я не сильно компетентен в кодировке потокового музла, может можно какой-то костыль придумать и себе во фрирайд пускать какую-то oldies радиостанцию и сейчас, я хз)

Не просто вспоминали, но ещё и сетовали на то, что кроме джойрадио не удаётся найти ни одной ссылки на радиовещание, которая не вешала бы игру намертво.
И даже есть отдельная версия скрипта - 1.2, ориентированная именно на реальное радио.

Блин, если бы я умел правильно писать dll и знал, как из собственного кода обратиться к функциям движка, чтобы получить доступ к акторам и их свойствам, я бы этот скрипт сделал в виде asi плагина, и плеер у меня работал бы из самой dll, и никаких проблем бы не было. А плейлист бы считывался из ini-файла. И работало бы и любое радио, и любые аудио форматы. Так-то я в Delphi программы писать умею, можно и плагин замутить. Только я не знаю, как реализовать обмен данными с игровым движком.


UPD:
Вот сами скрипты в виде сферических коней в вакууме:

Ver. 2.1
https://drive.google.com/file/d/1zjl...ew?usp=sharing

Ver. 2.0
https://drive.google.com/file/d/1MOs...ew?usp=sharing

Haku 10.11.2020 12:59

KlassenAS, если рассмотреть на этом примере? Подойдет ли он для Мафии?

оффтоп


KlassenAS 10.11.2020 13:14

Цитата:

Сообщение от Haku (Сообщение 13104)
KlassenAS, если рассмотреть на этом примере? Подойдет ли он для Мафии?

Подойдёт, но лишь потому, что это общая информация о dll и их подключении к основному игровому процессу.
Здесь нет информации о том, как из dll обращаться к функциям движка и обмениваться с ним данными.
Тупо присосались к процессу и вывели окошко с текстом и кнопкой ОК.
Я такой плагин хоть щас могу сделать. Толку будет, как от козла молока.
Вопрос ведь в том, как к акторам доступ получить. В идеале, к некоторым функциям, вызываемым командами из скриптов.
В частности, это необходимо для определения нахождения Томми в машине и для сравнения машин.

Abradox 10.11.2020 17:51

Цитата:

Сообщение от KlassenAS (Сообщение 13102)
Я ещё 3 ноября это исправил и обновил архивы. Посмотри сообщение №229 оно отредактировано.

Отлично, спасибо.

CurtisTea 11.11.2020 00:23

Цитата:

Сообщение от KlassenAS (Сообщение 13102)
И даже есть отдельная версия скрипта - 1.2, ориентированная именно на реальное радио.

Я просто к чему эту тему вспомнил, зачем эти манипуляции с аудио-файлами (что не есть "настоящее" радио)? Можно было бы залаунчить что-то типа mafia community radio с таким аудио-кодеком, который прочитала бы наша старушка и пускай бы оно себе работало в фоновом режиме.

Мож если не лень будет даже погуглю как оно работает вообще)

KlassenAS 11.11.2020 00:48

Цитата:

Сообщение от CurtisTea (Сообщение 13115)
Можно было бы залаунчить что-то типа mafia community radio с таким аудио-кодеком, который прочитала бы наша старушка и пускай бы оно себе работало в фоновом режиме.

Предлагаешь сделать специально для игры мафиозное онлайн-радио?
Плохая идея. Вся музыка лицензированная, без официальной покупки прав такую интернет-радиостанцию забанят нафиг.
Другое дело, если написать программу, которая локально, на компе будет имитировать радиоэфир, крутить треки, притворяясь сервером, к которому игра сможет обращаться по ссылке. Т.к. "вещание" и игра будут работать на одном компе, это освободит от потребности в интернет-подключении и избавит от подвисаний при загрузке. Кроме того, по моим наблюдениям, игра игнорирует интернет-поток при сохранении, и глюков с непрошенным воспроизведением после этого не происходит.
Так же можно было бы имитировать любое количество радиостанций.
Но я хз, как такое реализовать.
Хотя такую программу тоже можно под asi плагин оформить, это был бы большой плюс.

Abradox 11.11.2020 02:02

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


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

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