Меню сайта


[DS]: Half-Life Server
[DS]: Half-Life Server


[DS]: CS:S GunGame v34 Server
[DS]: CS:S GunGame v34 Server


[DS]: CS:S v34 Server
[DS]: CS:S v34 Server


Поиск

add_newДобавить новость
Последние добавленные

just a retexture i did of a popular skin pack

Читать далее

<JAM>
m1-palinka


HL-HEV
hl-hev

DS-Servers
Помощь
Хостинг
Синтаксис языка скриптования DSN.Host


Синтаксис языка скриптования DSN.Host

Добавил: root
2019-08-17 08:10:57
976 просмотров

Простой си-подобный язык скриптования для игрового хостинга DSN.Host

1 Описание языка

1.1 Лексические соглашения

Имена – любые строки из букв/цифр/знака подчеркивания _ которые начинаются не с цифр. Имена используются для именования переменных, чувствительны к регистру символов (Name не равно name). Ключевые зарезервированные слова, которые не могут использоваться в именовании: null, function, true, false, for, if, else, while, do, return, break, continue, extern

Допустимые символы:
; + - > < >= <= ! != == * / = { } " && ||

Каждое выражение должно заканчиваться ; (точка с запятой). Излишки данного символа не несут никакого смысла, и ошибок не вызывают.
Каждая управляющая конструкция (if, for, while), блоки, должны быть заключены в {} (фигурные скобки).

1.2 Переменные

Контроль точности создания и обращения к переменным

Переменные используются для хранения результата.

Создание переменных происходит посредством обязательного указания перед именем переменной слова var, то есть var a = 0; создает переменную a, инициализация переменной обязательна. var может создать только одну переменную. Пример:

var a = 10;
LogInfo(a);
a = 20;

Если при обращении к переменной она не будет найдена то будет выдано соответствующее сообщение об ошибке и работа скрипта будет прекращена, также в случае если создаваемая переменная уже объявлена, то также будет выдано соответствующее сообщение об ошибке и работа скрипта будет прекращена.

1.3 Выражения

1.3.1 Оператор присваивания

Поддерживается только одиночное присваивание. Пример присваивания:

var a = 10;
a = 20;

1.3.2 Арифметические операции

Поддерживаются обычные арифметические операции.
Бинарные (значения находятся по обе стороны оператора)

  • сложение +
  • вычитание -
  • умножение *
  • деление /

Также поддерживается унарный минус, который меняет знак значения переменной на противоположный. Значение стоящее перед операндом операции задает тип значения которое получится в конечном итоге. К примеру если был первое значение было int то и результат будет int.

1.3.3 Операции сравнения

== != > < >= <= === !==

Данные операции возвращают значения true или false. Операции сравнения можно применять к различным типам данных, если их можно преобразовать. Так к примеру 1 == 1.0 или 1 == "1" вернет true.

1.3.4 Логические операции

&& (И) || (или) ! (НЕ)
Все логические операторы возвращают true либо false.
&& и || являются бинарными, то есть наличие операндов с обоих сторон данного оператора обязательно.
! может быть только перед операндом (выражением) и означает отрицание.
Все логические операции воспринимают null, false, 0 как ложь.

1.3.5 Конкатенация

Оператор конкатенации представлен в виде бинарной арифметической операции сложения +. Для возникновения операции конкатенации достаточно, чтобы любой из операндов имел строковый тип. Если тип другого операнда не является строкой то он будет преобразован в строку. Оператор конкатенации создает новую строку, не внося изменения в операнды.

1.3.6 Приоритеты операций

Приоритет выполнения операторов:

!

Логическое отрицание

* /

Арифметические

+ -

Арифметические

> >= < <= == !=

Логические

&&

Логическое И

||

Логические ИЛИ

1.3.7 Операторы перехода

break – завершает выполнение цикла (в теле которого он объявлен). Может содержаться только в циклах.
continue – прекращает исполнение всего того что расположено после данного оператора в блоке до конца блока цикла.

1.4 Управляющие конструкции (if, for, while, do while)

Поддерживаются основные конструкции для управления

1.4.1 Условия и ветвления:

