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


[OMSI 1 & 2]  Makra systemowe OMSI

#1
(Ten post był ostatnio modyfikowany: 22.02.2015, 13:17 przez skawek.)

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.

Obiekty scenerii
Dyrektywy zadeklarowane w pliku <folder OMSI>\program\callbacklist_scenobj.txt

GetArrBusLine
Wejściowa wartość stosu: Stack0 - indeks nadchodzącego pojazdu
Wyjściowa wartość stosu: Stringstack0 - aktualny numer linii tego pojazdu
Opis: Aby użyć tej funkcji, dany obiekt należy przypisać do przystanku (za pomocą Parent to). Zapisuje na wierzchołku stosu łańcuchowego numer linii następnego autobusu, według kolejności przyjazdów określonych przez indeks.
Przykład: 0 (M.V.GetArrBusLine) - zwraca numer linii następnego pojazdu, 1 (MVGetArrBusLine) - zwraca numer linii drugiego najbliższego wg. kolejności pojazdu

GetArrBusTerminus
Wejściowa wartość stosu: Stack0 - indeks nadchodzącego pojazdu
Wyjściowa wartość stosu: Stringstack0 - kierunek tego pojazdu
Opis: Działa na tej samej zasadzie jak GetArrBusLine, zwraca kierunek (końcowy przystanek) pojazdów
Przykład: 0 (M.V.GetArrBusTerminus) - zwraca kierunek następnego pojazdu, 1 (M.V.GetArrBusTerminus) - zwraca kierunek drugiego najbliższego wg. kolejności pojazdu

GetArrBusTimeDiff
Wejściowa wartość stosu: Stack0 - indeks nadchodzącego pojazdu
Wyjściowa wartość stosu: Stack0 - czas do przyjazdu tego pojazdu na przystanek
Opis: Działa na tej samej zasadzie jak GetArrBusLine, zwraca czas w sekundach do przyjazdu najbliższego pojazdu aż do osiągnięcia przez niego tego przystanku
Przykład: 0 (MVGetArrBusTimeDiff) - zwraca czas do przyjazdu najbliższego pojazdu na przystanek, 1 (M.V.GetArrBusTerminus) - zwraca tenże czas dla drugiego najbliższego wg. kolejności pojazdu



Pojazdy
Dyrektywy zadeklarowane w pliku <folder OMSI>\program\program\callbacklist_roadvehicle.txt

GetRouteIndex
Wejściowa wartość stosu: Stack0 - numer trasy (route) pojazdu
Wyjściowa wartość stosu: Stack0 - indeks trasy
Opis: Przeszukuje plik .HOF w celu znalezienia fragmentu kodu przynależącego do danego numeru trasy

GetBusstopString
Wejściowe wartości stosu: Stack1 - indeks przystanków oraz Stack0 - indeks łańcuchowy
Wyjściowa wartość stosu: Stringstack0 - nazwa przystanku
Opis: Dostarcza z pliku .HOF informacje dotyczące przystanku ustalanego za pomocą wyżej wymienionych danych wejściowych.
Przykład: 5 2 (MVGetBusstopString) zwraca nazwę szóstego przystanku (bo liczymy od zera) o trasie z indeksem 2.

GetTerminusString
Wejściowe wartości stosu: Stack1 - indeks kierunkowy oraz Stack0 - indeks łańcuchowy
Wyjściowa wartość stosu: Stringstack0 - nazwa kierunku
Opis: Dostarcza z pliku .HOF informacje dotyczące kierunku ustalanego za pomocą wyżej wymienionych danych wejściowych.
Przykład: 7 3 (M.V.GetBusstopString) zwraca nazwę ósmego kierunku (bo liczymy od zera) trasy z indeksem 3.

GetRouteTerminusIndex
Wejściowe wartości stosu: Stack0 - indeks trasy (licząc od zera)
Wyjściowa wartość stosu: Stack0 - indeks kierunku (licząc od zera)
Opis: Zwraca indeks domyślnego kierunku dla indeksu danej trasy.

GetTerminusIndex
Wejściowe wartości stosu: Stack0 - kod kierunku
Wyjściowa wartość stosu: Stack0 - indeks kierunku
Opis: Zwraca indeks kierunku biorąc pod uwagę aktualny jego kod.

GetTerminusCode
Wejściowe wartości stosu: Stack0 - indeks kierunku
Wyjściowa wartość stosu: Stack0 - kod kierunku
Opis: Działanie dokładnie odwrotne do GetTerminusIndex. Tutaj to kod kierunku ustalany jest za pomocą indeksu.

GetBusstopCount
Wejściowe wartości stosu: Stack0 - indeks trasy
Wyjściowa wartość stosu: Stack0 - liczba przystanków
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".

