Строка 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 для каждого канала, если желаете.
| |
| | | |
− | == Гайд по синтаксису ==
| |
| | | |
− | NTSL несложен, так как был создан для пользователей всех уровней умения программирования. Пробелы игнорируются, точки с запятой требуются и квадратные скобки также требуются.
| + | [[Файл:LtJ6KqW6mKk.jpg|LtJ6KqW6mKk.jpg]] |
− | | + | [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
| |
− | |-}
| |