ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
|
» Учебник по скриптам | страница 1 |
|
|
|
Канал X2: The Threat: «Учебник по скриптам» |
|
Пишете ли Вы скрипты к X2? |
Уже пишу |
|
26% |
[ 31 ] |
Еще нет, но буду |
|
19% |
[ 23 ] |
Хотел бы, но не хватает знаний |
|
44% |
[ 52 ] |
Лучше скачаю готовые |
|
6% |
[ 7 ] |
Скрипты вообще не нужны |
|
2% |
[ 3 ] |
|
Всего проголосовало : 116 |
|
|
|
Пассажир
|
|
Приветствую всех!
Возможно, этот вопрос уже поднимался, но я нигде не смог обнаружить нормального учебника по скриптам X2. Я знаю, что некоторые пилоты уже разобрались со скриптами и пишут свои (причем успешно, очень полезные и нужные), но наверняка также есть и такие, кто хотел бы что-то написать, но не смог разобраться в нагромождениях редактора (тот еще "шедевр" ).
В общем мое предложение таково: давайте объеденим усилия и сделаем нормальное описание всех команд редактора с подробным комментарием:
1. Назначение
2. Какие параметры принимает
3. Что возвращает
4. Пример использования
Я уже начал делать что-то подобное для себя, но пока еще не разобрался примерно с половиной (а то и больше) команд, поэтому предлагаю сделать этот проект совместным.
|
|
|
XenonTomb
250 EGP
   Рейтинг канала: 2(16) Репутация: 66 Сообщения: 867 Откуда: Николаев, Украина Зарегистрирован: 17.03.2004
 |
|
Идея хорошая. Надо сделать и добавить в хелп по Х2. Там уже много чего есть, чуть переделать с учетом реалий 1.4, с некоторыми неописанными там командами уже разобрались. Ты Dimaxx'у отпиши в приват, согласуй. А там уж будем всем миром править, а ты проект скоординируешь.
Начнем, пожалуй. Вот несколько команд, помеченных ??? в разделе про скрипты хелпа:
<RetVar/IF> get player tracking aim
Возвращает объект, который находится в прицеле корабля игрока. Вернет null, если в прицеле ничего нет.
<RetVar> = best missile type for target <Value>
Возвращает тип ракеты, которая по мнению компьютера, лучше всего подходит для поражения цели <Value>.
<RetVar/IF> <RefObj> trades with ware <Var/Ware>
Проверить, торгует ли станция <RefObj> товаром <Var/Ware>.
<RefObj> station trade and production tasks: on=<Var/Number>
Вызов команды с параметром TRUE запускает процесс производства и торговли для станции <RefObj>. При FALSE, соответственно, наоборот.
Кто еще чего нарыл, постите сюда.
_________________ Будут предложения - присылайте на расчетный счет :) |
|
|
Пассажир
|
|
Поехали! Выбрал из своих набросков то, чего не нашел (или нашел, но не полностью) в хелпе. Версия игры 1.4, скриптового движка - 25.
@<RetVar/IF/START> <RefObj> call script <Script Name>: <Parameter>
Вызывает скрипт <Script Name> для объекта <RefObj> с параметрами <Parameter>. Возвращаемое скриптом значение присваивается переменной <RetVar> или анализируется в <IF>. Указание <START> означает продолжение выполнения текущего скрипта, без ожидания завершения вызванного. Допускается игнорирование возвращаемого значения (отсутствие <RetVar/IF>).
Аудио команды.
play sample <Var/Number>
???
play sample: incoming transmission <Var/Number> from object <Value>
В качестве incoming transmission допускаются константы IncomingMessage.XXXX Работа команды заключается в произнесении голосом бортового компьютера фразы "Нас приветствуют" или чего-то подобного в зависимости от аргумента. Аргумент from object - по идее должен указывать источник сообщения, но я не понял что там надо указывать
<RefObj> send audio message <Var/Number> to player
В качестве параметра используются константы Comm.XXXX От объекта <RefObj> приходит сообщение типа "Мы просканировали..."
send incoming message <Var/String> display it=<Var/Number>
Посылает сообщение message игроку. Если display it=[TRUE], то сообщение сразу же отображается на экране, если [FALSE] - записывается в журнал, игрок слышит "Пришло новое сообщение". В поле "От:" будет написано "Неизвестно". Как задать источник и форматировать сообщение - не знаю, есть подозрение, что надо загружать текст из заранее подготовленного файла.
Продолжение следует...
|
|
|
XenonTomb
250 EGP
   Рейтинг канала: 2(16) Репутация: 66 Сообщения: 867 Откуда: Николаев, Украина Зарегистрирован: 17.03.2004
 |
