Stránka 1 z 5

[NÁVOD] Automatická výstraha pred zatvorením dverí

PříspěvekNapsal: 05 srp 2013 14:47
od stefco
Ahojte! Dnes som pripravil návod, ako naskriptovať automatickú výstrahu pred zatvorením dverí, ktorá bude fungovať podobne ako u MB O405N2.

Upravovať sa budú 3 súbory

..\OMSI\Vehicles\...\Script\door.osc resp. inak nazvaný skript dverí
..\OMSI\Vehicles\...\Script\door_varlist.txt resp. inak nazvaný súbor s premennými dverí
..\OMSI\Vehicles\...\Sound\____.cfg


Nezabudnite si ich zálohovať, ak by niečo nevyšlo.
---------------------------------------------------------------------
1. dopíšeme do súboru door_varlist.txt dve premenné pre každé dvere, ktorým chceme priradiť výstrahu pred zatvorením. Jednu pre odpočítanie času výstarhy a druhú pomocnú.

napr.

door_Warncounter
door_Warn


ak chceme výstrahu priradiť viacerým nezávislým dverám

door_Warncounter0
door_Warn0
door_Warncounter1
door_Warn1


atď.

---------------------------------------------------------------------
2. otvoríme súbor door.osc

nájdeme makro pre otvorenie daných dverí tak, že vyhľadáme nasledujúci odstavec alebo jemu podobné:

Kód: Vybrat vše
{trigger:bus_doorfront0}
   (L.L.elec_busbar_avail)
   {if}
      (M.L.trg_bus_doorfront0)
   {endif}
   1 (S.L.cockpit_tuertaster1)
{end}


{trigger:bus_doorfront0} - názov funkcie, ktorej je možné priradiť klávesu (bus_doorfront0 je štandartne priradené "Num/")
Podľa toho je možné zistiť, ktoré dvere sa otvoria.

zaujímať nás bude riadok (M.L.trg_bus_doorfront0)

vyhľadáme trg_bus_doorfront0 a mali by sme mať pred sebou tento odstavec:

Kód: Vybrat vše
{macro:trg_bus_doorfront0}

   (L.L.doorTarget_0) ! (S.L.doorTarget_0)
   {if}
      (T.L.ev_doortriggeropen_0)
   {else}
      (T.L.ev_doortriggerclose_0)
   {endif}
      (C.L.door_druckluft)
      {if}
      (L.L.bremse_p_Tank04) 100000 - 0.98 * 100000 + (S.L.bremse_p_Tank04)
      {endif}
{end}


a upravíme ho nasledovne

Kód: Vybrat vše
{macro:trg_bus_doorfront0}

   (L.L.doorTarget_0) ! (S.L.doorTarget_0)
   {if}
      (T.L.ev_doortriggeropen_0)
      0 (S.L.door_Warncounter)
   {else}
      (T.L.ev_door_Warnsound)
      1.5 (S.L.door_Warncounter)
      1 (S.L.door_Warn)
   {endif}
      (C.L.door_druckluft)
      {if}
      (L.L.bremse_p_Tank04) 100000 - 0.98 * 100000 + (S.L.bremse_p_Tank04)
      {endif}
{end}


kde:
0 (S.L.door_Warncounter) - pri otvorení dverí sa nebude čakať na výstrahu a ani sa neprehrá
(T.L.ev_door_Warnsound) - príkaz na prehranie zvuku (pre viacero dverí je potrebné rozlíšiť napr. (T.L.ev_door_Warnsound0), (T.L.ev_door_Warnsound1) atď.)
1.5 (S.L.door_Warncounter) - 1.5 - dľžka oneskorenia zatvorenia dverí od stlačenia tlačidla resp. dĺžka nahrávky výstrahy.
1 (S.L.door_Warn) - pomocná premenná a jej hodnota

teraz nájdeme odstavec macro:Door _Calc, kde sa bude nachádzať riadok s prísušným (L.L.doorTarget_ )
teda v tomto prípade s (L.L.doorTarget_0):

Kód: Vybrat vše
{macro:Door0_Calc}
   (C.L.electric_doors)
   {if}
      (L.L.doorTarget_0)
      {if}
         (L.L.door_0) (F.L.door_0_opn_speed) (S.L.doorMaxSpeed_0)
      {else}
         (L.L.door_0) (F.L.door_0_cls_speed) (S.L.doorMaxSpeed_0)
      {endif}


