<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Strefa OMSI - polskie forum o OMSI i OMSI 2 - Budowa pojazdów]]></title>
		<link>https://strefa-omsi.pl/</link>
		<description><![CDATA[Strefa OMSI - polskie forum o OMSI i OMSI 2 - https://strefa-omsi.pl]]></description>
		<pubDate>Fri, 15 May 2026 05:36:25 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Textfeldy - od A do Z - tekst w OMSI]]></title>
			<link>https://strefa-omsi.pl/Watek-Textfeldy-od-A-do-Z-tekst-w-OMSI--29916</link>
			<pubDate>Wed, 16 Apr 2025 05:38:07 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://strefa-omsi.pl/member.php?action=profile&uid=62874">Sobol3D</a>]]></dc:creator>
			<guid isPermaLink="false">https://strefa-omsi.pl/Watek-Textfeldy-od-A-do-Z-tekst-w-OMSI--29916</guid>
			<description><![CDATA[Nie wiem czy już taki poradnik istnieje, ale postanowiłem napisać własny.<br />
<br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Textfeldy</span></span><br />
<br />
z niemieckiego <span style="font-style: italic;" class="mycode_i">pola tekstowe</span> - służą do wyświetlania zmiennego tekstu. Nie ma zbyt wielu różnić między tekstem na obiektach scenerii a tych w pojazdach. Jedno i drugie, może być kontrolowane przez skrypt, przy czym w obiektach scenerii możemy wpisać sobie w obiekt co ma na nim być, np nazwa przystanku czy ulicy. Po pierwsze, to od czego musimy zacząć to dobrać odpowiedni <span style="font-weight: bold;" class="mycode_b">font</span>.<br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Font</span></span><br />
<br />
inaczej czcionka dla mówiących mniej cool młodzieżowo. OMSI ma podfolder <span style="text-decoration: underline;" class="mycode_u">Fonts</span> w którym możemy znaleźć wszystkie dostępne dla OMSI fonty, tak jak wskazuje nazwa. Font w OMSI składa się z 2 plików - .oft i .bmp. Plik <span style="text-decoration: underline;" class="mycode_u">.oft</span> jest plikiem konfiguracyjnym fontu, gdzie wyznaczone są koordynaty wszystkich znaków, jakie są odległości między znakami w pixelach, jego nazwę oraz nazwę pliku bitmapy. Plik <span style="text-decoration: underline;" class="mycode_u">.bmp</span> jest bitmapą gdzie mamy zapisane wszystkie dostępne znaki dla danego fontu. Nie muszą to być koniecznie znaki ABCDE, bo można tu zrobić nawet jakieś szlaczki. Ważnym jest, aby zgadzały się koordynaty, oraz żeby nie dublowały się znaki, jak i również żeby nie było spacji za znakami. Ostatnią istotną rzeczą jest to, żeby plik .bmp był zapisany jako 24-bitowy, inaczej OMSI nie odczyta poprawnie fontu. Mając to za sobą, przejdźmy do struktury plików fontów i spójrzmy na nie dokładnie. To ważne, aby zrozumieć jak najlepiej robić własne fonty.<br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Pliki .bmp</span></span><br />
<br />
24-Bitowe bitmapy zawierające 'mapę' wszystkich znaków dla danego fontu, lub fontów. Na jednej bitmapie możemy mieć zmapowanych kilka różnych fontów, co polecam robić, jeżeli mówimy o fontach na matrixy. <br />
<br />
Przykładowe bitmapy wyglądają tak:<br />
<img src="https://i.imgur.com/RBzrr2N.png" loading="lazy"  alt="[Obrazek: RBzrr2N.png]" class="mycode_img" /><br />
<img src="https://i.imgur.com/3S361GY.png" loading="lazy"  alt="[Obrazek: 3S361GY.png]" class="mycode_img" /><br />
<br />
Kolor niebieski (R:0 G:0 B:255 / HEX 0000FF) wyznacza obszar który nie jest używany do mapowania znaków, ułatwia to pracę w przypadku gdy mapujemy plik .oft ręcznie. Zacznim zaczniemy, w przypadku gdy robimy zwykły font pokroju Ariala, NIGDY, podkreślam <span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">N I G D Y</span></span> nie używajcie zbyt dużego rozmiaru czcionki. Według mnie, optymalnym jest całkowity rozmiar wysokości w okolicach 40-60 pikseli. Używając większej rozdzielczości, to tekst pokroju zegarka który odświeża się co sekundę, zagwarantuje czkawkę całej gry. Ładny i ostry font brzmi fajnie na papierze. Jeżeli zrobicie zbyt duży font i zorientujecie się że powoduje on problemy z wydajnością, to całą pracę trzeba wykonać de facto od nowa. Dlatego sam fakt dobrania odpowiedniej wysokości dla znaków jest tak istotny. Do edycji polecam Paint.net, chociaż możecie korzystać z czego chcecie i w czym wam się pracuje najwygodniej. Tutaj mówię o przypadku programu graficznego obsługującego warstwy.<br />
<br />
Mając przygotowany plik, pora przygotować sobie zestaw znaków. Polecam użyć poniższego:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>0123456789 ABCDEFGHIJKLMNOPRSTUWYZXQV abcdefghijklmnoprstuwyzxqv !?:;.,%^&amp;*()-_'"/&#92;&lt;&gt;+ ÄÖÜäöüß ĄĆĘŁŃÓŚŻŹ ąćęłńóśżź</code></div></div><br />
Możemy podejść do tego na 2 sposoby - albo zrobić kilka linijek znaków, albo zrobić jedną długą linijkę ze wszystkimi znakami. Polecam zostawić rezerwę miejsca na wypadek gdybyście kiedyś chcieli dodać jakiś dziwny znak, bo będziecie mieli taki kaprys.<br />
<br />
<img src="https://i.imgur.com/XK7YB8o.png" loading="lazy"  alt="[Obrazek: XK7YB8o.png]" class="mycode_img" /><br />
Jak widać na załączonym obrazku, wysokość naszej bitmapy niekoniecznie musi oznaczać wysokość tekstu który wpisujemy. Musimy mieć na uwadze znaki szczególne takie jak Ą czy Ć, które będą wykorzystywać więcej marginesu górnego/dolnego niż pozostałe znaki. <br />
<br />
<img src="https://i.imgur.com/W6W2uLQ.png" loading="lazy"  alt="[Obrazek: W6W2uLQ.png]" class="mycode_img" /><br />
Następnie na warstwie pod czcionką ale nad niebieskim tłem, wyznaczamy obszary dla znaków. Musi się on pokrywać na szerokość znaków. Odstępami między znakami w OMSI się nie przejmujcie, ponieważ to rozwiąże plik .oft . W przypadku gdyby jakieś znaki były 'sklejone ze sobą', to przesuńcie dalszą część znaków o 1-2 pixele w bok, aby zachować odstęp między 'czarnymi' polami.<br />
<br />
<img src="https://i.imgur.com/gtQZShl.png" loading="lazy"  alt="[Obrazek: gtQZShl.png]" class="mycode_img" /><br />
Mając gotową bitmapę, zapisujemy ją jako 24-bitową.<br />
<br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Pliki .oft </span></span><br />
<br />
Pliki te mówią OMSI gdzie znajduje się jaki znak, ich wysokości, odstępy i nazwę.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[newfont] &lt;- Nagłówek pliku .oft <br />
Moj_super_font &lt;- nazwa fontu którą później wpisujemy w plikach modeli<br />
Moj_super_font_bitmapa.bmp &lt;- nazwa bitmapy<br />
Moj_super_font_bitmapa.bmp &lt;- nazwa bitmapy od alphy, ale to jest zagmatawne, wpiszcie to samo<br />
16 &lt;- wysokość znaków w pixelach (nie mylić z wys. bitmapy!)<br />
1 &lt;- odległość pomiędzy znakami w pixelach<br />
<br />
[char] &lt;- nagłówek dla wpisu kolejnego znaku<br />
0 &lt;- dany znak<br />
9 &lt;- koordynaty X początku znaku (idąc prawo tym większe)<br />
16 &lt;- koordynaty X końca znaku<br />
1 &lt;- koordynat Z znaku (góra-dół)<br />
<br />
[char]<br />
1<br />
17<br />
21<br />
1</code></div></div><br />
Obrazując o co chodzi z koordynatami:<br />
<img src="https://i.imgur.com/XQvAK0v.png" loading="lazy"  alt="[Obrazek: XQvAK0v.png]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Alternatywnie można użyć tej strony</span> <a href="http://www.omsi-tools.appspot.com/tools/oft-generator" target="_blank" rel="noopener" class="mycode_url">LINK</a> która je dla nas wygeneruje, ale trzeba mieć na uwadze to że wysokość znaku utnie, oraz że czasami potrafi dostać padaczki przy większych plikach, oraz jak jest kilka linijek ze znakami. Trzeba robić 'po linijce', ale nie zmieniając wysokości bitmapy. Ergo zakryć inne linijki niż ta którą obecnie chcemy żeby ta strona nam zmapowała.<br />
<br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Struktura modelu 3D</span></span><br />
<br />
Aby tekst nam się gdzieś pojawił, musi mieć się na czym pojawić. <br />
<br />
<img src="https://i.imgur.com/rFkctYo.png" loading="lazy"  alt="[Obrazek: rFkctYo.png]" class="mycode_img" /><br />
<br />
Mając nas wymarzony plane na którym chcemy żeby pojawiały się jakieś bzdury, musimy go zmapować oraz dać mu odpowiedni materiał z teksturą. Nie będę się do tego zagłębiał tutaj, bo tu trzeba znać podstawy blendera lub innego programu do edycji 3D którego używacie.<br />
<br />
Teraz tak, żeby odpowiednio to potem wpisać w model.cfg/.sco, polecam zrobić sobie screena naszego plane'a tak aby mieć go na wprost od kamery. Następnie ucinamy screen do samej planszy. Rozdzielczość tego co nam zostało, to mamy współczynnik proporcji. Jak jesteście leniwi jak ja, to zmieńcie sobie jego rozdzielczość do takiej jaką mamy w wysokości fontu jaki chcemy użyć (załóżmy 50 pikseli). W tym wypadku wychodzi nam 191 na 50 pikseli. To będzie rozdzielczość którą wpiszemy w konfiguracji modelu.<br />
<br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Wpisy w model.cfg / obiekt.sco</span></span><br />
<br />
Wpisy gdzieś u góry w model.cfg:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>makdolan &lt;- dowolny tekst, możemy sobie tu wpisać własne notatki<br />
1 &lt;- nie obowiązkowe, indeksowanie texttexture, polecam aby wiedzieć co mamy wpisać potem przy modelu, liczymy od 0<br />
[texttexture_enh] &lt;- nagłówek<br />
Gorba_Text &lt;- nazwa zmiennej string / w plikach scenerii .sco może tu być wpisane 0, 1, 2 itd.<br />
Sobol_Gorba_LCD_Breit &lt;- nazwa fontu<br />
1536 &lt;- rozdzielczość X (szerokość)<br />
110 &lt;- rozdzielczość Z (wysokość)<br />
0 &lt;- zostawcie to na 0<br />
208 &lt;- kolor R (czerwony)<br />
219 &lt;- kolor G (zielony)<br />
0 &lt;- kolor B (niebieski)<br />
0 &lt;- Orientacja 0 wyśrodkowany / 1 do lewej / 2 do prawej<br />
0 &lt;- coś tam o siatce ale to zostawcie na 0</code></div></div><br />
Wpisy dla naszego modelu .o3d:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[mesh]<br />
Moj_plane_z_bzdurami.o3d<br />
<br />
[matl]<br />
textfeld.tga &lt;- nazwa tekstury ustawionej w materiale<br />
0 &lt;- indeks materiału z tą nazwą tekstury<br />
<br />
[matl_alpha] &lt;- ustawia przeźroczystość<br />
2<br />
<br />
[useTextTexture] &lt;- ustawia, że to jest mesh z tekstem<br />
1 &lt;- indeks texttextre liczony od 0</code></div></div><br />
W przypadku pojazdów i obiektów scenerii wygląda to tak samo.<br />
<br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Uwaga odnośnie zmiennych string</span></span><br />
<br />
Podstawową podstawą podstawy - miejcie poprawnie przypisany plik stringvarlist.txt! W nim musi się znaleźć nazwa tego co wpisaliśmy wcześniej w texttexture. W plikach scenerii można wpisać 0.]]></description>
			<content:encoded><![CDATA[Nie wiem czy już taki poradnik istnieje, ale postanowiłem napisać własny.<br />
<br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Textfeldy</span></span><br />
<br />
z niemieckiego <span style="font-style: italic;" class="mycode_i">pola tekstowe</span> - służą do wyświetlania zmiennego tekstu. Nie ma zbyt wielu różnić między tekstem na obiektach scenerii a tych w pojazdach. Jedno i drugie, może być kontrolowane przez skrypt, przy czym w obiektach scenerii możemy wpisać sobie w obiekt co ma na nim być, np nazwa przystanku czy ulicy. Po pierwsze, to od czego musimy zacząć to dobrać odpowiedni <span style="font-weight: bold;" class="mycode_b">font</span>.<br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Font</span></span><br />
<br />
inaczej czcionka dla mówiących mniej cool młodzieżowo. OMSI ma podfolder <span style="text-decoration: underline;" class="mycode_u">Fonts</span> w którym możemy znaleźć wszystkie dostępne dla OMSI fonty, tak jak wskazuje nazwa. Font w OMSI składa się z 2 plików - .oft i .bmp. Plik <span style="text-decoration: underline;" class="mycode_u">.oft</span> jest plikiem konfiguracyjnym fontu, gdzie wyznaczone są koordynaty wszystkich znaków, jakie są odległości między znakami w pixelach, jego nazwę oraz nazwę pliku bitmapy. Plik <span style="text-decoration: underline;" class="mycode_u">.bmp</span> jest bitmapą gdzie mamy zapisane wszystkie dostępne znaki dla danego fontu. Nie muszą to być koniecznie znaki ABCDE, bo można tu zrobić nawet jakieś szlaczki. Ważnym jest, aby zgadzały się koordynaty, oraz żeby nie dublowały się znaki, jak i również żeby nie było spacji za znakami. Ostatnią istotną rzeczą jest to, żeby plik .bmp był zapisany jako 24-bitowy, inaczej OMSI nie odczyta poprawnie fontu. Mając to za sobą, przejdźmy do struktury plików fontów i spójrzmy na nie dokładnie. To ważne, aby zrozumieć jak najlepiej robić własne fonty.<br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Pliki .bmp</span></span><br />
<br />
24-Bitowe bitmapy zawierające 'mapę' wszystkich znaków dla danego fontu, lub fontów. Na jednej bitmapie możemy mieć zmapowanych kilka różnych fontów, co polecam robić, jeżeli mówimy o fontach na matrixy. <br />
<br />
Przykładowe bitmapy wyglądają tak:<br />
<img src="https://i.imgur.com/RBzrr2N.png" loading="lazy"  alt="[Obrazek: RBzrr2N.png]" class="mycode_img" /><br />
<img src="https://i.imgur.com/3S361GY.png" loading="lazy"  alt="[Obrazek: 3S361GY.png]" class="mycode_img" /><br />
<br />
Kolor niebieski (R:0 G:0 B:255 / HEX 0000FF) wyznacza obszar który nie jest używany do mapowania znaków, ułatwia to pracę w przypadku gdy mapujemy plik .oft ręcznie. Zacznim zaczniemy, w przypadku gdy robimy zwykły font pokroju Ariala, NIGDY, podkreślam <span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">N I G D Y</span></span> nie używajcie zbyt dużego rozmiaru czcionki. Według mnie, optymalnym jest całkowity rozmiar wysokości w okolicach 40-60 pikseli. Używając większej rozdzielczości, to tekst pokroju zegarka który odświeża się co sekundę, zagwarantuje czkawkę całej gry. Ładny i ostry font brzmi fajnie na papierze. Jeżeli zrobicie zbyt duży font i zorientujecie się że powoduje on problemy z wydajnością, to całą pracę trzeba wykonać de facto od nowa. Dlatego sam fakt dobrania odpowiedniej wysokości dla znaków jest tak istotny. Do edycji polecam Paint.net, chociaż możecie korzystać z czego chcecie i w czym wam się pracuje najwygodniej. Tutaj mówię o przypadku programu graficznego obsługującego warstwy.<br />
<br />
Mając przygotowany plik, pora przygotować sobie zestaw znaków. Polecam użyć poniższego:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>0123456789 ABCDEFGHIJKLMNOPRSTUWYZXQV abcdefghijklmnoprstuwyzxqv !?:;.,%^&amp;*()-_'"/&#92;&lt;&gt;+ ÄÖÜäöüß ĄĆĘŁŃÓŚŻŹ ąćęłńóśżź</code></div></div><br />
Możemy podejść do tego na 2 sposoby - albo zrobić kilka linijek znaków, albo zrobić jedną długą linijkę ze wszystkimi znakami. Polecam zostawić rezerwę miejsca na wypadek gdybyście kiedyś chcieli dodać jakiś dziwny znak, bo będziecie mieli taki kaprys.<br />
<br />
<img src="https://i.imgur.com/XK7YB8o.png" loading="lazy"  alt="[Obrazek: XK7YB8o.png]" class="mycode_img" /><br />
Jak widać na załączonym obrazku, wysokość naszej bitmapy niekoniecznie musi oznaczać wysokość tekstu który wpisujemy. Musimy mieć na uwadze znaki szczególne takie jak Ą czy Ć, które będą wykorzystywać więcej marginesu górnego/dolnego niż pozostałe znaki. <br />
<br />
<img src="https://i.imgur.com/W6W2uLQ.png" loading="lazy"  alt="[Obrazek: W6W2uLQ.png]" class="mycode_img" /><br />
Następnie na warstwie pod czcionką ale nad niebieskim tłem, wyznaczamy obszary dla znaków. Musi się on pokrywać na szerokość znaków. Odstępami między znakami w OMSI się nie przejmujcie, ponieważ to rozwiąże plik .oft . W przypadku gdyby jakieś znaki były 'sklejone ze sobą', to przesuńcie dalszą część znaków o 1-2 pixele w bok, aby zachować odstęp między 'czarnymi' polami.<br />
<br />
<img src="https://i.imgur.com/gtQZShl.png" loading="lazy"  alt="[Obrazek: gtQZShl.png]" class="mycode_img" /><br />
Mając gotową bitmapę, zapisujemy ją jako 24-bitową.<br />
<br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Pliki .oft </span></span><br />
<br />
Pliki te mówią OMSI gdzie znajduje się jaki znak, ich wysokości, odstępy i nazwę.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[newfont] &lt;- Nagłówek pliku .oft <br />
Moj_super_font &lt;- nazwa fontu którą później wpisujemy w plikach modeli<br />
Moj_super_font_bitmapa.bmp &lt;- nazwa bitmapy<br />
Moj_super_font_bitmapa.bmp &lt;- nazwa bitmapy od alphy, ale to jest zagmatawne, wpiszcie to samo<br />
16 &lt;- wysokość znaków w pixelach (nie mylić z wys. bitmapy!)<br />
1 &lt;- odległość pomiędzy znakami w pixelach<br />
<br />
[char] &lt;- nagłówek dla wpisu kolejnego znaku<br />
0 &lt;- dany znak<br />
9 &lt;- koordynaty X początku znaku (idąc prawo tym większe)<br />
16 &lt;- koordynaty X końca znaku<br />
1 &lt;- koordynat Z znaku (góra-dół)<br />
<br />
[char]<br />
1<br />
17<br />
21<br />
1</code></div></div><br />
Obrazując o co chodzi z koordynatami:<br />
<img src="https://i.imgur.com/XQvAK0v.png" loading="lazy"  alt="[Obrazek: XQvAK0v.png]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Alternatywnie można użyć tej strony</span> <a href="http://www.omsi-tools.appspot.com/tools/oft-generator" target="_blank" rel="noopener" class="mycode_url">LINK</a> która je dla nas wygeneruje, ale trzeba mieć na uwadze to że wysokość znaku utnie, oraz że czasami potrafi dostać padaczki przy większych plikach, oraz jak jest kilka linijek ze znakami. Trzeba robić 'po linijce', ale nie zmieniając wysokości bitmapy. Ergo zakryć inne linijki niż ta którą obecnie chcemy żeby ta strona nam zmapowała.<br />
<br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Struktura modelu 3D</span></span><br />
<br />
Aby tekst nam się gdzieś pojawił, musi mieć się na czym pojawić. <br />
<br />
<img src="https://i.imgur.com/rFkctYo.png" loading="lazy"  alt="[Obrazek: rFkctYo.png]" class="mycode_img" /><br />
<br />
Mając nas wymarzony plane na którym chcemy żeby pojawiały się jakieś bzdury, musimy go zmapować oraz dać mu odpowiedni materiał z teksturą. Nie będę się do tego zagłębiał tutaj, bo tu trzeba znać podstawy blendera lub innego programu do edycji 3D którego używacie.<br />
<br />
Teraz tak, żeby odpowiednio to potem wpisać w model.cfg/.sco, polecam zrobić sobie screena naszego plane'a tak aby mieć go na wprost od kamery. Następnie ucinamy screen do samej planszy. Rozdzielczość tego co nam zostało, to mamy współczynnik proporcji. Jak jesteście leniwi jak ja, to zmieńcie sobie jego rozdzielczość do takiej jaką mamy w wysokości fontu jaki chcemy użyć (załóżmy 50 pikseli). W tym wypadku wychodzi nam 191 na 50 pikseli. To będzie rozdzielczość którą wpiszemy w konfiguracji modelu.<br />
<br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Wpisy w model.cfg / obiekt.sco</span></span><br />
<br />
Wpisy gdzieś u góry w model.cfg:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>makdolan &lt;- dowolny tekst, możemy sobie tu wpisać własne notatki<br />
1 &lt;- nie obowiązkowe, indeksowanie texttexture, polecam aby wiedzieć co mamy wpisać potem przy modelu, liczymy od 0<br />
[texttexture_enh] &lt;- nagłówek<br />
Gorba_Text &lt;- nazwa zmiennej string / w plikach scenerii .sco może tu być wpisane 0, 1, 2 itd.<br />
Sobol_Gorba_LCD_Breit &lt;- nazwa fontu<br />
1536 &lt;- rozdzielczość X (szerokość)<br />
110 &lt;- rozdzielczość Z (wysokość)<br />
0 &lt;- zostawcie to na 0<br />
208 &lt;- kolor R (czerwony)<br />
219 &lt;- kolor G (zielony)<br />
0 &lt;- kolor B (niebieski)<br />
0 &lt;- Orientacja 0 wyśrodkowany / 1 do lewej / 2 do prawej<br />
0 &lt;- coś tam o siatce ale to zostawcie na 0</code></div></div><br />
Wpisy dla naszego modelu .o3d:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[mesh]<br />
Moj_plane_z_bzdurami.o3d<br />
<br />
[matl]<br />
textfeld.tga &lt;- nazwa tekstury ustawionej w materiale<br />
0 &lt;- indeks materiału z tą nazwą tekstury<br />
<br />
[matl_alpha] &lt;- ustawia przeźroczystość<br />
2<br />
<br />
[useTextTexture] &lt;- ustawia, że to jest mesh z tekstem<br />
1 &lt;- indeks texttextre liczony od 0</code></div></div><br />
W przypadku pojazdów i obiektów scenerii wygląda to tak samo.<br />
<br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Uwaga odnośnie zmiennych string</span></span><br />
<br />
Podstawową podstawą podstawy - miejcie poprawnie przypisany plik stringvarlist.txt! W nim musi się znaleźć nazwa tego co wpisaliśmy wcześniej w texttexture. W plikach scenerii można wpisać 0.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Dykty (SteckSchilder) - działa czy nie działa?]]></title>
			<link>https://strefa-omsi.pl/Watek-OMSI-2-Dykty-SteckSchilder-dziala-czy-nie-dziala--29891</link>
			<pubDate>Wed, 02 Apr 2025 09:57:39 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://strefa-omsi.pl/member.php?action=profile&uid=62874">Sobol3D</a>]]></dc:creator>
			<guid isPermaLink="false">https://strefa-omsi.pl/Watek-OMSI-2-Dykty-SteckSchilder-dziala-czy-nie-dziala--29891</guid>
			<description><![CDATA[Ostatnio podczas zabawy funkcją SteckSchilder odkryłem to, co wszyscy którzy chcieli się bawić w dodawanie dykt do hofu - nie działa.<br />
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ć.<br />
<br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Ustawienie dykt w hofie</span></span><br />
Aby ustawić dykty w pliku .hof (mówię to na podstawie notatek z hofu grundorfu) należy ustawić odpowiednią liczbę w <span style="font-style: italic;" class="mycode_i">stringcount_terminus</span> oraz ewentualnie zdefiniować podfolder w <span style="font-style: italic;" class="mycode_i">Anzeigen/SteckSchilder</span>, 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].<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[addterminus]<br />
001<br />
PKS WEGLIN<br />
PKS WEGLIN<br />
PKS WEGLIN<br />
<br />
PKS WEGLIN<br />
<br />
PKS WEGLIN<br />
2_001.bmp &lt;- w tej linijce znajduje się wpis do dykty</code></div></div><br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. no dobra, ale to nie działa</span></span><br />
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.<br />
<br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. jak skutecznie to naprawić?</span></span><br />
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.<br />
<br />
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.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>{trigger:dykta_mouseevent}<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.dykta_vis) ! (S.L.dykta_vis)<br />
{end}</code></div></div><br />
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.<br />
Wpisy w <span style="font-weight: bold;" class="mycode_b">script.osc</span>:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>&nbsp;&nbsp;&nbsp;&nbsp;(L.L.AI_target_index) (L.L.dykta_Termindex) = !<br />
&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(L.L.AI_target_index) s0<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l0 6 (M.V.GetTerminusString) (S.&#36;.Dykta_terminus)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2 (M.V.GetDepotStringGlobal) (S.&#36;.Dykta_global)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(L.&#36;.Dykta_global) "" &#36;= !<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(L.&#36;.Dykta_global) "&#92;" &#36;+ (S.&#36;.Dykta_global)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{endif}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(L.L.dykta_Termindex) s0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 &gt;= <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"..&#92;..&#92;Anzeigen&#92;SteckSchilder&#92;" (L.&#36;.Dykta_global) &#36;+ (L.&#36;.Dykta_terminus) &#36;+ (S.&#36;.Dykta_string)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;""&nbsp;&nbsp;(S.&#36;.Dykta_string)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{endif}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l0 (S.L.dykta_Termindex)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{endif}</code></div></div><br />
Do pliku <span style="font-weight: bold;" class="mycode_b">stringvarlist.txt</span> do dowolnego zaczytywanego skryptu należy dopisać te linijki:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>Dykta_global<br />
Dykta_string<br />
Dykta_terminus</code></div></div><br />
Do pliku <span style="font-weight: bold;" class="mycode_b">varlist.txt</span> do dowolnego zaczytywanego skryptu należy dopisać te linijki:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>dykta_Termindex<br />
dykta_vis</code></div></div><br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. modele 3D i tekstury</span></span><br />
Mając tak przygotowane skrypty, należy przygotować modele 3D.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://strefa-omsi.pl/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=3883" target="_blank" title="">Dykta.zip</a> (Rozmiar: 465.71 KB / Pobrań: 18)
<!-- end: postbit_attachments_attachment --><br />
<br />
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.<br />
<br />
Obszar dla przodu dykty to ten zaznaczony na pomarańczowo:<br />
<img src="https://i.imgur.com/LYcI5kg.png" loading="lazy"  alt="[Obrazek: LYcI5kg.png]" class="mycode_img" /><br />
<br />
Przykładowe ustawienie modeli 'schowanych' dykt:<br />
<img src="https://i.imgur.com/3WISYKB.png" loading="lazy"  alt="[Obrazek: 3WISYKB.png]" class="mycode_img" /><br />
<br />
Przykładowe ustawienie modeli 'włożonych' dykt:<br />
<img src="https://i.imgur.com/PQefKJn.png" loading="lazy"  alt="[Obrazek: PQefKJn.png]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Wpisy w pliku model:</span><br />
<br />
Opcjonalny header dla ładniejszego rozróżnienia poszczególnych sekcji w pliku model.cfg<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>###############################################################<br />
Steckschild/Dykta:<br />
###############################################################</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">ZALECANE !</span> - 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!<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[mesh]<br />
schildFrnt_hidden.o3d<br />
<br />
[visible]<br />
dykta_vis<br />
0<br />
<br />
[matl]<br />
Schild_Frnt.bmp<br />
0<br />
<br />
[matl_freetex]<br />
Schild_Frnt.bmp<br />
Dykta_string<br />
<br />
[mouseevent]<br />
dykta_mouseevent<br />
<br />
<br />
-----------------------------</code></div></div><br />
Wpisy od modelu 'włożonej' dykty, czyli tej która jest aktywna.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[mesh]<br />
schildFrnt.o3d<br />
<br />
[visible]<br />
dykta_vis<br />
1<br />
<br />
[matl]<br />
Schild_Frnt.bmp<br />
0<br />
<br />
[matl_freetex]<br />
Schild_Frnt.bmp<br />
Dykta_string<br />
<br />
[mouseevent]<br />
dykta_mouseevent<br />
<br />
-----------------------------</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">OPCJONALNE !</span> - 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.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[mesh]<br />
schildFrnt_t.o3d<br />
<br />
[mouseevent]<br />
dykta_mouseevent<br />
<br />
-----------------------------</code></div></div><br />
<hr class="mycode_hr" />
<span style="font-weight: bold;" class="mycode_b">ISTOTNA UWAGA!</span><br />
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.<br />
Dopisując te pliki pamiętajcie aby <span style="font-weight: bold;" class="mycode_b">NIE DODAWAĆ ICH NA SAMYM KOŃCU MODEL.CFG !!!</span> - 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.<br />
<br />
W razie pytań, chętnie pomogę.]]></description>
			<content:encoded><![CDATA[Ostatnio podczas zabawy funkcją SteckSchilder odkryłem to, co wszyscy którzy chcieli się bawić w dodawanie dykt do hofu - nie działa.<br />
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ć.<br />
<br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Ustawienie dykt w hofie</span></span><br />
Aby ustawić dykty w pliku .hof (mówię to na podstawie notatek z hofu grundorfu) należy ustawić odpowiednią liczbę w <span style="font-style: italic;" class="mycode_i">stringcount_terminus</span> oraz ewentualnie zdefiniować podfolder w <span style="font-style: italic;" class="mycode_i">Anzeigen/SteckSchilder</span>, 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].<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[addterminus]<br />
001<br />
PKS WEGLIN<br />
PKS WEGLIN<br />
PKS WEGLIN<br />
<br />
PKS WEGLIN<br />
<br />
PKS WEGLIN<br />
2_001.bmp &lt;- w tej linijce znajduje się wpis do dykty</code></div></div><br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. no dobra, ale to nie działa</span></span><br />
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.<br />
<br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. jak skutecznie to naprawić?</span></span><br />
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.<br />
<br />
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.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>{trigger:dykta_mouseevent}<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.dykta_vis) ! (S.L.dykta_vis)<br />
{end}</code></div></div><br />
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.<br />
Wpisy w <span style="font-weight: bold;" class="mycode_b">script.osc</span>:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>&nbsp;&nbsp;&nbsp;&nbsp;(L.L.AI_target_index) (L.L.dykta_Termindex) = !<br />
&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(L.L.AI_target_index) s0<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l0 6 (M.V.GetTerminusString) (S.&#36;.Dykta_terminus)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2 (M.V.GetDepotStringGlobal) (S.&#36;.Dykta_global)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(L.&#36;.Dykta_global) "" &#36;= !<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(L.&#36;.Dykta_global) "&#92;" &#36;+ (S.&#36;.Dykta_global)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{endif}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(L.L.dykta_Termindex) s0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 &gt;= <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"..&#92;..&#92;Anzeigen&#92;SteckSchilder&#92;" (L.&#36;.Dykta_global) &#36;+ (L.&#36;.Dykta_terminus) &#36;+ (S.&#36;.Dykta_string)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;""&nbsp;&nbsp;(S.&#36;.Dykta_string)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{endif}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l0 (S.L.dykta_Termindex)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{endif}</code></div></div><br />
Do pliku <span style="font-weight: bold;" class="mycode_b">stringvarlist.txt</span> do dowolnego zaczytywanego skryptu należy dopisać te linijki:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>Dykta_global<br />
Dykta_string<br />
Dykta_terminus</code></div></div><br />
Do pliku <span style="font-weight: bold;" class="mycode_b">varlist.txt</span> do dowolnego zaczytywanego skryptu należy dopisać te linijki:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>dykta_Termindex<br />
dykta_vis</code></div></div><br />
<hr class="mycode_hr" />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. modele 3D i tekstury</span></span><br />
Mając tak przygotowane skrypty, należy przygotować modele 3D.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://strefa-omsi.pl/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=3883" target="_blank" title="">Dykta.zip</a> (Rozmiar: 465.71 KB / Pobrań: 18)
<!-- end: postbit_attachments_attachment --><br />
<br />
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.<br />
<br />
Obszar dla przodu dykty to ten zaznaczony na pomarańczowo:<br />
<img src="https://i.imgur.com/LYcI5kg.png" loading="lazy"  alt="[Obrazek: LYcI5kg.png]" class="mycode_img" /><br />
<br />
Przykładowe ustawienie modeli 'schowanych' dykt:<br />
<img src="https://i.imgur.com/3WISYKB.png" loading="lazy"  alt="[Obrazek: 3WISYKB.png]" class="mycode_img" /><br />
<br />
Przykładowe ustawienie modeli 'włożonych' dykt:<br />
<img src="https://i.imgur.com/PQefKJn.png" loading="lazy"  alt="[Obrazek: PQefKJn.png]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Wpisy w pliku model:</span><br />
<br />
Opcjonalny header dla ładniejszego rozróżnienia poszczególnych sekcji w pliku model.cfg<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>###############################################################<br />
Steckschild/Dykta:<br />
###############################################################</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">ZALECANE !</span> - 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!<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[mesh]<br />
schildFrnt_hidden.o3d<br />
<br />
[visible]<br />
dykta_vis<br />
0<br />
<br />
[matl]<br />
Schild_Frnt.bmp<br />
0<br />
<br />
[matl_freetex]<br />
Schild_Frnt.bmp<br />
Dykta_string<br />
<br />
[mouseevent]<br />
dykta_mouseevent<br />
<br />
<br />
-----------------------------</code></div></div><br />
Wpisy od modelu 'włożonej' dykty, czyli tej która jest aktywna.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[mesh]<br />
schildFrnt.o3d<br />
<br />
[visible]<br />
dykta_vis<br />
1<br />
<br />
[matl]<br />
Schild_Frnt.bmp<br />
0<br />
<br />
[matl_freetex]<br />
Schild_Frnt.bmp<br />
Dykta_string<br />
<br />
[mouseevent]<br />
dykta_mouseevent<br />
<br />
-----------------------------</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">OPCJONALNE !</span> - 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.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[mesh]<br />
schildFrnt_t.o3d<br />
<br />
[mouseevent]<br />
dykta_mouseevent<br />
<br />
-----------------------------</code></div></div><br />
<hr class="mycode_hr" />
<span style="font-weight: bold;" class="mycode_b">ISTOTNA UWAGA!</span><br />
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.<br />
Dopisując te pliki pamiętajcie aby <span style="font-weight: bold;" class="mycode_b">NIE DODAWAĆ ICH NA SAMYM KOŃCU MODEL.CFG !!!</span> - 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.<br />
<br />
W razie pytań, chętnie pomogę.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Możliwe przyczyny źle działającego autobusu w OMSI]]></title>
			<link>https://strefa-omsi.pl/Watek-Mozliwe-przyczyny-zle-dzialajacego-autobusu-w-OMSI--29514</link>
			<pubDate>Sat, 05 Oct 2024 07:10:04 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://strefa-omsi.pl/member.php?action=profile&uid=62874">Sobol3D</a>]]></dc:creator>
			<guid isPermaLink="false">https://strefa-omsi.pl/Watek-Mozliwe-przyczyny-zle-dzialajacego-autobusu-w-OMSI--29514</guid>
			<description><![CDATA[Krótki wątek dla osób które bawią się w modowanie/tworzenie pojazdów i zastanawiają się dlaczego po zmianie paru rzeczy w modelu OMSI świruje.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Autobus w ogóle się nie respi - widać samego kierowcę</span><br />
Możliwymi przyczynami takiego stanu rzeczy mogą być błędnie wyeksportowane pliki .o3d, lub (najczęściej) wpisy [matl] + [matl_change] odwołujące się do nie istniejącej tekstury<br />
Sprawdź przypisane materiały w obiekcie, upewnij się czy nie ma żadnych literówek na tym etapie. Ewentualnie wyeksportuj plik ponownie, dla pewności. Następnie sprawdź poprawność wpisów [matl], [matl_change], [matl_nightmap] itp. Tutaj też nie mogą występować żadne literówki.<br />
Kolejną opcją może być brak zmiennej w varlistach. Logfile powie tylko o tym drugim, z pierwszym log nic nie pokaże.<br />
Ostateczną opcją jest błąd w składni skryptów.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Autobus się respi, ale jest wybrakowany</span><br />
Najprawdopodobniej w model.cfg jest wpis odwołujący się do nie istniejącego pliku .o3d, lub gdzieś wpisy konfigurujące model są błędnie zapisane. W większości przypadków log wskaże konkretną linijkę.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Ekrany nie działają</span><br />
Brakujący wpis w stringvarliście.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tekst pojawia się nie tam gdzie powinien</span><br />
Pomieszała się kolejność [texttexture_enh]/[texttexture]. Sprawdź wszystkie te wpisy, następnie sprawdź czy wszystkie [usetexttexture] odwołują się do właściwego ID texttexture. Pamiętaj, że ID liczymy od 0.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Białe tekstury</span><br />
Możliwości są dwie. Albo brak 4gb patcha - zapchanie pamięci, albo brak tekstury. O drugim powie log.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Czarne tekstury, ale z bliska się pojawiają</span><br />
Upierdliwy problem silnika OMSI. Rozwiązaniem są tekstury w innym formacie niż .PNG, większość poleca .DDS, ale kompresja DDS potrafi zepsuć mocno jakość tekstur. Ja polecam .TGA.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Pasażerowie nie wsiadają pomimo odpowiedniego kierunku na matrixach</span><br />
Błąd w passengercabin lub paths.cfg. Zweryfikuj, czy aby na pewno żaden pathlink nie odwołuje się do nie istniejącego ID ścieżki.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Zmodowałem animowany model X, ale dziwnie się on animuje po ponowym eksporcie</span><br />
Sprawdź zapis [newanim]. Jeżeli jest tam origin_from_mesh, to musisz ustawić osie w modelu w blenderze. Domyślnie OMSI animuje modele wg osi X.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Wraz z animacją poruszają mi się wszystkie światła</span><br />
Ostatni wpis [mesh] nie może być animowany. [light_enh]/[light_enh_2] animuje się razem z obiektem, w pewnych okolicznościach jest to pożądane, ale czasami robi to cyrk.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Obiekty znikają za szybami, lub przez szyby dziwnie widać obiekty</span><br />
Jeżeli dodajesz jakieś obiekty, to nie powinny być one na samym końcu model.cfg. Kolejność renderowania jest taka, że silnik OMSI renderuje najpierw to co jest u góry w modelu, a to co na końcu później. Jeżeli użyjesz złej kolejności wpisów, to przez szyby może być nie widać co jest w środku. Dlatego kolejność jest taka, aby szyby były ostatnim wpisem w model.cfg (poza innymi wpisami typu light_enh, spotlight itd.). W drugim wypadku jest zła konfiguracja wpisów [matl_noZcheck]/[matl_noZwrite]. Ale jest to generalnie tak czarna magia, że tego to nawet tybetańscy mnichowie nie rozumieją.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Dodałem płotek, ale dziwnie się on zachowuje</span><br />
<span style="text-decoration: line-through;" class="mycode_s">Funkcja <span style="font-style: italic;" class="mycode_i">GetHumanCountOnPathLink</span> jest zbugowana i nie działa poprawnie. Niestety, ale nie da się dodać poprawnie działającego płotka.</span><br />
Funkcja w/w działa, ale nie jeżeli chcemy sprawdzić pathlink z indeksem 0.]]></description>
			<content:encoded><![CDATA[Krótki wątek dla osób które bawią się w modowanie/tworzenie pojazdów i zastanawiają się dlaczego po zmianie paru rzeczy w modelu OMSI świruje.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Autobus w ogóle się nie respi - widać samego kierowcę</span><br />
Możliwymi przyczynami takiego stanu rzeczy mogą być błędnie wyeksportowane pliki .o3d, lub (najczęściej) wpisy [matl] + [matl_change] odwołujące się do nie istniejącej tekstury<br />
Sprawdź przypisane materiały w obiekcie, upewnij się czy nie ma żadnych literówek na tym etapie. Ewentualnie wyeksportuj plik ponownie, dla pewności. Następnie sprawdź poprawność wpisów [matl], [matl_change], [matl_nightmap] itp. Tutaj też nie mogą występować żadne literówki.<br />
Kolejną opcją może być brak zmiennej w varlistach. Logfile powie tylko o tym drugim, z pierwszym log nic nie pokaże.<br />
Ostateczną opcją jest błąd w składni skryptów.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Autobus się respi, ale jest wybrakowany</span><br />
Najprawdopodobniej w model.cfg jest wpis odwołujący się do nie istniejącego pliku .o3d, lub gdzieś wpisy konfigurujące model są błędnie zapisane. W większości przypadków log wskaże konkretną linijkę.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Ekrany nie działają</span><br />
Brakujący wpis w stringvarliście.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tekst pojawia się nie tam gdzie powinien</span><br />
Pomieszała się kolejność [texttexture_enh]/[texttexture]. Sprawdź wszystkie te wpisy, następnie sprawdź czy wszystkie [usetexttexture] odwołują się do właściwego ID texttexture. Pamiętaj, że ID liczymy od 0.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Białe tekstury</span><br />
Możliwości są dwie. Albo brak 4gb patcha - zapchanie pamięci, albo brak tekstury. O drugim powie log.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Czarne tekstury, ale z bliska się pojawiają</span><br />
Upierdliwy problem silnika OMSI. Rozwiązaniem są tekstury w innym formacie niż .PNG, większość poleca .DDS, ale kompresja DDS potrafi zepsuć mocno jakość tekstur. Ja polecam .TGA.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Pasażerowie nie wsiadają pomimo odpowiedniego kierunku na matrixach</span><br />
Błąd w passengercabin lub paths.cfg. Zweryfikuj, czy aby na pewno żaden pathlink nie odwołuje się do nie istniejącego ID ścieżki.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Zmodowałem animowany model X, ale dziwnie się on animuje po ponowym eksporcie</span><br />
Sprawdź zapis [newanim]. Jeżeli jest tam origin_from_mesh, to musisz ustawić osie w modelu w blenderze. Domyślnie OMSI animuje modele wg osi X.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Wraz z animacją poruszają mi się wszystkie światła</span><br />
Ostatni wpis [mesh] nie może być animowany. [light_enh]/[light_enh_2] animuje się razem z obiektem, w pewnych okolicznościach jest to pożądane, ale czasami robi to cyrk.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Obiekty znikają za szybami, lub przez szyby dziwnie widać obiekty</span><br />
Jeżeli dodajesz jakieś obiekty, to nie powinny być one na samym końcu model.cfg. Kolejność renderowania jest taka, że silnik OMSI renderuje najpierw to co jest u góry w modelu, a to co na końcu później. Jeżeli użyjesz złej kolejności wpisów, to przez szyby może być nie widać co jest w środku. Dlatego kolejność jest taka, aby szyby były ostatnim wpisem w model.cfg (poza innymi wpisami typu light_enh, spotlight itd.). W drugim wypadku jest zła konfiguracja wpisów [matl_noZcheck]/[matl_noZwrite]. Ale jest to generalnie tak czarna magia, że tego to nawet tybetańscy mnichowie nie rozumieją.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Dodałem płotek, ale dziwnie się on zachowuje</span><br />
<span style="text-decoration: line-through;" class="mycode_s">Funkcja <span style="font-style: italic;" class="mycode_i">GetHumanCountOnPathLink</span> jest zbugowana i nie działa poprawnie. Niestety, ale nie da się dodać poprawnie działającego płotka.</span><br />
Funkcja w/w działa, ale nie jeżeli chcemy sprawdzić pathlink z indeksem 0.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Zmiana masy własnej pojazdu]]></title>
			<link>https://strefa-omsi.pl/Watek-Zmiana-masy-wlasnej-pojazdu--17355</link>
			<pubDate>Mon, 31 Oct 2016 09:31:09 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://strefa-omsi.pl/member.php?action=profile&uid=20383">jakubbialek2</a>]]></dc:creator>
			<guid isPermaLink="false">https://strefa-omsi.pl/Watek-Zmiana-masy-wlasnej-pojazdu--17355</guid>
			<description><![CDATA[Witam wszystkich.<br />
Na pewno denerwuje was fakt, iż na FS na linii 159 czy 259 nie możecie podjechać niektórymi wozami pod górę.<br />
Nie jest to trudno zmienić, ale dla "niedowiarków" zawsze się przyda. :p<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Modyfikacja</span>: Zmiana masy własnej pojazdu<br />
<span style="font-weight: bold;" class="mycode_b">Autor</span>: jakubbialek2<br />
<br />
Zatem wchodzimy w plik <span style="font-weight: bold;" class="mycode_b">.bus</span> autobusu, którym chcemy wyjechać.<br />
Ja posłużę się MANem NG312.<br />
<br />
Odnajdujemy w pliku wpis:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[mass]<br />
8</code></div></div><br />
i zmieniamy na dowolną (najlepiej mniejszą jeżeli chcemy jeździć pod górę) masę.<br />
<br />
Ja na przykład wybrałem taką:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[mass]<br />
5</code></div></div><br />
Zapisujemy.<br />
<br />
W pliku tylnej części autobusu (zazwyczaj oznacza się ze słowem "trail") odnajdujemy taki sam wpis, ale nie jest to już taka bułka z masłem. Żeby autobus poprawnie się zachowywał należy wykonać obliczenie:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[mass] z pliku "tyłu" * (Masa wprowadzona z przodu / Masa przed wprowadzeniem (również z przodu)</code></div></div><br />
(* - razy ; / - dzielone przez)<br />
<br />
Po wykonaniu takiego obliczenia w moim MANie wychodzi (masa w tyle wynosi na początku <span style="font-weight: bold;" class="mycode_b">7.2</span>):<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>7.2 * (5/8) = 7.2 * 0.625 = 4.5</code></div></div><br />
I wynik wpisujemy pod [mass]:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[mass]<br />
4.5</code></div></div><br />
Zapisujemy i jedziemy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">UWAGA!!!</span> Ważne jest, żeby wóz nie był za lekki, ponieważ będzie wam podskakiwał i nie przestanie. Wóz też nie może być za ciężki ponieważ nie ruszy wam z miejsca.]]></description>
			<content:encoded><![CDATA[Witam wszystkich.<br />
Na pewno denerwuje was fakt, iż na FS na linii 159 czy 259 nie możecie podjechać niektórymi wozami pod górę.<br />
Nie jest to trudno zmienić, ale dla "niedowiarków" zawsze się przyda. :p<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Modyfikacja</span>: Zmiana masy własnej pojazdu<br />
<span style="font-weight: bold;" class="mycode_b">Autor</span>: jakubbialek2<br />
<br />
Zatem wchodzimy w plik <span style="font-weight: bold;" class="mycode_b">.bus</span> autobusu, którym chcemy wyjechać.<br />
Ja posłużę się MANem NG312.<br />
<br />
Odnajdujemy w pliku wpis:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[mass]<br />
8</code></div></div><br />
i zmieniamy na dowolną (najlepiej mniejszą jeżeli chcemy jeździć pod górę) masę.<br />
<br />
Ja na przykład wybrałem taką:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[mass]<br />
5</code></div></div><br />
Zapisujemy.<br />
<br />
W pliku tylnej części autobusu (zazwyczaj oznacza się ze słowem "trail") odnajdujemy taki sam wpis, ale nie jest to już taka bułka z masłem. Żeby autobus poprawnie się zachowywał należy wykonać obliczenie:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[mass] z pliku "tyłu" * (Masa wprowadzona z przodu / Masa przed wprowadzeniem (również z przodu)</code></div></div><br />
(* - razy ; / - dzielone przez)<br />
<br />
Po wykonaniu takiego obliczenia w moim MANie wychodzi (masa w tyle wynosi na początku <span style="font-weight: bold;" class="mycode_b">7.2</span>):<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>7.2 * (5/8) = 7.2 * 0.625 = 4.5</code></div></div><br />
I wynik wpisujemy pod [mass]:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[mass]<br />
4.5</code></div></div><br />
Zapisujemy i jedziemy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">UWAGA!!!</span> Ważne jest, żeby wóz nie był za lekki, ponieważ będzie wam podskakiwał i nie przestanie. Wóz też nie może być za ciężki ponieważ nie ruszy wam z miejsca.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Zmiana prędkości drzwi w dowolnym autobusie.]]></title>
			<link>https://strefa-omsi.pl/Watek-OMSI-1-2-Zmiana-predkosci-drzwi-w-dowolnym-autobusie--14135</link>
			<pubDate>Fri, 25 Mar 2016 19:02:55 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://strefa-omsi.pl/member.php?action=profile&uid=12898">Filop</a>]]></dc:creator>
			<guid isPermaLink="false">https://strefa-omsi.pl/Watek-OMSI-1-2-Zmiana-predkosci-drzwi-w-dowolnym-autobusie--14135</guid>
			<description><![CDATA[Witam, postanowiłem napisać ten poradnik dla innych gdyż sam się z tym męczyłem. <br />
Za przykład wziąłem niedawno wydaną Setrę S 319 UL. Oczywiście można to zrobić w każdym innym pojeździe, ponieważ skrypty się znacząco nie różnią, jednak nie wiem jak będzie w przypadku pojazdów 3-drzwiowych.<br />
<br />
Więc rozpoczynamy! <br />
Otwieramy plik "door_constfile" znajdujący w folderze "Script" danego pojazdu. <br />
<br />
Na samym początku mamy:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>Front/Back Door Acceleration (100%/s˛)<br />
<br />
[const]<br />
fdoor_acc<br />
0.5<br />
<br />
[const]<br />
bdoor_acc<br />
0.6</code></div></div>Gdzie:<br />
"fdoor_acc"- prędkość przyśpieszenia drzwi przednich <br />
"bdoor_acc"- prędkość przyśpieszenia drzwi tylnych<br />
<span style="font-weight: bold;" class="mycode_b">Uwaga! Wszystkie wartości są w %/s</span><br />
<br />
2. Określenie zmiany przyśpieszenia drzwi. W moim przypadku jest to 0.2.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>&nbsp;&nbsp;&nbsp;&nbsp;Door Acceleration Variation (100%/s˛)<br />
<br />
[const]<br />
door_acc_var<br />
0.2</code></div></div><br />
3.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>Front/Back Door Max Speed (100%/s)<br />
<br />
[const]<br />
fdoor_maxspeed<br />
0.75<br />
<br />
[const]<br />
bdoor_maxspeed<br />
0.8<br />
<br />
[const]<br />
door_maxspeed_var<br />
0.02</code></div></div><br />
Gdzie: <br />
"fdoor_maxspeed"- maksymalna prędkość przednich drzwi.<br />
"bdoor_maxspeed"- maksymalna prędkość drzwi znajdujących się z tyłu pojazdu.<br />
"door_maxspeed_var"- tu nie wiem o co dokładnie chodzi ale należy tutaj przepisać wartość z "door_acc_var" znajdującego się wyżej.<br />
<br />
4.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>Front/Back Door Damper (100%/s)<br />
<br />
[const]<br />
door0_damper<br />
1<br />
<br />
[const]<br />
door1_damper<br />
1<br />
<br />
[const]<br />
door2_damper<br />
1<br />
<br />
[const]<br />
door3_damper<br />
1</code></div></div><br />
Tutaj chodzi o amortyzację drzwi, 1- aktywne, 0- nieaktywne <br />
<br />
5. "Dämpferkennlinie über Öffnungzustand" to radzę pominąć i nic nie zmieniać bo drzwi się przestaną zamykać lub otwierać.<br />
<br />
6.  <div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>Door Stop Reflexion Coefficient<br />
<br />
[const]<br />
door_refl<br />
0.1</code></div></div><br />
Tutaj mamy doczynienia z zatrzymaniem odbijania drzwi. <br />
<br />
7. <br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>&nbsp;&nbsp;&nbsp;&nbsp;Automatic Back Door Time<br />
<br />
[const]<br />
doorAftOpenTime<br />
1.5</code></div></div><br />
W tym miejscu ustawiamy czas zamknięcia drzwi jeżeli nikt nie przebywa w pobliżu nich.<br />
<br />
8. <div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>Busstop Brake will only be activated belov MaxKMH:<br />
<br />
[const]<br />
Door_Bremse_Halte_MaxKMH<br />
2</code></div></div><br />
Tutaj ustawiamy sobie przy jakiej prędkości możemy wcisnąć hamulec przystankowy.<br />
<br />
9. Teraz trochę wyjaśnień. W wszystkich wymienionych tu przypadkach"<br />
0- Nie<br />
1- Tak<br />
<br />
"[const]<br />
door_needs_stopbrakeswitch<br />
0"<br />
<br />
Oznacza, że drzwi potrzebują przycisku hamulca przystankowego.<br />
<br />
"[const]<br />
electric_doors<br />
0"<br />
<br />
Elektryczne drzwi<br />
<br />
"[const]<br />
thinking_doors<br />
0" <br />
<br />
W dosłownym znaczeniu będzie to oznaczało myślące drzwi.<br />
<br />
"[const]<br />
door_blocking<br />
1"<br />
<br />
Oznacza, że drzwi mogą być blokowane.<br />
<br />
"[const]<br />
door_blocking_area<br />
0.1"<br />
<br />
Obszar blokowania drzwi.<br />
<br />
"[const]<br />
door_blocking_speed<br />
0.01"<br />
<br />
Prędkość blokowania drzwi.<br />
<br />
-------------------------------------------------------------------------------------------<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[const]<br />
door_0_hub_speed<br />
2</code></div></div><br />
Prędkość piasty drzwi.<br />
<br />
Tak idąc po kolei wszystkie drzwi od 0 do 3.<br />
<span style="font-weight: bold;" class="mycode_b">Uwaga! Podajemy w centymetrach na sekundę (cm/s)</span><br />
<br />
-------------------------------------------------------------------------------------------<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[newcurve]<br />
door_0_opn_speed<br />
<br />
[pnt]<br />
0<br />
0.1<br />
<br />
[pnt]<br />
0.2<br />
0.4<br />
<br />
<br />
[pnt]<br />
0.75<br />
0.4<br />
<br />
[pnt]<br />
0.8<br />
0.4<br />
<br />
[pnt]<br />
1<br />
0.1</code></div></div>Gdzie:<br />
<br />
"opn"- otwieranie<br />
"cls"- zamykanie<br />
<br />
Cyfry: 0, 0.2, 0.75, 0.8, 1, pokazują dziesiętną liczbę zaawansowanego otwierania drzwi. <br />
Analogicznie postępujemy z każdą połową drzwi.<br />
<br />
To wszystko, pozdrawiam, Filop.]]></description>
			<content:encoded><![CDATA[Witam, postanowiłem napisać ten poradnik dla innych gdyż sam się z tym męczyłem. <br />
Za przykład wziąłem niedawno wydaną Setrę S 319 UL. Oczywiście można to zrobić w każdym innym pojeździe, ponieważ skrypty się znacząco nie różnią, jednak nie wiem jak będzie w przypadku pojazdów 3-drzwiowych.<br />
<br />
Więc rozpoczynamy! <br />
Otwieramy plik "door_constfile" znajdujący w folderze "Script" danego pojazdu. <br />
<br />
Na samym początku mamy:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>Front/Back Door Acceleration (100%/s˛)<br />
<br />
[const]<br />
fdoor_acc<br />
0.5<br />
<br />
[const]<br />
bdoor_acc<br />
0.6</code></div></div>Gdzie:<br />
"fdoor_acc"- prędkość przyśpieszenia drzwi przednich <br />
"bdoor_acc"- prędkość przyśpieszenia drzwi tylnych<br />
<span style="font-weight: bold;" class="mycode_b">Uwaga! Wszystkie wartości są w %/s</span><br />
<br />
2. Określenie zmiany przyśpieszenia drzwi. W moim przypadku jest to 0.2.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>&nbsp;&nbsp;&nbsp;&nbsp;Door Acceleration Variation (100%/s˛)<br />
<br />
[const]<br />
door_acc_var<br />
0.2</code></div></div><br />
3.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>Front/Back Door Max Speed (100%/s)<br />
<br />
[const]<br />
fdoor_maxspeed<br />
0.75<br />
<br />
[const]<br />
bdoor_maxspeed<br />
0.8<br />
<br />
[const]<br />
door_maxspeed_var<br />
0.02</code></div></div><br />
Gdzie: <br />
"fdoor_maxspeed"- maksymalna prędkość przednich drzwi.<br />
"bdoor_maxspeed"- maksymalna prędkość drzwi znajdujących się z tyłu pojazdu.<br />
"door_maxspeed_var"- tu nie wiem o co dokładnie chodzi ale należy tutaj przepisać wartość z "door_acc_var" znajdującego się wyżej.<br />
<br />
4.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>Front/Back Door Damper (100%/s)<br />
<br />
[const]<br />
door0_damper<br />
1<br />
<br />
[const]<br />
door1_damper<br />
1<br />
<br />
[const]<br />
door2_damper<br />
1<br />
<br />
[const]<br />
door3_damper<br />
1</code></div></div><br />
Tutaj chodzi o amortyzację drzwi, 1- aktywne, 0- nieaktywne <br />
<br />
5. "Dämpferkennlinie über Öffnungzustand" to radzę pominąć i nic nie zmieniać bo drzwi się przestaną zamykać lub otwierać.<br />
<br />
6.  <div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>Door Stop Reflexion Coefficient<br />
<br />
[const]<br />
door_refl<br />
0.1</code></div></div><br />
Tutaj mamy doczynienia z zatrzymaniem odbijania drzwi. <br />
<br />
7. <br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>&nbsp;&nbsp;&nbsp;&nbsp;Automatic Back Door Time<br />
<br />
[const]<br />
doorAftOpenTime<br />
1.5</code></div></div><br />
W tym miejscu ustawiamy czas zamknięcia drzwi jeżeli nikt nie przebywa w pobliżu nich.<br />
<br />
8. <div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>Busstop Brake will only be activated belov MaxKMH:<br />
<br />
[const]<br />
Door_Bremse_Halte_MaxKMH<br />
2</code></div></div><br />
Tutaj ustawiamy sobie przy jakiej prędkości możemy wcisnąć hamulec przystankowy.<br />
<br />
9. Teraz trochę wyjaśnień. W wszystkich wymienionych tu przypadkach"<br />
0- Nie<br />
1- Tak<br />
<br />
"[const]<br />
door_needs_stopbrakeswitch<br />
0"<br />
<br />
Oznacza, że drzwi potrzebują przycisku hamulca przystankowego.<br />
<br />
"[const]<br />
electric_doors<br />
0"<br />
<br />
Elektryczne drzwi<br />
<br />
"[const]<br />
thinking_doors<br />
0" <br />
<br />
W dosłownym znaczeniu będzie to oznaczało myślące drzwi.<br />
<br />
"[const]<br />
door_blocking<br />
1"<br />
<br />
Oznacza, że drzwi mogą być blokowane.<br />
<br />
"[const]<br />
door_blocking_area<br />
0.1"<br />
<br />
Obszar blokowania drzwi.<br />
<br />
"[const]<br />
door_blocking_speed<br />
0.01"<br />
<br />
Prędkość blokowania drzwi.<br />
<br />
-------------------------------------------------------------------------------------------<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[const]<br />
door_0_hub_speed<br />
2</code></div></div><br />
Prędkość piasty drzwi.<br />
<br />
Tak idąc po kolei wszystkie drzwi od 0 do 3.<br />
<span style="font-weight: bold;" class="mycode_b">Uwaga! Podajemy w centymetrach na sekundę (cm/s)</span><br />
<br />
-------------------------------------------------------------------------------------------<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[newcurve]<br />
door_0_opn_speed<br />
<br />
[pnt]<br />
0<br />
0.1<br />
<br />
[pnt]<br />
0.2<br />
0.4<br />
<br />
<br />
[pnt]<br />
0.75<br />
0.4<br />
<br />
[pnt]<br />
0.8<br />
0.4<br />
<br />
[pnt]<br />
1<br />
0.1</code></div></div>Gdzie:<br />
<br />
"opn"- otwieranie<br />
"cls"- zamykanie<br />
<br />
Cyfry: 0, 0.2, 0.75, 0.8, 1, pokazują dziesiętną liczbę zaawansowanego otwierania drzwi. <br />
Analogicznie postępujemy z każdą połową drzwi.<br />
<br />
To wszystko, pozdrawiam, Filop.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Tworzenie tablic kierunkowych - dykt (w systemie rollband)]]></title>
			<link>https://strefa-omsi.pl/Watek-OMSI-1-2-Tworzenie-tablic-kierunkowych-dykt-w-systemie-rollband--13921</link>
			<pubDate>Sat, 12 Mar 2016 15:14:51 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://strefa-omsi.pl/member.php?action=profile&uid=3726">pause1</a>]]></dc:creator>
			<guid isPermaLink="false">https://strefa-omsi.pl/Watek-OMSI-1-2-Tworzenie-tablic-kierunkowych-dykt-w-systemie-rollband--13921</guid>
			<description><![CDATA[W wielu pojazdach do Omsi są rollbandy, lecz nie do każdej mapy są dołączone odpowiednie pliki, by działały one poprawnie. W związku z prywatną prośbą, w tym temacie, odpowiem tutaj na to zagadnienie<img src="https://strefa-omsi.pl/images/emotki2/emota_wink.png" alt=";)" title=";)" class="smilie smilie_23" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Utworzenie odpowiednich plików, w odpowiednim miejscu.</span><br />
Kierujemy się do folderu <span style="font-weight: bold;" class="mycode_b">OMSI 2/Vehicles/Anzeigen</span>. Tutaj Omsi przechowuje pliki dotyczące rollbandów (pliki konfiguracyjne i tekstury).<br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><img src="http://i.imgur.com/qSuQEjh.jpg" loading="lazy"  alt="[Obrazek: qSuQEjh.jpg]" class="mycode_img" /></div></div></div>
Większość pojazdów korzysta z folderu podstawowego MANa SD79, czyli <span style="font-style: italic;" class="mycode_i">Rollband_SD79</span>. Są też pojazdy, które korzystają z własnego folderu (Jelcz L11 (<span style="font-style: italic;" class="mycode_i">L11</span>), Citybus O405 (<span style="font-style: italic;" class="mycode_i">Rollband_O405</span> itd.). Najlepiej po prostu przekopiować pliki, które zaraz utworzymy do wszystkich folderów z przedrostkiem Rollband_* i folderów dedykowanych jak <span style="font-style: italic;" class="mycode_i">L11</span>.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Przygotowanie plików do edycji.</span><br />
Wchodzimy w folder z plikami, najlepiej <span style="font-style: italic;" class="mycode_i">Rollband_SD79</span>. Stamtąd bierzemy plik <span style="font-weight: bold;" class="mycode_b">blanko.tga</span> i kopiujemy do nowo utworzonego folderu na pulpit. <br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><img src="http://i.imgur.com/5jq1eHo.jpg" loading="lazy"  alt="[Obrazek: 5jq1eHo.jpg]" class="mycode_img" /></div></div></div>
<span style="font-weight: bold;" class="mycode_b">3. Właściwy etap edycji.</span><br />
Otwieramy plik <span style="font-weight: bold;" class="mycode_b">blanko.tga</span> programem graficznym, polecam w tym celu użycie <span style="font-style: italic;" class="mycode_i">GIMPa</span> czy <span style="font-style: italic;" class="mycode_i">Paint.NET</span>.<br />
Pojawia nam się... biały prostokąt - nasza dykta. <br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><img src="http://i.imgur.com/pdyUNJM.jpg" loading="lazy"  alt="[Obrazek: pdyUNJM.jpg]" class="mycode_img" /></div></div></div>
Tutaj możemy narysować właściwie cokolwiek, OMSI załaduje to z pliku graficznego. <br />
<span style="font-weight: bold;" class="mycode_b">UWAGA! Nie można zmieniać rozdzielczości tego pliku!</span><br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><img src="http://i.imgur.com/zCkmLO0.jpg" loading="lazy"  alt="[Obrazek: zCkmLO0.jpg]" class="mycode_img" /></div></div></div>
Po narysowaniu/napisaniu tego co potrzebujemy, przechodzimy dalej.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Poprawny zapis pliku.</span><br />
Otwieramy plik .hof mapy, do której utworzyliśmy teksturę. Pliki te znajdują się w folderze pojazdu, do którego robimy rollbandy. Jeśli ich tam nie ma, to trzeba je sobie zorganizować - są to podstawy działania i modyfikowania gry.<br />
Gdy już mamy .hof otwieramy go i patrzymy w jakim systemie jest on utworzony, szukamy odpowiedniego wpisu:<br />
(na <span style="color: #FF0000;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">czerwono</span></span> odpowiedni wpis, na<span style="color: #32CD32;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b"> zielono</span></span> interesująca nas nazwa pliku)<br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><img src="http://i.imgur.com/PXIymo8.jpg" loading="lazy"  alt="[Obrazek: PXIymo8.jpg]" class="mycode_img" /></div></div></div>
Gdy już mamy ten wpis, kopiujemy zaznaczoną nazwę pliku i tak nazywamy utworzoną przez nas teksturę.<br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><img src="http://i.imgur.com/2AI8P8U.jpg" loading="lazy"  alt="[Obrazek: 2AI8P8U.jpg]" class="mycode_img" /></div></div></div>
(jeśli brakuje wpisów z nazwą tekstury należy go odpowiednio uzupełnić, można posiłkować się tym poradnikiem: <a href="http://strefa-omsi.pl/Watek-Plik-HOF-Zapowiedzi-Dykty-Poradnik--572" target="_blank" rel="noopener" class="mycode_url">Link</a>)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Umieszczenie pliku w odpowiednim miejscu.</span><br />
Ponownie patrzymy do pliku .hof, szukamy wpisu w tym stylu:<br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><img src="http://i.imgur.com/ANaTnsY.jpg" loading="lazy"  alt="[Obrazek: ANaTnsY.jpg]" class="mycode_img" /></div></div></div>
Jeśli go nie znajdujemy - plik tekstury wrzucamy bezpośrednio do folderu <span style="font-weight: bold;" class="mycode_b">OMSI 2/Vehicles/Anzeigen/&lt;Rollband_*&gt;</span><br />
Jeśli jest taki wpis - musimy stworzyć folder o nazwie pokazanej we wpisie, tam kopiujemy nasz plik.<br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><img src="http://i.imgur.com/wxDDER2.jpg" loading="lazy"  alt="[Obrazek: wxDDER2.jpg]" class="mycode_img" /></div></div></div>
<br />
<span style="font-weight: bold;" class="mycode_b">6. Efekt końcowy.</span><br />
Tu raczej to czego się spodziewaliśmy po pokonaniu tego poradnika. <br />
<img src="http://i.imgur.com/boCkrqG.jpg" loading="lazy"  alt="[Obrazek: boCkrqG.jpg]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[W wielu pojazdach do Omsi są rollbandy, lecz nie do każdej mapy są dołączone odpowiednie pliki, by działały one poprawnie. W związku z prywatną prośbą, w tym temacie, odpowiem tutaj na to zagadnienie<img src="https://strefa-omsi.pl/images/emotki2/emota_wink.png" alt=";)" title=";)" class="smilie smilie_23" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Utworzenie odpowiednich plików, w odpowiednim miejscu.</span><br />
Kierujemy się do folderu <span style="font-weight: bold;" class="mycode_b">OMSI 2/Vehicles/Anzeigen</span>. Tutaj Omsi przechowuje pliki dotyczące rollbandów (pliki konfiguracyjne i tekstury).<br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><img src="http://i.imgur.com/qSuQEjh.jpg" loading="lazy"  alt="[Obrazek: qSuQEjh.jpg]" class="mycode_img" /></div></div></div>
Większość pojazdów korzysta z folderu podstawowego MANa SD79, czyli <span style="font-style: italic;" class="mycode_i">Rollband_SD79</span>. Są też pojazdy, które korzystają z własnego folderu (Jelcz L11 (<span style="font-style: italic;" class="mycode_i">L11</span>), Citybus O405 (<span style="font-style: italic;" class="mycode_i">Rollband_O405</span> itd.). Najlepiej po prostu przekopiować pliki, które zaraz utworzymy do wszystkich folderów z przedrostkiem Rollband_* i folderów dedykowanych jak <span style="font-style: italic;" class="mycode_i">L11</span>.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Przygotowanie plików do edycji.</span><br />
Wchodzimy w folder z plikami, najlepiej <span style="font-style: italic;" class="mycode_i">Rollband_SD79</span>. Stamtąd bierzemy plik <span style="font-weight: bold;" class="mycode_b">blanko.tga</span> i kopiujemy do nowo utworzonego folderu na pulpit. <br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><img src="http://i.imgur.com/5jq1eHo.jpg" loading="lazy"  alt="[Obrazek: 5jq1eHo.jpg]" class="mycode_img" /></div></div></div>
<span style="font-weight: bold;" class="mycode_b">3. Właściwy etap edycji.</span><br />
Otwieramy plik <span style="font-weight: bold;" class="mycode_b">blanko.tga</span> programem graficznym, polecam w tym celu użycie <span style="font-style: italic;" class="mycode_i">GIMPa</span> czy <span style="font-style: italic;" class="mycode_i">Paint.NET</span>.<br />
Pojawia nam się... biały prostokąt - nasza dykta. <br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><img src="http://i.imgur.com/pdyUNJM.jpg" loading="lazy"  alt="[Obrazek: pdyUNJM.jpg]" class="mycode_img" /></div></div></div>
Tutaj możemy narysować właściwie cokolwiek, OMSI załaduje to z pliku graficznego. <br />
<span style="font-weight: bold;" class="mycode_b">UWAGA! Nie można zmieniać rozdzielczości tego pliku!</span><br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><img src="http://i.imgur.com/zCkmLO0.jpg" loading="lazy"  alt="[Obrazek: zCkmLO0.jpg]" class="mycode_img" /></div></div></div>
Po narysowaniu/napisaniu tego co potrzebujemy, przechodzimy dalej.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Poprawny zapis pliku.</span><br />
Otwieramy plik .hof mapy, do której utworzyliśmy teksturę. Pliki te znajdują się w folderze pojazdu, do którego robimy rollbandy. Jeśli ich tam nie ma, to trzeba je sobie zorganizować - są to podstawy działania i modyfikowania gry.<br />
Gdy już mamy .hof otwieramy go i patrzymy w jakim systemie jest on utworzony, szukamy odpowiedniego wpisu:<br />
(na <span style="color: #FF0000;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">czerwono</span></span> odpowiedni wpis, na<span style="color: #32CD32;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b"> zielono</span></span> interesująca nas nazwa pliku)<br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><img src="http://i.imgur.com/PXIymo8.jpg" loading="lazy"  alt="[Obrazek: PXIymo8.jpg]" class="mycode_img" /></div></div></div>
Gdy już mamy ten wpis, kopiujemy zaznaczoną nazwę pliku i tak nazywamy utworzoną przez nas teksturę.<br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><img src="http://i.imgur.com/2AI8P8U.jpg" loading="lazy"  alt="[Obrazek: 2AI8P8U.jpg]" class="mycode_img" /></div></div></div>
(jeśli brakuje wpisów z nazwą tekstury należy go odpowiednio uzupełnić, można posiłkować się tym poradnikiem: <a href="http://strefa-omsi.pl/Watek-Plik-HOF-Zapowiedzi-Dykty-Poradnik--572" target="_blank" rel="noopener" class="mycode_url">Link</a>)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Umieszczenie pliku w odpowiednim miejscu.</span><br />
Ponownie patrzymy do pliku .hof, szukamy wpisu w tym stylu:<br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><img src="http://i.imgur.com/ANaTnsY.jpg" loading="lazy"  alt="[Obrazek: ANaTnsY.jpg]" class="mycode_img" /></div></div></div>
Jeśli go nie znajdujemy - plik tekstury wrzucamy bezpośrednio do folderu <span style="font-weight: bold;" class="mycode_b">OMSI 2/Vehicles/Anzeigen/&lt;Rollband_*&gt;</span><br />
Jeśli jest taki wpis - musimy stworzyć folder o nazwie pokazanej we wpisie, tam kopiujemy nasz plik.<br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><img src="http://i.imgur.com/wxDDER2.jpg" loading="lazy"  alt="[Obrazek: wxDDER2.jpg]" class="mycode_img" /></div></div></div>
<br />
<span style="font-weight: bold;" class="mycode_b">6. Efekt końcowy.</span><br />
Tu raczej to czego się spodziewaliśmy po pokonaniu tego poradnika. <br />
<img src="http://i.imgur.com/boCkrqG.jpg" loading="lazy"  alt="[Obrazek: boCkrqG.jpg]" class="mycode_img" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Dodanie możliwości wsiadania wszystkimi drzwiami tzw "Door mod"]]></title>
			<link>https://strefa-omsi.pl/Watek-OMSI-1-2-Dodanie-mozliwosci-wsiadania-wszystkimi-drzwiami-tzw-Door-mod--12748</link>
			<pubDate>Thu, 31 Dec 2015 16:23:52 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://strefa-omsi.pl/member.php?action=profile&uid=76">CraherPL</a>]]></dc:creator>
			<guid isPermaLink="false">https://strefa-omsi.pl/Watek-OMSI-1-2-Dodanie-mozliwosci-wsiadania-wszystkimi-drzwiami-tzw-Door-mod--12748</guid>
			<description><![CDATA[Witam,<br />
jako, że większość modeli pojazdów na scene omsi wychodzi głównie z niemiec  (i pochodnych) system wsiadania jest zazwyczaj właśnie typowo niemiecki czyli wsiadanie pierwszymi drzwiami tylko i wyłącznie. Przerobienie tego systemu na system wsiadania wszystkimi drzwiami jest dość banalny i aż dziwię się, że do tej pory nie było żadnego poradnika jak to zmienić. <br />
<br />
Tak więc zaczynajmy:<br />
<br />
1.W interesującym nas modelu autobusu otwieramy interesujący nas plik .bus i sprawdzamy tam dwie rzeczy (Dla pojazdów przegubowych trzy)<br />
<br />
a. Jaka jest dokładna nazwa pliku passengercabin.cfg <br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[passengercabin]<br />
model&#92;passengercabin_GN92_main.cfg</code></div></div>b. Jaka jest dokładna nazwa pliku door.osc <br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[script]<br />
[...]<br />
script&#92;door-3.osc<br />
[...]</code></div></div>c1. Jaka jest nazwa pliku .bus odpowiedzialnego za sekcję B (Punkt tylko dla pojazdów przegubowych)<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[couple_back]<br />
MAN_GN92_trail.bus<br />
false</code></div></div>c2. W pliku .bus przez nas znalezionych w punkcie c1 sprawdzamy nazwę passangerscabin sekcji B.<br />
<br />
2.Kolejny krok to otworzenie wszystkich plików przez nas szukanych w dowolnym edytorze tekstu (polecam Notepad ++) oraz wykonanie ich kopii zapasowych.<br />
<br />
3.W plikach passangerscabin.cfg szukamy takiej sekcji<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>###################################<br />
<br />
[entry]<br />
0<br />
<br />
[entry]<br />
2<br />
<br />
{noticketsale}<br />
<br />
[exit]<br />
10<br />
<br />
[exit]<br />
12<br />
<br />
[linkToPrevVeh]<br />
16<br />
<br />
###################################</code></div></div><br />
Kolejne wpisy [entry] oznaczają ścieżkę wejść a wpisy [exit] ścieżkę wyjść. Należy je liczyć od góry zawsze od 0 (osobno [entry] i osobno [exit])<br />
<br />
Pierwszym ważnym krokiem będzie dopisanie pod ostatnim [entry] kolejne takie wpisy ale z numerami ścieżek (tą cyfrą pod spodem) zgodnie z numerami ścieżek jak we wpisach [exit] Zazwyczaj wpisy są dodawane zgodnie z kolejnością drzwi w pojeździe więc nie musimy się martwić o to który numer ścieżki to które drzwi.<br />
<br />
Przykład uzupełnionego wpisu passangerscabin:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>###################################<br />
<br />
[entry]<br />
0<br />
<br />
[entry]<br />
2<br />
<br />
{noticketsale}<br />
<br />
[entry]<br />
10<br />
<br />
[entry]<br />
12<br />
<br />
[exit]<br />
10<br />
<br />
[exit]<br />
12<br />
<br />
[linkToPrevVeh]<br />
16<br />
<br />
###################################</code></div></div><br />
Przy takim wpisaniu pasażerowie będą podchodzili do pierwszych drzwi w sytuacji gdy wszystkie drzwi będą zamknięte a w sytuacji gdy któreś drzwi otwarte to pasażerowie udadzą się do najbliższych otwartych.<br />
<br />
Można uzyskać jeszcze inną sytuacje: Pasażerowie przy zamkniętych drzwiach udadzą się do najbliższych im drzwi jednakże nie będą reagowali na inne otwarte drzwi niż te, do których się udali w pierwszej kolejności. Uzyskać to można dodając pod danymi wejściami wpisy {withbutton}:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[entry]<br />
0<br />
<br />
[entry]<br />
2<br />
<br />
{withbutton}</code></div></div>Po wykonaniu przez nas zmian zapisujemy pliki ale ich nie zamykamy, jeszcze się przydadzą.<br />
<br />
4. Kolejnym etapem będzie otwarcie szukanego przez nas wcześniej pliku door.osc<br />
W nim szukamy czegoś takiego:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>(L.L.door_0) 0.9 &gt; (S.L.PAX_Entry0_Open)<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.door_1) 0.9 &gt; (S.L.PAX_Entry1_Open) <br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.door_2) 0.9 &gt; (L.L.door_3) 0.9 &gt; &amp;&amp; (S.L.PAX_Exit1_Open) (S.L.PAX_Exit2_Open)<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.door_4) 0.9 &gt; (L.L.door_5) 0.9 &gt; &amp;&amp; (S.L.PAX_Exit3_Open) (S.L.PAX_Exit4_Open)</code></div></div>Teraz sprawdzamy czy nasze ścieżki się zgadzają, mówię sprawdzamy dlatego, że nieraz skrypt (szczególnie te nowsze oparte już na manie ng czyli z omsi 2) mają już wpisane ścieżki do odpowiednich drzwi. Wytłumaczę jak sprawdzić:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>(L.L.door_0) 0.9 &gt; (S.L.PAX_Entry0_Open) - Wpis [entry] z passangerscabin o numerze 0 (czyli pierwszy od góry, bo zaczynamy liczenie od 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.door_1) 0.9 &gt; (S.L.PAX_Entry1_Open) - Wpis [entry] o numerze 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.door_2) 0.9 &gt; (L.L.door_3) 0.9 &gt; &amp;&amp; (S.L.PAX_Exit1_Open) (S.L.PAX_Exit2_Open) (S.L.PAX_Entry2_Open) (S.L.PAX_Entry3_Open) - wpisy [entry] 2 i 3 na drzwiach jak widać o numerach 2 i 3 czyli w tym przypadku na drugiej parze drzwi<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.door_4) 0.9 &gt; (L.L.door_5) 0.9 &gt; &amp;&amp; (S.L.PAX_Exit3_Open) (S.L.PAX_Exit4_Open) (S.L.PAX_Entry4_Open) (S.L.PAX_Entry5_Open)</code></div></div>Przy sprawdzaniu musimy zobaczyć po prostu czy dla danych drzwi pasują wpisy z numerami odpowiadającymi im z pliku passangerscabin.  Skrzydła drzwi także liczymy od 0 od przodu. W przypadku gdy nasz wpis wygląda podobnie jak w pierwszym [code] należy dopisywać dla danych drzwi kolejne wpisy  (S.L.PAX_EntryX_Open) Gdzie X to numer wpisu entry liczonego od góry od zera z pliku passangerscabin. (W przypadku pojazdu przegubowego wpisy entry i exit z sekcji B będą zawsze tak jakby pod wpisami z sekcji A)<br />
<br />
Po sprawdzeniu/dopisaniu takich wpisów  (S.L.PAX_EntryX_Open) dla drzwi zapisujemy plik i cieszymy się pasażerami wsiadającymi wszystkimi drzwiami.]]></description>
			<content:encoded><![CDATA[Witam,<br />
jako, że większość modeli pojazdów na scene omsi wychodzi głównie z niemiec  (i pochodnych) system wsiadania jest zazwyczaj właśnie typowo niemiecki czyli wsiadanie pierwszymi drzwiami tylko i wyłącznie. Przerobienie tego systemu na system wsiadania wszystkimi drzwiami jest dość banalny i aż dziwię się, że do tej pory nie było żadnego poradnika jak to zmienić. <br />
<br />
Tak więc zaczynajmy:<br />
<br />
1.W interesującym nas modelu autobusu otwieramy interesujący nas plik .bus i sprawdzamy tam dwie rzeczy (Dla pojazdów przegubowych trzy)<br />
<br />
a. Jaka jest dokładna nazwa pliku passengercabin.cfg <br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[passengercabin]<br />
model&#92;passengercabin_GN92_main.cfg</code></div></div>b. Jaka jest dokładna nazwa pliku door.osc <br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[script]<br />
[...]<br />
script&#92;door-3.osc<br />
[...]</code></div></div>c1. Jaka jest nazwa pliku .bus odpowiedzialnego za sekcję B (Punkt tylko dla pojazdów przegubowych)<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[couple_back]<br />
MAN_GN92_trail.bus<br />
false</code></div></div>c2. W pliku .bus przez nas znalezionych w punkcie c1 sprawdzamy nazwę passangerscabin sekcji B.<br />
<br />
2.Kolejny krok to otworzenie wszystkich plików przez nas szukanych w dowolnym edytorze tekstu (polecam Notepad ++) oraz wykonanie ich kopii zapasowych.<br />
<br />
3.W plikach passangerscabin.cfg szukamy takiej sekcji<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>###################################<br />
<br />
[entry]<br />
0<br />
<br />
[entry]<br />
2<br />
<br />
{noticketsale}<br />
<br />
[exit]<br />
10<br />
<br />
[exit]<br />
12<br />
<br />
[linkToPrevVeh]<br />
16<br />
<br />
###################################</code></div></div><br />
Kolejne wpisy [entry] oznaczają ścieżkę wejść a wpisy [exit] ścieżkę wyjść. Należy je liczyć od góry zawsze od 0 (osobno [entry] i osobno [exit])<br />
<br />
Pierwszym ważnym krokiem będzie dopisanie pod ostatnim [entry] kolejne takie wpisy ale z numerami ścieżek (tą cyfrą pod spodem) zgodnie z numerami ścieżek jak we wpisach [exit] Zazwyczaj wpisy są dodawane zgodnie z kolejnością drzwi w pojeździe więc nie musimy się martwić o to który numer ścieżki to które drzwi.<br />
<br />
Przykład uzupełnionego wpisu passangerscabin:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>###################################<br />
<br />
[entry]<br />
0<br />
<br />
[entry]<br />
2<br />
<br />
{noticketsale}<br />
<br />
[entry]<br />
10<br />
<br />
[entry]<br />
12<br />
<br />
[exit]<br />
10<br />
<br />
[exit]<br />
12<br />
<br />
[linkToPrevVeh]<br />
16<br />
<br />
###################################</code></div></div><br />
Przy takim wpisaniu pasażerowie będą podchodzili do pierwszych drzwi w sytuacji gdy wszystkie drzwi będą zamknięte a w sytuacji gdy któreś drzwi otwarte to pasażerowie udadzą się do najbliższych otwartych.<br />
<br />
Można uzyskać jeszcze inną sytuacje: Pasażerowie przy zamkniętych drzwiach udadzą się do najbliższych im drzwi jednakże nie będą reagowali na inne otwarte drzwi niż te, do których się udali w pierwszej kolejności. Uzyskać to można dodając pod danymi wejściami wpisy {withbutton}:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[entry]<br />
0<br />
<br />
[entry]<br />
2<br />
<br />
{withbutton}</code></div></div>Po wykonaniu przez nas zmian zapisujemy pliki ale ich nie zamykamy, jeszcze się przydadzą.<br />
<br />
4. Kolejnym etapem będzie otwarcie szukanego przez nas wcześniej pliku door.osc<br />
W nim szukamy czegoś takiego:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>(L.L.door_0) 0.9 &gt; (S.L.PAX_Entry0_Open)<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.door_1) 0.9 &gt; (S.L.PAX_Entry1_Open) <br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.door_2) 0.9 &gt; (L.L.door_3) 0.9 &gt; &amp;&amp; (S.L.PAX_Exit1_Open) (S.L.PAX_Exit2_Open)<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.door_4) 0.9 &gt; (L.L.door_5) 0.9 &gt; &amp;&amp; (S.L.PAX_Exit3_Open) (S.L.PAX_Exit4_Open)</code></div></div>Teraz sprawdzamy czy nasze ścieżki się zgadzają, mówię sprawdzamy dlatego, że nieraz skrypt (szczególnie te nowsze oparte już na manie ng czyli z omsi 2) mają już wpisane ścieżki do odpowiednich drzwi. Wytłumaczę jak sprawdzić:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>(L.L.door_0) 0.9 &gt; (S.L.PAX_Entry0_Open) - Wpis [entry] z passangerscabin o numerze 0 (czyli pierwszy od góry, bo zaczynamy liczenie od 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.door_1) 0.9 &gt; (S.L.PAX_Entry1_Open) - Wpis [entry] o numerze 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.door_2) 0.9 &gt; (L.L.door_3) 0.9 &gt; &amp;&amp; (S.L.PAX_Exit1_Open) (S.L.PAX_Exit2_Open) (S.L.PAX_Entry2_Open) (S.L.PAX_Entry3_Open) - wpisy [entry] 2 i 3 na drzwiach jak widać o numerach 2 i 3 czyli w tym przypadku na drugiej parze drzwi<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.door_4) 0.9 &gt; (L.L.door_5) 0.9 &gt; &amp;&amp; (S.L.PAX_Exit3_Open) (S.L.PAX_Exit4_Open) (S.L.PAX_Entry4_Open) (S.L.PAX_Entry5_Open)</code></div></div>Przy sprawdzaniu musimy zobaczyć po prostu czy dla danych drzwi pasują wpisy z numerami odpowiadającymi im z pliku passangerscabin.  Skrzydła drzwi także liczymy od 0 od przodu. W przypadku gdy nasz wpis wygląda podobnie jak w pierwszym [code] należy dopisywać dla danych drzwi kolejne wpisy  (S.L.PAX_EntryX_Open) Gdzie X to numer wpisu entry liczonego od góry od zera z pliku passangerscabin. (W przypadku pojazdu przegubowego wpisy entry i exit z sekcji B będą zawsze tak jakby pod wpisami z sekcji A)<br />
<br />
Po sprawdzeniu/dopisaniu takich wpisów  (S.L.PAX_EntryX_Open) dla drzwi zapisujemy plik i cieszymy się pasażerami wsiadającymi wszystkimi drzwiami.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[DRL (Day running lights/Światła do jazdy dziennej)]]></title>
			<link>https://strefa-omsi.pl/Watek-OMSI-1-2-DRL-Day-running-lights-Swiatla-do-jazdy-dziennej--7058</link>
			<pubDate>Wed, 12 Nov 2014 00:51:23 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://strefa-omsi.pl/member.php?action=profile&uid=16">mattez</a>]]></dc:creator>
			<guid isPermaLink="false">https://strefa-omsi.pl/Watek-OMSI-1-2-DRL-Day-running-lights-Swiatla-do-jazdy-dziennej--7058</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Modyfikacja: <span style="color: #800000;" class="mycode_color">DRL (Day running lights/Światła do jazdy dziennej)</span><br />
