NTSL Script

Версия от 14:34, 27 июля 2016; Menxis (обсуждение | вклад) (добавил Traffic Control Systems Implementation)

В разработке…


Jobeng.png
Данная статья помечена как неоконченная. Это означает, что статья находится на доработке, поэтому является неверной или неактуальной.

Вы можете помочь проекту Onyxyeye@256x256.png Onyx и сообществу Animus-logo.png SS13 в целом — зайдите на наш Bus Mainframes.gif Портал сообщества.
Также вы можете прочитать эту статью на ["http://www.ss13.eu/wiki/index.php/NTSL" зарубежном вики-проекте].


Расшифровка

NanoTrasen Scripting Language (Язык Скрипта НаноТрейзен)

Как начать пользоваться NTSL

  1. Придите в отсек контроля за телекомуникациями станции(Telecommunications Control Room).
  2. Откройте консоль контроля за трафиком телекомуникаций (Telecommunications Traffic Control Console).
  3. Авторизируйтесь для получения доступа нажав Insert ID с картой в руках.
  4. [Scan] для получения списка серверов.
  5. Нажмите на сервер с интересующим вас радиоканалом.
  6. [Edit Code] чтобы увидеть код сервера.
  7. Наберите свой код в появившееся окно.
  8. Save, Compile и Execute
  9. Закройте окно с кодом
  10. Смените режим выполнения сигнала (Signal Execution) на ALWAYS
  11. Поздравляю, вы прекрасны!
    • Повторите шаги с 5 по 10 для каждого канала, если желаете.

Гайд по синтаксису

NTSL несложен, так как был создан для пользователей всех уровней умения программирования. Пробелы игнорируются, точки с запятой требуются и квадратные скобки также требуются.


Переменные

Переменные нужны для временного хранения данных для дальнейшего использования в коде. Для создания переменной используйте следующий синтаксис:

$myVariable = 5; //  "$" позволяет компилятору идентифицировать переменную.

Вы можете назначить переменной текстовое значение (строку).

$myVariable = "Hello world!";

Функции

Функции могут быть заданы динамично. Есть разные предопределённые функции для реализации цели на NTSL, но базовые функции остаются такими же. Вот пример, как Вы можете использовать функцию:


$myVariable = getNumber();

В этом примере переменной "$myVariable" назначаем значение, которое вернула функция "getNumber()". Каждая функция возвращает значение, даже если возвращаемое значение не определено. Вот еще несколько примеров вызова функции:

broadcast($myVariable);
broadcast("Hello world!");
broadcast("Griffing assistants in T-minus " + $myVariable + " seconds.");

Также вы можете определить свою функцию используя def:

def getNumber() {
    return 5; // Функция getNumber() всегда будет возвращать число 5.
}

Code Blocks

Блоки кода вызываются, когда часть кода запрашивает вызов кода ещё раз. Переменные, указанные в одном и том же блоке кода не могут быть использованы в других блоках кода, не имеющих отношений к исходному. Например:

$myGlobalVariable = getNumber();

while($myGlobalVariable != 0) {
    
   $myLocalVariable = 0;
   $myGlobalVariable = $myLocalVariable;
}

$myLocalVariable = 50; // Это неверно; myLocalVariable не существует в этом блоке

Как только будет обработана закрывающая квадратная скобка, все переменные будут уничтожены. Следовательно, вы не сможете использовать какие - либо переменные вне того блока кода, где они указаны.

Операторы условия

Процедура while() будет обрабатываться снова и снова до тех пор, пока указанное в ней равенство / неравенство не будет верно. Оператор != обозначает "неверно".

Список операторов сравнения:

  • == : Равно
  • != : Не равно
  • < : Меньше чем
  • > : Больше чем
  • <= : Меньше чем или равно
  • >= : Больше чем или равно

Также могут быть использованы операторы if() (если), elseif() (также если) и else() (иначе). Пример:

if($myVariableNumber == 50) // Если число равно пятидесяти.
{
   // Блок кода
}
elseif($myVariableNumber <= 30) // Если число не равно пятидесяти, но меньше или равно тридцати.
{   
   // Блок кода
}
else // Если ни одно из условий не верно.
{
   // code block
}

Синтаксические особенности

Операторные скобки - "{" и "}"
Знак присваивания - "="
Отступы игнорируются, на конце каждой строки требуется ";"
Для объявления переменной не требуется никаких ключевых слов, ей может быть любое не зарезервированное ранее слово, поддерживается принцип области применения (т.е. принцип локальных переменных)

