Witaj na Forum! Zapraszamy do rejestracji lub zalogowania. Stwórz konto  


[OMSI 2]  Dykty (SteckSchilder) - działa czy nie działa?

#1
(Ten post był ostatnio modyfikowany: 06.04.2025, 14:19 przez Sobol3D. Powód edycji: Dopisano fragment kodu odpowiedzialny za trigger dla zmiany pozycji dykty )

Ostatnio podczas zabawy funkcją SteckSchilder odkryłem to, co wszyscy którzy chcieli się bawić w dodawanie dykt do hofu - nie działa.
Po dogłębnym przestudiowaniu skryptów odpowiedzialnych za działanie tej funkcji, doszedłem do wniosku, że to skrypty są źle napisane, a nie funkcja źle działa. Po jakiejś godzinie zabawy skryptami udało mi się skutecznie to naprawić. Tutaj chciałbym zaprosić do przeanalizowania funkcjonowania dykt w OMSI, dlaczego nie działały i jak sprawić żeby to naprawić.


1. Ustawienie dykt w hofie
Aby ustawić dykty w pliku .hof (mówię to na podstawie notatek z hofu grundorfu) należy ustawić odpowiednią liczbę w stringcount_terminus oraz ewentualnie zdefiniować podfolder w Anzeigen/SteckSchilder, tak samo, jak robi się to w przypadku bitmap i zapowiedzi. Następnie należy zdefiniować nazwę pliku bitmapy dla dykty w odpowiednim wpisie [addterminus].

Kod:
[addterminus]
001
PKS WEGLIN
PKS WEGLIN
PKS WEGLIN

PKS WEGLIN

PKS WEGLIN
2_001.bmp <- w tej linijce znajduje się wpis do dykty


2. no dobra, ale to nie działa
Problemem skryptu z podstawki jest to, że funkcja od definiowania podfolderów dla danego hofu nie działa poprawnie, bo w ogóle to nie jest sprawdzane (serio). Drugim problemem jest to, że skrypt koniecznie chce numer ziel 1xxx, a nie 3-cyfrowy. Trzecim problemem było to, że skrypt bez sensu sprawdzał czy na początku nazwy pliku dykty jest 1 czy 2. Nie wiem po co, ale teoretycznie ustawiało to różne modele dykt. Ostatnim problemem było to w jaki sposób to jest ustawiane - tylko w jakiś dziwnych przypadkach których po tych 15 linijkach kodu nawet ja nie umiałem zrozumieć. To wszystko razem wzięte daje tak absurdalne okoliczności, że nie jestem wybitnie zdziwiony, że ta funkcja nigdy nie była jakoś szczególnie używana w OMSI.


3. jak skutecznie to naprawić?
Odpowiedź jest bardzo prosta - użyć customowego skryptu który napisałem, bo bez jego podmiany się nie da tego ogarnąć, a z moim skryptem który działa niezależnie od starego kodu, nie będzie on interferował z kodem z podstawki.

Gdzieś w skrypcie w sekcji gdzie znajdują się podobne wpisy trigger, musimy dokleić ten fragment kodu - będzie on odpowiedzialny za zmiane pozycji dykty między włożoną i schowaną. Trzeba pamiętać żeby wkleić to tak, aby nie było to w środku innego triggera lub w jakimś makrze.
Kod:
{trigger:dykta_mouseevent}
    (L.L.dykta_vis) ! (S.L.dykta_vis)
{end}

Do dowolnego macra _Frame które jest zaczytywane cały czas należy dopisać ten fragment kodu. Polecam go dać dokładnie na samym początku takiego makra, ale tak, żeby nic nie usuwać, ani nie dawać go pod inne fragmenty kodu. Makro to musi być zaczytywane cały czas, więc polecam wybrać jakiś skrypt, który jest używany we wszystkich autobusach. Można go również dopisać w main.osc, pod frame.
Wpisy w script.osc:
Kod:
    (L.L.IBIS_TerminusIndex) (L.L.dykta_Termindex) = !
    {if}
        (L.L.IBIS_TerminusIndex) s0

        l0 6 (M.V.GetTerminusString) (S.$.Dykta_terminus)
        
        2 (M.V.GetDepotStringGlobal) (S.$.Dykta_global)
        (L.$.Dykta_global) "" $= !
        {if}
            (L.$.Dykta_global) "\" $+ (S.$.Dykta_global)
        {endif}

        (L.L.dykta_Termindex) s0
        0 >=
        {if}
            "..\..\Anzeigen\SteckSchilder\" (L.$.Dykta_global) $+ (L.$.Dykta_terminus) $+ (S.$.Dykta_string)
        {else}
            ""  (S.$.Dykta_string)
        {endif}

        l0 (S.L.dykta_Termindex)
    {endif}

Do pliku stringvarlist.txt do dowolnego zaczytywanego skryptu należy dopisać te linijki:
Kod:
Dykta_global
Dykta_string
Dykta_terminus