GiveChangeCoin
Wejściowe wartości stosu: Stack0 - indeks pieniężny
Wyjściowa wartość stosu: brak
Opis: Warunkuje, jaki pieniądz zostanie użyty np dla skryptów dotyczących automatów wydających resztę.
Przykład: 2 (M.V.GiveChangeCoin) oznacza użycie (np. wydanie) pieniądza o indeksie "2".

GetRouteBusstopIdent
Wejściowe wartości stosu: Stack1 - indeks trasy oraz Stack0 - przystankowy indeks trasy
Wyjściowa wartość stosu: Stringstack0 - identyfikator przystanku
Opis: Zwraca identyfikator przystanku (prawdopodobnie jest to po prostu jego nazwa lub skrócona nazwa) odpowiadający danym wejściowym.
Przykład: 3 6 (M.V.GetRouteBusstopIdent) zwraca identyfikator siódmego przystanku czwartej trasy (bo wskaźniki stosu liczone są tu od zera).

GetBusstopIndex
Wejściowe wartości stosu: Stringstack0 - identyfikator przystanku
Wyjściowa wartość stosu: Stack0 - indeks przystanku
Opis: Zwraca indeks przystanku w zależności od jego identyfikatora.
Przykład: "Reimerweg" (M.V.GetBusstopIndex) zwraca indeks przystanku o identyfikatorze Reimerweg.

GetTTBusstopCount
Wejściowe wartości stosu: brak
Wyjściowa wartość stosu: Stack0 - liczba przystanków
Opis: Zwraca liczbę przystanków dla bieżącego rozkładu jazdy.

GetTTBusstopIndex
Wejściowe wartości stosu: brak
Wyjściowa wartość stosu: Stack0 - indeks aktualnego przystanku
Opis: Zwraca indeks aktualnego przystanku dla bieżącego rozkładu jazdy.

GetTTTerminusIndex
Wejściowe wartości stosu: brak
Wyjściowa wartość stosu: Stack0 - indeks aktualnego kierunku
Opis: Zwraca indeks aktualnego kierunku dla bieżącego rozkładu jazdy.

GetTTLineString
Wejściowe wartości stosu: brak
Wyjściowa wartość stosu: Stringstack0 - numer linii
Opis: Zwraca numer linii dla bieżącego rozkładu jazdy.

GetTTDelay
Wejściowe wartości stosu: brak
Wyjściowa wartość stosu: Stack0 - spóźnienie w sekundach
Opis: Zwraca spóźnienie obliczane w sekundach dla bieżącego rozkładu jazdy.

GetTTBusstopName
Wejściowe wartości stosu: Stack0 - indeks aktualnego przystanku
Wyjściowa wartość stosu: Stringstack0 - nazwa aktualnego przystanku
Opis: Zwraca nazwę aktualnego przystanku biorąc pod uwagę zerową wartość stosu indeksu przystankowego.

GetTTBusstopDep
Wejściowe wartości stosu: Stack0 - indeks aktualnego przystanku
Wyjściowa wartość stosu: Stack0 - czas odjazdu z przystanku w sekundach
Opis: Zwraca rozkładowy czas odjazdu z przystanku w sekundach, na który to przystanek wskazuje zerowa wartość stosu indeksu przystankowego.

GetTTBusstopArr
Wejściowe wartości stosu: Stack0 - indeks aktualnego przystanku
Wyjściowa wartość stosu: Stack0 - czas przyjazdu na przystanek w sekundach
Opis: Zwraca rozkładowy czas przyjazdu na przystanek w sekundach, na który to przystanek wskazuje zerowa wartość stosu indeksu przystankowego.

GetTicketName
Wejściowe wartości stosu: Stack0 - indeks biletowy
Wyjściowa wartość stosu: Stringstack0 - nazwa biletu
Opis: Zwraca nazwę biletu w zależności od jego indeksu.

GetTicketValue
Wejściowe wartości stosu: Stack0 - indeks biletowy
Wyjściowa wartość stosu: Stringstack0 - cena biletu
Opis: Zwraca cenę biletu w zależności od jego indeksu.

GetHumanCountOnPathLink (od OMSI w wersji 1.03)
Wejściowe wartości stosu: Stack0 - indeks ścieżki (Pathlink)
Wyjściowa wartość stosu: Stack0 - liczba pasażerów
Opis: Zwraca aktualną liczbę pasażerów na konkretnej ścieżce.

NrSpecRandom (od OMSI 2)
Wejściowe wartości stosu: Stack0 - wartość początkowa ("Seed")
Wyjściowa wartość stosu: Stack0 - pseudolosowa wartość
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".

GetHeightAbovePoint (od OMSI 2)
Wejściowe wartości stosu: Stack2: - X , Stack1: - Y , Stack0: - Z
Wyjściowa wartość stosu: Stack0 - wysokość nad ziemią
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.

GetDepotStringGlobal (od OMSI 2)
Wejściowe wartości stosu: Stack0: - indeks łańcuchowy
Wyjściowa wartość stosu: Stack0 - globalstring pliku .hof
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.




