Jump to content
Pilot718

Озвучивание событий через XML [FS9]

Recommended Posts

А покажите пожалуйста свой XML код. И краткий комментарий, что он должен делать.

Выкладываю код.

 

Идея в том, чтобы переключение баков происходило с характерным звуком перемещения крана. Я не хотел привязывать звук к <Click>, так как в этом случае, как я понимаю, звучание будет происходить только при работе мышью с клик-зонами прибора, а в модели в ВК используется не прибор, а трёхмерный рычаг переключения баков, и если завязать звук на <Click>, то его не будет при переключении.

 

Я не знаю, как можно дать L-переменной значение 1, а затем сразу 0, а вот к инструкции к xss написано, что Reset=true делает это сам, поэтому идея была в том, чтобы при переключении крана в любое положение в переменную L:FUEL_SELECTOR_SOUND записывалась 1, звук проигрывался бы однократно, а затем xss автоматически бы записывала в переменную 0 до следующей смены положения крана.

 

<Gauge Name="FuelSelector" Version="1.0">
   <Element>
       <Select>
    <Value>(A:RECIP ENG FUEL TANK SELECTOR:1, enum) 0 == if{ 1 (>L:FUEL_SELECTOR_SOUND,bool) } els{ 1 (>L:FUEL_SELECTOR_SOUND,bool) }</Value>
       </Select>
   </Element>
</Gauge>

 

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

Share this post


Link to post
Share on other sites

Насколько я понимаю, конфигурационный файл это просто .txt , потом переименованный в .cfg? Или с ним еще какие действия надо совершить?

Share this post


Link to post
Share on other sites

Конфигурационный файл - это конфигурационный файл, никто ничего в нем не переименовывает

А если нужно в нем что-то исправить - вполне достаточно простого блокнота

Share this post


Link to post
Share on other sites

ilya1502, вот смотрите, сразу навскидку:

Вы кладете на стек значение переменной A:RECIP ENG FUEL TANK SELECTOR, затем кладете на стек 0, затем сравниваете эти два значения на верхушке стека, потом идет ветвление и в зависимости от результата и если A:RECIP ENG FUEL TANK SELECTOR равно нулю и если не равно нулю (то есть в любом случае!) устанавливаете L:FUEL_SELECTOR_SOUND в 1. То есть при любом значении переменной RECIP... у вас должен проигрываться щелчок, вот поэтому он и зацикливается, он сбрасывается xss, но тут же вновь устанавливается вашим прибором. Наверное в этом случае нужно завести вспомогательную переменную, в которой хранить прежнее значение RECIP..., сравнивать с текущим значением RECIP... и в случае изменения запоминать новое значение и вот только тогда устанавливать 1 для переменной озвучки.

 

<Gauge Name="FuelSelector" Version="1.0">
  <Element>
     <Select>
       <Value>(A:RECIP ENG FUEL TANK SELECTOR:1, enum) (L:RECIP ENG FUEL TANK SELECTOR:1, enum)  == 
               if{ (A:RECIP ENG FUEL TANK SELECTOR:1, enum) (>L:RECIP ENG FUEL TANK SELECTOR:1, enum)
                   1 (>L:FUEL_SELECTOR_SOUND,bool) }
       </Value>
    </Select>
  </Element>
</Gauge>

 

ну где то так.... я так думаю.

Edited by Bor

Share this post


Link to post
Share on other sites

Насколько я понимаю, конфигурационный файл это просто .txt , потом переименованный в .cfg? Или с ним еще какие действия надо совершить?

Михаил прав.

Это просто обыкновенный текстовый файл в кодировке CP1251 или Windows-1251, ну кому как нравится. Впрочем и расширение у него может быть любым, так как имя файла полностью задается в фале Panel.cfg, кстати Panel.cfg в русскоязычных Виндах пишется в такой же кодировке. Поэтому для примера я и для xss выбрал такое же расширение.

Edited by Bor

Share this post


Link to post
Share on other sites

Михаил прав.

Это просто обыкновенный текстовый файл в кодировке CP1251 или Windows-1251, ну кому как нравится. Впрочем и расширение у него может быть любым, так как имя файла полностью задается в фале Panel.cfg, кстати Panel.cfg в русскоязычных Виндах пишется в такой же кодировке. Поэтому для примера я и для xss выбрал такое же расширение.

 

Спасибо. Как раз это я и имел в виду.

Share this post


Link to post
Share on other sites

Bor

Игорь, большое спасибо за ответ.

Я попробовал Ваш код, он не звучит за исключением положения "0", когда он снова зацикливается :), но идею я более или менее понял, взял её на вооружение, и вот, что получилось:

 

<Gauge Name="FuelSelector" Version="1.0">
   <Element>
       <Select>
  <Value>(A:RECIP ENG FUEL TANK SELECTOR:1, enum) (>L:RECIP ENG FUEL TANK SELECTOR:1, enum)</Value>
  <Value>(A:RECIP ENG FUEL TANK SELECTOR:1, enum) (L:RECIP ENG FUEL TANK SELECTOR:1, enum) ^ if{ 1 

(>L:FUEL_SELECTOR_SOUND,bool) (A:RECIP ENG FUEL TANK SELECTOR:1, enum) (>L:RECIP ENG FUEL TANK SELECTOR:1, enum) } 

els{ 0 (>L:FUEL_SELECTOR_SOUND,bool) }</Value>
       </Select>
   </Element>
</Gauge>

Оно работает! :)

 

Так что огромное Вам спасибо за свежую (для меня) идею, будете в Питере - с меня пиво :) :D