if(_expression)
{
	//body if
}
else if(_expression)
{
	//body else if
}
else
{
	//body else
}

1.4.2 Цикл for:

for(list_expressions; condition; list_expressoins_steps)
{
	//cycle body
}

Простой пример:

for(var i = 0; i < 10; i = i + 1)
{
	LogInfo(i);
}

list_expressions – список (разделенный запятыми) простых выражений, в основном используется как инициализация основных данных для цикла. Выполняется до начала цикла.
condition – условие выполнения, обращение к условию происходит перед каждой итерацией.
list_expressoins_steps - список (разделенный запятыми) простых выражений, в основном используется для приращения количества шагов итераций (как в примере i = i + 1).
Цикл останавливается тогда, когда условие condition возвращает false, то есть ложь.

1.4.3 Цикл while:

while(condition)
{
	//body while
}

condition - условие выполнения. Обращение к условию происходит перед каждой итерацией. Цикл останавливается тогда, когда условие condition возвращает false, то есть ложь.

1.5 Вызов функции

Синтаксис:

name_func(arg_list);

Для начала необходимо указать имя функции. Далее следует открывающая скоба, после нее список аргументов через запятую, где аргументом может быть любое выражение, после аргументов закрывающая скобка. По умолчанию каждая функция возвращает значение. Если этого не происходит, то при завершении работы функции она возвращает null. Возвращать можно только одно значение.

1.6 Области видимости

Обьявление переменной осуществляется с помощью ключевого слова var. При объявлении происходит поиск такой же переменной в текущем контексте, если она найдена - генерируется ошибка, в противном случае в текущем контексте создается новая переменная. При обращении к переменной происходит поиск во всех доступных контекстах, если при этом переменная найдена не была - генерируется ошибка.

В нижеприведенном примере, после выхода из условия значение переменной a будет 11:

var a = 10;

if(a > 0)
{
	a = 11;
}

Переменные созданные в конструкциях (if, for, while, do while), не доступны вне их.

if(1)
{
	var a = 11;
}
LogInfo(a);

Этот код сгенерирует ошибку, так как переменная a не будет существовать после выхода из блока условия.

2 Встроенные функции

2.1 Общие функции

void LogInfo(string)

Записывает в журнал сообщение

void LogWarning(string)

Записывает в журнал предупреждение

void LogError(string)

Записывает в журнал ошибку

bool IsString(object)

Проверяет, является ли переданный объект строкой

bool IsInt(object)

Проверяет, является ли переданный объект целым числом

bool IsFloat(object)

Проверяет, является ли переданный объект действительным числом

bool IsBool(object)

Проверяет, является ли переданный объект логическим значением

bool IsNull(object)

Проверяет, является ли переданный объект null

string GetType(object)

Возвращает тип переданного объекта

string ToString(object)

Преобразовывает переданное значение в строку

int ToInt(object)

Преобразовывает переданное значение в целое, при ошибке возвращает 0

float ToFloat(object)

Преобразовывает переданное значение в действительное число, при ошибке возвращает 0.0

bool ToBool(object)

Преобразовывает переданное значение в логическим, при ошибке возвращает false

void Sleep(float fSeconds)

Останавливает работу скрипта на fSeconds секунд

int Time()

Возвращает текущее время в формате Unix Timestamp

string Date(string sFormat, int iTime = -1)

Форматирует текущую дату (или дату, указанную в iTime) в соответствии с указанным форматом. Формат задается в виде строки символов, пример d.m.Y H:i:s выведет дату в формате 17.08.2019 11:03:17

В параметре format распознаются следующие символы

