[OMSI 2] Dykty (SteckSchilder) - działa czy nie działa? | |||
02.04.2025, 08:57
(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] 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} 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) = ! Do pliku stringvarlist.txt do dowolnego zaczytywanego skryptu należy dopisać te linijki: Kod: Dykta_global Do pliku varlist.txt do dowolnego zaczytywanego skryptu należy dopisać te linijki: Kod: dykta_Termindex 4. modele 3D i tekstury Mając tak przygotowane skrypty, należy przygotować modele 3D. ![]() 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: ![]() Przykładowe ustawienie modeli 'schowanych' dykt: ![]() Przykładowe ustawienie modeli 'włożonych' dykt: ![]() Wpisy w pliku model: Opcjonalny header dla ładniejszego rozróżnienia poszczególnych sekcji w pliku model.cfg Kod: ############################################################### 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] Wpisy od modelu 'włożonej' dykty, czyli tej która jest aktywna. Kod: [mesh] 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] 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%
| |||
Użytkownicy przeglądający ten wątek: |
1 gości |