Як писати скрипти для Trainz

Це перша версія статті, розрахована в основному на тих, хто вже знайомий з програмуванням, оскільки я не пояснюватиму основних понять. Тобто вважається, що ви вже маєте уявлення про те, що таке типи даних, процедури, функції, а також об'єктно-орієнтоване програмування. Усіх, хто вперше про це почув, я спершу відправляю до книг з мов програмування, де всі ці терміни пояснюються.

Скрипти для Trainz пишуться внутрішньою мовою, яка багато в чому схожа на такі мови програмування як C++ або Java, хоча це власна мова фірми Auran. Вихідний файл скрипта - звичайний ASCII текстовий файл, якому за умовчанням дається розширення.

З цього файлу за допомогою програми-компілятора gsc.exe виходить файл з розширенням .gsc, який вже буде виконуватися в середовищі Trainz. Наскільки я зміг зрозуміти, у Trainz вбудований спеціальний багатопотоковий інтерпретатор. Багатопотоковий означає, що можна паралельно запустити кілька процесів, які виконуватимуться незалежно один від одного. Наприклад, можна написати для кожного поїзда у вашому сценарії окремий потік, який повністю управлятиме його поведінкою, далі всі ці потоки запустити на виконання, і кожен з них виконуватиметься незалежно. Точніше, майже незалежно, оскільки багатопоточність у Trainz, наскільки я з'ясував, імітується. Тобто, якщо всередині одного з потоків розпочати виконання якоїсь довгої процедури без виклику підпрограм очікування подій, наприклад створення складів, то всі процеси, у тому числі основної гри, припиняються до завершення цієї процедури.

Також хочеться помітити, що файл .gsc, що отримується на виході, містить не команди процесора, а внутрішній байт-код інтерпретатора Trainz.

Якщо заглянути вкаталог Scripts\Docs, там можна знайти файл index.chm і "TrainzScript Tutorial.doc" (для версії TRS2004). Перший містить досить докладний help з мови та внутрішніх об'єктів гри. Без нього серйозно писати скрипти неможливо, оскільки тільки там можна знайти докладний опис всього, що є всередині Trainz (а там багато чого). Відразу хочу зазначити, що там все англійською мовою, тож якщо хтось збирається всерйоз писати скрипти, то вчіть англійську мову хоча б для загального розуміння сенсу. Хочеться також додати, що технічні тексти читаю порівняно вільно, але все одно часто доводиться вдаватися або до словника, або до послуг програми-перекладача (швидше, ніж за словником лазити). Знову ж таки, багато назв процедур, функцій, класів тощо. кажуть самі за себе, коли хоч трохи знаєш мову. Загалом було б бажання, решта додасться.

Також у цьому каталозі лежить файл makescript.bat, який фірма Auran рекомендує скопіювати в той каталог, де ви писатимете скрипт, і запускати з його допомогою компіляцію. Цей файл містить такі команди командного процесора ОС:

for %%a in (*.gs) do %gsc% %%a -i%include%

при цьому вважається, що ваш скрипт сценарію лежить в каталозі world\custom\scenarios\

Іншими словами, задаються дві змінні, в яких спочатку ми повертаємося до вихідного каталогу гри, а потім у першому випадку йдемо до файлу компілятора gsc.exe, який лежить у каталозі bin, а в другому прописується шлях до папки scripts, що теж знаходиться в каталозі гри , Де лежать файли заголовків до всіх внутрішніх об'єктів самої гри Trainz і на який ми будемо посилатися при написанні власних скриптів.

Рядок, який починається з for, повторює виклик компілятора для всіх файлів, якіперераховані в командному рядку після makescript.bat

В принципі, можна скористатися цим файлом, скопіювавши його в папку зі своїм скриптом сценарію, а можна і свій написати, якщо комусь хочеться.