Autor: <span style="color: #800000;" class="mycode_color">Mattez</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Opis:</span><br />
Witam,<br />
<br />
Poniższa modyfikacja daje możliwość wyposażenia pojazdu w światła do jazdy dziennej, czyli świateł, które włączają się po uruchomieniu silnika, a wyłączają po włączeniu świateł pozycyjnych lub mijania.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Jak to zrobić?</span><br />
1. Po pierwsze, otwieramy plik .bus interesującego nas pojazdu i odszukujemy skrypt świateł oraz odpowiadający mu plik varlist:<br />
<div style="text-align: center;" class="mycode_align"><img src="http://i.imgur.com/ny7HI7M.jpg" loading="lazy"  alt="[Obrazek: ny7HI7M.jpg]" class="mycode_img" /></div>
<br />
2. Otwieramy z folderu <span style="font-weight: bold;" class="mycode_b">Script</span> skrypt świateł, w tym przypadku lights.osc i przed ostatnim {end} dopisujemy poniższy wpis:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>(L.L.engine_on)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.lights_stand) 0 =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 (S.L.DRL)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{endif}<br />
&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL)<br />
{endif}</code></div></div><div style="text-align: center;" class="mycode_align"><img src="http://i.imgur.com/J92I3Dr.jpg" loading="lazy"  alt="[Obrazek: J92I3Dr.jpg]" class="mycode_img" /></div>
<br />
3. Otwieramy z folderu <span style="font-weight: bold;" class="mycode_b">Script</span> plik varlist odpowiadający skryptowi świateł, w tym przypadku lights_varlist.txt i na dole dopisujemy <span style="font-weight: bold;" class="mycode_b">DRL</span><br />
<div style="text-align: center;" class="mycode_align"><img src="http://i.imgur.com/mIHnyok.jpg" loading="lazy"  alt="[Obrazek: mIHnyok.jpg]" class="mycode_img" /></div>
<br />
W tym momencie nasz model obsługuje już funkcję <span style="font-weight: bold;" class="mycode_b">DRL</span>. Jedyne, co pozostaje, to zaimplementować tą modyfikację do odpowiednich świateł. Można to zrobić na kilka sposobów, na przykład w światłach drogowych, lub w miejscu halogenów. Najprostszym sposobem jest podłączenie <span style="font-weight: bold;" class="mycode_b">DRL</span> pod światła drogowe, więc opiszę jak to zrobić.<br />
<br />
4. Zaglądamy w plik .bus jeszcze raz, by odszukać jak nazywa się plik konfiguracyjny <span style="font-weight: bold;" class="mycode_b">model</span> naszego autobusu:<br />
<div style="text-align: center;" class="mycode_align"><img src="http://i.imgur.com/bV3mEyv.jpg" loading="lazy"  alt="[Obrazek: bV3mEyv.jpg]" class="mycode_img" /></div>
<br />
5. Otwieramy z folderu <span style="font-weight: bold;" class="mycode_b">Model</span> plik konfiguracyjny, w tym przypadku model_O530 G 4 Doors_RB_CG.cfg oraz za pomocą wyszukiwarki systemowej (CTRL+F) szukamy wartości <span style="font-weight: bold;" class="mycode_b">lights_fern</span> i klikamy kilka razy ponowne wyszukiwanie aż znajdzie nam lokalizację punktu świateł drogowych, która wygląda mniej więcej tak:<br />
<div style="text-align: center;" class="mycode_align"><img src="http://i.imgur.com/ckJZP78.jpg" loading="lazy"  alt="[Obrazek: ckJZP78.jpg]" class="mycode_img" /></div>
<br />
6. Powinny być dwa takie same wpisy (lewy i prawy reflektor) różniące się pierwszą wartością o znak "-". W obydwu wpisach zmieniamy wartość pod lights_fern (moc świateł) na "3", zaznaczamy obydwa wpisy, kopiujemy i wklejamy pod spodem.<br />
<br />
7. We wklejonych dwóch wpisach zmieniamy wartość pod lights_fern na "1" oraz obydwa <span style="font-weight: bold;" class="mycode_b">lights_fern</span> zamieniamy na <span style="font-weight: bold;" class="mycode_b">drl</span><br />
<br />
<br />
Efekt (oczywiście w zależności od modelu) może wyglądać następująco:<br />
<span style="font-weight: bold;" class="mycode_b">Włączony silnik i zgaszone światła</span><br />
<div style="text-align: center;" class="mycode_align"><img src="http://i.imgur.com/VrBliUj.jpg" loading="lazy"  alt="[Obrazek: VrBliUj.jpg]" class="mycode_img" /></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Włączony silnik i włączone światła mijania</span><br />
<div style="text-align: center;" class="mycode_align"><img src="http://i.imgur.com/vcWSSBT.jpg" loading="lazy"  alt="[Obrazek: vcWSSBT.jpg]" class="mycode_img" /></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Włączony silnik i włączone światła drogowe</span><br />
<div style="text-align: center;" class="mycode_align"><img src="http://i.imgur.com/9gX1CTJ.jpg" loading="lazy"  alt="[Obrazek: 9gX1CTJ.jpg]" class="mycode_img" /></div>
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Modyfikacja: <span style="color: #800000;" class="mycode_color">DRL (Day running lights/Światła do jazdy dziennej z przygaszaniem dodatkowo kierunkowskazów)</span><br />
Autor: <span style="color: #800000;" class="mycode_color">Mattez</span></span><br />
<br />
Rożnica polega na tym, że włączenie dowolnego kierunkowskazu przygasza nam odpowiednią żarówkę w DRL. Oto jak to zrobić:<br />
1. przejść cały powyższy poradnik tworzenia świateł DRL, z tą róznicą, że:<br />
- w pliku model_xxxxx.cfg nie dajemy komendy DRL dla lewej i prawej lampki, tylko DRL_L dla lewej i DRL_R dla prawej<br />
- w pliku xxxxxx_valist.txt od świateł zamist stałej DRL dodajemy dwie: DRL_L i DRL_R<br />
- a sam skrypt w pliku osc świateł powinien wygądać następująco:<br />
<br />
<span style="font-weight: bold;" class="mycode_b">BEZ PRZYGASANIA PRZY WŁĄCZONYCH AWARYJNYCH:</span><br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>(L.L.engine_on)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.lights_sw_blinker) 2 = (L.L.lights_stand) 1 = ||<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL_R)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 (S.L.DRL_R)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{endif}<br />
&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL_R)<br />
{endif}<br />
<br />
(L.L.engine_on)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.lights_sw_blinker) 1 = (L.L.lights_stand) 1 = ||<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL_L)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 (S.L.DRL_L)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{endif}<br />
&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL_L)<br />
{endif}</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Z PRZYGASANIEM PRZY WŁĄCZONYCH AWARYJNYCH:</span><br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>(L.L.engine_on)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.lights_sw_blinker) 2 = (L.L.lights_stand) 1 = (L.L.lights_sw_warnblinker) 1 = || ||<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL_R)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 (S.L.DRL_R)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{endif}<br />
&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL_R)<br />
{endif}<br />
<br />
(L.L.engine_on)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.lights_sw_blinker) 1 = (L.L.lights_stand) 1 = (L.L.lights_sw_warnblinker) 1 = || ||<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL_L)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 (S.L.DRL_L)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{endif}<br />
&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL_L)<br />
{endif}</code></div></div><br />
Efekt w Video:<br />
<iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/gwP4S7l63Mo" frameborder="0" allowfullscreen="true"></iframe><br />
<br />
<br />
<span style="color: #800000;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Modyfikację udostępniam na zasadzie licencji GNU/GPL3, czyli wolna amerykanka, jednak podczas publikacji na innych forach, czy w Waszych modelach z zaznaczeniem twórcy.</span></span>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Modyfikacja: <span style="color: #800000;" class="mycode_color">DRL (Day running lights/Światła do jazdy dziennej)</span><br />
Autor: <span style="color: #800000;" class="mycode_color">Mattez</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Opis:</span><br />
Witam,<br />
<br />
Poniższa modyfikacja daje możliwość wyposażenia pojazdu w światła do jazdy dziennej, czyli świateł, które włączają się po uruchomieniu silnika, a wyłączają po włączeniu świateł pozycyjnych lub mijania.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Jak to zrobić?</span><br />
1. Po pierwsze, otwieramy plik .bus interesującego nas pojazdu i odszukujemy skrypt świateł oraz odpowiadający mu plik varlist:<br />
<div style="text-align: center;" class="mycode_align"><img src="http://i.imgur.com/ny7HI7M.jpg" loading="lazy"  alt="[Obrazek: ny7HI7M.jpg]" class="mycode_img" /></div>
<br />
2. Otwieramy z folderu <span style="font-weight: bold;" class="mycode_b">Script</span> skrypt świateł, w tym przypadku lights.osc i przed ostatnim {end} dopisujemy poniższy wpis:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>(L.L.engine_on)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.lights_stand) 0 =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 (S.L.DRL)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{endif}<br />
&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL)<br />
{endif}</code></div></div><div style="text-align: center;" class="mycode_align"><img src="http://i.imgur.com/J92I3Dr.jpg" loading="lazy"  alt="[Obrazek: J92I3Dr.jpg]" class="mycode_img" /></div>
<br />
3. Otwieramy z folderu <span style="font-weight: bold;" class="mycode_b">Script</span> plik varlist odpowiadający skryptowi świateł, w tym przypadku lights_varlist.txt i na dole dopisujemy <span style="font-weight: bold;" class="mycode_b">DRL</span><br />
<div style="text-align: center;" class="mycode_align"><img src="http://i.imgur.com/mIHnyok.jpg" loading="lazy"  alt="[Obrazek: mIHnyok.jpg]" class="mycode_img" /></div>
<br />
W tym momencie nasz model obsługuje już funkcję <span style="font-weight: bold;" class="mycode_b">DRL</span>. Jedyne, co pozostaje, to zaimplementować tą modyfikację do odpowiednich świateł. Można to zrobić na kilka sposobów, na przykład w światłach drogowych, lub w miejscu halogenów. Najprostszym sposobem jest podłączenie <span style="font-weight: bold;" class="mycode_b">DRL</span> pod światła drogowe, więc opiszę jak to zrobić.<br />
<br />
4. Zaglądamy w plik .bus jeszcze raz, by odszukać jak nazywa się plik konfiguracyjny <span style="font-weight: bold;" class="mycode_b">model</span> naszego autobusu:<br />
<div style="text-align: center;" class="mycode_align"><img src="http://i.imgur.com/bV3mEyv.jpg" loading="lazy"  alt="[Obrazek: bV3mEyv.jpg]" class="mycode_img" /></div>
<br />
5. Otwieramy z folderu <span style="font-weight: bold;" class="mycode_b">Model</span> plik konfiguracyjny, w tym przypadku model_O530 G 4 Doors_RB_CG.cfg oraz za pomocą wyszukiwarki systemowej (CTRL+F) szukamy wartości <span style="font-weight: bold;" class="mycode_b">lights_fern</span> i klikamy kilka razy ponowne wyszukiwanie aż znajdzie nam lokalizację punktu świateł drogowych, która wygląda mniej więcej tak:<br />
<div style="text-align: center;" class="mycode_align"><img src="http://i.imgur.com/ckJZP78.jpg" loading="lazy"  alt="[Obrazek: ckJZP78.jpg]" class="mycode_img" /></div>
<br />
6. Powinny być dwa takie same wpisy (lewy i prawy reflektor) różniące się pierwszą wartością o znak "-". W obydwu wpisach zmieniamy wartość pod lights_fern (moc świateł) na "3", zaznaczamy obydwa wpisy, kopiujemy i wklejamy pod spodem.<br />
<br />
7. We wklejonych dwóch wpisach zmieniamy wartość pod lights_fern na "1" oraz obydwa <span style="font-weight: bold;" class="mycode_b">lights_fern</span> zamieniamy na <span style="font-weight: bold;" class="mycode_b">drl</span><br />
<br />
<br />
Efekt (oczywiście w zależności od modelu) może wyglądać następująco:<br />
<span style="font-weight: bold;" class="mycode_b">Włączony silnik i zgaszone światła</span><br />
<div style="text-align: center;" class="mycode_align"><img src="http://i.imgur.com/VrBliUj.jpg" loading="lazy"  alt="[Obrazek: VrBliUj.jpg]" class="mycode_img" /></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Włączony silnik i włączone światła mijania</span><br />
<div style="text-align: center;" class="mycode_align"><img src="http://i.imgur.com/vcWSSBT.jpg" loading="lazy"  alt="[Obrazek: vcWSSBT.jpg]" class="mycode_img" /></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Włączony silnik i włączone światła drogowe</span><br />
<div style="text-align: center;" class="mycode_align"><img src="http://i.imgur.com/9gX1CTJ.jpg" loading="lazy"  alt="[Obrazek: 9gX1CTJ.jpg]" class="mycode_img" /></div>
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Modyfikacja: <span style="color: #800000;" class="mycode_color">DRL (Day running lights/Światła do jazdy dziennej z przygaszaniem dodatkowo kierunkowskazów)</span><br />
Autor: <span style="color: #800000;" class="mycode_color">Mattez</span></span><br />
<br />
Rożnica polega na tym, że włączenie dowolnego kierunkowskazu przygasza nam odpowiednią żarówkę w DRL. Oto jak to zrobić:<br />
1. przejść cały powyższy poradnik tworzenia świateł DRL, z tą róznicą, że:<br />
- w pliku model_xxxxx.cfg nie dajemy komendy DRL dla lewej i prawej lampki, tylko DRL_L dla lewej i DRL_R dla prawej<br />
- w pliku xxxxxx_valist.txt od świateł zamist stałej DRL dodajemy dwie: DRL_L i DRL_R<br />
- a sam skrypt w pliku osc świateł powinien wygądać następująco:<br />
<br />
<span style="font-weight: bold;" class="mycode_b">BEZ PRZYGASANIA PRZY WŁĄCZONYCH AWARYJNYCH:</span><br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>(L.L.engine_on)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.lights_sw_blinker) 2 = (L.L.lights_stand) 1 = ||<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL_R)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 (S.L.DRL_R)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{endif}<br />
&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL_R)<br />
{endif}<br />
<br />
(L.L.engine_on)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.lights_sw_blinker) 1 = (L.L.lights_stand) 1 = ||<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL_L)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 (S.L.DRL_L)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{endif}<br />
&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL_L)<br />
{endif}</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Z PRZYGASANIEM PRZY WŁĄCZONYCH AWARYJNYCH:</span><br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>(L.L.engine_on)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.lights_sw_blinker) 2 = (L.L.lights_stand) 1 = (L.L.lights_sw_warnblinker) 1 = || ||<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL_R)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 (S.L.DRL_R)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{endif}<br />
&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL_R)<br />
{endif}<br />
<br />
(L.L.engine_on)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;(L.L.lights_sw_blinker) 1 = (L.L.lights_stand) 1 = (L.L.lights_sw_warnblinker) 1 = || ||<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{if}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL_L)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 (S.L.DRL_L)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{endif}<br />
&nbsp;&nbsp;&nbsp;&nbsp;{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;0 (S.L.DRL_L)<br />
{endif}</code></div></div><br />
Efekt w Video:<br />
<iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/gwP4S7l63Mo" frameborder="0" allowfullscreen="true"></iframe><br />
<br />
<br />
<span style="color: #800000;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Modyfikację udostępniam na zasadzie licencji GNU/GPL3, czyli wolna amerykanka, jednak podczas publikacji na innych forach, czy w Waszych modelach z zaznaczeniem twórcy.</span></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Poradnik 4: Przegub]]></title>
			<link>https://strefa-omsi.pl/Watek-OMSI-2-Poradnik-4-Przegub--6469</link>
			<pubDate>Tue, 09 Sep 2014 22:13:09 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://strefa-omsi.pl/member.php?action=profile&uid=6">Darek59</a>]]></dc:creator>
			<guid isPermaLink="false">https://strefa-omsi.pl/Watek-OMSI-2-Poradnik-4-Przegub--6469</guid>
			<description><![CDATA[Witam ponownie<br />
Przedstawiam wam mój 4 poradnik do OMSI w którym opiszę wam jak zrobić swój pierwszy przegubowy autobus.<br />
Proszę o nie przenoszenie na inne serwery oraz fora.<br />
<br />
W razie problemów piszcie na forum.<br />
<br />
Dopisane coś o czym zapomniałem.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://strefa-omsi.pl/images/attachtypes/pdf.gif" title="Adobe Acrobat PDF" border="0" alt=".pdf" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=725" target="_blank" title="">PORADNIK CZĘŚĆ 4.pdf</a> (Rozmiar: 1.41 MB / Pobrań: 219694)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Witam ponownie<br />
Przedstawiam wam mój 4 poradnik do OMSI w którym opiszę wam jak zrobić swój pierwszy przegubowy autobus.<br />
Proszę o nie przenoszenie na inne serwery oraz fora.<br />
<br />
W razie problemów piszcie na forum.<br />
<br />
Dopisane coś o czym zapomniałem.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://strefa-omsi.pl/images/attachtypes/pdf.gif" title="Adobe Acrobat PDF" border="0" alt=".pdf" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=725" target="_blank" title="">PORADNIK CZĘŚĆ 4.pdf</a> (Rozmiar: 1.41 MB / Pobrań: 219694)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Tworzenie przegubu]]></title>
			<link>https://strefa-omsi.pl/Watek-OMSI-2-Tworzenie-przegubu--5533</link>
			<pubDate>Sat, 07 Jun 2014 21:20:37 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://strefa-omsi.pl/member.php?action=profile&uid=97">Invis</a>]]></dc:creator>
			<guid isPermaLink="false">https://strefa-omsi.pl/Watek-OMSI-2-Tworzenie-przegubu--5533</guid>
			<description><![CDATA[<span style="font-style: italic;" class="mycode_i">Tłumaczenie by Invis. Oryginał: </span> <a href="http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;postID=185098#post185098" target="_blank" rel="noopener" class="mycode_url">http://www.omnibussimulator.de/forum/ind...post185098</a><br />
<br />
<br />
Po Pierwsze musiałem stworzyć model jak zawsze. <br />
<br />
<a href="javascript:void(0)" onclick="window.open('http://www.shapeloft.com/imageupload/2012/11/15/0/image-108063-b49b0678.jpg', '', 'toolbar=no, height=768, width=1024');myWindow.focus();"><img loading="lazy" src="http://www.shapeloft.com/imageupload/2012/11/15/0/image-108063-b49b0678.jpg" style="max-width: 200px; max-height: 200px;" alt="İmage" title="Kliknij, aby powiększyć" /></a><br />
<a href="javascript:void(0)" onclick="window.open('http://www.shapeloft.com/imageupload/2012/11/15/0/image-108064-bdabefba.jpg', '', 'toolbar=no, height=768, width=1024');myWindow.focus();"><img loading="lazy" src="http://www.shapeloft.com/imageupload/2012/11/15/0/image-108064-bdabefba.jpg" style="max-width: 200px; max-height: 200px;" alt="İmage" title="Kliknij, aby powiększyć" /></a><br />
<br />
Następnym krokiem jest stworzenie "armatury"<br />
<br />
<a href="javascript:void(0)" onclick="window.open('http://www.shapeloft.com/imageupload/2012/11/15/0/image-108065-c59b30eb.jpg', '', 'toolbar=no, height=768, width=1024');myWindow.focus();"><img loading="lazy" src="http://www.shapeloft.com/imageupload/2012/11/15/0/image-108065-c59b30eb.jpg" style="max-width: 200px; max-height: 200px;" alt="İmage" title="Kliknij, aby powiększyć" /></a><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Baaardzo ważne:</span> Pierwsza "kość" musi zaczynać się w punkcie 0 sceny (0/0/0) jak pokazano. W przeciwnym razie będzie w OMSI przesunięcie. Teraz musimy przełączyć się w "edit mode" i przesunąć "czoło" pierwszej kości jak pokazano na zdjęciu, wtedy stworzyć inne kości, przy użyciu funkcji "extrude" [E]. <span style="font-weight: bold;" class="mycode_b">Ważne:</span> Pozycja kości (wyłączając pierwszą) jest nieistotna fla OMSI, więc nie musisz pracować precyzyjnie w tym punkcie. Miło jest mieć możliwość testowania animacje z "pose mode" w blenderze.<br />
<br />
Teraz po pierwsze wybierz "miechy", potem "armature", naciśnij [CTRL]+[P] i wybierz "armature", następnie "Don't create groups".<br />
Teraz porządek wykonywanych czynności jest bardzo istotny: <br />
Po pierwsze wybierz "armature", kolejno "pose mode" i kliknij PPM na "miechach" ,wybierz wtedy "weight paint mode" <br />
<br />
<a href="javascript:void(0)" onclick="window.open('http://www.shapeloft.com/imageupload/2012/11/15/0/image-108068-e1f8187c.jpg', '', 'toolbar=no, height=768, width=1024');myWindow.focus();"><img loading="lazy" src="http://www.shapeloft.com/imageupload/2012/11/15/0/image-108068-e1f8187c.jpg" style="max-width: 200px; max-height: 200px;" alt="İmage" title="Kliknij, aby powiększyć" /></a><br />
<br />
Teraz możesz wybrać, każdą "kość" z PPM lub malować wierzchołki z LPM. W okienku po lewej, wyższym suwakiem , możesz wybrać nową "wagę" (jaką chcesz malować, 0 = niebieski, 1 = czerwony). Z tymi "wagami", możesz wyregulować wpływ każdej kości na wierzchołki. <br />
<br />
<a href="javascript:void(0)" onclick="window.open('http://www.shapeloft.com/imageupload/2012/11/15/0/image-108070-0a914870.jpg', '', 'toolbar=no, height=768, width=1024');myWindow.focus();"><img loading="lazy" src="http://www.shapeloft.com/imageupload/2012/11/15/0/image-108070-0a914870.jpg" style="max-width: 200px; max-height: 200px;" alt="İmage" title="Kliknij, aby powiększyć" /></a><br />
<a href="javascript:void(0)" onclick="window.open('http://www.shapeloft.com/imageupload/2012/11/15/0/image-108071-507f4f1c.jpg', '', 'toolbar=no, height=768, width=1024');myWindow.focus();"><img loading="lazy" src="http://www.shapeloft.com/imageupload/2012/11/15/0/image-108071-507f4f1c.jpg" style="max-width: 200px; max-height: 200px;" alt="İmage" title="Kliknij, aby powiększyć" /></a><br />
<a href="javascript:void(0)" onclick="window.open('http://www.shapeloft.com/imageupload/2012/11/15/0/image-108072-51faf1d4.jpg', '', 'toolbar=no, height=768, width=1024');myWindow.focus();"><img loading="lazy" src="http://www.shapeloft.com/imageupload/2012/11/15/0/image-108072-51faf1d4.jpg" style="max-width: 200px; max-height: 200px;" alt="İmage" title="Kliknij, aby powiększyć" /></a><br />
<br />
W "buttons window" (domyślnie na dole), możesz wybrać na panelu "rectangle with yellow dots" w zakładce "armature bones" obok "BO:" nazwę kości. To jest bardzo ważne, ponieważ musisz "powiedzieć" OMSI, któa kość powinna być poruszana jak. W moim przypadku, małe kości, mają nazwy "Gelek_A" do "Gelenk_D", duża jest nieważne, dopóki się nie rusza.<br />
Do eksportu, musisz wyciągnąć mesh armatury i miechów w oddzielne pliki blendera. Następnie użyć "export all". Jeśli wszystko poszło dobrze, plik x powinien zawierać wszystkie nazwy kości jako nazwy grup wierzchołków. teraz skonwertuj pliki do o3d jak zawsze.<br />
<br />
Aby zaanimować "miechy", musisz stworzyć 4 obiekty pomocnicze, które opisują ruchy jako współrzędne <br />
<br />
<a href="javascript:void(0)" onclick="window.open('http://www.shapeloft.com/imageupload/2012/11/15/0/image-108073-d7ec2d57.jpg', '', 'toolbar=no, height=768, width=1024');myWindow.focus();"><img loading="lazy" src="http://www.shapeloft.com/imageupload/2012/11/15/0/image-108073-d7ec2d57.jpg" style="max-width: 200px; max-height: 200px;" alt="İmage" title="Kliknij, aby powiększyć" /></a><br />
<br />
Pierwsza (Dummy_A) będzie poruszać się o ćwierć, ostatnia wykona cały ruch przyczepy. Cztery obiekty pomocnicze muszą byc dodane w pierwszych punktach. co znaczy bezpośrednio za wszystkimi wpisami [texttexture] i przed pierwszym "normalnym" wpisem [mesh] i kolejność czterech wpisów jest również bardzo ważne, ponieważ połączenie do kości będzie wykonane przy użyciu wpisu [setbone] przez  indeks wpisu [mesh] obiektu pomocniczego.<br />
<br />
<span style="font-size: xx-small;" class="mycode_size">Poradnik tłumaczyłem dla siebie, ale postanowiłem się podzielić, może komuś się to przyda.</span>]]></description>
			<content:encoded><![CDATA[<span style="font-style: italic;" class="mycode_i">Tłumaczenie by Invis. Oryginał: </span> <a href="http://www.omnibussimulator.de/forum/index.php?page=Thread&amp;postID=185098#post185098" target="_blank" rel="noopener" class="mycode_url">http://www.omnibussimulator.de/forum/ind...post185098</a><br />
<br />
<br />
Po Pierwsze musiałem stworzyć model jak zawsze. <br />
<br />
<a href="javascript:void(0)" onclick="window.open('http://www.shapeloft.com/imageupload/2012/11/15/0/image-108063-b49b0678.jpg', '', 'toolbar=no, height=768, width=1024');myWindow.focus();"><img loading="lazy" src="http://www.shapeloft.com/imageupload/2012/11/15/0/image-108063-b49b0678.jpg" style="max-width: 200px; max-height: 200px;" alt="İmage" title="Kliknij, aby powiększyć" /></a><br />
<a href="javascript:void(0)" onclick="window.open('http://www.shapeloft.com/imageupload/2012/11/15/0/image-108064-bdabefba.jpg', '', 'toolbar=no, height=768, width=1024');myWindow.focus();"><img loading="lazy" src="http://www.shapeloft.com/imageupload/2012/11/15/0/image-108064-bdabefba.jpg" style="max-width: 200px; max-height: 200px;" alt="İmage" title="Kliknij, aby powiększyć" /></a><br />
<br />
Następnym krokiem jest stworzenie "armatury"<br />
<br />
<a href="javascript:void(0)" onclick="window.open('http://www.shapeloft.com/imageupload/2012/11/15/0/image-108065-c59b30eb.jpg', '', 'toolbar=no, height=768, width=1024');myWindow.focus();"><img loading="lazy" src="http://www.shapeloft.com/imageupload/2012/11/15/0/image-108065-c59b30eb.jpg" style="max-width: 200px; max-height: 200px;" alt="İmage" title="Kliknij, aby powiększyć" /></a><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Baaardzo ważne:</span> Pierwsza "kość" musi zaczynać się w punkcie 0 sceny (0/0/0) jak pokazano. W przeciwnym razie będzie w OMSI przesunięcie. Teraz musimy przełączyć się w "edit mode" i przesunąć "czoło" pierwszej kości jak pokazano na zdjęciu, wtedy stworzyć inne kości, przy użyciu funkcji "extrude" [E]. <span style="font-weight: bold;" class="mycode_b">Ważne:</span> Pozycja kości (wyłączając pierwszą) jest nieistotna fla OMSI, więc nie musisz pracować precyzyjnie w tym punkcie. Miło jest mieć możliwość testowania animacje z "pose mode" w blenderze.<br />
<br />
Teraz po pierwsze wybierz "miechy", potem "armature", naciśnij [CTRL]+[P] i wybierz "armature", następnie "Don't create groups".<br />
Teraz porządek wykonywanych czynności jest bardzo istotny: <br />
Po pierwsze wybierz "armature", kolejno "pose mode" i kliknij PPM na "miechach" ,wybierz wtedy "weight paint mode" <br />
<br />
<a href="javascript:void(0)" onclick="window.open('http://www.shapeloft.com/imageupload/2012/11/15/0/image-108068-e1f8187c.jpg', '', 'toolbar=no, height=768, width=1024');myWindow.focus();"><img loading="lazy" src="http://www.shapeloft.com/imageupload/2012/11/15/0/image-108068-e1f8187c.jpg" style="max-width: 200px; max-height: 200px;" alt="İmage" title="Kliknij, aby powiększyć" /></a><br />
<br />
Teraz możesz wybrać, każdą "kość" z PPM lub malować wierzchołki z LPM. W okienku po lewej, wyższym suwakiem , możesz wybrać nową "wagę" (jaką chcesz malować, 0 = niebieski, 1 = czerwony). Z tymi "wagami", możesz wyregulować wpływ każdej kości na wierzchołki. <br />
<br />
<a href="javascript:void(0)" onclick="window.open('http://www.shapeloft.com/imageupload/2012/11/15/0/image-108070-0a914870.jpg', '', 'toolbar=no, height=768, width=1024');myWindow.focus();"><img loading="lazy" src="http://www.shapeloft.com/imageupload/2012/11/15/0/image-108070-0a914870.jpg" style="max-width: 200px; max-height: 200px;" alt="İmage" title="Kliknij, aby powiększyć" /></a><br />
<a href="javascript:void(0)" onclick="window.open('http://www.shapeloft.com/imageupload/2012/11/15/0/image-108071-507f4f1c.jpg', '', 'toolbar=no, height=768, width=1024');myWindow.focus();"><img loading="lazy" src="http://www.shapeloft.com/imageupload/2012/11/15/0/image-108071-507f4f1c.jpg" style="max-width: 200px; max-height: 200px;" alt="İmage" title="Kliknij, aby powiększyć" /></a><br />
<a href="javascript:void(0)" onclick="window.open('http://www.shapeloft.com/imageupload/2012/11/15/0/image-108072-51faf1d4.jpg', '', 'toolbar=no, height=768, width=1024');myWindow.focus();"><img loading="lazy" src="http://www.shapeloft.com/imageupload/2012/11/15/0/image-108072-51faf1d4.jpg" style="max-width: 200px; max-height: 200px;" alt="İmage" title="Kliknij, aby powiększyć" /></a><br />
<br />
W "buttons window" (domyślnie na dole), możesz wybrać na panelu "rectangle with yellow dots" w zakładce "armature bones" obok "BO:" nazwę kości. To jest bardzo ważne, ponieważ musisz "powiedzieć" OMSI, któa kość powinna być poruszana jak. W moim przypadku, małe kości, mają nazwy "Gelek_A" do "Gelenk_D", duża jest nieważne, dopóki się nie rusza.<br />
Do eksportu, musisz wyciągnąć mesh armatury i miechów w oddzielne pliki blendera. Następnie użyć "export all". Jeśli wszystko poszło dobrze, plik x powinien zawierać wszystkie nazwy kości jako nazwy grup wierzchołków. teraz skonwertuj pliki do o3d jak zawsze.<br />
<br />
Aby zaanimować "miechy", musisz stworzyć 4 obiekty pomocnicze, które opisują ruchy jako współrzędne <br />
<br />
<a href="javascript:void(0)" onclick="window.open('http://www.shapeloft.com/imageupload/2012/11/15/0/image-108073-d7ec2d57.jpg', '', 'toolbar=no, height=768, width=1024');myWindow.focus();"><img loading="lazy" src="http://www.shapeloft.com/imageupload/2012/11/15/0/image-108073-d7ec2d57.jpg" style="max-width: 200px; max-height: 200px;" alt="İmage" title="Kliknij, aby powiększyć" /></a><br />
<br />
Pierwsza (Dummy_A) będzie poruszać się o ćwierć, ostatnia wykona cały ruch przyczepy. Cztery obiekty pomocnicze muszą byc dodane w pierwszych punktach. co znaczy bezpośrednio za wszystkimi wpisami [texttexture] i przed pierwszym "normalnym" wpisem [mesh] i kolejność czterech wpisów jest również bardzo ważne, ponieważ połączenie do kości będzie wykonane przy użyciu wpisu [setbone] przez  indeks wpisu [mesh] obiektu pomocniczego.<br />
<br />
<span style="font-size: xx-small;" class="mycode_size">Poradnik tłumaczyłem dla siebie, ale postanowiłem się podzielić, może komuś się to przyda.</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Budowa pojazdu - video tutoriale]]></title>
			<link>https://strefa-omsi.pl/Watek-OMSI-1-2-Budowa-pojazdu-video-tutoriale--4092</link>
			<pubDate>Thu, 23 Jan 2014 16:16:38 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://strefa-omsi.pl/member.php?action=profile&uid=739">Qla123</a>]]></dc:creator>
			<guid isPermaLink="false">https://strefa-omsi.pl/Watek-OMSI-1-2-Budowa-pojazdu-video-tutoriale--4092</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Poradniki jak konwertować swój pojazd do OMSI</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Odcinek 1 : Jak konwertować bryłę ? </span><br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/cJyAXUw_mn8" frameborder="0" allowfullscreen="true"></iframe></div></div></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Odcinek 2 : Koła i wycieraczki </span><br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/um0i1QT-5HA" frameborder="0" allowfullscreen="true"></iframe></div></div></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Odcinek 3 : Drzwi</span><br />
Film <div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/RTt6vrEXjtI" frameborder="0" allowfullscreen="true"></iframe></div></div></div>
Kod do drzwi <div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[mesh]<br />
drzwi2.o3d&nbsp;&nbsp;&lt;--- nazwa elementu drzwi &lt;drzwi otwierające się do wewnątrz lewe&gt;<br />
<br />
[viewpoint]<br />
0<br />
<br />
[visible]<br />
Nothahn_2_sw<br />
0<br />
<br />
[illumination_interior]<br />
5<br />
5<br />
5<br />
5<br />
<br />
[matl]<br />
N4016_Fenster_int.tga<br />
0<br />
<br />
[matl_envmap]<br />
N4016_envmap.bmp<br />
0.3<br />
 <br />
[matl_alpha]<br />
2<br />
<br />
[matl_noZwrite]<br />
<br />
[matl]<br />
N4016_Regen.tga<br />
0<br />
<br />
[matl_alpha]<br />
2<br />
<br />
[alphascale]<br />
Rain_Window_Front_Wetness<br />
<br />
[newanim]<br />
origin_trans<br />
1.218&nbsp;&nbsp;&nbsp;&nbsp;&lt;--- dane z miejsca styku widełek z drzwiami<br />
2.122&nbsp;&nbsp;&nbsp;&nbsp;&lt;--- dane z miejsca styku widełek z drzwiami<br />
0<br />
origin_rot_x<br />
0<br />
origin_rot_y<br />
-90<br />
origin_rot_z<br />
0<br />
anim_rot<br />
door_2<br />
172<br />
<br />
[newanim]<br />
origin_trans<br />
1.170&nbsp;&nbsp;&nbsp;&nbsp;&lt;--- dane z głównej rurki widełek<br />
2.440&nbsp;&nbsp;&nbsp;&nbsp;&lt;--- dane z głównej rurki widełek<br />
0<br />
origin_rot_x<br />
0<br />
origin_rot_y<br />
-90<br />
origin_rot_z<br />
0<br />
anim_rot<br />
door_2<br />
-83<br />
<br />
[mesh]<br />
drzwi3.o3d &lt;--- nazwa pliku drzwi &lt;drzwi otwierające się w prawo do wewnątrz&gt;<br />
<br />
[viewpoint]<br />
0<br />
<br />
[visible]<br />
Nothahn_2_sw<br />
0<br />
<br />
[illumination_interior]<br />
5<br />
5<br />
5<br />
5<br />
<br />
[matl]<br />
N4016_Fenster_int.tga<br />
0<br />
<br />
[matl_envmap]<br />
N4016_envmap.bmp<br />
0.3<br />
 <br />
[matl_alpha]<br />
2<br />
<br />
[matl_noZwrite]<br />
<br />
[matl]<br />
N4016_Regen.tga<br />
0<br />
<br />
[matl_alpha]<br />
2<br />
<br />
[alphascale]<br />
Rain_Window_Front_Wetness<br />
<br />
[newanim]<br />
origin_trans<br />
1.208&nbsp;&nbsp;&lt;-- dane z miejsca styku widełek z drzwiami<br />
1.203&nbsp;&nbsp;&lt;-- dane z miejsca styku widełek z drzwiami<br />
0<br />
origin_rot_x<br />
0<br />
origin_rot_y<br />
-90<br />
origin_rot_z<br />
0<br />
anim_rot<br />
door_2<br />
-172<br />
<br />
[newanim]<br />
origin_trans<br />
1.170&nbsp;&nbsp;&lt;---- dane z głównej rurki widełek<br />
0.881 &lt;--- dane z głównej rurki widełek<br />
0<br />
origin_rot_x<br />
0<br />
origin_rot_y<br />
-90<br />
origin_rot_z<br />
0<br />
anim_rot<br />
door_2<br />
83<br />
<br />
#</code></div></div></div></div></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Poradnik w formie pisemnej by NickTM : <a href="http://strefa-omsi.pl/Watek-Wielki-poradnik-dotyczacy-tworzenia-modeli-do-OMSI--79" target="_blank" rel="noopener" class="mycode_url">http://strefa-omsi.pl/Watek-Wielki-porad...o-OMSI--79</a></span>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Poradniki jak konwertować swój pojazd do OMSI</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Odcinek 1 : Jak konwertować bryłę ? </span><br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/cJyAXUw_mn8" frameborder="0" allowfullscreen="true"></iframe></div></div></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Odcinek 2 : Koła i wycieraczki </span><br />
<div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/um0i1QT-5HA" frameborder="0" allowfullscreen="true"></iframe></div></div></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Odcinek 3 : Drzwi</span><br />
Film <div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/RTt6vrEXjtI" frameborder="0" allowfullscreen="true"></iframe></div></div></div>
Kod do drzwi <div style="margin:20px; margin-left:0px; margin-top:5px"><div class="newsTicker"><input class="button2 btnlite" type="button" value="Pokaż spoiler" style="text-align:center;width:115px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';      this.innerText = ''; this.value = 'Ukryj spoiler'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Pokaż spoiler'}" /></div><div class="newsTicker"><div style="display: none;"><div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[mesh]<br />
drzwi2.o3d&nbsp;&nbsp;&lt;--- nazwa elementu drzwi &lt;drzwi otwierające się do wewnątrz lewe&gt;<br />
<br />
[viewpoint]<br />
0<br />
<br />
[visible]<br />
Nothahn_2_sw<br />
0<br />
<br />
[illumination_interior]<br />
5<br />
5<br />
5<br />
5<br />
<br />
[matl]<br />
N4016_Fenster_int.tga<br />
0<br />
<br />
[matl_envmap]<br />
N4016_envmap.bmp<br />
0.3<br />
 <br />
[matl_alpha]<br />
2<br />
<br />
[matl_noZwrite]<br />
<br />
[matl]<br />
N4016_Regen.tga<br />
0<br />
<br />
[matl_alpha]<br />
2<br />
<br />
[alphascale]<br />
Rain_Window_Front_Wetness<br />
<br />
[newanim]<br />
origin_trans<br />
1.218&nbsp;&nbsp;&nbsp;&nbsp;&lt;--- dane z miejsca styku widełek z drzwiami<br />
2.122&nbsp;&nbsp;&nbsp;&nbsp;&lt;--- dane z miejsca styku widełek z drzwiami<br />
0<br />
origin_rot_x<br />
0<br />
origin_rot_y<br />
-90<br />
origin_rot_z<br />
0<br />
anim_rot<br />
door_2<br />
172<br />
<br />
[newanim]<br />
origin_trans<br />
1.170&nbsp;&nbsp;&nbsp;&nbsp;&lt;--- dane z głównej rurki widełek<br />
2.440&nbsp;&nbsp;&nbsp;&nbsp;&lt;--- dane z głównej rurki widełek<br />
0<br />
origin_rot_x<br />
0<br />
origin_rot_y<br />
-90<br />
origin_rot_z<br />
0<br />
anim_rot<br />
door_2<br />
-83<br />
<br />
[mesh]<br />
drzwi3.o3d &lt;--- nazwa pliku drzwi &lt;drzwi otwierające się w prawo do wewnątrz&gt;<br />
<br />
[viewpoint]<br />
0<br />
<br />
[visible]<br />
Nothahn_2_sw<br />
0<br />
<br />
[illumination_interior]<br />
5<br />
5<br />
5<br />
5<br />
<br />
[matl]<br />
N4016_Fenster_int.tga<br />
0<br />
<br />
[matl_envmap]<br />
N4016_envmap.bmp<br />
0.3<br />
 <br />
[matl_alpha]<br />
2<br />
<br />
[matl_noZwrite]<br />
<br />
[matl]<br />
N4016_Regen.tga<br />
0<br />
<br />
[matl_alpha]<br />
2<br />
<br />
[alphascale]<br />
Rain_Window_Front_Wetness<br />
<br />
[newanim]<br />
origin_trans<br />
1.208&nbsp;&nbsp;&lt;-- dane z miejsca styku widełek z drzwiami<br />
1.203&nbsp;&nbsp;&lt;-- dane z miejsca styku widełek z drzwiami<br />
0<br />
origin_rot_x<br />
0<br />
origin_rot_y<br />
-90<br />
origin_rot_z<br />
0<br />
anim_rot<br />
door_2<br />
-172<br />
<br />
[newanim]<br />
origin_trans<br />
1.170&nbsp;&nbsp;&lt;---- dane z głównej rurki widełek<br />
0.881 &lt;--- dane z głównej rurki widełek<br />
0<br />
origin_rot_x<br />
0<br />
origin_rot_y<br />
-90<br />
origin_rot_z<br />
0<br />
anim_rot<br />
door_2<br />
83<br />
<br />
#</code></div></div></div></div></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Poradnik w formie pisemnej by NickTM : <a href="http://strefa-omsi.pl/Watek-Wielki-poradnik-dotyczacy-tworzenia-modeli-do-OMSI--79" target="_blank" rel="noopener" class="mycode_url">http://strefa-omsi.pl/Watek-Wielki-porad...o-OMSI--79</a></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[passengercabin.cfg - pozycje pasażerów, kierowcy i innych elementów]]></title>
			<link>https://strefa-omsi.pl/Watek-OMSI-1-2-passengercabin-cfg-pozycje-pasazerow-kierowcy-i-innych-elementow--2211</link>
			<pubDate>Sat, 17 Aug 2013 00:27:15 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://strefa-omsi.pl/member.php?action=profile&uid=1">skawek</a>]]></dc:creator>
			<guid isPermaLink="false">https://strefa-omsi.pl/Watek-OMSI-1-2-passengercabin-cfg-pozycje-pasazerow-kierowcy-i-innych-elementow--2211</guid>
			<description><![CDATA[Tym razem skupię się na opisaniu pliku passengercabin.cfg<br />
Treść dostępna jest wyłącznie dla zarejestrowanych i zalogowanych.<br />
<br />
W pliku tym deklarujemy pozycję kierowcy, pozycje pasażerów, wejścia i wyjścia z pojazdu, współrzędne kasowników i wydawania biletów oraz reszty.<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">[drivpos]</span></span><br />
 Współrzędne określające pozycję kierowcy.<br />
<br />
Przykładowy wpis powinien wyglądać następująco:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[drivpos]<br />
-0.620<br />
6.27<br />
1.45<br />
0.4<br />
0</code></div></div>Pierwsze trzy linijki za słowem kluczowym, to pozycja hmm... powiedzmy, że miejsca między pośladkami siedzącego kierowcy (dokładnie w środku, wybaczcie trudno to inaczej wyjaśnić<img src="https://strefa-omsi.pl/images/emotki2/emota_tounge.png" alt=":P" title=":P" class="smilie smilie_42" /> ). Oczywiście pierwsza współrzędna jest iksową, druga igrekową, trzecia zetową. Zgodnie z obrazkiem:<br />
<a href="http://strefa-omsi.pl/attachment.php?aid=265" target="_blank" rel="noopener" class="mycode_url">http://strefa-omsi.pl/attachment.php?aid=265</a><br />
Czwarta liczba określa wysokość siedziska fotela mierząc od podłogi - jeśli tu podamy 0 kierowca będzie stał. Ostatnia natomiast to obrót podawany w stopniach. Jeśli ustawimy go przykładowo na 90 - wtedy pozycja kierowcy będzie przekręcona o 90 stopni w prawo, jeśli jednak na -45 wtedy o 45 stopni w lewo. <br />
<hr class="mycode_hr" />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">[passpos]</span></span><br />
 Pozycje pasażerów w pojeździe.<br />
<br />
Przykładowa deklaracja wygląda identycznie do poprzedniej, zmianą jest tylko inne słowo kluczowe:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[passpos]<br />
-0.771<br />
5.331<br />
1.291<br />
0.50<br />
0</code></div></div>Trzy pierwsze to więc współrzędne siedzenia bądź miejsca pośrodku stóp, jeśli jest to miejsce stojące, kolejna określa wysokość siedziska ponad podłogą (jeśli miejsce jest stojące, wartość należy ustawić na 0), a ostatnia to obrót wg. reguł podanych wcześniej. Liczba powyższych deklaracji wpływa na liczbę osób, które będą mogły wsiąść do pojazdu. Jeśli wpisów [passpos] będzie załóżmy 10, to większej liczby pasażerów nie uświadczymy. <br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">[entry]</span></span><br />
 Numer punktu ścieżki najbliższy wejścia do pojazdu.<br />
<br />
Może troszkę zamotałem powyższy opis. Podajmy więc przykład:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[entry]<br />
0<br />
<br />
[entry]<br />
22</code></div></div>Takie dwa wpisy oznaczają, że chcąc wejść do pojazdu, pasażerowie muszą zbliżyć się do punktu pathpnt (patrz temat <a href="http://strefa-omsi.pl/Watek-paths-cfg-sciezki-wewnatrz-pojazdu-i-nie-tylko--2152" target="_blank" rel="noopener" class="mycode_url">http://strefa-omsi.pl/Watek-paths-cfg-sc...ylko--2152</a>) oznaczonego numerem 0 lub 22. Mamy zatem dwa wejścia do pojazdu Oczywiście należy pamiętać, że punkty te w pliku paths.cfg nie są numerowane, jeśli nie zrobimy tego sami. Szczegóły w podanym przed chwilą temacie.<br />
<br />
Pod odpowiednimi wpisami [entry] można dodać słowa pomocnicze:<br />
<span style="font-style: italic;" class="mycode_i">{noticketsale}</span> - oznacza, że przy tym wejściu nie jest "prowadzona" sprzedaż biletów, a więc wpisanie powyższego powoduje, że do tego wejścia nie będzie podchodziła osoba, która chce kupić bilet<br />
<span style="font-style: italic;" class="mycode_i">{withbutton}</span> - wejście z ciepłym guzikiem z zewnątrz, oczywiście funkcję taką należy najpierw ująć w skryptach, aby zadziałała (szczegóły w temacie: <a href="http://strefa-omsi.pl/Watek-Road-to-OMSI-2-patch-1-04--1088" target="_blank" rel="noopener" class="mycode_url">http://strefa-omsi.pl/Watek-Road-to-OMSI...1-04--1088</a>).<br />
<br />
Kolejność wpisów [entry] jest dość ważna ze względu na skrypty. Pierwszy wpis będzie odpowiadał wyrażeniu <span style="font-style: italic;" class="mycode_i">PAX_Entry0_Open</span> (na przykład <span style="font-style: italic;" class="mycode_i">S.L.PAX_Entry0_Open</span>), drugi wpis - <span style="font-style: italic;" class="mycode_i">PAX_Entry1_Open</span> i tak dalej. <br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">[exit]</span></span><br />
 Numer punktu ścieżki najbliższy wyjścia z pojazdu.<br />
<br />
Sytuacja adekwatna do poprzedniej, wpisujemy na przykład:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[exit]<br />
22<br />
<br />
[exit]<br />
25</code></div></div>Są zatem zadeklarowane dwa wyjścia z pojazdu. Pasażerowie chcący wysiąść będą kierowali się do tych właśnie punktów ustalonych przez plik paths.cfg<br />
<br />
Pomocnicze słowa kluczowe nie mają tutaj zastosowania.<br />
<br />
Kolejność wpisów [exit] także ma znaczenie dla skryptów. Pierwszy z nich jest opisywany wyrażeniem <span style="font-style: italic;" class="mycode_i">PAX_Exit0_Open</span>, drugi <span style="font-style: italic;" class="mycode_i">PAX_Exit1_Open</span> itd.<br />
Krótki opis tych wyrażeń skryptowych (zarówno dla wejść jak i wyjść) można znaleźć tutaj: <a href="http://strefa-omsi.pl/Watek-Zmienne-systemowe-i-predefiniowane-zmienne-lokalne-w-OMSI--1164" target="_blank" rel="noopener" class="mycode_url">http://strefa-omsi.pl/Watek-Zmienne-syst...OMSI--1164</a> <br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">[stamper]</span></span><br />
 Numer punktu ścieżki najbliższy kasownikowi i jego pozycja.<br />
<br />
Deklaracja wygląda na przykład tak:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[stamper]<br />
4<br />
0.508<br />
3.898<br />
1.924</code></div></div>Cyferka po słowie kluczowym to numer punktu ścieżki pathpnt (o tym jest już kilka słów wyżej), który jest najbliższy pozycji kasownika. Tam właśnie pasażerowie będą się zatrzymywać aby "skasować" bilet. Następnie podawane są jego współrzędne - kolejno po osi X, Y i Z. Z tego co wyczytałem - kasownik może być tylko jeden. Skorzystanie z niego wyzwala także dźwięk poprzez wyzwalacz <span style="font-style: italic;" class="mycode_i">ev_Stamper</span>. <br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">[ticket_sale]</span></span><br />
 Punkt ścieżki odpowiadający miejscu kupna biletu.<br />
<br />
Czyli to takie miejsce, gdzie pasażer przystaje chcąc kupić bilet u kierowcy. Jego deklaracja:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[ticket_sale]<br />
2<br />
-0.189<br />
4.519<br />
1.614</code></div></div>Adekwatnie do poprzedniego - pierwsza cyfra odpowiada numerowi punktu ścieżki pathpnt w paths.cfg , a następnie podawane są współrzędne punktu (X, Y, Z), do którego pasażer sięga, by odebrać bilet. Nie jest to jednak pozycja samego biletu. <br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">[ticket_sale_money_point]</span></span><br />
 Miejsce określające pozycję przyjmowania pieniędzy od pasażerów oraz wydawania im biletów.<br />
<br />
W zasadzie opis już wyjaśnia wszystko, więc od razu zajmujemy się wpisem:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[ticket_sale_money_point]<br />
0.050<br />
7.050<br />
1.697<br />
0.035<br />
0.035</code></div></div>Pierwsze trzy linijki za słowem kluczowym to współrzędne X, Y i Z punktu, gdzie ludzie będą kładli kasiorkę, a kierowca bilecik. Dwie ostatnie to tzw. odchylenia po współrzędnej X i Y, aby to dobrze zobrazować przedstawiam mini-grafikę (mistrz Painta powraca):<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://strefa-omsi.pl/images/attachtypes/image.gif" title="GIF Image" border="0" alt=".gif" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=271" target="_blank" title="">passcab1.gif</a> (Rozmiar: 7.35 KB / Pobrań: 205)
<!-- end: postbit_attachments_attachment --><br />
A więc wpisanie odchyleń od głównego punktu tworzy nam pole (kwadrat lub prostokąt), w którym to będą rozmieszczane pieniądze i bilet.<br />
<br />
Podczas zakupów używane są wyzwalacze: <span style="font-style: italic;" class="mycode_i">ev_ticketsale_giveticket</span> , <span style="font-style: italic;" class="mycode_i">ev_ticketsale_givemoney</span> i <span style="font-style: italic;" class="mycode_i">ev_ticketsale_taketicket</span> do obsługi dźwięków. <br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">[ticket_sale_change_point]</span></span><br />
 Miejsce, gdzie pojawia się wydawana reszta.<br />
<br />
Właściwie wszystko wygląda identycznie jak przy poprzednim słowie kluczowym, przykład:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[ticket_sale_change_point]<br />
0.050<br />
7.050<br />
1.697<br />
0.035<br />
0.035</code></div></div>Podajemy więc słowo kluczowe, następnie trzy współrzędne i odchyły po osi X i Y. Reguły są identyczne jak poprzednio. Punkt ten może, ale nie musi pokrywać się z miejscem na pieniądze od pasażerów i kupowany bilet. <br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">[linkToPrevVeh] oraz [linkToNextVeh]</span></span><br />
 Miejsce łączące ścieżki pasażerów między członami pojazdu przegubowego.<br />
<br />
Przykład:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[linkToPrevVeh]<br />
16</code></div></div>lub<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[linkToNextVeh]<br />
0</code></div></div><br />
Słowa [linkToPrevVeh] używamy w pierwszym członie (z kierowcą),  [linkToNextVeh] w przyczepce. Pod tymi słowami wystarczy podać punkt z pliku paths.cfg, gdzie ścieżki będą się łączyć.<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Poradnik został napisany wyłącznie dla Forum <a href="http://strefa-omsi.pl" target="_blank" rel="noopener" class="mycode_url">http://strefa-omsi.pl</a>  i nie może być rozpowszechniany we fragmentach lub w całości na innych stronach bez zezwolenia głównego Autora.</span>]]></description>
			<content:encoded><![CDATA[Tym razem skupię się na opisaniu pliku passengercabin.cfg<br />
Treść dostępna jest wyłącznie dla zarejestrowanych i zalogowanych.<br />
<br />
W pliku tym deklarujemy pozycję kierowcy, pozycje pasażerów, wejścia i wyjścia z pojazdu, współrzędne kasowników i wydawania biletów oraz reszty.<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">[drivpos]</span></span><br />
 Współrzędne określające pozycję kierowcy.<br />
<br />
Przykładowy wpis powinien wyglądać następująco:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[drivpos]<br />
-0.620<br />
6.27<br />
1.45<br />
0.4<br />
0</code></div></div>Pierwsze trzy linijki za słowem kluczowym, to pozycja hmm... powiedzmy, że miejsca między pośladkami siedzącego kierowcy (dokładnie w środku, wybaczcie trudno to inaczej wyjaśnić<img src="https://strefa-omsi.pl/images/emotki2/emota_tounge.png" alt=":P" title=":P" class="smilie smilie_42" /> ). Oczywiście pierwsza współrzędna jest iksową, druga igrekową, trzecia zetową. Zgodnie z obrazkiem:<br />
<a href="http://strefa-omsi.pl/attachment.php?aid=265" target="_blank" rel="noopener" class="mycode_url">http://strefa-omsi.pl/attachment.php?aid=265</a><br />
Czwarta liczba określa wysokość siedziska fotela mierząc od podłogi - jeśli tu podamy 0 kierowca będzie stał. Ostatnia natomiast to obrót podawany w stopniach. Jeśli ustawimy go przykładowo na 90 - wtedy pozycja kierowcy będzie przekręcona o 90 stopni w prawo, jeśli jednak na -45 wtedy o 45 stopni w lewo. <br />
<hr class="mycode_hr" />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">[passpos]</span></span><br />
 Pozycje pasażerów w pojeździe.<br />
<br />
Przykładowa deklaracja wygląda identycznie do poprzedniej, zmianą jest tylko inne słowo kluczowe:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[passpos]<br />
-0.771<br />
5.331<br />
1.291<br />
0.50<br />
0</code></div></div>Trzy pierwsze to więc współrzędne siedzenia bądź miejsca pośrodku stóp, jeśli jest to miejsce stojące, kolejna określa wysokość siedziska ponad podłogą (jeśli miejsce jest stojące, wartość należy ustawić na 0), a ostatnia to obrót wg. reguł podanych wcześniej. Liczba powyższych deklaracji wpływa na liczbę osób, które będą mogły wsiąść do pojazdu. Jeśli wpisów [passpos] będzie załóżmy 10, to większej liczby pasażerów nie uświadczymy. <br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">[entry]</span></span><br />
 Numer punktu ścieżki najbliższy wejścia do pojazdu.<br />
<br />
Może troszkę zamotałem powyższy opis. Podajmy więc przykład:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[entry]<br />
0<br />
<br />
[entry]<br />
22</code></div></div>Takie dwa wpisy oznaczają, że chcąc wejść do pojazdu, pasażerowie muszą zbliżyć się do punktu pathpnt (patrz temat <a href="http://strefa-omsi.pl/Watek-paths-cfg-sciezki-wewnatrz-pojazdu-i-nie-tylko--2152" target="_blank" rel="noopener" class="mycode_url">http://strefa-omsi.pl/Watek-paths-cfg-sc...ylko--2152</a>) oznaczonego numerem 0 lub 22. Mamy zatem dwa wejścia do pojazdu Oczywiście należy pamiętać, że punkty te w pliku paths.cfg nie są numerowane, jeśli nie zrobimy tego sami. Szczegóły w podanym przed chwilą temacie.<br />
<br />
Pod odpowiednimi wpisami [entry] można dodać słowa pomocnicze:<br />
<span style="font-style: italic;" class="mycode_i">{noticketsale}</span> - oznacza, że przy tym wejściu nie jest "prowadzona" sprzedaż biletów, a więc wpisanie powyższego powoduje, że do tego wejścia nie będzie podchodziła osoba, która chce kupić bilet<br />
<span style="font-style: italic;" class="mycode_i">{withbutton}</span> - wejście z ciepłym guzikiem z zewnątrz, oczywiście funkcję taką należy najpierw ująć w skryptach, aby zadziałała (szczegóły w temacie: <a href="http://strefa-omsi.pl/Watek-Road-to-OMSI-2-patch-1-04--1088" target="_blank" rel="noopener" class="mycode_url">http://strefa-omsi.pl/Watek-Road-to-OMSI...1-04--1088</a>).<br />
<br />
Kolejność wpisów [entry] jest dość ważna ze względu na skrypty. Pierwszy wpis będzie odpowiadał wyrażeniu <span style="font-style: italic;" class="mycode_i">PAX_Entry0_Open</span> (na przykład <span style="font-style: italic;" class="mycode_i">S.L.PAX_Entry0_Open</span>), drugi wpis - <span style="font-style: italic;" class="mycode_i">PAX_Entry1_Open</span> i tak dalej. <br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">[exit]</span></span><br />
 Numer punktu ścieżki najbliższy wyjścia z pojazdu.<br />
<br />
Sytuacja adekwatna do poprzedniej, wpisujemy na przykład:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[exit]<br />
22<br />
<br />
[exit]<br />
25</code></div></div>Są zatem zadeklarowane dwa wyjścia z pojazdu. Pasażerowie chcący wysiąść będą kierowali się do tych właśnie punktów ustalonych przez plik paths.cfg<br />
<br />
Pomocnicze słowa kluczowe nie mają tutaj zastosowania.<br />
<br />
Kolejność wpisów [exit] także ma znaczenie dla skryptów. Pierwszy z nich jest opisywany wyrażeniem <span style="font-style: italic;" class="mycode_i">PAX_Exit0_Open</span>, drugi <span style="font-style: italic;" class="mycode_i">PAX_Exit1_Open</span> itd.<br />
Krótki opis tych wyrażeń skryptowych (zarówno dla wejść jak i wyjść) można znaleźć tutaj: <a href="http://strefa-omsi.pl/Watek-Zmienne-systemowe-i-predefiniowane-zmienne-lokalne-w-OMSI--1164" target="_blank" rel="noopener" class="mycode_url">http://strefa-omsi.pl/Watek-Zmienne-syst...OMSI--1164</a> <br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">[stamper]</span></span><br />
 Numer punktu ścieżki najbliższy kasownikowi i jego pozycja.<br />
<br />
Deklaracja wygląda na przykład tak:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[stamper]<br />
4<br />
0.508<br />
3.898<br />
1.924</code></div></div>Cyferka po słowie kluczowym to numer punktu ścieżki pathpnt (o tym jest już kilka słów wyżej), który jest najbliższy pozycji kasownika. Tam właśnie pasażerowie będą się zatrzymywać aby "skasować" bilet. Następnie podawane są jego współrzędne - kolejno po osi X, Y i Z. Z tego co wyczytałem - kasownik może być tylko jeden. Skorzystanie z niego wyzwala także dźwięk poprzez wyzwalacz <span style="font-style: italic;" class="mycode_i">ev_Stamper</span>. <br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">[ticket_sale]</span></span><br />
 Punkt ścieżki odpowiadający miejscu kupna biletu.<br />
<br />
Czyli to takie miejsce, gdzie pasażer przystaje chcąc kupić bilet u kierowcy. Jego deklaracja:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[ticket_sale]<br />
2<br />
-0.189<br />
4.519<br />
1.614</code></div></div>Adekwatnie do poprzedniego - pierwsza cyfra odpowiada numerowi punktu ścieżki pathpnt w paths.cfg , a następnie podawane są współrzędne punktu (X, Y, Z), do którego pasażer sięga, by odebrać bilet. Nie jest to jednak pozycja samego biletu. <br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">[ticket_sale_money_point]</span></span><br />
 Miejsce określające pozycję przyjmowania pieniędzy od pasażerów oraz wydawania im biletów.<br />
<br />
W zasadzie opis już wyjaśnia wszystko, więc od razu zajmujemy się wpisem:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[ticket_sale_money_point]<br />
0.050<br />
7.050<br />
1.697<br />
0.035<br />
0.035</code></div></div>Pierwsze trzy linijki za słowem kluczowym to współrzędne X, Y i Z punktu, gdzie ludzie będą kładli kasiorkę, a kierowca bilecik. Dwie ostatnie to tzw. odchylenia po współrzędnej X i Y, aby to dobrze zobrazować przedstawiam mini-grafikę (mistrz Painta powraca):<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://strefa-omsi.pl/images/attachtypes/image.gif" title="GIF Image" border="0" alt=".gif" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=271" target="_blank" title="">passcab1.gif</a> (Rozmiar: 7.35 KB / Pobrań: 205)
<!-- end: postbit_attachments_attachment --><br />
A więc wpisanie odchyleń od głównego punktu tworzy nam pole (kwadrat lub prostokąt), w którym to będą rozmieszczane pieniądze i bilet.<br />
<br />
Podczas zakupów używane są wyzwalacze: <span style="font-style: italic;" class="mycode_i">ev_ticketsale_giveticket</span> , <span style="font-style: italic;" class="mycode_i">ev_ticketsale_givemoney</span> i <span style="font-style: italic;" class="mycode_i">ev_ticketsale_taketicket</span> do obsługi dźwięków. <br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">[ticket_sale_change_point]</span></span><br />
 Miejsce, gdzie pojawia się wydawana reszta.<br />
<br />
Właściwie wszystko wygląda identycznie jak przy poprzednim słowie kluczowym, przykład:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[ticket_sale_change_point]<br />
0.050<br />
7.050<br />
1.697<br />
0.035<br />
0.035</code></div></div>Podajemy więc słowo kluczowe, następnie trzy współrzędne i odchyły po osi X i Y. Reguły są identyczne jak poprzednio. Punkt ten może, ale nie musi pokrywać się z miejscem na pieniądze od pasażerów i kupowany bilet. <br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">[linkToPrevVeh] oraz [linkToNextVeh]</span></span><br />
 Miejsce łączące ścieżki pasażerów między członami pojazdu przegubowego.<br />
<br />
Przykład:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[linkToPrevVeh]<br />
16</code></div></div>lub<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[linkToNextVeh]<br />
0</code></div></div><br />
Słowa [linkToPrevVeh] używamy w pierwszym członie (z kierowcą),  [linkToNextVeh] w przyczepce. Pod tymi słowami wystarczy podać punkt z pliku paths.cfg, gdzie ścieżki będą się łączyć.<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Poradnik został napisany wyłącznie dla Forum <a href="http://strefa-omsi.pl" target="_blank" rel="noopener" class="mycode_url">http://strefa-omsi.pl</a>  i nie może być rozpowszechniany we fragmentach lub w całości na innych stronach bez zezwolenia głównego Autora.</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[paths.cfg - ścieżki wewnątrz pojazdu i nie tylko]]></title>
			<link>https://strefa-omsi.pl/Watek-OMSI-1-2-paths-cfg-sciezki-wewnatrz-pojazdu-i-nie-tylko--2152</link>
			<pubDate>Mon, 12 Aug 2013 13:29:58 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://strefa-omsi.pl/member.php?action=profile&uid=1">skawek</a>]]></dc:creator>
			<guid isPermaLink="false">https://strefa-omsi.pl/Watek-OMSI-1-2-paths-cfg-sciezki-wewnatrz-pojazdu-i-nie-tylko--2152</guid>
			<description><![CDATA[Czas na kolejny poradnik dotyczący tym razem plików paths.cfg<br />
Treść dostępna jest wyłącznie dla zarejestrowanych i zalogowanych.<br />
<br />
Za co odpowiedzialny jest ten plik? Przede wszystkim za ścieżki poruszania się pasażerów wewnątrz pojazdu, ale nie tylko. Objaśnie pokrótce wszystkie słowa kluczowe, które możemy tam umieszczać oraz dane niezbędne do ich zdefiniowania.<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">[stepsoundpack]</span></span><br />
 To słowo kluczowe definiuje pliki dźwiękowe odtwarzane jako dźwięki kroków po pokładzie naszego pojazdu w trakcie rozgrywki.<br />
<br />
Struktura tego wpisy wygląda następująco:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[stepsoundpack]<br />
5<br />
Step_01.wav<br />
Step_02.wav<br />
Step_03.wav<br />
Step_04.wav<br />
Step_05.wav</code></div></div>Pierwsza linijka to oczywiście słowo kluczowe, cyfra poniżej to liczba wpisów z nim powiązanych, czyli na chłopski rozum - liczba plików dźwiękowych. Następnie wymienione są nazwy plików tych plików. Pamiętajmy, że muszą być w formacie .wav i znajdować się w podfolderze \Sounds\Passengers <span style="font-weight: bold;" class="mycode_b">głównego katalogu gry</span> (a nie katalogu pojazdu).<br />
Naturalnie, możemy definiować kilka takich paczek, na przykładzie standardowych MAN-ów wygląda to następująco:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>0 - Normal:<br />
[stepsoundpack]<br />
5<br />
Step_01.wav<br />
Step_02.wav<br />
Step_03.wav<br />
Step_04.wav<br />
Step_05.wav<br />
<br />
1 - Vorne oben:<br />
[stepsoundpack]<br />
3<br />
Step_OV_01.wav<br />
Step_OV_02.wav<br />
Step_OV_03.wav<br />
<br />
2 - Treppe:<br />
[stepsoundpack]<br />
6<br />
Step_St_01.wav<br />
Step_St_02.wav<br />
Step_St_03.wav<br />
Step_St_04.wav<br />
Step_St_05.wav<br />
Step_St_06.wav</code></div></div>A więc mamy tutaj trzy deklaracje paczek dźwiękowych - kroki "normalne", te na górnym pokładzie, oraz odtwarzane podczas używania schodów. Jak przypisać je do poszczególnych ścieżek? Zajmiemy się tym deczko później. Na razie zapamiętajmy, że ich numeracja zaczyna się od zera. Czyli indeks 0, odpowiada za kroki "normalne", 1 za górny pokład a 2 za schody. Oprócz tego trzeba nadmienić, że <span style="font-weight: bold;" class="mycode_b">deklaracje paczek dźwiękowych powinny być na samym początku</span> pliku paths.cfg <br />
<hr class="mycode_hr" />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">[pathpnt]</span></span><br />
 Te wpisy odpowiadają za deklarację punktów ścieżek pasażerów (czyli punktów, przez które będą oni przechodzić przemieszczając się w pojeździe).<br />
<br />
Aby dokładnie ustalić te punkty, musimy mieć przede wszystkim model 3D danego pojazdu, dzięki czemu punkty możemy ustalić co do centymetra.<br />
<br />
Sam wpis wygląda na przykład tak:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[pathpnt]<br />
1.25<br />
5.018<br />
0.46</code></div></div>Poruszamy się w trójwymiarowym układzie współrzędnych. Pierwsza wartość oznacza współrzędną po osi X, druga - po osi Y, trzecia natomiast po osi Z.<br />
Zwyczajowo przyjęło się, że osie ustalane są w sposób następujący:<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://strefa-omsi.pl/images/attachtypes/image.gif" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=265" target="_blank" title="">paths_wsp.jpg</a> (Rozmiar: 28.56 KB / Pobrań: 807)
<!-- end: postbit_attachments_attachment --><br />
<br />
Każdy taki wpis warto poprzedzić cyfrą (licząc od zera), dzięki czemu późniejsze ich połączenie ich jest bajecznie proste, chodzi mi dokładnie o taką strukturę:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>0<br />
[pathpnt]<br />
1.25<br />
5.018<br />
0.46<br />
<br />
1<br />
[pathpnt]<br />
0.551<br />
5.018<br />
0.57<br />
<br />
2<br />
[pathpnt]<br />
0.223<br />
4.608<br />
0.57</code></div></div>itd...<br />
<br />
Aby uzyskać współrzędne, należy otworzyć model w programie 3D i w zależności od tegoż - odpowiednio je "pobrać". Jeśli chodzi o Blendera - najprostszym sposobem jest chyba "rozebranie" pojazdu z karoserii i innych elementów, które będą przeszkadzać - zostawiając jedynie podłogę oraz ewentualnie inne miejsca, po których poruszać się będą pasażerowie. Następnie tworzymy sobie mały sześcianik, klikamy na niego prawym klawiszem myszy, wciskamy TAB i N, w pasku, który się nam pojawi wciskamy "Global", dzięki czemu uzyskamy punkty w odniesieniu do głównego układu współrzędnych pojazdu. Teraz wystarczy przesuwać sześcianik po miejscach, po których ludzie będą się poruszać spisywać dane i po kolei tworzyć pathpointy w pliku. Punkty, które powinniśmy brać pod uwagę, to punkty <span style="font-weight: bold;" class="mycode_b">dokładnie w środku</span> utworzonego sześcianu (więc trzeba go odpowiednio wyrównywać).<br />
<br />
Praktyka pokazuje, że współrzędne nie muszą być super precyzyjne, chyba, że jesteśmy perfekcjonistami. Wkrótce dołączę tutaj screeny z Blendera dla "mniej kumatych" <img src="https://strefa-omsi.pl/images/emotki2/emota_tounge.png" alt=":P" title=":P" class="smilie smilie_42" /> <br />
<hr class="mycode_hr" />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">[pathlink]</span></span><br />
 Są to po prostu "połączenia" punktów zdefiniowanych wcześniej...<br />
<br />
...a wyglądają na przykład tak:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[pathlink]<br />
0<br />
1<br />
<br />
[pathlink]<br />
1<br />
2</code></div></div><br />
Co to oznacza? Otóż dzięki takiej deklaracji - pasażerowie będą poruszali się ścieżką od punktu 0 do punktu 1, w punkcie 1 będą mogli przemieścić się do punktu 2 lub wrócić do punktu 0 itd. Więc taki wpis pozwala na przemieszczanie się do przodu i do tyłu wzdłuż ścieżek wyznaczonych przez wcześniej zadeklarowane punkty "pathpnt". Dlatego ważna jest numeracja tam, aby nie pogubić się w ustalaniu połączeń tutaj. <br />
<hr class="mycode_hr" />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">[pathlink_oneway]</span></span><br />
 Sytuacja adekwatna do [pathlink], ale tutaj możemy wskazać, że ruch po ścieżce odbywa się "jednokierunkowo".<br />
<br />
Taki kod:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[pathlink_oneway]<br />
0<br />
1<br />
<br />
[pathlink_oneway]<br />
1<br />
2</code></div></div>spowoduje, że pasażer startując z punktu 0, będzie mógł przemieścić się do punktu 1, ale z tego punktu już się nie cofnie. Będzie mógł jedynie przejść do punktu 2, skąd także nie będzie miał powrotu. Czyli po prostu ścieżka jednokierunkowa. <br />
<hr class="mycode_hr" />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">[next_roomheight]</span></span><br />
 Wysokość danej przestrzeni pasażerskiej.<br />
<br />
To słowo powinno się znaleźć przed pierwszym wpisem [pathlink] lub [pathlink_oneway] oraz przed każdym następnym, jeśli wysokość przestrzeni pasażerskiej przed daną ścieżką się zmienia. Lepiej jest to wyjaśnić na przykładzie:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[next_roomheight]<br />
2<br />
<br />
[pathlink]<br />
0<br />
1<br />
<br />
[pathlink]<br />
1<br />
2<br />
<br />
[next_roomheight]<br />
1.8<br />
<br />
[pathlink]<br />
2<br />
3</code></div></div>Powyższe oznacza ni mniej ni więcej, jak to, że od punktu 0 do punktu 2 wysokość przestrzeni pasażerskiej ustalona jest na 2 metry, natomiast od punktu 2 do 3 wynosi ona już 1.8 metra. Po co te deklaracje? Otóż w przypadku, gdy mamy do czynienia z autobusem piętrowym lub niskowejściowym (czyli o zmiennej wysokości podłogi, ale z co najmniej jednym "niskim" wejściem) może się okazać, że głowy pasażerów wyglądają ponad "sufit". Wtedy wystarczy zadeklarować odpowiednią wysokość, by pasażerom wyrósł garb na plecach i nie zawadzali o górne części pojazdu. <br />
<hr class="mycode_hr" />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">[next_stepsound]</span></span><br />
 Przypisanie paczek dźwiękowych kroków do odpowiednich ścieżek.<br />
<br />
Tutaj sytuacja ma się adekwatnie do [next_roomheight]. Przed danymi ścieżkami należy wskazać indeks paczki dźwiękowej kroków (zadeklarowanych na samym początku pliku), jakie mają odtwarzać się podczas przemieszczania się wzdłuż nich. Jeśli chcemy używać tylko jednej paczki - wystarczy jeden taki wpis przed pierwszym pathlinkiem. Ale możemy sytuację nieco urozmaicić:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[next_stepsound]<br />
0<br />
<br />
[pathlink]<br />
0<br />
1<br />
<br />
[next_stepsound]<br />
1<br />
<br />
[pathlink]<br />
1<br />
2<br />
<br />
[next_stepsound]<br />
2<br />
<br />
[pathlink]<br />
2<br />
3</code></div></div>Taka struktura spowoduje, że jeśli pasażer przemieszczał się będzie z punktu 0 do punktu 1, odtwarzać się będą dźwięki o indeksie 0 (czyli z pierwszego wpisu [stepsoundpack]), podróżując z punktu 1 do punktu 2 OMSI używać będzie dźwięków z paczki o indeksie 1 (z drugiego wpisu [stepsoundpack]), a z 2 do 3 kolejnej paczki i tak dalej.<br />
<br />
Należy tutaj uważać, bo jeśli użyjemy paczki, której wcześniej nie zadeklarowaliśmy lub pomylimy nazwy plików we wpisach [stepsoundpack], mogą pojawiać się bliżej niezidentyfikowane błędy.<br />
<br />
Oczywiściem wpisy [next_roomheight] oraz [next_stepsound] możemy łączyć. Wygląda to na przykład tak:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[next_stepsound]<br />
0<br />
<br />
[next_roomheight]<br />
2<br />
<br />
[pathlink]<br />
0<br />
1<br />
<br />
[next_stepsound]<br />
1<br />
<br />
[pathlink]<br />
1<br />
2<br />
<br />
[next_stepsound]<br />
2<br />
<br />
[next_roomheight]<br />
1.8<br />
<br />
[pathlink]<br />
2<br />
3</code></div></div> <br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Poradnik został napisany wyłącznie dla Forum <a href="http://strefa-omsi.pl" target="_blank" rel="noopener" class="mycode_url">http://strefa-omsi.pl</a>  i nie może być rozpowszechniany we fragmentach lub w całości na innych stronach bez zezwolenia głównego Autora.</span>]]></description>
			<content:encoded><![CDATA[Czas na kolejny poradnik dotyczący tym razem plików paths.cfg<br />
Treść dostępna jest wyłącznie dla zarejestrowanych i zalogowanych.<br />
<br />
Za co odpowiedzialny jest ten plik? Przede wszystkim za ścieżki poruszania się pasażerów wewnątrz pojazdu, ale nie tylko. Objaśnie pokrótce wszystkie słowa kluczowe, które możemy tam umieszczać oraz dane niezbędne do ich zdefiniowania.<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">[stepsoundpack]</span></span><br />
 To słowo kluczowe definiuje pliki dźwiękowe odtwarzane jako dźwięki kroków po pokładzie naszego pojazdu w trakcie rozgrywki.<br />
<br />
Struktura tego wpisy wygląda następująco:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[stepsoundpack]<br />
5<br />
Step_01.wav<br />
Step_02.wav<br />
Step_03.wav<br />
Step_04.wav<br />
Step_05.wav</code></div></div>Pierwsza linijka to oczywiście słowo kluczowe, cyfra poniżej to liczba wpisów z nim powiązanych, czyli na chłopski rozum - liczba plików dźwiękowych. Następnie wymienione są nazwy plików tych plików. Pamiętajmy, że muszą być w formacie .wav i znajdować się w podfolderze \Sounds\Passengers <span style="font-weight: bold;" class="mycode_b">głównego katalogu gry</span> (a nie katalogu pojazdu).<br />
Naturalnie, możemy definiować kilka takich paczek, na przykładzie standardowych MAN-ów wygląda to następująco:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>0 - Normal:<br />
[stepsoundpack]<br />
5<br />
Step_01.wav<br />
Step_02.wav<br />
Step_03.wav<br />
Step_04.wav<br />
Step_05.wav<br />
<br />
1 - Vorne oben:<br />
[stepsoundpack]<br />
3<br />
Step_OV_01.wav<br />
Step_OV_02.wav<br />
Step_OV_03.wav<br />
<br />
2 - Treppe:<br />
[stepsoundpack]<br />
6<br />
Step_St_01.wav<br />
Step_St_02.wav<br />
Step_St_03.wav<br />
Step_St_04.wav<br />
Step_St_05.wav<br />
Step_St_06.wav</code></div></div>A więc mamy tutaj trzy deklaracje paczek dźwiękowych - kroki "normalne", te na górnym pokładzie, oraz odtwarzane podczas używania schodów. Jak przypisać je do poszczególnych ścieżek? Zajmiemy się tym deczko później. Na razie zapamiętajmy, że ich numeracja zaczyna się od zera. Czyli indeks 0, odpowiada za kroki "normalne", 1 za górny pokład a 2 za schody. Oprócz tego trzeba nadmienić, że <span style="font-weight: bold;" class="mycode_b">deklaracje paczek dźwiękowych powinny być na samym początku</span> pliku paths.cfg <br />
<hr class="mycode_hr" />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">[pathpnt]</span></span><br />
 Te wpisy odpowiadają za deklarację punktów ścieżek pasażerów (czyli punktów, przez które będą oni przechodzić przemieszczając się w pojeździe).<br />
<br />
Aby dokładnie ustalić te punkty, musimy mieć przede wszystkim model 3D danego pojazdu, dzięki czemu punkty możemy ustalić co do centymetra.<br />
<br />
Sam wpis wygląda na przykład tak:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[pathpnt]<br />
1.25<br />
5.018<br />
0.46</code></div></div>Poruszamy się w trójwymiarowym układzie współrzędnych. Pierwsza wartość oznacza współrzędną po osi X, druga - po osi Y, trzecia natomiast po osi Z.<br />
Zwyczajowo przyjęło się, że osie ustalane są w sposób następujący:<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://strefa-omsi.pl/images/attachtypes/image.gif" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=265" target="_blank" title="">paths_wsp.jpg</a> (Rozmiar: 28.56 KB / Pobrań: 807)
<!-- end: postbit_attachments_attachment --><br />
<br />
Każdy taki wpis warto poprzedzić cyfrą (licząc od zera), dzięki czemu późniejsze ich połączenie ich jest bajecznie proste, chodzi mi dokładnie o taką strukturę:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>0<br />
[pathpnt]<br />
1.25<br />
5.018<br />
0.46<br />
<br />
1<br />
[pathpnt]<br />
0.551<br />
5.018<br />
0.57<br />
<br />
2<br />
[pathpnt]<br />
0.223<br />
4.608<br />
0.57</code></div></div>itd...<br />
<br />
Aby uzyskać współrzędne, należy otworzyć model w programie 3D i w zależności od tegoż - odpowiednio je "pobrać". Jeśli chodzi o Blendera - najprostszym sposobem jest chyba "rozebranie" pojazdu z karoserii i innych elementów, które będą przeszkadzać - zostawiając jedynie podłogę oraz ewentualnie inne miejsca, po których poruszać się będą pasażerowie. Następnie tworzymy sobie mały sześcianik, klikamy na niego prawym klawiszem myszy, wciskamy TAB i N, w pasku, który się nam pojawi wciskamy "Global", dzięki czemu uzyskamy punkty w odniesieniu do głównego układu współrzędnych pojazdu. Teraz wystarczy przesuwać sześcianik po miejscach, po których ludzie będą się poruszać spisywać dane i po kolei tworzyć pathpointy w pliku. Punkty, które powinniśmy brać pod uwagę, to punkty <span style="font-weight: bold;" class="mycode_b">dokładnie w środku</span> utworzonego sześcianu (więc trzeba go odpowiednio wyrównywać).<br />
<br />
Praktyka pokazuje, że współrzędne nie muszą być super precyzyjne, chyba, że jesteśmy perfekcjonistami. Wkrótce dołączę tutaj screeny z Blendera dla "mniej kumatych" <img src="https://strefa-omsi.pl/images/emotki2/emota_tounge.png" alt=":P" title=":P" class="smilie smilie_42" /> <br />
<hr class="mycode_hr" />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">[pathlink]</span></span><br />
 Są to po prostu "połączenia" punktów zdefiniowanych wcześniej...<br />
<br />
...a wyglądają na przykład tak:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[pathlink]<br />
0<br />
1<br />
<br />
[pathlink]<br />
1<br />
2</code></div></div><br />
Co to oznacza? Otóż dzięki takiej deklaracji - pasażerowie będą poruszali się ścieżką od punktu 0 do punktu 1, w punkcie 1 będą mogli przemieścić się do punktu 2 lub wrócić do punktu 0 itd. Więc taki wpis pozwala na przemieszczanie się do przodu i do tyłu wzdłuż ścieżek wyznaczonych przez wcześniej zadeklarowane punkty "pathpnt". Dlatego ważna jest numeracja tam, aby nie pogubić się w ustalaniu połączeń tutaj. <br />
<hr class="mycode_hr" />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">[pathlink_oneway]</span></span><br />
 Sytuacja adekwatna do [pathlink], ale tutaj możemy wskazać, że ruch po ścieżce odbywa się "jednokierunkowo".<br />
<br />
Taki kod:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[pathlink_oneway]<br />
0<br />
1<br />
<br />
[pathlink_oneway]<br />
1<br />
2</code></div></div>spowoduje, że pasażer startując z punktu 0, będzie mógł przemieścić się do punktu 1, ale z tego punktu już się nie cofnie. Będzie mógł jedynie przejść do punktu 2, skąd także nie będzie miał powrotu. Czyli po prostu ścieżka jednokierunkowa. <br />
<hr class="mycode_hr" />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">[next_roomheight]</span></span><br />
 Wysokość danej przestrzeni pasażerskiej.<br />
<br />
To słowo powinno się znaleźć przed pierwszym wpisem [pathlink] lub [pathlink_oneway] oraz przed każdym następnym, jeśli wysokość przestrzeni pasażerskiej przed daną ścieżką się zmienia. Lepiej jest to wyjaśnić na przykładzie:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[next_roomheight]<br />
2<br />
<br />
[pathlink]<br />
0<br />
1<br />
<br />
[pathlink]<br />
1<br />
2<br />
<br />
[next_roomheight]<br />
1.8<br />
<br />
[pathlink]<br />
2<br />
3</code></div></div>Powyższe oznacza ni mniej ni więcej, jak to, że od punktu 0 do punktu 2 wysokość przestrzeni pasażerskiej ustalona jest na 2 metry, natomiast od punktu 2 do 3 wynosi ona już 1.8 metra. Po co te deklaracje? Otóż w przypadku, gdy mamy do czynienia z autobusem piętrowym lub niskowejściowym (czyli o zmiennej wysokości podłogi, ale z co najmniej jednym "niskim" wejściem) może się okazać, że głowy pasażerów wyglądają ponad "sufit". Wtedy wystarczy zadeklarować odpowiednią wysokość, by pasażerom wyrósł garb na plecach i nie zawadzali o górne części pojazdu. <br />
<hr class="mycode_hr" />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">[next_stepsound]</span></span><br />
 Przypisanie paczek dźwiękowych kroków do odpowiednich ścieżek.<br />
<br />
Tutaj sytuacja ma się adekwatnie do [next_roomheight]. Przed danymi ścieżkami należy wskazać indeks paczki dźwiękowej kroków (zadeklarowanych na samym początku pliku), jakie mają odtwarzać się podczas przemieszczania się wzdłuż nich. Jeśli chcemy używać tylko jednej paczki - wystarczy jeden taki wpis przed pierwszym pathlinkiem. Ale możemy sytuację nieco urozmaicić:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[next_stepsound]<br />
0<br />
<br />
[pathlink]<br />
0<br />
1<br />
<br />
[next_stepsound]<br />
1<br />
<br />
[pathlink]<br />
1<br />
2<br />
<br />
[next_stepsound]<br />
2<br />
<br />
[pathlink]<br />
2<br />
3</code></div></div>Taka struktura spowoduje, że jeśli pasażer przemieszczał się będzie z punktu 0 do punktu 1, odtwarzać się będą dźwięki o indeksie 0 (czyli z pierwszego wpisu [stepsoundpack]), podróżując z punktu 1 do punktu 2 OMSI używać będzie dźwięków z paczki o indeksie 1 (z drugiego wpisu [stepsoundpack]), a z 2 do 3 kolejnej paczki i tak dalej.<br />
<br />
Należy tutaj uważać, bo jeśli użyjemy paczki, której wcześniej nie zadeklarowaliśmy lub pomylimy nazwy plików we wpisach [stepsoundpack], mogą pojawiać się bliżej niezidentyfikowane błędy.<br />
<br />
Oczywiściem wpisy [next_roomheight] oraz [next_stepsound] możemy łączyć. Wygląda to na przykład tak:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[next_stepsound]<br />
0<br />
<br />
[next_roomheight]<br />
2<br />
<br />
[pathlink]<br />
0<br />
1<br />
<br />
[next_stepsound]<br />
1<br />
<br />
[pathlink]<br />
1<br />
2<br />
<br />
[next_stepsound]<br />
2<br />
<br />
[next_roomheight]<br />
1.8<br />
<br />
[pathlink]<br />
2<br />
3</code></div></div> <br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Poradnik został napisany wyłącznie dla Forum <a href="http://strefa-omsi.pl" target="_blank" rel="noopener" class="mycode_url">http://strefa-omsi.pl</a>  i nie może być rozpowszechniany we fragmentach lub w całości na innych stronach bez zezwolenia głównego Autora.</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Boundingbox - obwiednia]]></title>
			<link>https://strefa-omsi.pl/Watek-OMSI-1-2-Boundingbox-obwiednia--2103</link>
			<pubDate>Thu, 08 Aug 2013 00:53:16 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://strefa-omsi.pl/member.php?action=profile&uid=1">skawek</a>]]></dc:creator>
			<guid isPermaLink="false">https://strefa-omsi.pl/Watek-OMSI-1-2-Boundingbox-obwiednia--2103</guid>
			<description><![CDATA[Tym razem bardzo krótkie wyjaśnienie kwestii dotyczącej obwiedni pojazdu (ang. "boundingbox").<br />
<br />
Otóż obwiednia jest niezbędna do odpowiednich wyliczeń dla danych geometrycznych pojazdu, a przede wszystkim - symulacji kolizji. Tworzy ona niejako prostopadłościan wokół modelu, którego ściany stanowią "granice" wykrywania kolizji.<br />
<br />
Deklarację obwiedni można znaleźć pod słowem kluczowym:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[boundingbox]</code></div></div>znajdującym się w pliku .bus lub .ovh pojazdu.<br />
<br />
Aby odpowiednio ustawić obwiednię musimy znać przede wszystkim:<br />
- szerokość pojazdu bez lusterek - podawaną w metrach<br />
- długość pojazdu - także podawaną w metrach<br />
- wysokość pojazdu - w tej samej jednostce jak wyżej<br />
<br />
Znając powyższe, możemy zabierać się za wklepywanie odpowiednich wartości pod wcześniej wymienione słowo kluczowe. Powinny się tam znaleźć odpowiednio dane o:<br />
- szerokości pojazdu<br />
- długości pojazdu<br />
- wysokości pojazdu<br />
- przesunięciu punktu centralnego obwiedni od punktu środkowego pojazdu (niem. Nullpunkt, czyli punkt 0,0,0 w pliku 3D pojazdu) po osi X (a więc tej od szerokości) w metrach<br />
- przesunięciu punktu centralnego obwiedni od punktu środkowego pojazdu po osi Y (od długości) w metrach<br />
- przesunięciu punktu centralnego obwiedni od punktu środkowego pojazdu po osi Z (od wysokości) w metrach<br />
<br />
Jeśli ktoś nadal nie rozumie trzech ostatnich myślników - wyjaśniam. Obwiednia jest tworzona wokół pewnego punktu, którą przetłumaczyłem sobie jako "punkt centralny obwiedni". Skoro operujemy w 3D, mamy trzy współrzędne tego punktu: X, Y i Z. Od niego "rozwijane" są odległości podawane wcześniej. Czyli ustawiając szerokość w pierwszym myślniku na 2 metry a w czwartym myślniku przesunięcie 0 - mamy taką sytuację:<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://strefa-omsi.pl/images/attachtypes/image.gif" title="GIF Image" border="0" alt=".gif" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=261" target="_blank" title="">bound1.gif</a> (Rozmiar: 6.65 KB / Pobrań: 200)
<!-- end: postbit_attachments_attachment --><br />
Kolizja po tej osi zostanie wykryta, gdy jakiś obiekt znajdzie się w pasie między współrzędnymi -1 a 1 na osi X biorąc pod uwagę wartości z programu 3D.<br />
<br />
Jeśli natomiast w czwartym myślniku podamy przesunięcie -0.5:<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://strefa-omsi.pl/images/attachtypes/image.gif" title="GIF Image" border="0" alt=".gif" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=262" target="_blank" title="">bound2.gif</a> (Rozmiar: 6.9 KB / Pobrań: 158)
<!-- end: postbit_attachments_attachment --><br />
Tutaj kolizja po tej osi zostanie wykryta, gdy jakiś obiekt znajdzie się w pasie między współrzędnymi -1,5 a 0,5 na osi X biorąc pod uwagę wartości z programu 3D.<br />
<br />
Adekwatna sytuacja ma się dla pozostałych osi.<br />
<br />
Przy ustawieniu trzech ostatnich myślników na 0 - punkt centralny obwiedni = punktowi 0,0,0 w układzie współrzędnych w programie 3D.<br />
O ile przestawianie punktu centralnego dla szerokości akurat większego sensu zazwyczaj nie ma, o tyle, żeby uwzględnić wystający przedni zderzak, zwykle wartość przesunięcia dla długości (piąty myślnik) nieco odbiega od wartości 0. Pewnikiem jest, że w 99% przypadków wymagane jest ustawienie odpowiedniego przesunięcia po osi Z, czyli dla wysokości, żeby obwiednia nie wtapiała się niepotrzebnie w ziemię oraz żeby niski autobus zmieścił się w np. tunelu bądź pod innymi obiektami.<br />
<br />
Gotowy wpis obwiedni wygląda na przykład tak:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[boundingbox]<br />
2.5<br />
11.46<br />
3.76<br />
0<br />
-0.01<br />
2.29</code></div></div><br />
Niepoprawne ustawienie wartości może skutkować dziwnymi i śmiesznymi kolizjami podczas jazdy. Często winę za tzw "niewidzialne ściany" zrzuca się na twórców map, tymczasem nie wszystkie pojazdy mają odpowiednio ustawioną obwiednię i przez to wywoływane są nierealistyczne kolizje z elementami scenerii.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Poradnik został napisany wyłącznie dla Forum <a href="http://strefa-omsi.pl" target="_blank" rel="noopener" class="mycode_url">http://strefa-omsi.pl</a>  i nie może być rozpowszechniany we fragmentach lub w całości na innych stronach bez zezwolenia głównego Autora.</span>]]></description>
			<content:encoded><![CDATA[Tym razem bardzo krótkie wyjaśnienie kwestii dotyczącej obwiedni pojazdu (ang. "boundingbox").<br />
<br />
Otóż obwiednia jest niezbędna do odpowiednich wyliczeń dla danych geometrycznych pojazdu, a przede wszystkim - symulacji kolizji. Tworzy ona niejako prostopadłościan wokół modelu, którego ściany stanowią "granice" wykrywania kolizji.<br />
<br />
Deklarację obwiedni można znaleźć pod słowem kluczowym:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[boundingbox]</code></div></div>znajdującym się w pliku .bus lub .ovh pojazdu.<br />
<br />
Aby odpowiednio ustawić obwiednię musimy znać przede wszystkim:<br />
- szerokość pojazdu bez lusterek - podawaną w metrach<br />
- długość pojazdu - także podawaną w metrach<br />
- wysokość pojazdu - w tej samej jednostce jak wyżej<br />
<br />
Znając powyższe, możemy zabierać się za wklepywanie odpowiednich wartości pod wcześniej wymienione słowo kluczowe. Powinny się tam znaleźć odpowiednio dane o:<br />
- szerokości pojazdu<br />
- długości pojazdu<br />
- wysokości pojazdu<br />
- przesunięciu punktu centralnego obwiedni od punktu środkowego pojazdu (niem. Nullpunkt, czyli punkt 0,0,0 w pliku 3D pojazdu) po osi X (a więc tej od szerokości) w metrach<br />
- przesunięciu punktu centralnego obwiedni od punktu środkowego pojazdu po osi Y (od długości) w metrach<br />
- przesunięciu punktu centralnego obwiedni od punktu środkowego pojazdu po osi Z (od wysokości) w metrach<br />
<br />
Jeśli ktoś nadal nie rozumie trzech ostatnich myślników - wyjaśniam. Obwiednia jest tworzona wokół pewnego punktu, którą przetłumaczyłem sobie jako "punkt centralny obwiedni". Skoro operujemy w 3D, mamy trzy współrzędne tego punktu: X, Y i Z. Od niego "rozwijane" są odległości podawane wcześniej. Czyli ustawiając szerokość w pierwszym myślniku na 2 metry a w czwartym myślniku przesunięcie 0 - mamy taką sytuację:<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://strefa-omsi.pl/images/attachtypes/image.gif" title="GIF Image" border="0" alt=".gif" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=261" target="_blank" title="">bound1.gif</a> (Rozmiar: 6.65 KB / Pobrań: 200)
<!-- end: postbit_attachments_attachment --><br />
Kolizja po tej osi zostanie wykryta, gdy jakiś obiekt znajdzie się w pasie między współrzędnymi -1 a 1 na osi X biorąc pod uwagę wartości z programu 3D.<br />
<br />
Jeśli natomiast w czwartym myślniku podamy przesunięcie -0.5:<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://strefa-omsi.pl/images/attachtypes/image.gif" title="GIF Image" border="0" alt=".gif" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=262" target="_blank" title="">bound2.gif</a> (Rozmiar: 6.9 KB / Pobrań: 158)
<!-- end: postbit_attachments_attachment --><br />
Tutaj kolizja po tej osi zostanie wykryta, gdy jakiś obiekt znajdzie się w pasie między współrzędnymi -1,5 a 0,5 na osi X biorąc pod uwagę wartości z programu 3D.<br />
<br />
Adekwatna sytuacja ma się dla pozostałych osi.<br />
<br />
Przy ustawieniu trzech ostatnich myślników na 0 - punkt centralny obwiedni = punktowi 0,0,0 w układzie współrzędnych w programie 3D.<br />
O ile przestawianie punktu centralnego dla szerokości akurat większego sensu zazwyczaj nie ma, o tyle, żeby uwzględnić wystający przedni zderzak, zwykle wartość przesunięcia dla długości (piąty myślnik) nieco odbiega od wartości 0. Pewnikiem jest, że w 99% przypadków wymagane jest ustawienie odpowiedniego przesunięcia po osi Z, czyli dla wysokości, żeby obwiednia nie wtapiała się niepotrzebnie w ziemię oraz żeby niski autobus zmieścił się w np. tunelu bądź pod innymi obiektami.<br />
<br />
Gotowy wpis obwiedni wygląda na przykład tak:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>[boundingbox]<br />
2.5<br />
11.46<br />
3.76<br />
0<br />
-0.01<br />
2.29</code></div></div><br />
Niepoprawne ustawienie wartości może skutkować dziwnymi i śmiesznymi kolizjami podczas jazdy. Często winę za tzw "niewidzialne ściany" zrzuca się na twórców map, tymczasem nie wszystkie pojazdy mają odpowiednio ustawioną obwiednię i przez to wywoływane są nierealistyczne kolizje z elementami scenerii.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Poradnik został napisany wyłącznie dla Forum <a href="http://strefa-omsi.pl" target="_blank" rel="noopener" class="mycode_url">http://strefa-omsi.pl</a>  i nie może być rozpowszechniany we fragmentach lub w całości na innych stronach bez zezwolenia głównego Autora.</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Makra systemowe OMSI]]></title>
			<link>https://strefa-omsi.pl/Watek-OMSI-1-2-Makra-systemowe-OMSI--1418</link>
			<pubDate>Thu, 13 Jun 2013 15:31:09 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://strefa-omsi.pl/member.php?action=profile&uid=1">skawek</a>]]></dc:creator>
			<guid isPermaLink="false">https://strefa-omsi.pl/Watek-OMSI-1-2-Makra-systemowe-OMSI--1418</guid>
			<description><![CDATA[Kolejny krok przybliżający nas do opanowania skryptów OMSI to poznanie wbudowanych makr systemowych. Wersja dla niezarejestrowanych obejmuje wyłącznie makra dotyczące obiektów scenerii. Jeśli zauważyłeś błąd lub nieścisłość - napisz do mnie Prywatną Wiadomość w tej sprawie.<br />
<br />
<span style="text-decoration: underline;" class="mycode_u"><span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Obiekty scenerii</span></span></span><br />
Dyrektywy zadeklarowane w pliku <span style="font-style: italic;" class="mycode_i">&lt;folder OMSI&gt;\program\callbacklist_scenobj.txt</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetArrBusLine</span></span><br />
Wejściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks nadchodzącego pojazdu<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - aktualny numer linii tego pojazdu<br />
Opis: Aby użyć tej funkcji, dany obiekt należy przypisać do przystanku (za pomocą <span style="font-style: italic;" class="mycode_i">Parent to</span>). Zapisuje na wierzchołku stosu łańcuchowego numer linii następnego autobusu, według kolejności przyjazdów określonych przez indeks.<br />
Przykład: <span style="font-style: italic;" class="mycode_i">0 (M.V.GetArrBusLine)</span> - zwraca numer linii następnego pojazdu, <span style="font-style: italic;" class="mycode_i">1 (MVGetArrBusLine)</span> - zwraca numer linii drugiego najbliższego wg. kolejności pojazdu<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetArrBusTerminus</span></span><br />
Wejściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks nadchodzącego pojazdu<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - kierunek tego pojazdu<br />
Opis: Działa na tej samej zasadzie jak <span style="font-style: italic;" class="mycode_i">GetArrBusLine</span>, zwraca kierunek (końcowy przystanek) pojazdów<br />
Przykład: <span style="font-style: italic;" class="mycode_i">0 (M.V.GetArrBusTerminus)</span> - zwraca kierunek następnego pojazdu, <span style="font-style: italic;" class="mycode_i">1 (M.V.GetArrBusTerminus)</span> - zwraca kierunek drugiego najbliższego wg. kolejności pojazdu<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetArrBusTimeDiff</span></span><br />
Wejściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks nadchodzącego pojazdu<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - czas do przyjazdu tego pojazdu na przystanek<br />
Opis: Działa na tej samej zasadzie jak <span style="font-style: italic;" class="mycode_i">GetArrBusLine</span>, zwraca czas w sekundach do przyjazdu najbliższego pojazdu aż do osiągnięcia przez niego tego przystanku<br />
Przykład: <span style="font-style: italic;" class="mycode_i">0 (MVGetArrBusTimeDiff)</span> - zwraca czas do przyjazdu najbliższego pojazdu na przystanek, <span style="font-style: italic;" class="mycode_i">1 (M.V.GetArrBusTerminus)</span> - zwraca tenże czas dla drugiego najbliższego wg. kolejności pojazdu<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="text-decoration: underline;" class="mycode_u"><span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Pojazdy</span></span></span><br />
Dyrektywy zadeklarowane w pliku <span style="font-style: italic;" class="mycode_i">&lt;folder OMSI&gt;\program\program\callbacklist_roadvehicle.txt</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetRouteIndex</span></span><br />
Wejściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - numer trasy (route) pojazdu<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks trasy<br />
Opis: Przeszukuje plik .HOF w celu znalezienia fragmentu kodu przynależącego do danego numeru trasy<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetBusstopString</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack1</span> - indeks przystanków oraz <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks łańcuchowy<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - nazwa przystanku<br />
Opis: Dostarcza z pliku .HOF informacje dotyczące przystanku ustalanego za pomocą wyżej wymienionych danych wejściowych.<br />
Przykład: 5 2 (MVGetBusstopString) zwraca nazwę szóstego przystanku (bo liczymy od zera) o trasie z indeksem 2.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTerminusString</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack1</span> - indeks kierunkowy oraz <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks łańcuchowy<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - nazwa kierunku<br />
Opis: Dostarcza z pliku .HOF informacje dotyczące kierunku ustalanego za pomocą wyżej wymienionych danych wejściowych.<br />
Przykład: 7 3 (M.V.GetBusstopString) zwraca nazwę ósmego kierunku (bo liczymy od zera) trasy z indeksem 3.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetRouteTerminusIndex</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks trasy (licząc od zera)<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks kierunku (licząc od zera)<br />
Opis: Zwraca indeks domyślnego kierunku dla indeksu danej trasy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTerminusIndex</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - kod kierunku<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks kierunku<br />
Opis: Zwraca indeks kierunku biorąc pod uwagę aktualny jego kod.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTerminusCode</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks kierunku<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - kod kierunku<br />
Opis: Działanie dokładnie odwrotne do <span style="font-style: italic;" class="mycode_i">GetTerminusIndex</span>. Tutaj to kod kierunku ustalany jest za pomocą indeksu.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetBusstopCount</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks trasy<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - liczba przystanków<br />
Opis: Zwraca liczbę przystanków trasy o danym indeksie. Należy pamiętać, że ta wartość nie jest liczona od zera. Przykładowo, jeśli na trasie są dwa przystanki, wartość wyjściowa będzie wynosiła "2".<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GiveChangeCoin</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks pieniężny<br />
Wyjściowa wartość stosu: brak<br />
Opis: Warunkuje, jaki pieniądz zostanie użyty np dla skryptów dotyczących automatów wydających resztę.<br />
Przykład: 2 (M.V.GiveChangeCoin) oznacza użycie (np. wydanie) pieniądza o indeksie "2".<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetRouteBusstopIdent</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack1</span> - indeks trasy oraz <span style="font-style: italic;" class="mycode_i">Stack0</span> - przystankowy indeks trasy<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - identyfikator przystanku<br />
Opis: Zwraca identyfikator przystanku (prawdopodobnie jest to po prostu jego nazwa lub skrócona nazwa) odpowiadający danym wejściowym.<br />
Przykład: 3 6 (M.V.GetRouteBusstopIdent) zwraca identyfikator siódmego przystanku czwartej trasy (bo wskaźniki stosu liczone są tu od zera).<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetBusstopIndex</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - identyfikator przystanku<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks przystanku<br />
Opis: Zwraca indeks przystanku w zależności od jego identyfikatora.<br />
Przykład: "Reimerweg" (M.V.GetBusstopIndex) zwraca indeks przystanku o identyfikatorze <span style="font-style: italic;" class="mycode_i">Reimerweg</span>.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTTBusstopCount</span></span><br />
Wejściowe wartości stosu: brak<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - liczba przystanków<br />
Opis: Zwraca liczbę przystanków dla bieżącego rozkładu jazdy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTTBusstopIndex</span></span><br />
Wejściowe wartości stosu: brak<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks aktualnego przystanku<br />
Opis: Zwraca indeks aktualnego przystanku dla bieżącego rozkładu jazdy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTTTerminusIndex</span></span><br />
Wejściowe wartości stosu: brak<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks aktualnego kierunku<br />
Opis: Zwraca indeks aktualnego kierunku dla bieżącego rozkładu jazdy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTTLineString</span></span><br />
Wejściowe wartości stosu: brak<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - numer linii<br />
Opis: Zwraca numer linii dla bieżącego rozkładu jazdy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTTDelay</span></span><br />
Wejściowe wartości stosu: brak<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - spóźnienie w sekundach<br />
Opis: Zwraca spóźnienie obliczane w sekundach dla bieżącego rozkładu jazdy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTTBusstopName</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks aktualnego przystanku <br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - nazwa aktualnego przystanku<br />
Opis: Zwraca nazwę aktualnego przystanku biorąc pod uwagę zerową wartość stosu indeksu przystankowego.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTTBusstopDep</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks aktualnego przystanku <br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - czas odjazdu z przystanku w sekundach<br />
Opis: Zwraca rozkładowy czas odjazdu z przystanku w sekundach, na który to przystanek wskazuje zerowa wartość stosu indeksu przystankowego.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTTBusstopArr</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks aktualnego przystanku <br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - czas przyjazdu na przystanek w sekundach<br />
Opis: Zwraca rozkładowy czas przyjazdu na przystanek w sekundach, na który to przystanek wskazuje zerowa wartość stosu indeksu przystankowego.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTicketName</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks biletowy <br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - nazwa biletu<br />
Opis: Zwraca nazwę biletu w zależności od jego indeksu.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTicketValue</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks biletowy <br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - cena biletu<br />
Opis: Zwraca cenę biletu w zależności od jego indeksu.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetHumanCountOnPathLink</span></span> (od OMSI w wersji 1.03)<br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks ścieżki (Pathlink) <br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - liczba pasażerów<br />
Opis: Zwraca aktualną liczbę pasażerów na konkretnej ścieżce.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">NrSpecRandom</span></span> (od OMSI 2)<br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - wartość początkowa ("Seed")<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - pseudolosowa wartość<br />
Opis: Zwraca specyficzny, losowy numer związany z pojazdem. Sztuczka tutaj polega na tym, że kombinacja "Seed" i numeru taborowego pojazdu zawsze daje ten sam ostateczny numer losowy. Aby otrzymywać inne numery losowe dla jednego pojazdu, wystarczy zmienić wspomniany "Seed". <br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetHeightAbovePoint</span></span> (od OMSI 2)<br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack2:</span> -  X , <span style="font-style: italic;" class="mycode_i">Stack1:</span> -  Y , <span style="font-style: italic;" class="mycode_i">Stack0:</span> -  Z<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - wysokość nad ziemią<br />
Opis: Zwraca wysokość nad poziomem gruntu, mierzonej wzdłuż odwróconej osi Z związanej z pojazdem i określanej przez punkty X, Y, Z.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetDepotStringGlobal</span></span> (od OMSI 2)<br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0:</span> - indeks łańcuchowy<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - globalstring pliku .hof<br />
Opis: Zwraca łańcuch zawierający informacje spod słowa [global_strings] aktualnie używanego pliku .hof . Indeks łańcuchowy jest adekwatny do zerowej pozycji tej listy.<br />
<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="text-decoration: underline;" class="mycode_u"><span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Tekstury skryptowe (Script-Texturen)</span></span></span><br />
Tylko w OMSI 2, używane w skryptach dotyczących zarówno obiektów scenerii jak i pojazdów. Dyrektywy zadeklarowane w pliku <span style="font-style: italic;" class="mycode_i">&lt;folder OMSI&gt;\program\callbacklist_scripttex.txt</span><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STNewTex</span></span><br />
Wejściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks tekstury (kolejność z pliku .cfg pojazdu)<br />
Wyjściowa wartość stosu: brak<br />
Opis: Inicjalizacja tekstury skryptowej.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STLock</span></span><br />
Wejściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks tekstury<br />
Wyjściowa wartość stosu: brak<br />
Opis: Blokowanie tekstury, oznaczające możliwość dostępu do odczytu i zapisu.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STUnlock</span></span><br />
Wejściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks tekstury<br />
Wyjściowa wartość stosu: brak<br />
Opis: Odblokowanie tekstury, czyli anulowanie możliwości dostępu do odczytu i zapisu i przygotowanie do wyświetlenia.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STFilter</span></span><br />
Wejściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks tekstury<br />
Wyjściowa wartość stosu: brak<br />
Opis: Generowanie mipmap, czyli wariantów tekstur wyświetlanych na większych odległościach. Proces ten odbywa się po odblokowaniu tekstury, ale nie w czasie jej odblokowywania. Zapobiega migotaniu i artefaktom tekstur widzianych z pewnego dystansu.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STSetColor</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack4</span> - indeks tekstury, <span style="font-style: italic;" class="mycode_i">Stack3</span> - alfa, <span style="font-style: italic;" class="mycode_i">Stack2</span> - składowa czerwona, <span style="font-style: italic;" class="mycode_i">Stack1</span> - składowa zielona, <span style="font-style: italic;" class="mycode_i">Stack0</span> - składowa niebieska<br />
Wyjściowa wartość stosu: brak<br />
Opis: Ustawia kolor dla wykonywanych operacji.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STDrawPixel</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack2</span> - indeks tekstury, <span style="font-style: italic;" class="mycode_i">Stack1</span> - X, <span style="font-style: italic;" class="mycode_i">Stack0</span> - Y<br />
Wyjściowa wartość stosu: brak<br />
Opis: Zmienia kolor (koloruje wcześniej podaną barwą) konkretny piksel o współrzędnych X, Y .<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STDrawRect</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack4</span> - indeks tekstury, <span style="font-style: italic;" class="mycode_i">Stack3</span> - X1, <span style="font-style: italic;" class="mycode_i">Stack2</span> - Y1, <span style="font-style: italic;" class="mycode_i">Stack1</span> - X2, <span style="font-style: italic;" class="mycode_i">Stack0</span> - Y2<br />
Wyjściowa wartość stosu: brak<br />
Opis: Rysuje wypełniony prostokąt między podanymi współrzędnymi X1-Y1, X2-Y2 .<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STTextOut</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack5</span> - indeks tekstury, <span style="font-style: italic;" class="mycode_i">Stack4</span> - X1, <span style="font-style: italic;" class="mycode_i">Stack3</span> - Y1, <span style="font-style: italic;" class="mycode_i">Stack2</span> - indeks czcionki, <span style="font-style: italic;" class="mycode_i">Stack1</span> - pełny kolor (lub nie), <span style="font-style: italic;" class="mycode_i">Stack0</span> - tracking (automatyczne regulowanie odstępów między znakami), <span style="font-style: italic;" class="mycode_i">StringStack0</span> - wypisywany tekst<br />
Wyjściowa wartość stosu: brak<br />
Opis: Wypisuje tekst na teksturze. Indeks czcionki może być zwrócony przez <span style="font-style: italic;" class="mycode_i">GetFontIndex</span> , wartość "pełny kolor" wskazuje na to, czy ustawiać kolor zadeklarowany poprzez makro <span style="font-style: italic;" class="mycode_i">STSetColor</span>, czy pobierać go z właściwości czcionki.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetFontIndex</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">StringStack0</span> - nazwa czcionki<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks czcionki<br />
Opis: Zwraca indeks czcionki dla makra <span style="font-style: italic;" class="mycode_i">STTextOut</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">TextLength</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks czcionki, <span style="font-style: italic;" class="mycode_i">StringStack0</span> - wypisywany tekst<br />
Wyjściowa wartość stosu:  <span style="font-style: italic;" class="mycode_i">Stack0</span> - długość tekstu w pikselach<br />
Opis: Oblicza i zwraca długość danego tekstu wypisywanego wskazaną czcionką.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STReadPixel</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">StringStack2</span> - indeks tekstury, <span style="font-style: italic;" class="mycode_i">StringStack1</span> - X, <span style="font-style: italic;" class="mycode_i">StringStack0</span> - Y<br />
Wyjściowa wartość stosu:  brak<br />
Opis: Ustawia kolor na taki, jaki posiada wskazany piksel (nie jestem pewny, czy Autorzy nie pomylili się przy wskazaniu stosów, moim zdaniem na wejściu będzie zwykły stos a nie stos łańcuchowy).<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STCopyColor</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack1</span> - indeks pierwszej tekstury, <span style="font-style: italic;" class="mycode_i">StringStack0</span> - indeks drugiej tekstury<br />
Wyjściowa wartość stosu:  brak<br />
Opis: Kolor drugiej tekstury jest ustawiany na kolor, który posiada pierwsza tekstura (również tutaj nie jestem pewny, czy na drugim wejściu podawany jest stos łańcuchowy).<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STLoadTex</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks tekstury, <span style="font-style: italic;" class="mycode_i">StringStack0</span> - nazwa tekstury<br />
Wyjściowa wartość stosu:  brak<br />
Opis: Rysuje teksturę o określonej nazwie.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STGetR / G / B / A</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks tekstury<br />
Wyjściowa wartość stosu:  wartość koloru (składowych koloru)<br />
Opis: Zwraca wartość koloru (poszczególnych składowych) danej tekstury.<br />
<br />
<br />
<hr class="mycode_hr" />
<br />
Wszystkie indeksy są liczone od zera, chyba, że napisane jest inaczej. Nie pytajcie mnie jak to dokładnie działa, bo sam nie do końca wiem.  Niestety Autorzy gry nie opisali w sposób dokładny wszystkich mechanizmów. Daję pewną podstawę do tego, by samemu kombinować - wiecie już, które makro za co jest mniej więcej odpowiedzialne. Starałem się jak najlepiej przetłumaczyć informacje, jednakże zdaje sobie sprawę, że dla niektórych nadal będzie to czarna magia. Co do makr - polecam przejrzenie sobie ich od początku do końca, wtedy stanie się jasne, że większość z nich "zazębia" się. Aby działały jedne, muszę zadziałać wcześniej inne. Po takim przestudiowaniu powyższych opisów, zrozumienie stanie się łatwiejsze <img src="https://strefa-omsi.pl/images/emotki2/emota_wink.png" alt=";)" title=";)" class="smilie smilie_23" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Legenda:</span><br />
<span style="font-style: italic;" class="mycode_i">StackX</span> - odpowiada X-owej komórce stosu, przykładowo <span style="font-style: italic;" class="mycode_i">Stack0</span> odpowiada zerowej komórce stosu;<br />
<span style="font-style: italic;" class="mycode_i">StringstackX</span> odpowiada X-owej komórce stosu łańcuchowego, przykładowo <span style="font-style: italic;" class="mycode_i">Stringstack0</span> odpowiada zerowej komórce tego stosu.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Poradnik został napisany wyłącznie dla Forum <a href="http://strefa-omsi.pl" target="_blank" rel="noopener" class="mycode_url">http://strefa-omsi.pl</a>  i nie może być rozpowszechniany we fragmentach lub w całości na innych stronach bez zezwolenia głównego Autora.</span>]]></description>
			<content:encoded><![CDATA[Kolejny krok przybliżający nas do opanowania skryptów OMSI to poznanie wbudowanych makr systemowych. Wersja dla niezarejestrowanych obejmuje wyłącznie makra dotyczące obiektów scenerii. Jeśli zauważyłeś błąd lub nieścisłość - napisz do mnie Prywatną Wiadomość w tej sprawie.<br />
<br />
<span style="text-decoration: underline;" class="mycode_u"><span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Obiekty scenerii</span></span></span><br />
Dyrektywy zadeklarowane w pliku <span style="font-style: italic;" class="mycode_i">&lt;folder OMSI&gt;\program\callbacklist_scenobj.txt</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetArrBusLine</span></span><br />
Wejściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks nadchodzącego pojazdu<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - aktualny numer linii tego pojazdu<br />
Opis: Aby użyć tej funkcji, dany obiekt należy przypisać do przystanku (za pomocą <span style="font-style: italic;" class="mycode_i">Parent to</span>). Zapisuje na wierzchołku stosu łańcuchowego numer linii następnego autobusu, według kolejności przyjazdów określonych przez indeks.<br />
Przykład: <span style="font-style: italic;" class="mycode_i">0 (M.V.GetArrBusLine)</span> - zwraca numer linii następnego pojazdu, <span style="font-style: italic;" class="mycode_i">1 (MVGetArrBusLine)</span> - zwraca numer linii drugiego najbliższego wg. kolejności pojazdu<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetArrBusTerminus</span></span><br />
Wejściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks nadchodzącego pojazdu<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - kierunek tego pojazdu<br />
Opis: Działa na tej samej zasadzie jak <span style="font-style: italic;" class="mycode_i">GetArrBusLine</span>, zwraca kierunek (końcowy przystanek) pojazdów<br />
Przykład: <span style="font-style: italic;" class="mycode_i">0 (M.V.GetArrBusTerminus)</span> - zwraca kierunek następnego pojazdu, <span style="font-style: italic;" class="mycode_i">1 (M.V.GetArrBusTerminus)</span> - zwraca kierunek drugiego najbliższego wg. kolejności pojazdu<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetArrBusTimeDiff</span></span><br />
Wejściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks nadchodzącego pojazdu<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - czas do przyjazdu tego pojazdu na przystanek<br />
Opis: Działa na tej samej zasadzie jak <span style="font-style: italic;" class="mycode_i">GetArrBusLine</span>, zwraca czas w sekundach do przyjazdu najbliższego pojazdu aż do osiągnięcia przez niego tego przystanku<br />
Przykład: <span style="font-style: italic;" class="mycode_i">0 (MVGetArrBusTimeDiff)</span> - zwraca czas do przyjazdu najbliższego pojazdu na przystanek, <span style="font-style: italic;" class="mycode_i">1 (M.V.GetArrBusTerminus)</span> - zwraca tenże czas dla drugiego najbliższego wg. kolejności pojazdu<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="text-decoration: underline;" class="mycode_u"><span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Pojazdy</span></span></span><br />
Dyrektywy zadeklarowane w pliku <span style="font-style: italic;" class="mycode_i">&lt;folder OMSI&gt;\program\program\callbacklist_roadvehicle.txt</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetRouteIndex</span></span><br />
Wejściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - numer trasy (route) pojazdu<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks trasy<br />
Opis: Przeszukuje plik .HOF w celu znalezienia fragmentu kodu przynależącego do danego numeru trasy<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetBusstopString</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack1</span> - indeks przystanków oraz <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks łańcuchowy<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - nazwa przystanku<br />
Opis: Dostarcza z pliku .HOF informacje dotyczące przystanku ustalanego za pomocą wyżej wymienionych danych wejściowych.<br />
Przykład: 5 2 (MVGetBusstopString) zwraca nazwę szóstego przystanku (bo liczymy od zera) o trasie z indeksem 2.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTerminusString</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack1</span> - indeks kierunkowy oraz <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks łańcuchowy<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - nazwa kierunku<br />
Opis: Dostarcza z pliku .HOF informacje dotyczące kierunku ustalanego za pomocą wyżej wymienionych danych wejściowych.<br />
Przykład: 7 3 (M.V.GetBusstopString) zwraca nazwę ósmego kierunku (bo liczymy od zera) trasy z indeksem 3.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetRouteTerminusIndex</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks trasy (licząc od zera)<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks kierunku (licząc od zera)<br />
Opis: Zwraca indeks domyślnego kierunku dla indeksu danej trasy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTerminusIndex</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - kod kierunku<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks kierunku<br />
Opis: Zwraca indeks kierunku biorąc pod uwagę aktualny jego kod.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTerminusCode</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks kierunku<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - kod kierunku<br />
Opis: Działanie dokładnie odwrotne do <span style="font-style: italic;" class="mycode_i">GetTerminusIndex</span>. Tutaj to kod kierunku ustalany jest za pomocą indeksu.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetBusstopCount</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks trasy<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - liczba przystanków<br />
Opis: Zwraca liczbę przystanków trasy o danym indeksie. Należy pamiętać, że ta wartość nie jest liczona od zera. Przykładowo, jeśli na trasie są dwa przystanki, wartość wyjściowa będzie wynosiła "2".<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GiveChangeCoin</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks pieniężny<br />
Wyjściowa wartość stosu: brak<br />
Opis: Warunkuje, jaki pieniądz zostanie użyty np dla skryptów dotyczących automatów wydających resztę.<br />
Przykład: 2 (M.V.GiveChangeCoin) oznacza użycie (np. wydanie) pieniądza o indeksie "2".<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetRouteBusstopIdent</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack1</span> - indeks trasy oraz <span style="font-style: italic;" class="mycode_i">Stack0</span> - przystankowy indeks trasy<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - identyfikator przystanku<br />
Opis: Zwraca identyfikator przystanku (prawdopodobnie jest to po prostu jego nazwa lub skrócona nazwa) odpowiadający danym wejściowym.<br />
Przykład: 3 6 (M.V.GetRouteBusstopIdent) zwraca identyfikator siódmego przystanku czwartej trasy (bo wskaźniki stosu liczone są tu od zera).<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetBusstopIndex</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - identyfikator przystanku<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks przystanku<br />
Opis: Zwraca indeks przystanku w zależności od jego identyfikatora.<br />
Przykład: "Reimerweg" (M.V.GetBusstopIndex) zwraca indeks przystanku o identyfikatorze <span style="font-style: italic;" class="mycode_i">Reimerweg</span>.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTTBusstopCount</span></span><br />
Wejściowe wartości stosu: brak<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - liczba przystanków<br />
Opis: Zwraca liczbę przystanków dla bieżącego rozkładu jazdy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTTBusstopIndex</span></span><br />
Wejściowe wartości stosu: brak<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks aktualnego przystanku<br />
Opis: Zwraca indeks aktualnego przystanku dla bieżącego rozkładu jazdy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTTTerminusIndex</span></span><br />
Wejściowe wartości stosu: brak<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks aktualnego kierunku<br />
Opis: Zwraca indeks aktualnego kierunku dla bieżącego rozkładu jazdy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTTLineString</span></span><br />
Wejściowe wartości stosu: brak<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - numer linii<br />
Opis: Zwraca numer linii dla bieżącego rozkładu jazdy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTTDelay</span></span><br />
Wejściowe wartości stosu: brak<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - spóźnienie w sekundach<br />
Opis: Zwraca spóźnienie obliczane w sekundach dla bieżącego rozkładu jazdy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTTBusstopName</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks aktualnego przystanku <br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - nazwa aktualnego przystanku<br />
Opis: Zwraca nazwę aktualnego przystanku biorąc pod uwagę zerową wartość stosu indeksu przystankowego.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTTBusstopDep</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks aktualnego przystanku <br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - czas odjazdu z przystanku w sekundach<br />
Opis: Zwraca rozkładowy czas odjazdu z przystanku w sekundach, na który to przystanek wskazuje zerowa wartość stosu indeksu przystankowego.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTTBusstopArr</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks aktualnego przystanku <br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - czas przyjazdu na przystanek w sekundach<br />
Opis: Zwraca rozkładowy czas przyjazdu na przystanek w sekundach, na który to przystanek wskazuje zerowa wartość stosu indeksu przystankowego.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTicketName</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks biletowy <br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - nazwa biletu<br />
Opis: Zwraca nazwę biletu w zależności od jego indeksu.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetTicketValue</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks biletowy <br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stringstack0</span> - cena biletu<br />
Opis: Zwraca cenę biletu w zależności od jego indeksu.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetHumanCountOnPathLink</span></span> (od OMSI w wersji 1.03)<br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks ścieżki (Pathlink) <br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - liczba pasażerów<br />
Opis: Zwraca aktualną liczbę pasażerów na konkretnej ścieżce.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">NrSpecRandom</span></span> (od OMSI 2)<br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - wartość początkowa ("Seed")<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - pseudolosowa wartość<br />
Opis: Zwraca specyficzny, losowy numer związany z pojazdem. Sztuczka tutaj polega na tym, że kombinacja "Seed" i numeru taborowego pojazdu zawsze daje ten sam ostateczny numer losowy. Aby otrzymywać inne numery losowe dla jednego pojazdu, wystarczy zmienić wspomniany "Seed". <br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetHeightAbovePoint</span></span> (od OMSI 2)<br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack2:</span> -  X , <span style="font-style: italic;" class="mycode_i">Stack1:</span> -  Y , <span style="font-style: italic;" class="mycode_i">Stack0:</span> -  Z<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - wysokość nad ziemią<br />
Opis: Zwraca wysokość nad poziomem gruntu, mierzonej wzdłuż odwróconej osi Z związanej z pojazdem i określanej przez punkty X, Y, Z.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetDepotStringGlobal</span></span> (od OMSI 2)<br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0:</span> - indeks łańcuchowy<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - globalstring pliku .hof<br />
Opis: Zwraca łańcuch zawierający informacje spod słowa [global_strings] aktualnie używanego pliku .hof . Indeks łańcuchowy jest adekwatny do zerowej pozycji tej listy.<br />
<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="text-decoration: underline;" class="mycode_u"><span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Tekstury skryptowe (Script-Texturen)</span></span></span><br />
Tylko w OMSI 2, używane w skryptach dotyczących zarówno obiektów scenerii jak i pojazdów. Dyrektywy zadeklarowane w pliku <span style="font-style: italic;" class="mycode_i">&lt;folder OMSI&gt;\program\callbacklist_scripttex.txt</span><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STNewTex</span></span><br />
Wejściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks tekstury (kolejność z pliku .cfg pojazdu)<br />
Wyjściowa wartość stosu: brak<br />
Opis: Inicjalizacja tekstury skryptowej.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STLock</span></span><br />
Wejściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks tekstury<br />
Wyjściowa wartość stosu: brak<br />
Opis: Blokowanie tekstury, oznaczające możliwość dostępu do odczytu i zapisu.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STUnlock</span></span><br />
Wejściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks tekstury<br />
Wyjściowa wartość stosu: brak<br />
Opis: Odblokowanie tekstury, czyli anulowanie możliwości dostępu do odczytu i zapisu i przygotowanie do wyświetlenia.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STFilter</span></span><br />
Wejściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks tekstury<br />
Wyjściowa wartość stosu: brak<br />
Opis: Generowanie mipmap, czyli wariantów tekstur wyświetlanych na większych odległościach. Proces ten odbywa się po odblokowaniu tekstury, ale nie w czasie jej odblokowywania. Zapobiega migotaniu i artefaktom tekstur widzianych z pewnego dystansu.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STSetColor</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack4</span> - indeks tekstury, <span style="font-style: italic;" class="mycode_i">Stack3</span> - alfa, <span style="font-style: italic;" class="mycode_i">Stack2</span> - składowa czerwona, <span style="font-style: italic;" class="mycode_i">Stack1</span> - składowa zielona, <span style="font-style: italic;" class="mycode_i">Stack0</span> - składowa niebieska<br />
Wyjściowa wartość stosu: brak<br />
Opis: Ustawia kolor dla wykonywanych operacji.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STDrawPixel</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack2</span> - indeks tekstury, <span style="font-style: italic;" class="mycode_i">Stack1</span> - X, <span style="font-style: italic;" class="mycode_i">Stack0</span> - Y<br />
Wyjściowa wartość stosu: brak<br />
Opis: Zmienia kolor (koloruje wcześniej podaną barwą) konkretny piksel o współrzędnych X, Y .<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STDrawRect</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack4</span> - indeks tekstury, <span style="font-style: italic;" class="mycode_i">Stack3</span> - X1, <span style="font-style: italic;" class="mycode_i">Stack2</span> - Y1, <span style="font-style: italic;" class="mycode_i">Stack1</span> - X2, <span style="font-style: italic;" class="mycode_i">Stack0</span> - Y2<br />
Wyjściowa wartość stosu: brak<br />
Opis: Rysuje wypełniony prostokąt między podanymi współrzędnymi X1-Y1, X2-Y2 .<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STTextOut</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack5</span> - indeks tekstury, <span style="font-style: italic;" class="mycode_i">Stack4</span> - X1, <span style="font-style: italic;" class="mycode_i">Stack3</span> - Y1, <span style="font-style: italic;" class="mycode_i">Stack2</span> - indeks czcionki, <span style="font-style: italic;" class="mycode_i">Stack1</span> - pełny kolor (lub nie), <span style="font-style: italic;" class="mycode_i">Stack0</span> - tracking (automatyczne regulowanie odstępów między znakami), <span style="font-style: italic;" class="mycode_i">StringStack0</span> - wypisywany tekst<br />
Wyjściowa wartość stosu: brak<br />
Opis: Wypisuje tekst na teksturze. Indeks czcionki może być zwrócony przez <span style="font-style: italic;" class="mycode_i">GetFontIndex</span> , wartość "pełny kolor" wskazuje na to, czy ustawiać kolor zadeklarowany poprzez makro <span style="font-style: italic;" class="mycode_i">STSetColor</span>, czy pobierać go z właściwości czcionki.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">GetFontIndex</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">StringStack0</span> - nazwa czcionki<br />
Wyjściowa wartość stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks czcionki<br />
Opis: Zwraca indeks czcionki dla makra <span style="font-style: italic;" class="mycode_i">STTextOut</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">TextLength</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks czcionki, <span style="font-style: italic;" class="mycode_i">StringStack0</span> - wypisywany tekst<br />
Wyjściowa wartość stosu:  <span style="font-style: italic;" class="mycode_i">Stack0</span> - długość tekstu w pikselach<br />
Opis: Oblicza i zwraca długość danego tekstu wypisywanego wskazaną czcionką.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STReadPixel</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">StringStack2</span> - indeks tekstury, <span style="font-style: italic;" class="mycode_i">StringStack1</span> - X, <span style="font-style: italic;" class="mycode_i">StringStack0</span> - Y<br />
Wyjściowa wartość stosu:  brak<br />
Opis: Ustawia kolor na taki, jaki posiada wskazany piksel (nie jestem pewny, czy Autorzy nie pomylili się przy wskazaniu stosów, moim zdaniem na wejściu będzie zwykły stos a nie stos łańcuchowy).<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STCopyColor</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack1</span> - indeks pierwszej tekstury, <span style="font-style: italic;" class="mycode_i">StringStack0</span> - indeks drugiej tekstury<br />
Wyjściowa wartość stosu:  brak<br />
Opis: Kolor drugiej tekstury jest ustawiany na kolor, który posiada pierwsza tekstura (również tutaj nie jestem pewny, czy na drugim wejściu podawany jest stos łańcuchowy).<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STLoadTex</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks tekstury, <span style="font-style: italic;" class="mycode_i">StringStack0</span> - nazwa tekstury<br />
Wyjściowa wartość stosu:  brak<br />
Opis: Rysuje teksturę o określonej nazwie.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-style: italic;" class="mycode_i">STGetR / G / B / A</span></span><br />
Wejściowe wartości stosu: <span style="font-style: italic;" class="mycode_i">Stack0</span> - indeks tekstury<br />
Wyjściowa wartość stosu:  wartość koloru (składowych koloru)<br />
Opis: Zwraca wartość koloru (poszczególnych składowych) danej tekstury.<br />
<br />
<br />
<hr class="mycode_hr" />
<br />
Wszystkie indeksy są liczone od zera, chyba, że napisane jest inaczej. Nie pytajcie mnie jak to dokładnie działa, bo sam nie do końca wiem.  Niestety Autorzy gry nie opisali w sposób dokładny wszystkich mechanizmów. Daję pewną podstawę do tego, by samemu kombinować - wiecie już, które makro za co jest mniej więcej odpowiedzialne. Starałem się jak najlepiej przetłumaczyć informacje, jednakże zdaje sobie sprawę, że dla niektórych nadal będzie to czarna magia. Co do makr - polecam przejrzenie sobie ich od początku do końca, wtedy stanie się jasne, że większość z nich "zazębia" się. Aby działały jedne, muszę zadziałać wcześniej inne. Po takim przestudiowaniu powyższych opisów, zrozumienie stanie się łatwiejsze <img src="https://strefa-omsi.pl/images/emotki2/emota_wink.png" alt=";)" title=";)" class="smilie smilie_23" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Legenda:</span><br />
<span style="font-style: italic;" class="mycode_i">StackX</span> - odpowiada X-owej komórce stosu, przykładowo <span style="font-style: italic;" class="mycode_i">Stack0</span> odpowiada zerowej komórce stosu;<br />
<span style="font-style: italic;" class="mycode_i">StringstackX</span> odpowiada X-owej komórce stosu łańcuchowego, przykładowo <span style="font-style: italic;" class="mycode_i">Stringstack0</span> odpowiada zerowej komórce tego stosu.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Poradnik został napisany wyłącznie dla Forum <a href="http://strefa-omsi.pl" target="_blank" rel="noopener" class="mycode_url">http://strefa-omsi.pl</a>  i nie może być rozpowszechniany we fragmentach lub w całości na innych stronach bez zezwolenia głównego Autora.</span>]]></content:encoded>
		</item>
	</channel>
</rss>