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

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>

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

 

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

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

 

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

 

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

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

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


Edited by Bor

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

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

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

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

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

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

Есть простенький работающий 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.

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

<Mouse>

<Cursor Type=»Hand»/>

<Click>

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

</Click>

</Mouse>

Bor

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

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

 

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

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

На сверхзвуке двигатели не выключаются

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

Кто сказал, что их не слышно ?

Уже поднималась тема: http://www.avsim.su/forum/topic/105801-sverhzvuk/

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

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

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


Edited by Bombaklat

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

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

 

В целом, вот так. Надо скачать 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>

Эту гаугу я вчера еще скачал. 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

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

Да.

 

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

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

A:AVIONICS MASTER SWITCH,bool

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

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

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

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

Bor

У Вас в ReadMe написано

gauge77=xss!process,0,0,1,1, AircraftSCS An-12xssxss.cfg

т.е. прибору xss!process передается фактический параметр AircraftSCS An-12xssxss.cfg.

 

Прошу прощения, но не подскажите, как Вы его читаете. Я пошарился, но у меня ничего не получилось. Пробовал модифицировать GAUGE_HEADER_FS800, подставил parameters, он похоже в макросе пропущен, но что-то нифига в буфер не падает.

 

Как-то раньше не было особой надобности, а сейчас вот очень надо. Занялся исследование gau из Ил-18. Кое чего получилось. Нашел некоторые статические переменные и некоторые CallBack-и и сделал gateway для обмена с L:переменными, но хотелось бы, что бы gau использовалась и в il-18 и в il38. Собственно gau ПНК и систем БИ в Ил-18 и Ил-38 одинаковые, изменялись похоже ресурсы ресхаком, ну и имя. Вот имя то мне и надо передать в мою gau. Вернее два имени, одно имя — имя gau ПНК, а другое — имя gau систем БИ.

Bor

У Вас в ReadMe написано

gauge77=xss!process,0,0,1,1, AircraftSCS An-12xssxss.cfg

т.е. прибору xss!process передается фактический параметр AircraftSCS An-12xssxss.cfg.

 

Прошу прощения, но не подскажите, как Вы его читаете. Я пошарился, но у меня ничего не получилось. Пробовал модифицировать GAUGE_HEADER_FS800, подставил parameters, он похоже в макросе пропущен, но что-то нифига в буфер не падает.

 

 

Сергей, тебе узнать путь до папки(папок) загруженого самолёта или именно передать кусок пути? В первом случае могу помочь добраться до всех папок загруженого самолёта либо папок сима (сам использую это в тамагочи для конфигов, звуков и т.п.)

Сергей, тебе узнать путь до папки(папок) загруженого самолёта или именно передать кусок пути?

Ни то и ни другое. Он хочет вытащить шестой параметр gaugeXX


Edited by gosha-z

Ага, именно так, Игорь.

Нужно просто получить строку из шестого параметра gaugeXX. В ней будут имена gau ПНК и БИ. Эти имена я буду передавать в GetModuleHandle, что получить базовые адреса загрузки этих gau (dll). Ну и уже прибавлять к ним, найденные относительные адреса Callback функций и статических переменных.

Сейчас все работает, только вот имена gau прошиты в приборе, который является шлюзом межу нужными gau (на данный момент пока одна) и L:переменными.


Edited by serg_p

Ага, именно так, Игорь.

Нужно просто получить строку из шестого параметра gaugeXX. В ней будут имена gau ПНК и БИ. Эти имена я буду передавать в GetModuleHandle, что получить базовые адреса загрузки этих gau (dll). Ну и уже прибавлять к ним, найденные относительные адреса Callback функций и статических переменных.

Сейчас все работает, только вот имена gau прошиты в приборе, который является шлюзом межу нужными gau (на данный момент пока одна) и L:переменными.

 

Вопрос, а зачем дёргать коллбэки одной гауги из другой? Сама цель интересна. По самому предмету твоего вопроса — вроде у Гриффитса было это. Разве так не идёт (типо полупсевдокод :diablo: )

 

void FSAPI gau_update(PGAUGEHDR pgauge, SINT32 service_id, UINT extra_data){
 PCHAR gauparams=NULL;
 switch(service_id){
   case PANEL_SERVICE_PRE_INSTALL:
     gauparams = (PCHAR)pgauge->parameters; //это вся строка по сути
     break;
 }
}

Ага. Большое спасибо. Похоже на правду. Попробую.

 

По поводу колбэков, ну и статических переменных других gau.

Вот тут почитай. Сообщение #1190


Edited by serg_p