Odpowiedź 
 
Ocena wątku:
  • 1 Głosów - 4 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Jak samodzielnie zrobić skrypt przełączania przystanków
Autor Wiadomość

Administrator
Administratorzy
Liczba postów: 1,327
Dołączył: 12-2012
Podziękowań: 420
Post: #1
Jak samodzielnie zrobić skrypt przełączania przystanków
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.


!NIE POMAGAM NA PW - OD POMOCY JEST FORUM!

PCB: Gigabyte GA-970A-DS3
CPU: AMD FX-8350 @ 8x4.4GHz + Raijintek EreBoss
RAM: 8GB RAM DDR3
GPU: Sapphire Radeon RX480 Nitro+ 8GB
PSU: Corsair TX850M
OS: Windows 10 Pro x64

Zanim cokolwiek napiszesz, przeczytaj koniecznie REGULAMIN
Jeśli masz problem techniczny, zapoznaj się z ZASADAMI DZIAŁÓW TECHNICZNYCH
Jeśli chcesz podzielić się dodatkiem, zapoznaj się z REGULAMINEM DZIAŁU POBIERALNIA



Find me on: fb.me/mattezpl
(Ten post był ostatnio modyfikowany: 19.09.2013 07:12 przez mattez.)
28.05.2013 12:58
Szukaj postów Cytat
Odpowiedź 




Użytkownicy przeglądający ten wątek: 1 gości

Forum Strefa-OMSI.pl

Tematyczne Forum dotyczące najpopularniejszego symulatora autobusu - OMSI. Zapraszamy do rejestracji i aktywnego udziału w Społeczności.

Strona wykorzystuje pliki cookies. Korzystanie z witryny oznacza zgodę na ich zapis lub odczyt wg ustawień przeglądarki.

Współpracujemy z:

Polecamy także: