Witam!
Postanowiłem przedstawić Wam pełen opis jak zrobić automatyczne przełączanie przystanków w praktycznie każdym modelu. Poniższa modyfikacja wymaga co najmniej podstawowej wiedzy co znajduje się w plikach .osc
Poradnik na bazie MAN'a SD202 D92
Proszę koniecznie wykonać kopię zapasową plików cockpit.osc i door.osc
Autorem samego skryptu jest
qbasob
Aby automatyczna zmiana przystanków działała w autobusach ze skrzynią automatyczną:
1) wchodzimy w plik door.osc interesującego nas modelu i szukamy za pomocą CTRL+F, czy ma zawartą wartość (S.L.door_ClosedLast), jeśli tak, idziemy do pkt. 2), jeśli nie:
a) odszukujemy makra odpowiedzialne za otwieranie drzwi. W MANach SD są to odpowiednio dla trzech funkcji drzwi:
{macro:trg_bus_doorfront0}
{macro:trg_bus_doorfront1}
{macro:DoorAft_Open}
jeżeli nazwy są inne, zależnie od modelu, wystarczy poszukać haseł "doortarget", "ev_doortriggerclose" i odnaleźć odpowiednie makro. Jeśli je znajdziemy, powinny wyglądać mniej więcej tak (przykład dla pierwszych drzwi):
Kod:
{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}
b) tuż pod (T.L.ev_doortriggerclose_0) dodajemy wartość
1 (S.L.door_ClosedLast), która będzie informowała, że są to jedne z drzwi, które się zamykają, a skrypt, który zaraz dodamy cockpit.osc wyszuka, które zamknęły się ostatnie. Po zmianie powinno to wyglądać tak:
Kod:
{macro:trg_bus_doorfront0}
(L.L.doorTarget_0) ! (S.L.doorTarget_0)
{if}
(T.L.ev_doortriggeropen_0)
{else}
(T.L.ev_doortriggerclose_0)
1 (S.L.door_ClosedLast)
{endif}
(C.L.door_druckluft)
{if}
(L.L.bremse_p_Tank04) 100000 - 0.98 * 100000 + (S.L.bremse_p_Tank04)
{endif}
{end}
Ważne dla nas informacje wynikające z tego skryptu, to:
(T.L.ev_doortriggeropen_0) jest wykonywany, jeśli (L.L.doorTarget_0) i (S.L.doorTarget_0), a (T.L.ev_doortriggerclose_0) nie jest wykonywany jeśli (L.L.doorTarget_0) i (S.L.doorTarget_0) dając wartość 1 (TAK) dla (S.L.door_ClosedLast)
c) tą samą czynność powtarzamy w makrach pozostałych drzwi
d) zamykamy door.osc
e) aby powyższe wpisy były obsługiwane, otwieramy door_varlist.txt i dopisujemy na dole
Cytat:door_closedLast
stop_request_played
f) zamykamy door_varlist.txt
2) wchodzimy w plik cockpit.osc interesującego nas modelu
a) odszukujemy poniższy ciąg makr (w zależności od modelu może wyglądać nieco inaczej):
Kod:
'----------------------
' Frame
'----------------------
{macro:cockpit_frame}
'Übertragen der Schalterstellungen:
(L.L.cp_retarder_sw) (S.L.antrieb_retarder_sw)
(L.L.cp_retarder_sw_direkt) (S.L.antrieb_retarder_sw_direkt)
(L.L.cp_wischer_schnell_sw) (S.L.wiper_schnell_sw)
(L.L.cp_wischer_einaus_sw) (S.L.wiper_einaus_sw)
(L.L.cp_wischer_intervall_sw) (S.L.wiper_intervall_sw)
(L.L.cp_wischer_wascher_sw) (S.L.wiper_wascher_sw)
(M.L.tacho_frame)
(M.L.uhr_frame)
(M.L.drehzahlmesser_frame)
(M.L.hupe_frame)
(M.L.blinkerhebel_frame)
(M.L.wischerhebel_frame)
(M.L.wischer_drehschalter_frame)
(M.L.oeldruck_frame)
(M.L.tankuhr_frame)
(M.L.cockpitlights_frame)
(M.L.klimator_frame)
(M.L.schluessel_frame)
(M.L.odometer_frame)
(M.L.fahrertuer_frame)
(M.L.rollo_frame)
(M.L.engine_thermometer_frame)
(M.L.microphone_frame)
(M.L.pressure_warning_needle_frame)
(M.L.zentralschmierung_frame)
(M.L.Thermometer_frame)
b) pod ostatnią wartością dopisujemy
(M.L.IBIS_autoNext)
c) na samym dole pliku wklejamy poniższy kod
Kod:
{macro:IBIS_autoNext}
' nast. przyst.
(L.L.Velocity) 20 > (L.L.door_ClosedLast) 1 = &&
{if}
(L.L.IBIS_busstop) 1 + (S.L.IBIS_busstop)
(M.L.IBIS_RefreshBusstop)
(M.L.IBIS_PlayAnnouncement2)
0 (S.L.door_ClosedLast)
{endif}
{end}
{macro:IBIS_PlayAnnouncement2}
(L.L.IBIS_busstop) 0 > (L.L.IBIS_version) 2 = &&
{if}
"Ansagen\" (L.$.act_busstop) $+
(L.L.IBIS_RouteIndex) (M.V.GetBusstopCount) 1 - (L.L.IBIS_busstop) <=
{if}
"_#terminus" $+
{endif}
".wav" $+
$msg
(T.F.ev_IBIS_Ansagen)
{endif}
{end}
Ważne dla nas informacje wynikające z tego skryptu, to:
{macro:IBIS_autoNext} jest wykonywany, jeśli (L.L.door_ClosedLast) 1 =, czyli ostatnie ze wszystkich drzwi zostały zamknięte, a (L.L.Velocity) 20 >, czyli prędkość większa niż 20 km/h (tą wartość można sobie zmienić)
d) zamykamy cockpit.osc
Dzięki tej modyfikacji po zamknięciu ostatnich drzwi i przekroczeniu prędkości 20 km/h aktualny przystanek zmieni się automatycznie. Można go zmienić również ręcznie (domyślnie chyba TAB oraz Q).
Aby automatyczna zmiana przystanków działała w autobusach ze skrzynią manualną (dodatkowo):
1) wchodzimy w plik cockpit.osc interesującego nas modelu
a) z uwagi na to, że sprzęgła będziemy używać w skrzyni manualnej w innym celu niż ręczna zmiana przystanków - odszukujemy poniższy wpis:
Kod:
{macro:microphone_frame}
(L.L.Clutch) 0.2 > (L.L.cp_microphone_sw) ||
(L.L.elec_busbar_main) && s0
(L.L.Snd_Microphone) s1
l0 l1 ! &&
{if}
(T.L.micro_lautsprecherknack_start)
{endif}
l0 ! l1 &&
{if}
(T.L.micro_lautsprecherknack_end)
{endif}
l0 (S.L.Snd_Microphone)
{end}
b) kasujemy wartość
(L.L.Clutch) 0.2 > (nie wiem po kiego grzyba autorzy modelu wstawili sprzęgło tutaj), powinno to wyglądać tak:
Kod:
{macro:microphone_frame}
(L.L.cp_microphone_sw)
(L.L.elec_busbar_main) && s0
(L.L.Snd_Microphone) s1
l0 l1 ! &&
{if}
(T.L.micro_lautsprecherknack_start)
{endif}
l0 ! l1 &&
{if}
(T.L.micro_lautsprecherknack_end)
{endif}
l0 (S.L.Snd_Microphone)
{end}
c) zamykamy cockpit.osc
Jeśli będą występowały błędy, bądź nie będziecie mogli znaleźć makr, piszcie jaki model, postaram się pomóc
Pozdrawiam, M.