A long time ago in a galaxy far, far away...


Данная статья помечена как устаревшая, её содержание может быть неверным или неактуальным.

Если она не будет актуализирована или не появится веского повода для снятия этой плашки, то вскоре она будет перемещена в Священный архив.

При желании вы можете помочь проекту Onyx и сообществу Animus-logo.png SS13 в целом — загляните на наш Bus Mainframes.gif Портал сообщества.
Morgue.png


Расшифровка

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.

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

NT Deluxe Namespaces

Nanotrasen will constantly add new universal functions and features to NTSL, here are a few of them:


Number

Syntax Returns Description
prob(number) number Returns nonzero is the probability succeeded. Returns zero if the probability failed.
sqrt(number) number Квадратный корень
abs(number) number Модуль
floor(number) number Округляет в меньшую сторону.
ceil(number) number Округляет в большую сторону.
round(number) number Округляет по стандартным правилам. 1.5->2, 1.49->1.
clamp(number, number, number) number Вычисляет значение Arg.1 между min(Arg.2) и max(Arg.3). clamp(30, -30, 25) = 25
inrange(number, number, number) number Возвращает 1, если Arg.1 между min(Arg.2) и max(Arg.3).
tostring(number) string Возвращает значение переменной типа number в виде string.
rand(number, number) number Возвращает случайное число между min(Arg.1) и max(Arg.2).

String

Строка(String) — это последовательность символов. Строка обозначается кавычками с обоих сторон.
"Hello world!" — строка.
Длина строки это количество содержащихся в ней символов и пробелов.

Syntax Returns Description
find(string, string) string Ищет в строке Arg.1 строку Arg.2, возвращает 0 если не найдено
length(string) number Возвращает длину строки.
substr(string, number, number) string Возвращает подстроку из Arg.1 начиная с символа №(Arg.2) до символа №(Arg.3).
replace(string, string, string) string Возвращает вариант строки(Arg.1) где все вхождения строки Arg.2 заменены на Arg.3.
lower(string) string Переводит все символы в строчные.
upper(string) string Переводит все символы в прописные.
explode(string, string) vector Разделит строку(Arg.1) в каждом месте совпадающем с разделителем(Arg.2) в вектор. explode("Hello there young friend", " "), создаст вектор с 4 указателями, "Hello", "there", "young", "friend". это очень полезно для чат-команд: if(at(explode($content, " "),1)=="/bot"){dostuff} сделает так, чтобы dostuff выполнялось только если первое слово было /bot.
repeat(string, number) string Повторяет строку(Arg.1) n(Arg.2) раз.
reverse(string) string Записывает строку в обратном порядке.
tonum(string) number Переводит строку в тип number.

Vector

Вектор — массив с переменной длиной, в его ячейках могут храниться любые типы. They are very useful for serving as lists; their members can be instantly accessed provided you have an appropriate position. Индексы вектора в NTSL начинаются с 1, в отличие от других языков.

Syntax Returns Description
vector(...) vector Returns a vector with a given number of entities. You can add an infinite number of entries, or no entries at all.
at(vector, number, var) var Sets the cell at Arg.2 index in the Arg.1 vector to Arg.3 if Arg.3 is supplied, otherwise, returns the value located at Arg.2.
copy(vector, number, number) vector Returns a new vector based on Arg.1, ranging from minimum index Arg.2 to Arg.3.
push_back(vector, ...) Adds Arg.2 (and every item after) to the end of the vector. Deprecated by the += operator.
remove(vector, ...) Loops through the vector and deletes the items matching the Args.
cut(vector, number, number) Cuts out entries from Arg.2 to Arg.3 in the Arg.1 vector.
swap(vector, number, number) Swaps the entries's position at Arg.2 and Arg.3 in the Arg.1 vector.
insert(vector, number, var) Inserts Arg.3 into Arg.1 at index Arg.2.
find(vector, var) var Searches the Arg.1 vector for Arg.2, returns 0 if not found.
length(vector) number Returns the length of the vector. (amount of indices)

Miscellaneous Definitions

Syntax Returns Description
pick(...) var Возвращает случайно выбранную запись из параметров. Note: vector parameters will add their entries into the "raffle". Функция никогда не вернет вектор.
time() number Возвращает реальное время сервера в виде number. Вы можете использовать ее чтобы узнать как давно код исполнялся последний раз via mem().
timestamp(format) string Возвращает время в виде строки, отформатированной по параметру. E.g: "DDD MMM DD hh:mm:ss YYYY" or "hh:mm:ss" or "DD MM YY".

Prefab Variables

PI = 3.141592653;
E = 2.718281828;
SQURT2 = 1.414213562;
FALSE = 0; // true/false are just Boolean shortcuts to 0 and 1
TRUE = 1;
NORTH = 1;
SOUTH = 2;
EAST = 4;
WEST = 8;

$common = 1459
$science = 1351
$command = 1353
$medical = 1355
$engineering = 1357
$security = 1359
$supply = 1347

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(ключ-значение). Вызванная с ключом в качестве аргумента, 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