Изменения

21 081 байт добавлено ,  01:10, 13 декабря 2016
м
Откат правок ZLOFENIХ (обсуждение) к версии Menxis
Строка 1: Строка 1:  +
{{Заготовка|url="http://www.ss13.eu/wiki/index.php/NTSL"}}
 +
== Расшифровка ==
 +
NanoTrasen Scripting Language (Язык Скрипта НаноТрейзен)
    +
==Как начать пользоваться NTSL==
 +
# Придите в отсек контроля за телекомуникациями станции(Telecommunications Control Room).
 +
# Откройте консоль контроля за трафиком телекомуникаций (Telecommunications Traffic Control Console).
 +
# Авторизируйтесь для получения доступа нажав ''Insert ID'' с картой в руках.
 +
# ''[Scan]'' для получения списка серверов.
 +
# Нажмите на сервер с интересующим вас радиоканалом.
 +
# ''[Edit Code]'' чтобы увидеть код сервера.
 +
# Наберите свой код в появившееся окно.
 +
# ''Save'', ''Compile'' и ''Execute''
 +
# Закройте окно с кодом
 +
# Смените режим выполнения сигнала (Signal Execution) на ''ALWAYS''
 +
# Поздравляю, вы прекрасны!
 +
#* Повторите шаги с 5 по 10 для каждого канала, если желаете.
    +
== Гайд по синтаксису ==
   −
[[Файл:LtJ6KqW6mKk.jpg|LtJ6KqW6mKk.jpg]]
+
NTSL несложен, так как был создан для пользователей всех уровней умения программирования. Пробелы игнорируются, точки с запятой требуются и квадратные скобки также требуются.
[https://www.youtube.com/watch?v=wqpseZS3mD0 Конец прекрасной эпохи. Мы еще увидимся, я обещаю!]
+
 
 +
 
 +
=== Переменные ===
 +
 
 +
Переменные нужны для временного хранения данных для дальнейшего использования в коде. Для создания переменной используйте следующий синтаксис:
 +
 
 +
$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
 +
}
 +
 
 +
== Синтаксические особенности ==
 +
Операторные скобки - "{" и "}"<br>
 +
Знак присваивания - "="<br>
 +
Отступы игнорируются, на конце каждой строки требуется ";"<br>
 +
Для объявления переменной не требуется никаких ключевых слов, ей может быть любое не зарезервированное ранее слово, поддерживается принцип области применения (т.е. принцип локальных переменных)
 +
 
 +
==== Пример кода: ====
 +
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 ===
 +
 
 +
:{|style="background:#999999"
 +
!align="left" width="200"| Syntax
 +
!align="left" width="100"| Returns
 +
!align="left" width="800"| Description
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| prob(number) || number || Returns nonzero is the probability succeeded. Returns zero if the probability failed.
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| sqrt(number) || number || Квадратный корень
 +
|-
 +
| abs(number) || number || Модуль
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| floor(number) || number ||Округляет в меньшую сторону.
 +
|-
 +
| ceil(number) || number || Округляет в большую сторону.
 +
|-
 +
| round(number) || number || Округляет по стандартным правилам. 1.5->2, 1.49->1.
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| 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) — это последовательность символов. Строка обозначается кавычками с обоих сторон.<br>
 +
"Hello world!" — строка. <br>
 +
Длина строки это количество содержащихся в ней символов и пробелов.<br>
 +
 
 +
:{|style="background:#999999"
 +
!align="left" width="200"| Syntax
 +
!align="left" width="100"| Returns
 +
!align="left" width="800"| Description
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| find(string, string) || string || Ищет в строке Arg.1 строку Arg.2, возвращает 0 если не найдено
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| length(string) || number || Возвращает длину строки.
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| substr(string, number, number) || string || Возвращает подстроку из Arg.1 начиная с символа №(Arg.2) до символа №(Arg.3).
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| replace(string, string, string) || string || Возвращает вариант строки(Arg.1) где все вхождения строки Arg.2 заменены на Arg.3.
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| lower(string) || string || Переводит все символы в строчные.
 +
|-
 +
| upper(string) || string || Переводит все символы в прописные.
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| 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.
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| repeat(string, number) || string || Повторяет строку(Arg.1) n(Arg.2) раз.
 +
|-
 +
| reverse(string) || string || Записывает строку в обратном порядке.
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| 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, в отличие от других языков.
 +
 
 +
:{|style="background:#999999"
 +
!align="left" width="200"| Syntax
 +
!align="left" width="100"| Returns
 +
!align="left" width="800"| Description
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| vector(...) || vector || Returns a vector with a given number of entities. You can add an infinite number of entries, or no entries at all.
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| 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.
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| copy(vector, number, number) || vector || Returns a new vector based on Arg.1, ranging from minimum index Arg.2 to Arg.3.
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| push_back(vector, ...) || || Adds Arg.2 (and every item after) to the end of the vector. Deprecated by the += operator.
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| 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.
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| swap(vector, number, number) || || Swaps the entries's position at Arg.2 and Arg.3 in the Arg.1 vector.
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| insert(vector, number, var) || || Inserts Arg.3 into Arg.1 at index Arg.2.
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| find(vector, var) || var || Searches the Arg.1 vector for Arg.2, returns 0 if not found.
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| length(vector) || number || Returns the length of the vector. (amount of indices)
 +
|-
 +
|}
 +
 
 +
=== Miscellaneous Definitions ===
 +
 
 +
:{|style="background:#999999"
 +
!align="left" width="200"| Syntax
 +
!align="left" width="100"| Returns
 +
!align="left" width="800"| Description
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| pick(...) || var || Возвращает случайно выбранную запись из параметров. Note: vector parameters will add their entries into the "raffle". Функция никогда не вернет вектор.
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| time() || number || Возвращает реальное время сервера в виде number. Вы можете использовать ее чтобы узнать как давно код исполнялся последний раз via mem().
 +
|-
 +
| bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" | || bgcolor="#AAAAAA" |
 +
|-
 +
| 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''': радиосообщение
 +
<br>'''frequency''': частота на которой будет передаваться сообщение
 +
<br>'''source''': Имя отправителя. Если имени нет в серверной базе данных голосов (анализ голоса производится каждый раз когда человек говорит в радиоканал) имя будет записано прописными буквами и курсивом для обозначения синтезированного голоса.
 +
<br>'''job''': Профессия оратора.
 +
 
 +
Examples:
 +
 
 +
broadcast("Hello world!");
 +
 
 +
'''defaults''':
 +
<br>frequency: 1459
 +
<br>source: имя сервера
 +
<br>job: нет
 +
 
 +
broadcast("HELP GRIEFF", 1459, "Burer", "Security Officer");
 +
 
 +
==== signal() ====
 +
 
 +
signal(frequency, code)
 +
 
 +
Отправить сигнал с кодом на какой-либо частоте. Работает так же, как и remote signaller device.
 +
 
 +
'''frequency''': Частота на которой отправится сигнал.
 +
<br>'''code''': Код, который будет отправлен.
 +
 
 +
Examples:
 +
 
 +
signal(1359, 25);
 +
 
 +
'''defaults''':
 +
<br>frequency: 1459
 +
<br>code: 30
 +
 
 +
==== mem() ====
 +
 
 +
mem(key, value)
 +
 
 +
Переменные объявленные в скрипте обнуляются после выполнения скрипта. Функция mem позволяет сохранить информацию в память сервера, чтобы она могла быть использована в последующих исполнениях скрипта.
 +
Каждый телекоммуникационный сервер содержит свою отдельную базу данных, в виде hash таблицы  — структуры данных, состоящей из пар key-value(ключ-значение).
 +
Вызванная с ключом в качестве аргумента, mem вернет ассоциированное значение. Вызванная с двумя аргументами, mem установит связь между значением и ключом.
 +
 
 +
'''key''': Строка, используемая для обозначения сохраняемой переменной.
 +
<br>'''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".
 +
 
 +
== Операторы ==
 +
=== Бинарные ===
 +
  {| class="wikitable" width="20%"
 +
  |-
 +
  ! Использование
 +
  ! Использование
 +
  |-
 +
  | 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 <nowiki>||</nowiki> 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
 +
  |-}
 +
<br>
 +
 
 +
{|class="wikitable" width="20%"
 +
  |-
 +
  ! Название
 +
  ! Использование
 +
  ! Возвращаемый результат
 +
  |-
 +
  | Битное И
 +
  | X & Y
 +
  | 101
 +
  |-
 +
  | Битное ИЛИ
 +
  | X <nowiki>|</nowiki> Y
 +
  | 111
 +
  |-}
1059

правок