Share this post


Link to post
Share on other sites

ilya1502, здорово, я рад. Я то ХМЛ для МСФС "нехорошо знаю" :D.

 

А вот и я увидел свою ошибку, надо было не на равенство проверять, а на неравенство (не знаю как в ХМЛ не равно, так "!=" или так "<>"). А, ну да, посмотрел ваш код, не равно обозначается символом "^" ? Ну вот и разобрались.

 

И все таки, этот кусок кода кажется мне лишним:

els{ 0 (>L:FUEL_SELECTOR_SOUND,bool) }

, это то, что сбрасывается автоматом в 0 опцией Reset=true.

Edited by Bor

Share this post


Link to post
Share on other sites

И все таки, этот кусок кода кажется мне лишним:

els{ 0 (>L:FUEL_SELECTOR_SOUND,bool) }

, это то, что сбрасывается автоматом в 0 опцией Reset=true.

А, ясно, попробую убрать.

Share this post


Link to post
Share on other sites

В принципе, опция Reset лишняя, потому что зацикливание звука ядро сервера может определить (и определяет) автоматически по наличию в файле меток Sustaining Loop, и на основании этого принимать решение - один раз проигрывать звук или циклить его между метками, так что в следующей версии я уберу эту опцию.

Share this post


Link to post
Share on other sites

Ребят, подскажите начинающему пожалуйста:

Есть простенький работающий xml код - мышиная зона на выпуск интерцепторов и движение рычага - меняет два *.bmp файла.

Собственно вот:

 

<Gauge Name="spoiler" Version="1.0">

<Element>

<Select>

<Value> (A:Spoilers handle position,percent) 50 > </Value>

<Case Value="0">

<Image Name="spoilers_Up.bmp" ImageSizes="0,0,64,123"/>

</Case>

<Case Value="1">

<Image Name="spoilers_Dn.bmp" ImageSizes="0,0,64,123"/>

</Case>

</Select>

</Element>

<Mouse>

<Area>

<Cursor Type="hand"/>

<Click Event="SPOILERS_TOGGLE"/>

</Area>

</Mouse>

</Gauge>

 

 

Вопрос: куда вставить (>L:spoil_switch_sound,bool) что бы рычаг спойлеров обрел звук. Сразу скажу, что прибор xss настроен. Не знаю синтаксис кода XML.

Share this post


Link to post
Share on other sites

Вот так примерно

<Mouse>

<Cursor Type="Hand"/>

<Click>

(K:ASPOILERS_TOGGLE) 1 (>L:poil_switch_sound,bool)

</Click>

</Mouse>

Share this post


Link to post
Share on other sites

Bor

Игорь, большое спасибо за то что Вы так хорошо поддерживаете этот топик!

Сразу же видно что вы проффесионал-в этом деле! К сожалению я не нашел подходящего топика где данная проблема описывалась.

 

У меня к вам вопрос кассающиуся вот этой ветке,простите за офф!

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Помогите плз.

Каким образом можно к сандартной переменной сима "прилепить" звук?

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

Edited by Bombaklat

Share this post


Link to post
Share on other sites
Тему прочитал, но не до конца все понял.

А что "всё" и насколько "не до конца"? Вы задайте конкретные вопросы касаемо того, что именно не поняли, тогда можно будет помочь.

 

В целом, вот так. Надо скачать XML Sound Server по ссылке отсюда, затем написать свой прибор, который при нужном вам значении нужной вам переменной записывал бы 1 в другую переменную, обрабатываемую XML Sound Server.

 

Вот простейший пример. Когда значение переменной A:ANGLE OF ATTACK INDICATOR меньше 1.71, то в переменную L:STALL_WARNING_SOUND записывается 1, в противном случае записывается 0. Остальное описано в документации к XML Sound Server. Документация очень подробная и простая - не ленитесь :rolleyes:

 

<Gauge Name="StallWarning" Version="1.0">
   <Element>
       <Select>
           <Value>(A:ANGLE OF ATTACK INDICATOR,NUMBER) 1.71 < if{ 1 (>L:STALL_WARNING_SOUND,bool) } els{ 0 (>L:STALL_WARNING_SOUND,bool) }</Value>
       </Select>
   </Element>
</Gauge>

Share this post


Link to post
Share on other sites

Эту гаугу я вчера еще скачал. Cfg настроил, застопорился на гауге xml. Если я правильно понимаю, то мне надо для звука авионики что-то вроде такого:

 

<Gauge Name="AvionicsSound" Version="1.0">
   <Element>
       <Select>
           <Value>(A:"переменная master avionics switch",bool); if{ 1 (>L:AVIONICS_SOUND,bool) } els{ 0 (>L:AVIONICS_SOUND,bool) }</Value>
       </Select>
   </Element>
</Gauge>

 

Правильно я понял (Я в XML полный профан, прошу не пинать :) )?

PS А какое название переменной master avionics switch???

Edited by Bombaklat

Share this post


Link to post
Share on other sites

Правильно я понял?

Да.

 

А какое название переменной master avionics switch???

Названия переменных смотрите в Panels SDK. И вообще почитайте его.

A:AVIONICS MASTER SWITCH,bool

Share this post


Link to post
Share on other sites

Спасибо! Получилось. Буду ковырять дальше :)

Эх, был бы способ узнать переменные недефлотных самолетов.

Share this post


Link to post
Share on other sites

был бы способ узнать переменные недефлотных самолетов.

Если их приборы написаны на XML, то нет ничего сложного. Если же на C++, то уже писали о том, что в простом "узнать" нет никакого смысла.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×