|
Akela : |
play sample <Var/Number>
|
Проигрывает звуковой сэмпл с номером <Var/Number>. Сэмплы хранятся в папке "s" игры и имеют формат WAV. Номера сэмплов совпадают с именем файла. Это всякого рода простые звуки, например открытия люка, звука от оружия и т.п.
Есть подозрение, что можно добавить своих сэмплов и потом их использовать.
_________________ Будут предложения - присылайте на расчетный счет :) |
|
|
serg-314159
97 EGP
 Репутация: 6 Сообщения: 50
Зарегистрирован: 08.06.2004
 |
|
<RetVar>=<RefObj> get rot alpha
<RetVar>=<RefObj> get rot beta
<RetVar>=<RefObj> get rot gamma
<RefObj> set rotation: alpha=<Var/Number> beta=<Var/Number> gamma=<Var/Number>
Получает/устанавливает угол поворота объекта в системе координат X2
alpha - угол поворота в плоскости XZ (карта X2), направление на N = 0, W = 16384,S = 32768,E = -16384 = (32768+16384)
beta - угол подъема вектора корабля от плоскости XZ (тангаж), 0 - вектор в плоскости XZ, 16384 - нормаль XZ (параллелен оси Y) итд
gamma - крен корабля - угол поворота плоскости корабля относительно положения вектора, заданного alpha и beta; определяет не столько ориентацию вектора, сколько способ модификации alpha и beta при управлении (изменяется клавишами <Q>,<W>), задается также в системе [-0xFFFF..0xFFFF], c направлением против часовой стрелке
|
|
|
Пассажир
|
|
2XenonTomb Ок, спасибо.
<RetVar/IF/START> speak text: page=<Var/Number1> id=<Var/Number2> priority=<Var/Number3>
Озвучивает текст из языкового ресурса (файлы 70001.xml и т.п. в папке t) со страницы <Var/Number1>, строка <Var/Number2> с приоритетом <Var/Number3>. Что возвращает - х/з, предполагаю, что это сделано для возможности поставить префикс START, который означает, что скрипт не будет ожидать конца текста, а продолжит выполнение. Если в момент озвучивания текста приходит запрос на озвучку с таким же или большим приоритетом - озвучиваемый текст перебивается запросом. Если приоритет меньше - запрос игнорируется.
|
|
|
XenonTomb
250 EGP
   Рейтинг канала: 2(16) Репутация: 66 Сообщения: 867 Откуда: Николаев, Украина Зарегистрирован: 17.03.2004
 |