a na konci tohto odstavca

Kód: Vybrat vše
   (L.L.door_0) 1 >
   {if}
      (T.L.ev_doorhitopen_0)
      1 (S.L.door_0)
      (L.L.doorSpeed_0) /-/ (L.L.doorRefl_0) * (S.L.doorSpeed_0)
   {else}
      (L.L.door_0) 0 <
      {if}
         (T.L.ev_doorhitclose_0)
         0 (S.L.door_0)
         (L.L.doorSpeed_0) /-/ (L.L.doorRefl_0) * (S.L.doorSpeed_0)
      {endif}
   {endif}
{end}


a zmeníme ho na:

Kód: Vybrat vše
{macro:Door0_Calc}
(L.L.door_Warncounter) 0 <
{if}
   (L.L.door_Warn) 1 =
   {if}
      (T.L.ev_doortriggerclose_1)
      0 (S.L.door_Warn)
   {endif}
   (C.L.electric_doors)
   {if}
      (L.L.doorTarget_0)
      {if}
         (L.L.door_0) (F.L.door_0_opn_speed) (S.L.doorMaxSpeed_0)
      {else}
         (L.L.door_0) (F.L.door_0_cls_speed) (S.L.doorMaxSpeed_0)
      {endif}


a na konci tohto odstavca:

Kód: Vybrat vše
   (L.L.door_0) 1 >
   {if}
      (T.L.ev_doorhitopen_0)
      1 (S.L.door_0)
      (L.L.doorSpeed_0) /-/ (L.L.doorRefl_0) * (S.L.doorSpeed_0)
   {else}
      (L.L.door_0) 0 <
      {if}
         (T.L.ev_doorhitclose_0)
         0 (S.L.door_0)
         (L.L.doorSpeed_0) /-/ (L.L.doorRefl_0) * (S.L.doorSpeed_0)
      {endif}
   {endif}
{else}
   (L.L.door_Warncounter) (L.S.Timegap) - (S.L.door_Warncounter)
{endif}
{end}


kde pridané časti:
(L.L.door_Warncounter) 0 <
{if}

- pohyb dverí nastane až po skončení odpočítavania

(L.L.door_Warn) 1 =
{if}
(T.L.ev_doortriggerclose_1)
0 (S.L.door_Warn)
{endif}

- spustí zvuk zatvorenia dverí až po výstrahe

{else}
(L.L.door_Warncounter) (L.S.Timegap) - (S.L.door_Warncounter)
{endif}

- spustí odpočítavanie času pre výstrahu
---------------------------------------------------------------------

3. Otvoríme súbor: ..\OMSI\Vehicles\...\Sound\____.cfg

a na koniec pripíšeme

Kód: Vybrat vše
[sound]
(názov zvukového súbor s výstrahou).wav
1

[3d]
-1.25
0.0
1.6
0.5

[trigger]
ev_door_Warnsound


kde:
[3d]
-1.25 - pozícia x
0.0 - pozícia y
1.6 - pozícia z
0.5 - okruh, v ktorom bude 100% hlastiosť zvuku

Tento odstavec je potrebné zapísať pre každé dvere zvlášť so súradnicami jednotlivých dverí (súradnice je možné nájsť u zvukov dverí)

A to je všetko, čo je potrebné spraviť. Príjemnú zábavu :)

Ak by sa vyskytol nejaký problém, kľudne píšte, u seba som to skúšal na SU 15 a funguje to. 8-)

Re: Automatická výstraha pred zatvorením dverí

PříspěvekNapsal: 06 srp 2013 11:54
od stefco
Prišiel som na ešte trochu iný postup, pri ktorom bude výstraha dverí znieť až do zatvorenia dverí. Pozor, je to možné použiť len u autobusov, ktoré už majú nskriptovanú manuálnu výstrahu.
V tomto prípade ani nebude nutné meniť súbor ..\OMSI\Vehicles\...\Sound\____.cfg.

1. bod
Pridanie premenných zostáva rovnaké.

2. bod
Budeme postupovať v podstate rovnako, ale namesto (T.L.ev_door_Warnsound) použijeme spínač manuálnej výstrahy, ktorý nájdeme v cockpit.osc
Ako príklad uvediem úpravu pre Citybus. Spínač manuálnej výstrahy v cockpit.osc vyzerá takto:
Kód: Vybrat vše
{trigger:door_alarm}
   
      (L.L.cockpit_alarm) ! (L.L.elec_busbar_main) &&
   
      1 (S.L.cockpit_alarm)
   
