Пожалуй, самая используемая команда. С ее помощью обычно задаются условия циклы, создаются условия, с ее помощью работают с переменными. Основа основ. По сути, это Основа.
inc <RetVar>
Увеличить <RetVar> на 1.
dec <RetVar>
Уменьшить <RetVar> на 1.
@ <RetVar/IF> wait <Var/Number> ms
Подождать <Var/Number> миллисекунд. К слову говоря, минимальная задержка составляет вовсе не 1 секунду. Чтобы узнать размер минимальной задержки, возьмите кол-во скриптов, исполняющихся в данный момент и поделить это число на 1000.
@ <RetVar/IF> wait randomly from <Var/Number1> to <Var/Number2> ms
Тоже самое, что и команда сверху, только время здесь задается в диапазоне от <Var/Number1> до <Var/Number2>. В переменную возвращается то кол-во миллисекунд, которое "прождала" команда.
<RetVar/IF> = random value from 0 to <Var/Number> - 1
Вернуть в переменную <RetVar> рандомное число в диапазоне от 0 до <Var/Number>-1
<RetVar> = random value from <Var/Number> to <Var/Number> - 1
Тоже самое, что и выше, только вместо нуля Вы можете указать любое число.
* <Comment>
Комментарий. Скриптом не обрабатывается, служит для удобства редактирования сторонним человеком.
<RetVar> = script engine version
Возвращает версию ScE, в которой написан скрипт.
<RetVar> = get script version
Возвращает версию скрипта, которая задается в самом его верху.
<RetVar/IF> is a new script version available
Возвращает 1 или 0 в зависимости от того, доступна ли новая версия скрипта (???).
<RetVar> = get script name
Возвращает имя исполняемого скрипта.
<RetVar> = get script priority
Возвращает приоритет исполняемого скрипта.
set script priority to <Var/Number>
Устанавливает приоритет текущего скрипта равным <Var/Number>, которое должно принимать значение от 0 до 10000. Вообще, эта команда вкупе с предыдущей - очень мощный инструмент для взаимодействия. Очень часто используется Сигналами.
infinite loop detection enabled=<Var/Number>
Этот переключатель служит для отслеживания бесконечных циклов. Если цикл бесконечен, то он его останавливает, а управление передается в строку, следующую сразу после цикла. На самом деле, для этого гораздо больше подходит команда wait, но на вкус и цвет... ;)
<RetVar/IF> is script with prio <Var/Number> on stack
Возвращает [TRUE] если в текущем стеке находится (выполняется в данный момент или стоит в очереди на выполнение) скрипт с приоритетом <prio>. Т.е. если эта команда вызвана из скрипта, запущенного в стеке Task 10, то будут проанализированы все скрипты, включая текущий, но запущенные только в этом же стеке Task 10 этого же объекта. Кстати, весьма полезная команда. На сегодня это единственная команда, с помощью которой извне (из другого скрипта) можно узнать а запущен ли такой-то скрипт в таком-то слоте такого-то корабля/станции. Эта функция может быть использована для определения какой сигнал был получен кораблем и выполняемые в текущий момент действия. Определяя находится ли в стеке этого корабля скрипт обработчик сигнала. Например: если при проверке находится ли в стеке скрипт с приоритетом 99, инструкция возвращает [TRUE], то это означает, что корабль подвергся нападению и оказывает сопротивление нападающему.
<RetVar/IF> get task ID
Получить номер таска, в котором выполняется скрипт.
<RetVar/IF> get PID
Получить номер процесса, отвечающего за исполняемый скрипт.
enable signal/interrupt handling: <Var/Number>
Разрешить (0)/Запретить (1) прерывание данного скрипта.
<RetVar/IF> is signal/interrupt handling on
Получить состояние, в котором находится "прерываемость" скрипта (см. команду выше).
<RefObj> -> set local variable: name=<Var/String> value=<Value>
Присвоить локальной переменной <Var/String>, привязанной к объекту <RefObj>, значение <Value>.
<RetVar/IF> <RefObj> -> get local variable: name=<Var/String>
Получить значение переменной <Var/String>, принадлежащей объекту <RefObj>.
set global variable: name=<Var/String> value=<Value>
Присвоить глобальной переменной <Var/String> значение <Value>
<RetVar/IF> get global variable: name=<Var/String>
Получить значение глобальной переменной <Var/String>.
<RetVar> = datatyp[<Value>]
Получить тип данных, который содержит переменная <Value>.
<RetVar/IF> is datatyp[<Value>] == <Var/Script Data Type>
Команда возвращает 0 или 1 в зависимости от того, соответствует ли тип данных в переменной <Value> типу <Var/Script Data Type>.
Команда возвращает текст с id <Var/Number2>, находящийся на странице <Var/Number1>.
<RetVar/IF> read text: page id=<Var/Number1>, from <Var/Number2> to <Var/Number3> to array, include empty=<Var/Number4>
Команда возвращает текст со страницы <Var/Number1>, состоящий из идущих подряд кусков текста, начиная с id <Var/Number2>, заканчивая id <Var/Number3>. <Var/Number4> - флаг, отвечающий за то, что стоит ли включать пустые текстовые id, находящиеся в заданном диапазоне.
Форматирует строку <Var/String> или текст <Var/Number2> со страницы <Var/Number1>, подставляя вместо соответствующих %s (если они там имеются) соответствующие Value.
load text: id=<Var/Number>
Дополнить основной языковой файл пользовательским языковым файлом с номером <Var/Number>. Действует только на время данной игры (при старте новой или загрузки сохранения изменения не сохранятся, но записываются в сейв, если сохранить текущую игру).
<RetVar/IF> state of news article: page=<Var/Number> id=<Var/Number>
set state of news article page=<Var/Number> id=<Var/Number> to <Var/Number>
Доски объявлений убраны в Х3ТС.
<RetVar/IF> system date is month=<Var/Number1>, day=<Var/Number2>
Команда проверяет текущую СИСТЕМНУЮ дату на соответствие Месяц <Var/Number1> - День <Var/Number2>.
<RetVar> = playing time
Возвращает время в секундах, прошедшее с момента начала игры (то есть самого начала, а не загрузки сохранения).
<RetVar/IF> is plot <Var/Number> state flag <Var/Number>
Раньше эта команда служила для проверки состояния основной сюжетной линии (а неосновных и не было :). В Х3ТС сюжетных линий много, и написаны они в MD.
<RetVar> = register hotkey <Var/String> to call script <Script Name>
<RetVar> = register hotkey <Var/String> to call script name <Var/String>
Команды для регистрации горячей клавиши с названием <Var/String>, вызывающей скрипт <Script Name> или <Var/String>. В переменную возвращается id горячей клавиши, который может пригодиться в команде ниже. *Примечание. Эта команда только добавляет возможность назначить горячую клавишу. Назначить же ее саму можно в меню интерфейса (листать вниз до упора).
unregister hotkey <Var/Number>
Убрать горячую клавишу с id <Var/Number>.
<RetVar> = last load time
Возвращает время, прошедшее с прошлой загрузки.
<RetVar/IF> <RefObj> -> get local variables: regular expression=<Var/String>
<RetVar/IF> get global variables: regular expression=<Var/String>
Возвращает массив с именами глобальных_переменных/локальных_переменных_объекта_<RefObj>, имена которых удовлетворяют регулярному выражению, заданному в regular expression=<Var/String>
<RetVar/IF> <RefObj> -> get all local variable keys, starting with=<Var/String>
<RetVar/IF> get all global variable keys, starting with=<Var/String>
Возвращает массив с именами глобальных_переменных/локальных_переменных_объекта_<RefObj>, имена которых начинаются со строки <Var/String>.
<RetVar> = get maximum, <Var/Number>, <Var/Number>, <Var/Number>, <Var/Number>, <Var/Number>
Получить максимальное из пяти значений <Var/Number>.
Управление исполнением цикла.
end conditional
Оператор, обозначающий окончание условия или цикла.
else
Оператор, обозначающий ИНАЧЕ. То есть:
if <Выражение>
<кусок кода, исполняемый, если выражение истинно>
else
<кусок кода, исполняемый, если выражение ложно>/
end
continue
Команда используется внутри цикла и служит для безусловного перехода на новый виток цикла, оборвав текущий.
break
Натыкаясь на эту команд, цикл прерывается, и начинается выполнение команд, идущих после него.
goto label <Label>
Безусловный переход к метке <Label>.
gosub <Label>
Выполнить код, начиная с метки <Label>, заканчивая оператором endsub. Стандартная процедура.
define label <Label>
Эта строка по сути и есть "метка". То есть в месте, где Вы ее создадите, появится метка <Label>.
Вызвать скрипт <Script Name> в нулевом таске объекта <RefObj> с параметрами <Parameter> (их может быть несколько). Команда, завершающая скрипт - return <Value>, вернет <Value> в <RetVar>.
<RefObj> interrupt with script <Script Name> and prio <Var/Number>: arg1=<Value> arg2=<Value> arg3=<Value> arg4=<Value>
<RefObj> -> interrupt with script <Script Name> and prio <Var/Number>
Прервать скрипт скриптом <Script Name> в нулевом таске объекта <RefObj>, если приоритет <Var/Number> выше приоритета исполняемого в таске скрипта. Прерывание в отличие от вышеописанной команды произойдет, когда в текущем скрипте не исполнится какая-либо прерываемая команда, то бишь команда со значком "@", например команда wait. Возможно выбрать до пяти параметров в первом случае.
<RefObj> interrupt task <Var/Number> with script <Script Name> and prio <Var/Number>: arg1=<Value> arg2=<Value> arg3=<Value> arg4=<Value>
Команда, аналогичная предыдущей, но с возможностью выбрать таск <Var/Number>, в котором произойдет прерывание.
<RefObj> start task <Var/Number> with script <Script Name> and prio <Var/Number>: arg1=<Value> arg2=<Value> arg3=<Value> arg4=<Value> arg5=<Value>
Удалить все скрипты (выполнение скриптов остановится в момент поступления команды), исполняющиеся в таске <Var/Number>. Вместо них там запустится скрипт <Script Name>. Остальное, я думаю, уже понятно.
return <Value>
Безоговорочно завершить выполнение скрипта и вернуть в вызвавший данный скрипт родительский скрипт значение <Value>, если таковой имеется.
<RetVar/IF> <RefObj> -> is script <Script Name> on stack of task=<Var/Number>
Проверяет наличие выполняющейся копии скрипта <Script Name> в таске <Var/Number> объекта <RefObj>. Возвращает 1, если таковая копия действительно выполняется в данном таске, или 0, если нет.
<RetVar/IF> <RefObj> -> is task <Var/Number> in use
Проверяет наличие каких-либо исполняющихся скриптов в таске <Var/Number> объекта <RefObj>. Возвращает 1, если в данном таске запущен какой-либо скрипт(ы), или 0, если нет.
<RetVar> = clone array <Var/Array>: index <Var/Number1> ... <Var/Number2>
Возвращает копию массива <Var/Array>, начиная с индекса <Var/Number1>, заканчивая <Var/Number2>.
copy array <Var/Array> index <Var/Number1> ... <Var/Number2> into array <Var/Array> at index <Var/Number3>
Скопировать элементы массива <Var/Array> начиная с индекса <Var/Number1> по индекс <Var/Number2> в массив <Var/Array> начиная с индекса <Var/Number3>. Если копируемый сегмент превысит размер массива-приемника, то размер массива-приемника будет увеличен на требуемое количество элементов.
insert <Value> into array <Var/Array> at index <Var/Number>
Вставить в массив <Var/Array> новый элемент <Value> на место элемента с индексом <Var/Number> (фактически изменить размер массива. Индексы всех элементов массива начиная с заданного увеличатся на 1).
append <Value> to array <Var/Array>
Добавить в конец массива <Var/Array> новый элемент <Value>.
remove element from array <Var/Array> at index <Var/Number>
Удалить из массива <Var/Array> элемент <Var/Number>. Индексы всех следующих элементов уменьшатся на 1.
resize array <Var/Array> to <Var/Number>
"Отрезать" часть массива <Var/Array>, начиная с элемента <Var/Number>. То есть в массиве останутся элементы с 0 до <Var/Number>.
<RetVar> = get index of <Value> in array <Var/Array> offset=<Var/Number> + 1
Получить индекс элемента со значением <Value> в массиве <Var/Array> со смещением <Var/Number>+1. Если таковой элемент отсутствует, вернет null.
Команды для сортировки массива. Как-то очень кривоработающие.
<RetVar/IF> find <Value1> in array: <Value2>
Команда проверяет наличие <Value1> в массиве <Value2>. Возвращает 1, если находит, и 0, если нет.
<RetVar/IF> reverse array <Value>
"Перевернуть" массив. Первый элемент становится последним, второй предполследним и так далее.
<RetVar/IF> arrays <Value> and <Value> are equal
Проверить два массива на эквивалентность (размер, содержание). 1, если эквивалентны, 0, если нет.
Строки.
<RetVar/IF> get length of string <Var/String>
Команда возвращает длину строки <Var/String> в байтах. Символы юникода (в том числи русские буквы) считаются за 2 байта, а не за 1.
<RetVar> = find position of pattern <Var/String1> in <Var/String2>
Команда возвращает позицию первого вхождения подстроки <Var/String1> в строку <Var/String2>. Если подстрока не найдена - вернет -1.
<RetVar> = get substring of <Var/String> offset=<Var/Number1> length=<Var/Number2>
Команда возвращает подстроку из строки <Var/String>, которя начинается с позиции <Var/Number1> и имеет длину <Var/Number2>. Следует учитывать, что элементы строки нумеруются с 0. Если в качества длины строки указать значение null - то будет скопирована подстрока от заданной позиции offset=<Var/Number1> до конца исходной строки.
<RetVar> = string <Var/String> to integer
<RetVar> = convert number <Var/Number> to string
Команды для конвертации строки <Var/String> в число или или числа <Var/Number> в строку соответственно.
<RetVar> = substitute in string <Var/String>: pattern <Var/String> with <Var/String>
Команда производит замену всех вхождений подстроки, заданной в параметре pattern <Var/String>, в исходной строке string <Var/String>, на подстроку заданную в параметре with <Var/String>.
<RetVar> = format time: <Var/Number>
Форматирует время <Var/Number> (число в секундах) в текстовую строку формата хх:yy:zz, где хх - часы, yy - минуты, а zz - секунды.
<RetVar/IF> match regular expression: <Var/String> to string <Var/String>
<RetVar/IF> get string font length: <Var/String>
???
Вычисления.
<RetVar> = = fixed sin <Var/Number>
Вычислить синус <Var/Number>. Возвращается число от -65535 до 65535.
<RetVar> = = fixed cos <Var/Number>
Вычислить косинус <Var/Number>. Возвращается число от -65535 до 65535.
<RetVar> = square root of <Var/Number>
Вычислить квадратный корень из <Var/Number>.
Команды/Сигналы.
<RefObj> -> connect ship command/signal <Object Command/Signal> to script <Script Name> with prio <Var/Number>
Команда устанавливает связь объектной команды/сигнала <Object Command/Signal> с определенным объектом <RefObj>, назначая обработчиком этой команды или сигнала скрипт <Script Name>, и устанавливает его приоритет равным <Var/Number>
<RefObj> -> set ship command/signal <Object Command/Signal> to global default behaviour
Команда восстанавливает стандартный обработчик объектной команды/сигнала <Object Command/Signal> для объекта <RefObj>.
Команда отключает обработку объектных команд/сигналов <Object Command/Signal> объектом <RefObj>. То есть после этой инструкции на объекте не будет запускаться обработчик этой команды, даже если он получит соответствующий сигнал или команду.
global secondary signal map: add signal=<Object Signal> race=<Var/Race> class=<Var/Class> script=<Script Name> prio=<Var/Number> name=<Var/String>
global secondary signal map: remove signal=<Object Signal> race=<Var/Race> class=<Var/Class> name=<Var/String>
Теоретически, эти команды позволяют задать обработчик вторичного сигнала (или вторичный обработчик) <Object Signal>. Последние 3 аналогичны трем командам, идущим ниже.
Команда назначает для объектной команды/сигнала <Object Command/Signal> скрипт-обработчик. Установка производится глобально, т.е.для всех объектов класса <Var/Class> принадлежащих расе <Var/Race> в качестве обработчика назначается скрипт <Script Name> и для него устанавливается приоритет <Var/Number>.
global script map: remove: key=<Object Command/Signal>, class=<Var/Class>, race=<Var/Race>
Команда отменяет назначение скрипта-обработчика объектной команды/сигнала <Object Command/Signal> для всех объектов класса <Var/Class> принадлежащих расе <Var/Race> скрипта <Script Name>.
global script map: ignore: key=<Object Command/Signal>, class=<Var/Class>, race=<Var/Race>
Команда отключает обработку объектной команды/сигналы на объектах определенного типа. Параметры такие же как и у двух предыдущих команд.
set script command upgrade: command=<Object Command/Signal> upgrade=<Var/Ware>
Команда задает апгрейд или товар <Var/Ware>, который должен быть установлен на объекте для активации объектной команды <Object Command/Signal> в меню объекта. При отсутствии данного апргейда или товара строка в командном меню объекта не отразится. Если <Var/Ware> указать [TRUE], то команда будет появляться всегда.
<RetVar> = get script command upgrade: command=<Object Command/Signal>
Команда возвращает в переменную <RetVar> необходимый апгрейд или товар, необходимый для активации в командном меню объектной команды <Object Command/Signal> . Если апгрейд не требуется возвращает 1.
set script command upgrade: command=<Object Command/Signal> upgrade=<Var/Ware> script=<Script Name>
Команда работает идентично команде set script command upgrade: command=<Object Command/Signal> upgrade=<Var/Ware>, с тем отличием, что данная инструкция анализирует флаг возвращаемый проверочным скриптом <Script name> и позволяет производить многоуровневую проверку условий для активации команды в командном меню объекта.
set ship command preload script: command=<Object Command/Signal> script=<Script Name>
Описание.
global script map for wings: key=<Var/Wing Command> race=<Var/Race> script=<Script Name> prio=<Var/Number>
Описание.
set script command upgrade: wing command=<Var/Wing Command> upgrade=<Var/Ware>
Описание.
set script command upgrade: wing command=<Var/Wing Command> upgrade=<Var/Ware> script=<Script Name>
Описание.
set wing command preload script: wing command=<Var/Wing Command> script=<Script Name>
Связать команду <Object Command/Signal> с исполняемым скриптом.
<RetVar/IF> get script command
Вернуть команду, с которой связан исполняемый скрипт.
set script command target: <Value>
Команда устанавливает <Value> в качестве цели для команды текущего скрипта.
<RetVar/IF> get script command target
Описание.
<RefObj> -> connect wing command/signal <Object Command/Signal> to script <Script Name> with prio <Var/Number>
Описание.
Аудио команды.
play sample <Var/Number>
Команда проигрывает звуковой файл с именем <Var/Number>.WAV. Звуковые файлы в папке "s" игры и имеют формат WAV. Это всякого рода простые звуки, например открытия люка, звук от выстрела и т.п.
play sample: incoming transmission <Var/Number>, from object <Value>
Команда проигрывает стандартное звуковое сообщение, задаваемое параметром transmission <Var/Number>. Для задания значения параметра используются константы вида: IncomingMessage.XXXX. Работа команды заключается в произнесении голосом бортового компьютера фразы в зависимости от аргумента.
<RefObj> -> send audio message <Var/Number> to player
Игроку посылается аудио/видео сообщение от объекта <RefObj>, объектом должен являться корабль. В качестве параметра <Var/Number> используются константы Comm.XXXX. Видео изображение пилота от которого пришло сообщение формируется в зависимости от расы владельца <object>. Сообщение может поступить только от корабля находящегося в том же секторе что и игрок.
send incoming message <Var/String> to player: display it=<Var/Number>
Послать игроку сообщение с текстом <Var/String>. Число <Var/Number> отвечает за то отображается ли оно принудительно, при этом не сохранившись в бортовом журнале, или придет "конвертиком", сохранившись в бортовом журнале. Из-за бага, непофиксенного еще с Х2, рекомендуется ставить задержку в 200 ms (команда wait).
Команда тоже присылает сообщение с текстом <Var/String> от корабля <RefObj> (если он не существует, сообщение не придет), если он находится в одном секторе с игроком (иначе - сообщение не придет). <Var/Number> играет ту же роль, что и в предыдущей команде.
send incoming question <Var/String> to player: callback=<Script Name>
Отправить вопрос <Var/String> игроку в качестве сообщения. Результат ответа возвращается аргументами скрипта <Script Name> (скрипт, соответственно, немедленно запускается). С этой командой тесно связан тег [select='текст_возвращаемый_в_первый_аргумент']Текст, который будет отображен в сообщении в качестве варианта ответа.[/select]. Таких тегов может быть несколько, обычно не меньше двух, но тут есть целое поле для фантазии, учитывая, что возвращаемые значения можно перечислять через запятую (первое значение - первый аргумент, второе - второй и так далее), а еще их можно задавать спецсимволом %s (подробнее об этом символе в статье Языковые файлы).
send incoming question <Var/String> to player: callback=<Script Name> flags=<Var/Number>
Тоже, что и выше, но, видимо, с возможностью установки максимального числа аргументов <Var/Number>, но это лишь предположение.
<RetVar> = <RefObj> -> serialise object
Возвращает ссылку на объект <RefObj> в качестве строки.
Воспроизвести текст на соответствующей странице с соответствующим ай-ди с заданным приоритетом (если вдруг уже произносит текст с приоритетом выше указанного, текст не будет произнесен, в противном случае данный текст перебьет уже произносимый.
display subtitle text: text=<Var/String> duration=<Var/Number> ms
Показать субтитры <Var/String> с задержкой <Var/Number> миллисекунд.
<RetVar/IF> <RefObj> -> get object name array
Команда возвращает массив со строками, из которых состоит имя объекта <RefObj>. То есть если в названии, скажем, Меркурия, содержится не "Меркурий", а, например Арг. Меркурий Тяжеловоз, то будет возвращен массив из трех элементов: "Арг.", "Меркурий" и "Тяжеловоз". Позже этот массив можно будет использовать, например, в команде speak array.
<RetVar/IF> get text id: ware=<Var/Ware>
Получить текстовое id товара <Var/Ware> (субтипом может быть не субтип товара, но какого-либо корабля или станции). Все названия хранятся на странице 17.
Произнести массив <Value> из текстовых строк с приоритетом <Var/Number>.
Команды бортжурнала.
write to player logbook <Value>
Добавить запись <Value> в бортовой журнал.
write to player logbook: printf: fmt=<Var/String>, <Value>, <Value>, <Value>, <Value>, <Value>
Добавить запись <Var/String> в бортовой журнал. Отличие от вышеописанной команды заключается в том, что есть возможность подставлять в текст значения %s с помощью соответствующих <Value>. Подробнее - в статье Языковые файлы.
write to player logbook: printf: pageid=<Var/Number> textid=<Var/Number>, <Value>, <Value>, <Value>, <Value>, <Value>
Тоже, что и вышеидущая команда, но текст подгружается из языкового файла.
<RefObj> -> write to logbook <Value>
Можно предположить, что <Value> записывается в бортовой журнал корабля <RefObj>, но... Но бортовой журнал есть только у игрока и привязки к кораблю не имеет.
write to log file <Var/Number1> append=<Var/Number2> value=<Value>
То же самое, что write to player logbook, но запись производится в лог-файл с номером <Var/Number1>, находящегося в папке \Мои документы\Egosoft\X3TC. В зависимости от <Var/Number2> запись добавляется в конец файла (1) или файл перезаписывается (0).
Ссылка на эту страницу: <a href="https://x3tc.net/obschie-komandy-audio-komandy-komandy-bortzhurnala_130.html">Общие команды. Аудио команды. Команды бортжурнала</a>
BBCode: [url=https://x3tc.net/obschie-komandy-audio-komandy-komandy-bortzhurnala_130.html]Общие команды. Аудио команды. Команды бортжурнала[/url]