Pomógł: 8 razy Wiek: 30 Dołączył: 18 Sie 2009 Posty: 132 Skąd: Wyszków
Wysłany: 05-08-2026, 12:30 Skrypt taboru
Cześć.
Zaktualizowałem większość taboru po mega aktualizacji na DLS, który działa na jednej bibliotece skryptów.
<kuid2:263713:150034:11> Skrypt taboru v.3.2 - 09.02.2026
Odkryłem, że ET22 od Vicia_007 i ST43 są trafione. Na obydwu czołach świecą wszystkie reflektory, pozwieszane są "ptaszki" w ustawieniach tych loków.
Moja wersja Trainz 22 SP7 (137780).
Niby wszystko jest w porządku wg Menadżera Zawartości, dopóki nie uruchomisz gry.
Przestarzałe dodatki pousuwane, wykonywałem naprawy bazy, usuwałem i wstawiałem ponownie na tor.
_________________ Pasjonaci nieczynnej linii kolejowej Auranowice Kebab - Biała Pendolińska pełodegie.
Ostatnio zmieniony przez Sebek07 05-08-2026, 12:31, w całości zmieniany 2 razy
Pomógł: 8 razy Wiek: 30 Dołączył: 18 Sie 2009 Posty: 132 Skąd: Wyszków
Wysłany: 05-08-2026, 19:29
Dzięki. Załatwione. To ciekawe, ze brak jednej corony w configu wysypuje cały skrypt do takiego stopnia, że lok nie jedzie na poleceniach lub nie wyłacza fizyki.
Dlatego obstawiałem, że coś jest po stronie skryptu.
Teraz przydałaby się poprawka na DLS.
_________________ Pasjonaci nieczynnej linii kolejowej Auranowice Kebab - Biała Pendolińska pełodegie.
Dzięki. Załatwione. To ciekawe, ze brak jednej corony w configu wysypuje cały skrypt do takiego stopnia, że lok nie jedzie na poleceniach lub nie wyłacza fizyki.
Dlatego obstawiałem, że coś jest po stronie skryptu.
Skrypt szuka KUIDów w kuid-table już w momencie inicjalizacji (czyli postawienia pojazdu na tory lub wczytania mapy, gdzie jest użyty), jeżeli nie znajdzie - to nie startuje dalej. A to oznacza, że dodatek zachowuje się jakby w ogóle skryptu nie miał.
Pomógł: 28 razy Wiek: 50 Dołączył: 05 Mar 2018 Posty: 392 Skąd: Kraków
Wysłany: 14-08-2026, 21:19
Sebek07 napisał/a:
brak jednej corony w configu wysypuje cały skrypt do takiego stopnia, że lok nie jedzie na poleceniach lub nie wyłacza fizyki.
Dlatego obstawiałem, że coś jest po stronie skryptu.
Obserwacja skutków w grze prawdziwa, ale wniosek na temat sypania się skryptu całkowicie błędny. Gdyby z powodu braku korony skrypt się wysypał, to gra już w CM wywaliłaby lokomotywę na czerwono. I oczywiście byłaby figa z zobaczenia jej na podglądzie w CM, nie mówiąc o stawianiu jej na torach w sesji.
Za to, że mimo wszystko tak się nie dzieje, to tak na prawdę wszyscy jesteśmy dłużnikami Radka. W tym konkretnym (niejedynym przecież) przypadku za to, że mądrze zabezpieczył skrypt właśnie przed fikaniem gry z powodu braku np. korony.
Jako totalny abnegat w zakresie języków programowania, ale któremu zdarzało się z powodu Trainza czasem zaglądać do plików .gs, chciałem trochę pomęczyć czat GPT na temat przyczyn opisanej przez Sebka07 sytuacji i jej skutków. Dodajmy, że jest to sytuacja, która może się zdarzyć każdemu z nas po pobraniu jednej (przeoczonej) z setek (poprawionych) lokomotyw, nad których przeskryptowaniem i ponowną publikacją na DLS i TrainzArcie Kilan i Radek wykonali i nadal wykonują tytaniczną pracę.
Poniżej załączam to, czego się dowiedziałem.
(Pytanie:) Ciekawi mnie natomiast, i chciałbym zrozumieć, dlaczego trainzscript w przypadku uniwersalnego skryptu lrcs.client stosowanego w modernizowanych skryptowo polskich lokomotywach w TRS19 i TRS22, nie znajdując numeru kuid dla red-corona ze względu na brak wpisu corona-red w kuid-table w praktyce: ani nie wskazuje błędu lokomotywy na poziomie Content Managera, ani nie pobiera kuidu z linijki texture-kuid, ignorując brak wpisu w kuid-table. Zamiast obu tych skutków lokomotywa wyświetla się w grze bez błędu, jednak świecą się jej wszystkie światła żółte i nie można zmienić lub ustawić żadnej opcji lokomotywy. Dlaczego tak jest?
(Odpowiedź czatu GPT:) "Opisane przez Ciebie zachowanie to klasyczny przypadek "cichego błędu" (silent failure) w logice skryptu oraz specyfiki działania uniwersalnych systemów sterowania (takich jak biblioteki LRCS – Locomotive Remote Control System / Loco Register Control System i ich skrypty klienckie).To, że lokomotywa ładuje się bez błędów w Content Managerze, ale w grze "wisi" (świecą się wszystkie żółte światła, brak interakcji), wynika z trzech precyzyjnych mechanizmów:
1. Dlaczego Content Manager nie widzi błędu?
Content Manager (CM) w TRS19 i TRS22 weryfikuje poprawność pliku config.txt w sposób statyczny. Z punktu widzenia CM, jeśli skrypt kompiluje się bez błędów składniowych, sam zasób jest poprawny.Brak walidacji dynamicznej: CM sprawdza zależności (dependencies) wyłącznie na podstawie tego, co znajduje się w sekcji kuid-table.Skrypt jako czarna skrzynka: Gra nie analizuje kodu tekstowego .gs w poszukiwaniu nazw takich jak "corona-red". Dla CM ta zależność po prostu nie istnieje, dlatego dodatek otrzymuje status "czysty" (brak czerwonych wykrzykników w bazie).
2. Dlaczego skrypt nie sypie błędem (czerwonym wykrzyknikiem) w grze?
Uniwersalne skrypty, takie jak lrcs.client, pisane są z myślą o setkach różnych lokomotyw (EU07, ET22, ST44 itp.). Z tego powodu ich twórcy stosują tzw. programowanie defensywne i konstrukcje zabezpieczające:trainzscript// Przykład zabezpieczenia w uniwersalnym kodzie
KUID coronaRed = GetAsset().LookupKUIDTable("corona-red");
if (!coronaRed) {
Interface.Log("Warning: corona-red not found in kuid-table!");
// Skrypt NIE wywala błędu krytycznego, tylko idzie dalej, zwracając pustą wartość (null)
}
Gdyby autorzy skryptu nie użyli takiego zabezpieczenia, gra wyrzuciłaby natychmiastowy błąd krytyczny wątku (Thread Exception). Dzięki zabezpieczeniu skrypt nie "wywala się" do systemu, ale zwraca pustą wartość (null) do zmiennej odpowiedzialnej za obsługę świateł.
3. Dlaczego świecą się wszystkie żółte światła i brak jest kontroli?
To najważniejsza część problemu – efekt pętli nieskończonej lub przerwania wątku inicjalizacji.Uniwersalne systemy skryptowe w Trainz działają sekwencyjnie podczas startu mapy (w funkcji Init() lub osobnym wątku Main()). Sekwencja startowa wygląda zazwyczaj tak:Zainicjalizuj zmienne i pobierz KUID-y.Skonfiguruj interfejs użytkownika (menu lokomotywy).Uruchom logikę systemów bezpieczeństwa (SHP/CA/PZB).Przejdź do pętli sterowania światłami i fizyką.W przypadku braku KUID-u dla czerwonej korony dzieje się jedna z dwóch rzeczy:Przerwanie wątku bez błędu gry: Skrypt przestał wykonywać kod dokładnie w momencie, gdy próbował odczytać lub przypisać brakujący KUID do obiektu korony. W TrainzScript, jeśli funkcja wewnętrzna ulegnie zawieszeniu lub cichemu zatrzymaniu (np. w pętli oczekującej na załadowanie zasobu), gra nie zgłosi błędu do interfejsu (brak ikony błędu), ale wątek sterujący tą lokomotywą umiera.Stan domyślny (Fallback): Ponieważ wątek inicjalizacji został przerwany w połowie:Menu i opcje nie zdążyły się wygenerować (dlatego nie możesz nic kliknąć).Światła żółte to stan domyślny lokomotywy: Wiele modeli 3D ma domyślnie włączone w pliku .im żółte/białe światła jako bazowe tekstury (lub skrypt ustawia je na starcie jako krok zero). Ponieważ skrypt "zawiesił się" przed wykonaniem procedury wygaszania świateł i dostosowania ich do kierunku jazdy, lokomotywa utknęła w pierwotnym stanie technicznym – z zapalonymi wszystkimi światłami czołowymi.
Podsumowanie: lokomotywa jest "warzywem", ponieważ skrypt lrcs.client bezpiecznie ominął błąd braku KUID-u w CM, ale w samej grze brak tej zmiennej doprowadził do zatrzymania wątku logicznego pojazdu. Skrypt umarł po cichu, zanim zdążył włączyć menu sterowania i ustawić prawidłowe oświetlenie."
I jeszcze dodam od siebie: ...ale mimo to nie wywalił do pulpitu ani całej gry, ani sesji, w tym pozostałego taboru na mapie. Sesja działa w najlepsze, tylko "trefna" lokomotywa sobie spokojnie stoi i czeka na dopisek w configu.
Wielkie dzięki za to dla Radka.
I jeszcze taka refleksja: to pokazuje też, co by się nie znajdowało na liście życzeń, skarg i zażaleń wobec Tereni, że gra jest o lata świetlne dalej niż kiedyś, jeśli chodzi o stabilność.
Ostatnio zmieniony przez Railwoj 14-08-2026, 21:46, w całości zmieniany 8 razy
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach