GoRap Wiki
Advertisement
Stub Эта статья не переведена до конца. Пожалуйста помогите нам доперевести ее.
Спасибо!

Особенности

Wire Expression 2

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

Синтаксис

Синтаксис Expression 2 сильно изменился со времен прошлого Expression Chip, придется изучить немного больше команд, но это сделает ваши постройки намного более функциональными. Помните что как правило существует несколько способов написания кода, и задача может быть решена несколькими путями.

Синтаксис Пример Упрощенный Описание
# #this is comment Все, что находится за знаком # считается комментарием и не учитывается при обработке кода
if () {} else {} if (A) {D=B} else {D=C} if (A) {D=B} если A истина то выполняем первую операцию, иначе вторую. else {} не обязателен, например: "if (A) {C=B}"
elseif () {} elseif (A) {B = C} Впереди обязательно должен быть if или elseif. Дополнительная проверка в случае ложности исходного утверждения
~ if(~Time & Time == 0) {DO stuff} Изменялось ли значение на входе между выполнениями?
$ Opitch = Pitch + ($Pitch *3) Возвращает разницу между выполнениями в виде числа. (Работает только с объявленными переменными типа number, vector, and angle)
++ if(Count == 2 {Count++} Count = Count + 1 Прибавляет 1 к заданной переменной.
-- if(Count == 3){Count--} Count = Count - 1 Вычитает 1 из заданной переменной.
+= if(Count == 4){Count += 2} Count = Count + 2 Прибавляет число после += к заданной переменной.
-= if(Count == 5) {Count -= 2} Count = Count - 2 Вычитает число после -= из заданной переменной.
( ? : ) D = (A ? B : C) Если A истина то возвращает B иначе C.
I if (A I B) {C = 1} Если A или B истина C=1.
& if (A & B) {C = 1} Если A и B истина C=1.
! if (!A) {B = 1} Должно предшествовать число. Возвращает 1 если A ложно (эквивалентно "A == 0").
Должно предшествовать число.
-> ->Input or ->Output Если вы используете его на входе, он возвращает 1, когда вход подсоединяется к чему либо. Если вы используете его на выходе, он возвращает количество входов присоединённых на выход.
#ifdef #ifdef entity():setAlpha(number) Проверяет может ли данная функция выполняться на сервере.
#else #else entity():setModel(string) Должно предшествовать #ifdef. Если данная функция не может использоваться на сервере запустится код после #else...
#endif #endif Должно предшествовать #ifdef или #else .Закрывает выражение #ifdef.

Переменные

В E2, все входы, выходы и переменные должны быть объявлены с заглавной буквы:

Синтаксис Описание
@persist variable Это не будет работать, так как переменная "variable" объявлена со строчной буквы.
@persist Variable Это будет работать, так как переменная "Variable" начинается с заглавной буквы.

Выражение @trigger

Выражение @trigger может выборочно разрешать и запрещать входам вызывать выполнение кода. Возможные значения: all/none, или список разрешенных входов

Синтаксис Описание
@trigger all всё по старому, изменение значения на входах всегда вызывает выполнение кода
@trigger none изменение значения на входах никогда не вызывает выполнение кода, его вызывает только таймер, и.т.п. функции
@trigger Time Button выполнение кода вызывается только при изменении значений на входах Time и Button

Циклы

Синтаксис Пример Описание
while () {} while (A) {B++} Любые инструкции в фигурных скобках будет повторяться, пока условие в круглых скобках истинно. Если условие ложно, инструкции будут пропущены и E2 будет продолжаться с конца цикла. Заметим, что условие проверяется только в самом начале каждого цикла.
for () {} for (I = A, B[, C]) {} Добавляет значение C переменной для каждой итерации, пока она равна значению B. Если шаг C не указан, то он будет установлен на единицу. Обратите внимание, что А и В вычисляются только один раз - если они рассчитываются из переменных, что цикл устанавливает новые значения, это не изменит число итераций.
foreach () {} foreach(K,V:type=Table) {} Проверяет  каждый элемент указанного типа в таблице. Назначает ключ к К и значение V. Элементы, которые не имеют определенного типа будут пропущены. Элементы могут быть добавлены, удалены или изменены, однако добавляемые элементы не будут обрабатываться в текущем цикле. Только цикл по строке индексов при использовании таблицы.
continue if (A) {continue} Может быть использовано только в while/for/foreach цикле. Эта команда позволяет немедленно вернуться к началу цикла, пропуская следующие инструкции.
break if (A) {break} Может быть использовано только в while/for/foreach цикле. Эта команда позволяет немедленно вернуться к выходу из цикла, пропуская следующие инструкции.

Производительность

Были проведены некоторые тесты в игре:

~3.000.000/сек арифметических операций (+-*/) на числах, 2000 операций, 200 выполнений за 0.13сек

~850.000/сек арифметических операций (+-*/) на векторах, 2000 операций, 100 выполнений за 0.23сек

Горячие Клавиши Редактора

Ctrl-Пробел Проверить (и переместить курсор на ошибку)
Ctrl-S Сохранить
Ctrl-Z Отменить
Ctrl-Y Вернуть
Ctrl-X Вырезать
Ctrl-C Копировать
Ctrl-V Вставить
Ctrl-A Выделить Всё
Ctrl-Up Прокрутить Вверх
Ctrl-Down Прокрутить Вниз
Ctrl-Left Прокрутить Влево
Ctrl-Right Прокрутить Вправо

Консольные команды

Команда Описание
wire_expression2_model <model> Вручную меняет модель чипа
wire_expression2_reload Перезагружает все расширения для E2, полезно для отладки своих расширений. Помните, что клиентские файлы в мультиплеере берутся из кэша g-mod.
wire_expression2_debug 0/1 Включает режим отладки, который может быть полезен для разработчиков. Необходимо ввести "wire_expression2_reload" после изменения, чтобы сработало.
wire_expression2_extension_enable <extension> Включить определенное расширение
wire_expression2_extension_disable <extension> Выключить определенное расширение
wire_expression2_unlimited 0/1 Включить/выключить ограничения по производительности

Типы

Expression2 использует несколько типов данных. По понятным причинам, тут только верхушка всего айсберга.

Сокращение Типы
N Number(Числа)
V2 / V / V4 2D / 3D / 4D Vector(Векторы)
A Angle(Углы)
S String(Строки)
E Entity(Объекты)
R Array(Массивы)
T Table(Таблицы)
RD Ranger Data(Рейнджеры)
B Bone(Кости)
M2 / M / M4 2x2 / 3x3 / 4x4 Matrix(Матрицы)
XWL Wirelink
C Комплексные числа
Q Кватернионы

Числа

Описание

Производит операции над числами

Команды

Функция Возвращает Описание
N + N N Сложение
N - N N Вычитание
N * N N Умножение
N / N N Деление
N ^ N N Возведение в степень (2 ^ 3 = 8)
N % N N Остаток от деления арумента 1 на аргумент 2. Примечание "-1 % 3 = 2"
mod(N, N) N Остаток от деления арумента 1 на аргумент 2. Примечание "mod(-1, 3) = -1"
sqrt(N) N Возвращает квадратный корень числа
cbrt(N) N Возвращает кубический корень числа
root(N, N) N Возвращает корень первого числа
e() N Возвращает число
Advertisement