|
Akela : |
<RetVar/IF/START> speak text: page=<Var/Number1> id=<Var/Number2> priority=<Var/Number3>
Озвучивает текст из языкового ресурса (файлы 70001.xml и т.п. в папке t) со страницы <Var/Number1>, подраздел <Var/Number2> с приоритетом <Var/Number3>.
|
А если точнее, чаще всего со страницы 13; id - номер соответствующей строки на странице.
_________________ Будут предложения - присылайте на расчетный счет :) |
|
|
Пассажир
|
|
Продолжу по командам. Опять-таки выбираю только те команды, которые не описаны в хелпе.
Основные команды
inc<RetVar>=
Увеличивает значение <RetVar> на 1.
dec<RetVar>=
Уменьшает значение <RetVar> на 1.
По идее, эти команды применимы только к числовым переменным.
<RetVar>=script engine version
Возвращает версию скриптового движка. Может применяться в скриптах, рассчитанных на высокие версии игры, для автоматического контроля возможности выполнения в данной системе.
<RetVar/IF>is script prio <Var/Number> on stack
Возвращает [TRUE] если на вершине стека находится (выполняется в данный момент) скрипт с приоритетом <Var/Number>
<RefObj> start task <Var/Number1> with script <Script Name> and prio <Var/Number2>: arg1=<Value1> arg2=<Value2> arg3=<Value3> arg4=<Value4> arg5=<Value5>
<RefObj> interrupt task <Var/Number1> with script <Script Name> and prio <Var/Number2>: arg1=<Value1> arg2=<Value2> arg3=<Value3> arg4=<Value4>
<RefObj> interrupt with script <Script Name> and prio <Var/Number2>: arg1=<Value1> arg2=<Value2> arg3=<Value3> arg4=<Value4>
<RefObj> interrupt with script <Script Name> and prio <Var/Number2>
Это команды управления задачами и скриптами объекта <RefObj>. Подробнее я с ними еще не разобрался.
<RetVar/IF>get task ID
Возвращает локальный идентификатор текущей задачи для того объекта на котором она выполняется. Этот идентификатор виден в окошке Script Task Infos объекта
<RetVar/IF>get PID
Возвращает глобальный идентификатор задачи. Можно посмотреть там же где и локальный.
<RetVar>=sprintf: fmt=<Var/String>, <Value1>, <Value2>, <Value3>, <Value4>, <Value5>
Возвращает строку <Var/String> в которой все символы %s заменены соответствующими значениями параметров <Value>. Первый %s - <Value1>, второй - <value2> и т.д. Применяется для подстановки в заданный шаблон вычисляемых значений.
<RetVar>=sprintf: pageid=<Var/Number1> id=<Var/Number2>, <Value1>, <Value2>, <Value3>, <Value4>, <Value5>
То же самое, что и предыдущая функция, только шаблон читается из языкового ресурса, страница <Var/Number1>, строка <Var/Number2>
load text: id=<Var/Number>
???
<RetVar/IF> system date is month=<Var/Number1> day=<Var/Number2>
Возвращает [TRUE] если системная (не игровая!) дата на компьютере совпадает с запрошенной и [FALSE] в противном случае.
<RetVar>=playing time
Возвращает текущее игровое время в секундах.
<RefObj>set local variable: name=<Var/String> value=<Value>
Устанавливает значение локальной переменной объекта <Var/String> равным <Value>.
<RetVar/IF><RefObj> get local variable: name=<Var/String>
Возвращает значение локальной переменной объекта <RefObj> с именем <Var/String>. Локальные переменные разных объектов независимы. Эта пара функций может применяться для обмена данными между скриптами выполняемыми на одном объекте. Отменить установку переменной можно задав её значание в null.
set global variable: name=<Var/String> value=<Value>
<ReTVar>=get global variable: name=<Var/String>
Пара функций аналогичная предыдущей, но работающая с глобальными переменными. Глобальные переменные не привязаны к какому-либо объекту, а являются общими для всех.
al engine: register script=<Script Name>
al engine: unregister script=<Script Name>
Регистрирует и снимает регистрацию скрипта <Script Name> как плагина к AL (Artificial Life) Engine.
al engine: set plugin <Var/String1> description to <Var/String2>
Устанавливает описание плагина с идентификатором <Var/String1> равным <Var/String2>
al engine: set plugin <Var/String> timer interval to <Var/Number> s
Устанавливает интервал вызовов плагина <Var/String> по таймеру в <Var/Number> секунд
<RetVar>=get script version
Возвращает версию скрипта
<RetVar>=get script name
Возвращает имя скрипта
<RetVar/IF> is plot <Var/Number> is state <Var/Number>
???
<RetVar>=get random name: race=<Var/Race>
Возвращает случайно выбранное имя представителя расы <Var/Race>
<RetVar>=get Khaak agression level
Возвращает уровень агрессивности Хааков
set Khaak agression level to <Var/Number>
Устанавливает уровень агрессивности Хааков. В каких пределах изменяется этот упровень и на что именно вляет - неясно.
Уфф! Вроде по основным командам все...
|
|
|
RAider
405 EGP
    Рейтинг канала: 2(21) Репутация: 133 Сообщения: 1294 Откуда: Таганрог Зарегистрирован: 08.07.2003
 |