Пример кода:

myVariable = 12345;
if ( myVariable == 12345 ) 
{ 
    qwerty = 1; 
    qwerty = qwerty + 1;
} 
else { 
    myVariable = 1; 
}

Типы данных

Используются три типа: число, вектор и строка, приблизительно соответствующие типам double, vector и string в C++. А именно:

  • Число хранится в виде a*b^n, но может быть использовано и как целое.
  • Вектор - массив с переменной длиной, в его ячейках могут храниться любые типы.
  • Строка - набор символов. Пустая строка используется в качестве null.

Тип переменной объявлять не нужно. По умолчанию любая переменная, которой не было присвоено значение, содержит пустую строку. Тип переменной не фиксирован, одной и той же переменной можно присваивать значения разных типов.

Traffic Control Systems Implementation

Система телекоммуникаций напрямую связана с TCS scripting implementation. В ней присутствуют следующие функции и возможности.


Модификация сигнала в реальном времени

Если код настроен на автоматическое исполнение, сигналы сначала будут выполнять сохраненный на сервере код. Информация о сигналах хранится в следующих переменных:

$source  // источник сигнала
$content // содержание сигнала
$freq    // частота на которой передается сигнал
$pass    // определяет будет ли транслирован сигнал
$job     // профессия (только для радиосообщений) оратора

Функции

TCS также содержит следующие функции (параметрами можно пренебречь; тогда они будут назначены автоматически):


broadcast()

broadcast(message, frequency, source, job)

Отправляет радиосигнал соседним подпространственным ретрансляторам для вещания со следующими параметрами.

message: радиосообщение
frequency: частота на которой будет передаваться сообщение
source: Имя отправителя. Если имени нет в серверной базе данных голосов (анализ голоса производится каждый раз когда человек говорит в радиоканал) имя будет записано прописными буквами и курсивом для обозначения синтезированного голоса.
job: Профессия оратора.

Examples:

broadcast("Hello world!");

defaults:
frequency: 1459
source: имя сервера
job: нет

broadcast("HELP GRIEFF", 1459, "Burer", "Security Officer");

signal()

signal(frequency, code)

Отправить сигнал с кодом на какой-либо частоте. Работает так же, как и remote signaller device.

frequency: Частота на которой отправится сигнал.
code: Код, который будет отправлен.

Examples:

signal(1359, 25);

defaults:
frequency: 1459
code: 30

mem()

mem(key, value)

Переменные объявленные в скрипте обнуляются после выполнения скрипта. Функция mem позволяет сохранить информацию в память сервера, чтобы она могла быть использована в последующих исполнениях скрипта. Каждый телекоммуникационный сервер содержит свою отдельную базу данных, в виде hash таблицы --- структуры данных, состоящей из пар key-value(ключ-значение). Вызванная с ключjм в качестве аргумента, mem вернет ассоциированное значение. Вызванная с двумя аргументами, mem установит связь между значением и ключом.

key: Строка, используемая для обозначения сохраняемой переменной.
value: Информация, которую вы хотите сохранить. Может быть любого типа.

Examples:

$source = "Jarsh Mellow";
mem($source + "'s Mom");  // возвращает значение(value) связанное с ключом(key) "Jarsh Mellow's Mom". Возвращает null/0, если не найдено.
mem($source + "'s Mom", "Lindsay Donk"); //задает связь ключа(key) "Jarsh Mellow's Mom" со значением(value) "Lindsay Donk".

Операторы

Бинарные


Использование Использование
X == Y Вернёт TRUE если X = Y
X != Y Вернёт TRUE если X =/= Y
X > Y Вернёт TRUE если X больше Y
X < Y Вернёт TRUE если Х меньше Y
X >= Y Вернёт TRUE если X больше или равен Y
X <= Y Вернёт TRUE если X меньше или равен Y
X && Y Вернёт TRUE если X и Y равны TRUE
X || Y Вернёт TRUE если X, Y, или они оба равны TRUE
X + Y Вернёт сумму X и Y
X - Y Вернёт разность X и Y
X * Y Вернёт произведение X и Y
X / Y Вернёт частное X и Y
X^Y Вернёт X в степени Y
X%Y Вернёт остаток X / Y
Название Использование Возвращаемый результат
Битное И X & Y 101
Битное ИЛИ X | Y 111