Do pliku varlist.txt do dowolnego zaczytywanego skryptu należy dopisać te linijki:
Kod:
dykta_Termindex
dykta_vis


4. modele 3D i tekstury
Mając tak przygotowane skrypty, należy przygotować modele 3D.


.zip   Dykta.zip (Rozmiar: 465.71 KB / Pobrań: 8)

W tym małym archiwum znajdziecie plik .blend z modelem dykty z przygotowanym mapowaniem. Dodatkowo możecie tu też znaleźć szablon który ma wyraźnie zaznaczony obszar 'roboczy' z przodu dykty. Dolna część która nie jest zaznaczona jest tylną częścią tej dykty, jest ściśnięta, więc raczej nie ma sensu tam malować. Nadpisanie domyślnej tekstury (tej z napisem Sonderfahrt) spowoduje wyświetlenie tej tekstury na dykcie w autobusie, w przypadku gdy plik .hof nie posiada poprawnie zdefiniowanej tekstury dla dykty. Polecam sobie zdublować ten obiekt, jeżeli nie wiecie do czego przypisać triggery od dykt, bo nie znacie nazw plików. O tym poniżej. Pod tym akapitem dodatkowo dla lepszego zobrazowania możecie zobaczyć obszar roboczy na teksturze, oraz przykładowe ustawienie dykt w autobusie.

Obszar dla przodu dykty to ten zaznaczony na pomarańczowo:
[Obrazek: LYcI5kg.png]

Przykładowe ustawienie modeli 'schowanych' dykt:
[Obrazek: 3WISYKB.png]

Przykładowe ustawienie modeli 'włożonych' dykt:
[Obrazek: PQefKJn.png]

Wpisy w pliku model:

Opcjonalny header dla ładniejszego rozróżnienia poszczególnych sekcji w pliku model.cfg
Kod:
###############################################################
Steckschild/Dykta:
###############################################################

ZALECANE ! - wpisy dla modelu 'schowanej' dykty, czyli takiej która nie jest aktywna. Jak wyżej - jeżeli nie znacie struktury autobusu do którego to chcecie dodać, a macie zaimportowany jego model, polecam umieścić 'schowaną' dyktę gdzieś w okolicach kabiny, tak żeby była łatwo dostępna do kliknięcia. Wpisy od tego modelu nie są wpisami od modelu 'włożonej' dykty!
Kod:
[mesh]
schildFrnt_hidden.o3d

[visible]
dykta_vis
0

[matl]
Schild_Frnt.bmp
0

[matl_freetex]
Schild_Frnt.bmp
Dykta_string

[mouseevent]
dykta_mouseevent


-----------------------------

Wpisy od modelu 'włożonej' dykty, czyli tej która jest aktywna.
Kod:
[mesh]
schildFrnt.o3d

[visible]
dykta_vis
1

[matl]
Schild_Frnt.bmp
0

[matl_freetex]
Schild_Frnt.bmp
Dykta_string

[mouseevent]
dykta_mouseevent

-----------------------------

OPCJONALNE ! - Wpisy dla ewentualnego pliku .o3d odpowiedzialnego za kliknięcie do włożenia/schowania dykty, na przykład jakiś stelaż. Nazwa pliku .o3d w tym wypadku musi być taka, jak nazwa istniejącego pliku.
Kod:
[mesh]
schildFrnt_t.o3d

[mouseevent]
dykta_mouseevent

-----------------------------


ISTOTNA UWAGA!
Dodatkowo dla osób 'mniej technicznych' od tej strony tworzenia do OMSI - jedyne co chcecie ruszać to tylko linijkę pod wpisem [mesh]. Musicie pamiętać o odpowiedniej ścieżce do ewentualnego podfolderu i o odpowiedniej nazwie zgodnej z nazwą modelu .o3d - w przeciwnym razie model przestanie się ładować w momencie gdzie znajdują się wpisy od felernego [mesh]. Jeżeli na tym etapie macie dokładnie taki problem, tj. 'częściowo załadowany autobus' sprawdźcie poprawność nazw plików .o3d od dykt które dopisaliście.
Dopisując te pliki pamiętajcie aby NIE DODAWAĆ ICH NA SAMYM KOŃCU MODEL.CFG !!! - spowoduje to problemy z ich widocznością za szybami, ponieważ struktura model.cfg musi być napisana 'od środka na zewnątrz'. Polecam dopisać te linijki gdzieś w 1/4 wysokości całego pliku cfg.

W razie pytań, chętnie pomogę.
[wymoderowano - Ik132]
2.1. Wulgaryzmy /+70%
 Podziękowania za post: Ikarus 132(+1) , mmiki26(+1) , DamiLem(+1) , Iwo(+1) , Goppel(+1) , PrzemoGamming(+1)
Odpowiedz




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