|
Akela : |
.
load text: id=<Var/Number>
???
|
эта команда на загрузку языкового файла описания с соответсвтующим ID из папки "t"...например, для 70003 - id = 3. делается это для того, чтобы в дополнительных файлах прописать все поля описания нестанадартных товаров\кораблей, которые добавлены в игру, иначе мы получим read-text`ы в их описаниях.
(хотя, как вариант, описания дополнительных товаров\корабелй\объектов могут быть добавлены и в 70001, который загружается автоматически, имхо, он там прописан такой же командой где-то в эгософтофских скриптах...)
_________________ Smart is the new Sexy. |
|
|
akm
470 EGP
    Рейтинг канала: 1(4) Репутация: 173 Сообщения: 1638 Откуда: Паразит Прайм Зарегистрирован: 23.10.2002
 |
|
Цитата: |
Вы все это Пегасычу на мыло или приват...
|
У Пегасыча почтовый ящик загнется
2 All Дополнения/исправления постим в эту тему.
Можно попросить модераторов резать весь оффтоп (со снятием ЕГП) ?
Я к тому, что работы очень много. Вы вот дополняете... а я сейчас начну исправлять ошибки. Вот посмотрите какой бардак в текущей версии "учебника"
@<RetVar/IF/START> <RefObj> call script <Script Name>: <Parameter>
Запускает скрипт <Script Name> в стеке Task 0 объекта <RefObj> (либо в текущем стеке текущего объекта если не использован префикс START) с параметрами <Parameter> и приоритетом текущего скрипта. Возвращаемое скриптом значение присваивается переменной <RetVar> или анализируется в <IF>. Допускается игнорирование возвращаемого значения (отсутствие <RetVar/IF>). Если <RefObj> = null и использован префикс START, то скрипт будет запущен как глобальный.
При запуске в текущем стеке (т.е. без префикса START) команда call script ничего не удаляет из текущего стека. В противном случае из стека Task 0 объекта <RefObj> будут удалены все остальные скрипты независимо от приоритетов.
Указание префикса <START> означает продолжение выполнения текущего скрипта, без ожидания завершения вызванного. При этом скрипт будет запущен строго в стеке Task 0 объекта <RefObj>, удалив при этом все остальные скрипты из этого стека.
Внимание! Никогда не используйте @ START [THIS]->call script в скрипте, запущенном в Task 0 объекта! Скрипт не будет запущен, а текущий повиснет!
Также будьте внимательны с запуском без префикса START и с <RefObj> отличным от [THIS], т.к. если объект <RefObj> будет уничтожен, вызванный скрипт сам остановлен при этом не будет, он будет продолжать выполняться на текущем объекте и может повиснуть.
<RetVar/IF>is script prio <Var/Number> on stack
Возвращает [TRUE] если в текущем стеке находится (выполняется в данный момент) скрипт с приоритетом <Var/Number>. Т.е. если эта команда вызвана из скрипта, запущеннго в стеке Task 10, то будут проанализированы все скрипты, включая текущий, но запущенные только в этом же стеке Task 10 этого же объекта. Кстати, весьма полезная команда. На сегодня это единственная команда, с помощью которой извне (из другого скрипта) можно узнать а запущен ли такой-то скрипт в таком-то слоте такого-то корабля/станции.
<RefObj> start task <Var/Number1> with script <Script Name> and prio <Var/Number2>: arg1=<Value1> arg2=<Value2> arg3=<Value3> arg4=<Value4> arg5=<Value5>
Запускает скрипт <Script Name> в стеке Task <Var/Number1> объекта <RefObj> с приоритетом <Var/Number2> и параметрами <Value1> ... <Value5>, при этом вытеснив (удалив) все остальные скрипты из этого же стека.
Внимание! Командой start task <Var/Number> with script ни в коем случае нельзя запускать скрипт в текущем стеке! (т.е. на том же объекте и том же Task, где запускается команда start task) Если это сделать, скрипт повиснет.
<RefObj> interrupt task <Var/Number1> with script <Script Name> and prio <Var/Number2>: arg1=<Value1> arg2=<Value2> arg3=<Value3> arg4=<Value4>
Формирует запрос на прерывание (см. IntReq в статистике объекта) скриптом <Script Name> в стеке Task <Var/Number1> объекта <RefObj> с приоритетом <Var/Number2> и параметрами <Value1> ... <Value4>, но только при условии, что в соответствующем стеке уже запущен хоть 1 скрипт и указанный приоритет <Var/Number2> выше приоритета активного в данном стеке скрипта. Если прерывания разрешены в данном стеке, то запуск скрипта <Script Name> фактически произойдет лишь в момент завершения первой встретившейся за командой interrupt прерываемой команды (т.е. помеченной "@"). И, если такой команды нет вплоть до return, то скрипт <Script Name> запущен не будет.
<RefObj> interrupt with script <Script Name> and prio <Var/Number2>: arg1=<Value1> arg2=<Value2> arg3=<Value3> arg4=<Value4>
<RefObj> interrupt with script <Script Name> and prio <Var/Number2>
Формируют запрос на прерывание (см. IntReq в статистике объекта) скриптом <Script Name> в стеке Task 0 объекта <RefObj> с приоритетом <Var/Number2> и параметрами <Value1> ... <Value4>, но только при условии, что в соответствующем стеке уже запущен хоть 1 скрипт и указанный приоритет <Var/Number2> выше приоритета активного в данном стеке скрипта. Если прерывания разрешены в данном стеке, то запуск скрипта <Script Name> фактически произойдет лишь в момент завершения первой встретившейся за командой interrupt прерываемой команды (т.е. помеченной "@"). И, если такой команды нет вплоть до return, то скрипт <Script Name> запущен не будет.
enable signal/interrupt handling: <Var/Number>
Включает/выключает (TRUE/FALSE) прерывания для всего текущего стека.
<RetVar/IF>get task ID
Возвращает номер стека (задачи) на объекте, в котором выполняется текущий скрипт. Также в разделе "Script Task Infos" меню информации об объекте можно увидеть список всех активных стеков (задач) и какие скрипты и с каким приоритетом выполняются в каждом из них.
Все обработчики сигналов запускаются строго в стеке Task 0 (ничего не удаляя из стека). Любые команды кораблю из командной консоли тоже запускаются в стеке Task 0, удаляя при этом все остальные скрипты из этого стека. Скрипт, запущенный командой START <RefObj> command <Object Command> (она почему то в разделе Fly Commands) также запускается в стеке Task 0, удаляя все остальные срипты из этого стека.
Скрипты турели 1 запускаются в стеке Task 1.
Скрипты турели 2 запускаются в стеке Task 2 и т.д.
Скрипты в доп. слоте 1 запускаются в стеке Task 10.
Скрипты в доп. слоте 2 запускаются в стеке Task 11 и т.д. Причем одинаково и для кораблей, и для фабрик.
|
|
|
XenonTomb
250 EGP
   Рейтинг канала: 2(16) Репутация: 66 Сообщения: 867 Откуда: Николаев, Украина Зарегистрирован: 17.03.2004
 |
|
Некоторые новые команды игры версии 1.4:
<RefObj> station send defend squad against ship <Var/Ship/Station>
Станции <RefObj> выслать корабли охраны (все корабли класса "истребитель", которые приписаны к этой станции) против объекта <Var/Ship/Station>. По-идее в качестве станции могут быть и бигшипы (не проверено).
<RetVar>=<RefObj> get name
Получить в <RetVar> название объекта <RefObj> как строку.
<RefObj> set name to <Var/String>
Переименовать объект <RefObj> в <Var/String>.
<RefObj> set owner race to <Var/Race>
Назначить объекту <RefObj> владельцем расу <Var/Race>. По-идее можно использовать для эмуляции захвата.
<RetVar>=<RefObj> get pilot name
Получить в <RetVar> имя пилота корабля <RefObj> как строку.
<RefObj> set pilot name <Var/String>
Переименовать пилота корабля <RefObj> в <Var/String>.
<RefObj> set pilot speaker: voice=<Value>, face=<Value>, Pirate subrace=<Value>, Argon female=<value>
Установить тип голоса пилота корабля <RefObj> в <Value>, тип лица пилота в <Value>, расу пилота (если это пират) в <Value>, а также признак "женский голос" если пилот - женщина расы Аргон.
Дополнение к уже известным торговым командам <RetVar/IF> <RefObj> buy (sell, load, unload) <Var/Number> units of <Var/Ware> - все они возвращают кол-во товара, которое успешно куплено, продано, загружено, выгружено.
_________________ Будут предложения - присылайте на расчетный счет :) |
|
|
Vitalii
955 EGP
     Рейтинг канала: 1(3) Репутация: 249 Сообщения: 7214 Откуда: Тула Зарегистрирован: 13.08.2002
 |
|
akm : |
Можно попросить модераторов резать весь оффтоп (со снятием ЕГП) ?
|
попросить всегда можно
зы: ну все поняли, да?
_________________ Связь - это как воздух, незаметна, пока не испортишь. |
|
|
serg-314159
97 EGP
 Репутация: 6 Сообщения: 50
Зарегистрирован: 08.06.2004
 |
|
Поскольку, как я понимаю, на форуме присутствуют пассажиры, пытающиеся пользоваться
редактором скриптов, не имея представления о программировании в целых числах, рискну написать для них
краткое руководство.
В понятии целочисленных операций важное значение имеет разрядность d, показывающая число бит, отведенных под число
В SCE d=31(+1 на знак)
{примечание: на практике не проверял, но в системе координат X2 разрядность явно выше 16, и вряд ли достигает 64; собственно, это не принципиально},
при этом числа имеют диапазон - [-2147483648,2147483647] или [-0x80000000,0x7FFFFFFF]
в шестнадцатиричной системе счисления.
Обращаю Ваше внимание, что вне этого диапазона чисел не существует, поэтому верно
Код: |
x:=2147483647
inc(x)=
* COMMENT:x=-2147483648
|
В связи с этим возможна ситуация ЦЕЛОЧИСЛЕННОГО ПЕРЕПОЛНЕНИЯ:
Код: |
* x1=x2=0x10000
x1:=65536
x2:=x1
Result:=x1*x2
* COMMENT:True Result=0x10000*0x10000=0x100000000
* COMMENT:SCE Result=0
|
Как и в большинстве языков программирования,в SCE операция деления определена как
ЦЕЛОЧИСЛЕННАЯ С ОТБРАСЫВАНИЕМ:
Код: |
div:=x/N
xmod:=x mod N
* COMMENT:x=div*N+xmod
|
где div - частное с отбрасыванием остатка
xmod - остаток от деления
В связи с вышесказанным имеется проблема получения наиболее точного значения x1*x2/x3.
С одной стороны, умножение x1*x2 может вызвать переполнение, с другой стороны
x1/x3*x2 вызовет ошибку вычисления на (x1 mod x3)*x2/x3
Обычно эта проблема решается повышением разрядности произведения x1*x2
|
|
|
XenonTomb
250 EGP
   Рейтинг канала: 2(16) Репутация: 66 Сообщения: 867 Откуда: Николаев, Украина Зарегистрирован: 17.03.2004
 |
|
Возвращаю тему из . Что-то ничего никто не пишет...
Повторюсь еще раз - да простят меня модераторы
2ANS, akm, GreyWolf и др. желающим поучаствовать
Тут товарищ Vitalii на днях предлагал сварганить раздел в хелп про стандартные скрипты Х2: какой что делает (кратенько), желательно указывать назначение параметров. Я готов свести это дело до кучи в удобоваримом виде. Будете помогать? Обсуждать предлагаю в "Скриптописании" (пусть здесь будут готовые решения).
З.Ы. Мое личное мыло для обсуждений paa@ua.fm
_________________ Будут предложения - присылайте на расчетный счет :) |
|
|
Grey Wolf
500 EGP
    Рейтинг канала: 2(17) Репутация: 115 Сообщения: 1677 Откуда: Ростов-на-Дону Зарегистрирован: 31.03.2003
 |
|
Кстати, я сталкивался с переполнением, когда пытался в каком-то скрипте активно работать с координатами. Пришлось тогда именно париться, уменьшая разрядность.
Насчет хелпа про стандартные скрипты: по моему нах не нужен. Собсно, зачем он? Гораздо нужнее хелп по самому скриптовому языку с аргументами функций и некоторыми примерами. Многое уже сделано, надо только до кучи все свести, например в хелп Димакса и Пегасыча.
_________________ Быстро выпитая рюмка не считается налитой |
|
|
Пассажир
|
|
to akm
Добавь, что скрипт, запущенный в том же стеке по call script, наследует приоритет родительского скрипта. То есть в стеке появляется два скрипта с одинаковым приоритетом - родитель и потомок.
|
|
|
Proffesor
65 EGP
 Рейтинг канала: 1(2) Репутация: 5 Сообщения: 180 Откуда: Санкт-Петербург Зарегистрирован: 30.08.2004
 |
|
Прошу прощения, подскажите где еще можно X2 modder pack Version 1.4 скачать? Отсюда не качает! Десять раз пробовал!!!
_________________ Хранитель сущего Proffesor,
Лидер команды PMM-team. |
|
|
akm
470 EGP
    Рейтинг канала: 1(4) Репутация: 173 Сообщения: 1638 Откуда: Паразит Прайм Зарегистрирован: 23.10.2002
 |
|
Столкнулся с таким багом в версии 1.4, но полагаю и в более ранних версиях Х2 он присутствует.
Функция <RetVar/IF> <RefObj> get max speed возвращает вовсе не максимальную скорость корабля <RefObj> с учетом его текущих апгрейдов движка, а макс. скорость корабля без апгрейдов Engine Tuning. Т.е. в ТТХ кораблей это минимальная скорость. Кроме того, функция возвращает скорость не в м/с, а в игровых юнитах.
Вот как можно "добыть" реальную макс. скорость корабля $Ship с учетом его текущих апгрейдов:
$speed = $Ship -> get max speed
$engine.upgrades = $Ship -> get amount of ware Engine Tuning in cargo bay
$speed = $speed * ( 10 + $engine.upgrades ) / 10
Получившаяся скорость $speed будет в игровых юнитах. Если желаете перевести ее в м/с, то $speed надо разделить на 222.01:
$speed = $speed * 100 / 22201
|
|
|
Grey Wolf
500 EGP
    Рейтинг канала: 2(17) Репутация: 115 Сообщения: 1677 Откуда: Ростов-на-Дону Зарегистрирован: 31.03.2003
 |
|
Такую вот фигню обнаружил:
Все функции, связанные с SectorObject Id работают только в том секторе, где пилот. Во всех остальных секторах этот самый Id любого объекта равен 0.
_________________ Быстро выпитая рюмка не считается налитой |
|
|
Gor
220 EGP
   Репутация: 45 Сообщения: 680 Откуда: Московский филиал клана [OEG] Зарегистрирован: 23.06.2004
 |
|
<RefObj> set position: x=<Var/Number> y=<Var/Number> z=<Var/Number>
перемешает объект в точку с заданными координатами, если по этим координатам находиться объект, то перемещение производится в ближайшую свободную зону.
_________________ Аргон ксенону не товарищ |
|
|
|
|
|
Канал X2: The Threat: «Учебник по скриптам» |
|
К списку каналов | Наверх страницы |
Цитата не в тему: Мне нравятся синие люди. То есть, те, которые при входе в чат синеют. Они на экране так четко выделяются-ууууу... Вот Харлик с Алонычем всегда синие. Ух, как мне нравятся синие людиии... (ловит кайф SunnyGale)
|
» Учебник по скриптам | страница 1 |
|