{end}

zaujímať nás bude riadok 1 (S.L.cockpit_alarm).

rovnakým spôsobom ako v predošlom prípade nájdeme spínač zadných dverí:
Kód: Vybrat vše
{macro:trg_bus_doorfront1}

   (L.L.doorTarget_1) ! (S.L.doorTarget_1)
   {if}
      (T.L.ev_doortriggeropen_1)
   {else}
      (T.L.ev_doortriggerclose_1)
   {endif}   
      (C.L.door_druckluft)
      {if}
      (L.L.bremse_p_Tank04) 100000 - 0.98 * 100000 + (S.L.bremse_p_Tank04)
      {endif}
{end}


a upravíme ho nasledovne:
Kód: Vybrat vše
{macro:trg_bus_doorfront1}

   (L.L.doorTarget_1) ! (S.L.doorTarget_1)
   {if}
      (T.L.ev_doortriggeropen_1)
      0 (S.L.door_Warncounter)
   {else}
      1 (S.L.cockpit_alarm)
           1.5 (S.L.door_Warncounter)
           1 (S.L.door_Warn)
   {endif}   
      (C.L.door_druckluft)
      {if}
      (L.L.bremse_p_Tank04) 100000 - 0.98 * 100000 + (S.L.bremse_p_Tank04)
      {endif}
{end}


kde
1 (S.L.cockpit_alarm) - zapnutie výstrahy
1.5 (S.L.door_Warncounter) - 1.5 - interval oneskorenia zatvorenia dverí.
1 (S.L.door_Warn) - pomocná premenná

teraz nájdeme odstavec macro:Door _Calc, kde sa bude nachádzať riadok s prísušným (L.L.doorTarget_ )
teda v tomto prípade s (L.L.doorTarget_1):

Kód: Vybrat vše
{macro:Door1_Calc}
   (C.L.electric_doors)
   {if}
      (L.L.doorTarget_1)
      {if}
         (L.L.door_1) (F.L.door_1_opn_speed) (S.L.doorMaxSpeed_1)
      {else}
         (L.L.door_1) (F.L.door_1_cls_speed) (S.L.doorMaxSpeed_1)
      {endif}


Zaujímať nás bude aj koniec tohto odstavca:

Kód: Vybrat vše
   (L.L.door_1) 1 >
   {if}
      (T.L.ev_doorhitopen_1)
      1 (S.L.door_1)
      (L.L.doorSpeed_1) /-/ (L.L.doorRefl_1) * (S.L.doorSpeed_1)
   {else}
      (L.L.door_1) 0 <
      {if}
         (T.L.ev_doorhitclose_1)
         (T.L.ev_pip_1)
         0 (S.L.door_1)
         (L.L.doorSpeed_1) /-/ (L.L.doorRefl_1) * (S.L.doorSpeed_1)
      {endif}
   {endif}
{end}


Odstavec {macro:Door1_Calc}: upravím nasledovne:

Kód: Vybrat vše
{macro:Door1_Calc}
(L.L.door_Warncounter) 0 <
{if}
   (L.L.door_Warn) 1 =
   {if}
      (T.L.ev_doortriggerclose_1)
      0 (S.L.door_Warn)
   {endif}
   (C.L.electric_doors)
   {if}
      (L.L.doorTarget_1)
      {if}
         (L.L.door_1) (F.L.door_1_opn_speed) (S.L.doorMaxSpeed_1)
      {else}
         (L.L.door_1) (F.L.door_1_cls_speed) (S.L.doorMaxSpeed_1)
      {endif}


a koniec odstavca {macro:Door1_Calc} takto:

Kód: Vybrat vše
   (L.L.door_1) 1 >
   {if}
      (T.L.ev_doorhitopen_1)
      1 (S.L.door_1)
      (L.L.doorSpeed_1) /-/ (L.L.doorRefl_1) * (S.L.doorSpeed_1)
   {else}
      (L.L.door_1) 0 <
      {if}
         (T.L.ev_doorhitclose_1)
         0 (S.L.cockpit_alarm)
         (T.L.ev_pip_1)
         0 (S.L.door_1)
         (L.L.doorSpeed_1) /-/ (L.L.doorRefl_1) * (S.L.doorSpeed_1)
      {endif}
   {endif}
{else}
   (L.L.door_Warncounter) (L.S.Timegap) - (S.L.door_Warncounter)
{endif}
{end}


kde pridané časti:
(L.L.door_Warncounter) 0 <
{if}

- pohyb dverí nastane až po skončení odpočítavania

(L.L.door_Warn) 1 =
{if}
(T.L.ev_doortriggerclose_1)
0 (S.L.door_Warn)
{endif}

- spustí zvuk zatvorenia dverí až po skončení odpočítavania

0 (S.L.cockpit_alarm) - vypnutie výstrahy

{else}
(L.L.door_Warncounter) (L.S.Timegap) - (S.L.door_Warncounter)
{endif}

- spustí odpočítavanie času pre oneskorenie zatvorenie dverí

3.bod v tomto prípade nie je potrebný.

V prípade nejasností sa kľudne ozvite. ;)

Re: Automatická výstraha pred zatvorením dverí

PříspěvekNapsal: 06 srp 2013 12:00
od Gryzly65
Bomba. Vďaka, že si sa do toho dal, akonáhle to budem mať kde vyskúšať, určite sa tak stane. ;)

Re: Automatická výstraha pred zatvorením dverí

PříspěvekNapsal: 06 srp 2013 12:13
od Etrusan
Díky moc, hned po obědě na to kouknu. Todle mi tam moc chybí. BTW. všem co jí přeji dobrou chuť.

Edit: na su 15 sem to rozchodil jen na přední dveře a ještě jaksi divně. Vyřešil sem to držením zvonečku před při i po zavírání dveří.

Re: Automatická výstraha pred zatvorením dverí

PříspěvekNapsal: 08 srp 2013 00:15
od martin8211
Tak jsem zkusil tu úpravu na citybus přesně podle návodu, a při výběru busu to hodí chybu v modulu :( všechno jsem zkopíroval podle příspěvku 2.
Nemůže to třeba být tím, že se ten mod mlátí s jiným modem na citybus? (udělal jsem si podle tvého návodu nástup všemi dveřmi, a ještě mám verzi ZF)

Re: Automatická výstraha pred zatvorením dverí

PříspěvekNapsal: 08 srp 2013 11:03
od stefco
loparyis: Hmm.... u mňa to funguje bezchybne. S nástupom všetkými dverami to nemá problém, skúšal som to aj u seba. Verziu ZF nemám, ale nemyslím, že by to mohlo mať na to vplyv. Prípadne mi môžeš poslať cez SZ tvoj upravený skript dverí a ja sa na to pozriem. ;)


EDIT: loparyisov problém vyriešený. Išlo iba o menšiu chybu pri kopírovaní a aby sa predošlo podobným omylom, boli trochu upravené návody. Na podstate posupu sa ale nič nemení, ide iba o prehľadnejšie formátovanie textu príspevku s návodom.

Re: Automatická výstraha pred zatvorením dverí

PříspěvekNapsal: 16 srp 2013 23:34
od Dominno
Jak se to dělá s Karosou B731 ?

Re: Automatická výstraha pred zatvorením dverí

PříspěvekNapsal: 17 srp 2013 14:31
od stefco
Podobne ako na Citybuse, keďže pôvodná verzia B731 už má manuálnu výstrahu. Teda postupuj podľa návodu z 2. príspevku. Akurát bude treba v skripte dverí potrebné upraviť iné odstavce, konkrétne {macro:trg_bus_doorfront2} a {macro:Door2_Calc}. (tam je to vysvetlené na odstavcoch trg_bus_doorfront1 a Door1_Calc).

Re: Automatická výstraha pred zatvorením dverí

PříspěvekNapsal: 17 srp 2013 14:40
od Tomko00
No, zatiaľ mám rovnaký problém ako ostatný, hodí to error s modulom. A to som išiel presne podľa návodu. Robil som to pre MB O305.

Re: Automatická výstraha pred zatvorením dverí

PříspěvekNapsal: 17 srp 2013 15:08
od stefco
Hmm, O305 síce nemám, ale aj tak mi môžeš skúsiť poslať, ako vyzerá ten skript dverí po úprave. Možno tam nájdem niečo, čo by mohlo spôsobovať chybu.