Tekstury skryptowe (Script-Texturen)
Tylko w OMSI 2, używane w skryptach dotyczących zarówno obiektów scenerii jak i pojazdów. Dyrektywy zadeklarowane w pliku <folder OMSI>\program\callbacklist_scripttex.txt


STNewTex
Wejściowa wartość stosu: Stack0 - indeks tekstury (kolejność z pliku .cfg pojazdu)
Wyjściowa wartość stosu: brak
Opis: Inicjalizacja tekstury skryptowej.

STLock
Wejściowa wartość stosu: Stack0 - indeks tekstury
Wyjściowa wartość stosu: brak
Opis: Blokowanie tekstury, oznaczające możliwość dostępu do odczytu i zapisu.

STUnlock
Wejściowa wartość stosu: Stack0 - indeks tekstury
Wyjściowa wartość stosu: brak
Opis: Odblokowanie tekstury, czyli anulowanie możliwości dostępu do odczytu i zapisu i przygotowanie do wyświetlenia.

STFilter
Wejściowa wartość stosu: Stack0 - indeks tekstury
Wyjściowa wartość stosu: brak
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.

STSetColor
Wejściowe wartości stosu: Stack4 - indeks tekstury, Stack3 - alfa, Stack2 - składowa czerwona, Stack1 - składowa zielona, Stack0 - składowa niebieska
Wyjściowa wartość stosu: brak
Opis: Ustawia kolor dla wykonywanych operacji.

STDrawPixel
Wejściowe wartości stosu: Stack2 - indeks tekstury, Stack1 - X, Stack0 - Y
Wyjściowa wartość stosu: brak
Opis: Zmienia kolor (koloruje wcześniej podaną barwą) konkretny piksel o współrzędnych X, Y .

STDrawRect
Wejściowe wartości stosu: Stack4 - indeks tekstury, Stack3 - X1, Stack2 - Y1, Stack1 - X2, Stack0 - Y2
Wyjściowa wartość stosu: brak
Opis: Rysuje wypełniony prostokąt między podanymi współrzędnymi X1-Y1, X2-Y2 .

STTextOut
Wejściowe wartości stosu: Stack5 - indeks tekstury, Stack4 - X1, Stack3 - Y1, Stack2 - indeks czcionki, Stack1 - pełny kolor (lub nie), Stack0 - tracking (automatyczne regulowanie odstępów między znakami), StringStack0 - wypisywany tekst
Wyjściowa wartość stosu: brak
Opis: Wypisuje tekst na teksturze. Indeks czcionki może być zwrócony przez GetFontIndex , wartość "pełny kolor" wskazuje na to, czy ustawiać kolor zadeklarowany poprzez makro STSetColor, czy pobierać go z właściwości czcionki.

GetFontIndex
Wejściowe wartości stosu: StringStack0 - nazwa czcionki
Wyjściowa wartość stosu: Stack0 - indeks czcionki
Opis: Zwraca indeks czcionki dla makra STTextOut

TextLength
Wejściowe wartości stosu: Stack0 - indeks czcionki, StringStack0 - wypisywany tekst
Wyjściowa wartość stosu: Stack0 - długość tekstu w pikselach
Opis: Oblicza i zwraca długość danego tekstu wypisywanego wskazaną czcionką.

STReadPixel
Wejściowe wartości stosu: StringStack2 - indeks tekstury, StringStack1 - X, StringStack0 - Y
Wyjściowa wartość stosu: brak
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).

STCopyColor
Wejściowe wartości stosu: Stack1 - indeks pierwszej tekstury, StringStack0 - indeks drugiej tekstury
Wyjściowa wartość stosu: brak
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).

STLoadTex
Wejściowe wartości stosu: Stack0 - indeks tekstury, StringStack0 - nazwa tekstury
Wyjściowa wartość stosu: brak
Opis: Rysuje teksturę o określonej nazwie.

STGetR / G / B / A
Wejściowe wartości stosu: Stack0 - indeks tekstury
Wyjściowa wartość stosu: wartość koloru (składowych koloru)
Opis: Zwraca wartość koloru (poszczególnych składowych) danej tekstury.




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 ;)

Legenda:
StackX - odpowiada X-owej komórce stosu, przykładowo Stack0 odpowiada zerowej komórce stosu;
StringstackX odpowiada X-owej komórce stosu łańcuchowego, przykładowo Stringstack0 odpowiada zerowej komórce tego stosu.

Poradnik został napisany wyłącznie dla Forum http://strefa-omsi.pl i nie może być rozpowszechniany we fragmentach lub w całości na innych stronach bez zezwolenia głównego Autora.
♪ "Nie pytaj mnie, wiem tyle co i ty" ♪

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

 Podziękowania za post: mattez(+1) , KaJotT3D(+1)
Odpowiedz




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