Строка 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 |
| + | |-} |