Символ в строке sFormat Описание Пример возвращаемого значения
День --- ---
d День месяца, 2 цифры с ведущим нулем от 01 до 31
D Текстовое представление дня недели, 3 символа от Mon до Sun
j День месяца без ведущего нуля от 1 до 31
l (строчная 'L') Полное наименование дня недели от Sunday до Saturday
N Порядковый номер дня недели в соответствии со стандартом ISO-8601 от 1 (понедельник) до 7 (воскресенье)
S Английский суффикс порядкового числительного дня месяца, 2 символа st, nd, rd или th. Применяется совместно с j
w Порядковый номер дня недели от 0 (воскресенье) до 6 (суббота)
z Порядковый номер дня в году (начиная с 0) От 0 до 365
Неделя --- ---
W Порядковый номер недели года в соответствии со стандартом ISO-8601; недели начинаются с понедельника Например: 42 (42-я неделя года)
Месяц --- ---
F Полное наименование месяца, например, January или March от January до December
m Порядковый номер месяца с ведущим нулем от 01 до 12
M Сокращенное наименование месяца, 3 символа от Jan до Dec
n Порядковый номер месяца без ведущего нуля от 1 до 12
t Количество дней в указанном месяце от 28 до 31
Год --- ---
L Признак високосного года 1, если год високосный, иначе 0.
o Номер года в соответствии со стандартом ISO-8601. Имеет то же значение, что и Y, кроме случая, когда номер недели ISO (W) принадлежит предыдущему или следующему году; тогда будет использован год этой недели. Примеры: 1999 или 2003
Y Порядковый номер года, 4 цифры Примеры: 1999, 2003
y Номер года, 2 цифры Примеры: 99, 03
Время --- ---
a Ante meridiem (лат. "до полудня") или Post meridiem (лат. "после полудня") в нижнем регистре am или pm
A Ante meridiem или Post meridiem в верхнем регистре AM или PM
B Время в формате Интернет-времени (альтернативной системы отсчета времени суток) от 000 до 999
g Часы в 12-часовом формате без ведущего нуля от 1 до 12
G Часы в 24-часовом формате без ведущего нуля от 0 до 23
h Часы в 12-часовом формате с ведущим нулем от 01 до 12
H Часы в 24-часовом формате с ведущим нулем от 00 до 23
i Минуты с ведущим нулем от 00 до 59
s Секунды с ведущим нулем от 00 до 59
Временная зона --- ---
e Идентификатор временной зоны Примеры: UTC, GMT, Atlantic/Azores
I (заглавная i) Признак летнего времени 1, если дата соответствует летнему времени, 0 в противном случае.
O Разница с временем по Гринвичу, в часах Например: +0200
P Разница с временем по Гринвичу с двоеточием между часами и минутами Например: +02:00
T Аббревиатура временной зоны Примеры: EST, MDT ...
Z Смещение временной зоны в секундах. Для временных зон, расположенных западнее UTC возвращаются отрицательные числа, а расположенных восточнее UTC - положительные. от -43200 до 50400
Полная дата/время --- ---
c Дата в формате стандарта ISO 8601 2004-02-12T15:19:21+00:00
r Дата в формате » RFC 2822 Например: Thu, 21 Dec 2000 16:01:07 +0200
U Количество секунд, прошедших с начала Эпохи Unix (1 января 1970 00:00:00 GMT) См. также Time()

Любые другие символы, встреченные в строке-шаблоне, будут выведены в результирующую строку без изменений

int Strlen(string)

Возвращает длину строки в символах

string Substr(string, int iStart, int iCount = -1)

Возвращает подстроку начиная с символа iStart, длиной iCount

bool IsScriptExists(string)

Проверяет, существует ли указанный скрипт

void ScriptExecute(string)

Выполняет скрипт с заданным именем

string GetCommandLine()

Возвращает целую, неформатированную командную строку, переданную из консоли

object GetArg(int pos, object def=null)

Возвращает аргумент с номером pos (отсчет начинается с 0), в случае отсутствия аргумента с требуемым номером, возвращает значение, переданное вторым аргументом, либо null, в случае его отсутствия

int GetArgsCount()

Возвращает количество аргументов, переданных при вызове скрипта

2.1 Функции управления сервером

void ServerConsole(string)

Отправляет команду в консоль сервера

bool IsServerRunning()

Проверяет, запущен ли сервер

void ServerStart()

Запускает сервер

void ServerRestart()

Перезапускает сервер

void ServerStop()

Останавливает сервер

void SetServerStartMap(string map)

Устанавливает для сервера стартовую карту

Поделиться:
Тэги: