Elite Games - Свобода среди звезд!
.
  » Новые скриптовые команды. Угадайка. |
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Search | Conference rules | Album | Register | Pilots list | Profile | Log in to check your private messages | Log in

   Page 1 of 2
Go to page: 1, 2  Next | All pages
Поиск в этой теме:
Канал X3: Reunion » Модовый и скриптовый отсек X3: Reunion: «Новые скриптовые команды. Угадайка.»
Krom
 455 EGP


Рейтинг канала: 1(3)
: 160
Posts: 1983
Location: Горы Урала
Joined: 19 Jul 2005
Пока под Х3 не написан MSCI Programmer's Handbook-2, предлагаю заняться разгадыванием сути нововведений в области скрипт-программинга, благо это на первый взгляд не составляет больших трудностей, а команды новые ой-ё-ёй какие классные и хорошие Подмигиваю А если меня поддержит DragonP, то всё, что мы здесь насобираем, однажды попадёт в самый полный учебник по скриптописанию на русском языке Улыбка

Всё написанное ниже, за исключением предваряемого знаком вопроса, проверялось и тестировалось на русифицированной версии 1.3 от издателя DeepSilver, полученной из 1.0 последовательной установкой трёх переходных патчей и частично на версии 1.4.02, полученной из вышеописанной установкой ещё двух переходных патчей. Тестовая игра - уровень Экстрим.

========================================================================================
Общие команды :
<RetVar/IF> <RefObj> is script <Script Name> on stack of task <Var/Number>
Позволяет узнать, не выполняется ли скрипт <Script Name> (выбирается из списка имеющихся в папке scripts) в стеке <Var/Number> указанного объекта <RefObj>. Возвращает 0/False, если не выполняется, и 1/True, если выполняется. Помните, TRUE - это константа типа DATATYP_INT, равная 1, и ничто иное! Так же и FALSE - DATATYP_INT, равный 0, и ничто иное!

<RetVar/IF> <RefObj> is task <Var/Number> in use
Позволяет узнать, свободен ли указанный стек объекта, т.е. отсутствуют ли в нём работающие скрипты. Возвращает FALSE, если свободен, TRUE - если занят.

register quest script <Script Name> instance multiple = <Var/Number>
?Судя по всему, вызов данной команды приводит к однократному срабатыванию скрипта <Script Name>, независимо от значения <Var/Number>. Единственное, что пока могу добавить - в качестве <Script Name> нежелательно указывать сам скрипт, содержащий эту команду. Игра от этого вылетает (на 1.4.02).

set quest state with message: quest=<Var/Quest> state=<Var/Number> msg=<Var/String>
set quest/event <Var/Quest> timer to <Var/Number> ms
set quest <Var/Quest> timeout to <Var/Number>
<RefObj> add event listener: quest/event=<Var/Quest> objevent=<Var/Number> script=<Script Name>
<RefObj> remove event listener: quest/event=<Var/Quest>
?Помните эти сакраментальные вопросы к мимолетящим кораблям типа: "А ну колись где тут у нас сектор Дом Света?" Так вот, в языковом файле так и написано: "Как добраться до сектора:(question for quests, followed by sector name)", то, что в круглых скобках - комментарий разработчика. Всё наводит на мысль, что движение по сюжету оформлено именно с помощью этих <Var/Quest>. Также, вероятно, миссии с досок объявлений - тоже типа квесты. Можно добавить, что в тесной связи с этой группой команд находится интересный набор констант:
Code:
Quest.Offered
 Quest.Accepted
 Quest.Continued
 Quest.Aborted
 Quest.Finished
 Quest.Question
 Quest.Event.Setenv
 Quest.Event.Attacked
 Quest.Event.Killed
 Quest.Event.Captured

и тип данных скрипта DATATYP_QUEST. Обратите внимание на то, что в командах иногда пишется quest=<Var/Quest>, а иногда quest/event=<Var/Quest>. Возможно это подсказка куда копать.

<RetVar/IF> display news article: page=<Var/Number> newsid=<Var/Number> occurrences=<Var/Number> maxoffertime=<Var/Number> maxtime=<Var/Number> placeholder:race1=<Var/Number> race2=<Var/Number> customarray=<Var/Array>
change event news availibility: <Var/Number> race=<Var/Race> sector=<Var/Sector> jumps=<Var/Number>

<RetVar> register hotkey <Var/String> to call script <Script Name>
Даёт возможность назначить клавишу или сочетание клавиш в качестве горячих для вызова скрипта <Script Name> Улыбка Результатом срабатывания команды будет появление в разделе меню Настройки/Управление/Интерфейс под графой "Улучшения" пункта <Var/String> с возможностью назначения(!но не назначенной) горячей клавиши. Команда возвращает <RetVar> - число, которое обязательно нужно где-то сохранить, потому что повторное выполнение этой команды назначит тому же скрипту новое число и создаст новый пункт в меню настроек, захламляя его. Помните, хороший скриптер должен уметь уничтожить всё, что создал! Подмигиваю
Кроме того, Sten предупреждает, что все горячие клавиши запускают связанные с ними скрипты глобально, так что никаких отсылок к переменным типа [THIS] и [SECTOR] внутри скриптов быть не должно!

unregister hotkey <Var/Number>
Снимает назначение клавиши в качестве горячей. При снятии вы должны указать тот код <Var/Number>, который вам ранее вернула команда register hotkey.

register god event: script=<Script Name> mask=<Var/Number>
abort god event: <Var/Quest>
finish god event: <Var/Quest>
<RefObj> connect wing command/signal <Object Command/Signal> to script <Script Name> with prio <Var/Number>

<RetVar/IF> is a new script version available
Сравнивает номер версии работающего скрипта с имеющимся в папке scripts и выдаёт true, если можно запустить обновлённую версию скрипта с диска.

Общие команды / Команды исполнения : (Разобрано)
gosub <Label>
Совершает переход по метке с запоминанием места, откуда он произведён. После этого возможен возврат в ту же точку с помощью следующей команды.

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

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

Общие команды / Массивы : (Разобрано)
<RetVar/IF><Var/Array>[<Var/Number>][<Var/Number>]
<Var/Array>[<Var/Number>][<Var/Number>] = <Value>
Команды для работы с двумерными массивами Улыбка Чтение и присваивание значений элементов, как видите.

<RetVar> get index of <Value> in array <Var/Array> offset=<Var/Number> + 1
Команда последовательно ищет в массиве <Var/Array> элемент <Value>, начиная с индекса <Var/Number> + 1. Если такой элемент не найден - возвращается -1, иначе возвращается номер элемента.

<Var/Array>[<Var/Number>] = <Var/Array>[<Var/Number>]
Прямое присвоение элементов двух массивов.

Общие команды / Строки : (Разобрано)
<RetVar/IF> get length of string <Var/String>
Возвращает длину строки <Var/String>. Если строка пуста, то значение длины(0) совпадает со значением константы null.

<RetVar> = find position of pattern <Var/String> in <Var/String>
Возвращает индекс первого символа, с которого начинается первое вхождение подстроки pattern в строку. Помните, нумерация символов строки начинается с нуля. Если подстрока не найдена, возвращается -1.

<RetVar> = get substring of <Var/String> offset=<Var/Number> length=<Var/Number>
Возвращает подстроку <Var/String>, начинающуюся с символа под номером offset длиной length символов. Если length=0, возвращается пустая строка, если length достаточно велика, чтобы правый край подстроки вышел за пределы строки, то результат будет урезан. Если offset меньше нуля, вернётся пустая строка.

<RetVar> = string <Var/String> to integer
Преобразует строку <Var/String> в число. Преобразование прекращается на первом же символе, который не является цифрой. Допускаются открывающие знаки "минус" и "плюс".

<RetVar> = substitute in string <Var/String>: pattern <Var/String> with <Var/String>
Заменяет все подстроки pattern в составе string на указанную подстроку with <Var/String>.

<RetVar> = format seconds=<Var/Number> to Zura time string
Принимает аргументом число секунд и преобразует его к виду "ЧЧЧ сез. и МММ миз.", т.е. в целые сезуры и мизуры, они же часы и минуты. Единицы времени меньше минуты и больше часа в строке не встречаются. Округление происходит в сторону ближайшего числа минут.

Общие команды / Математика : (Разобрано)
<RetVar> = fixed sin <Var/Number>
Возвращает целую часть от синуса аргумента, умноженного на 65536. Более детально это выглядит так:
1) аргументом служит целое число от -2^31 до 2^31 (при этом интервалу в 2*pi сопоставляется число 65536)
2) от него берётся синус, результатом является число в интервале (-1,1)
3) затем результат умножается на 65536, от итога берётся целая часть, которая и возвращается командой
4) в итоге на выходе функция вида FixedSin(N) = [65536 * sin (2 * pi * N / 65536)]
Реально функция действует в интервале 0..32768, а далее используются свойства периодичности и симметрии функции синуса. Это хорошо заметно по графику отклонения результата, возвращаемого fixed sin, от истинного - на интервале [0,32768] оно составляет от 0 до 1, на интервале [32768,65535] - от -1 до 0, далее периодично. Ошибка, как легко заметить, пренебрежимо мала Улыбка

<RetVar> = fixed cos <Var/Number>
Возвращает целую часть от косинуса аргумента, умноженного на 65536. Реально это то же, что и синус, но со сдвигом по аргументу на -16384.

<RetVar> = square root of <Var/Number>
Возвращает целую часть от квадратного корня аргумента. Ошибка нигде не выходит за пределы интервала [0,1].

Аудио команды : (Разобрано)
send incoming question <Var/String> to player: callback=<Script Name>
Служит для получения от игрока реакции на текстовое сообщение. Сообщение появляется в журнале, и чтобы увидеть его, придётся открыть соответствующее меню. Формат сообщения довольно прост, в нём могут использоваться все те тэги, которые уже описаны у DragonP, за одним добавлением - тэг select теперь возвращает значение.
В простом варианте его может не быть. Тогда получаемое сообщение - это обычное информационное сообщение с кнопкой ОК, которое передаёт управление скрипту <Script Name> после прочтения текста и нажатия на кнопку. В более сложных вариантах используется форма [select value='ReturnValue'] text [/select], создающая кнопку с надписью "text", которая передаёт скрипту значение ReturnValue. Если опустить параметр value ([select] text [/select]), будет передана константа null.
!Обратите внимание, что скрипт-обработчик ответа <Script Name> будет запущен, как глобальный, и ему будет передан единственный параметр - value нажатой кнопки!

Подробнее о возможностях оформления текстов сообщений см. учебник по скриптам DragonP, статья "Использование тэгов и спец. символов для оформления текстов".

<RefObj> send incoming message: text=<Var/String> temporary=<Var/Number>
Игроку посылается сообщение <Var/String> и проигрывается звуковое уведомление о его приходе. Текст сообщения на экран не выводится, он доступен через меню "Сообщения". Параметр <Var/Number> указывает на то, что сообщение должно остаться в журнале (temporary=0) или пропадёт сразу после прочтения (любое другое значение).
Роль параметра <RefObj> не ясна! Возможно, его могут использовать макросы внутри текста сообщения, но это только предположение, которое не проверялось.

Навигационные команды : (пропали команды 4.040, 4.041)
<RefObj> set pilot fightskill to <Var/Number>
<RetVar> = <RefObj> get pilot fightskill
Команды устанавливают и считывают боевой ранг пилота указанного корабля. Вместо корабля можно указывать другие объекты, но при этом всегда возвращается ноль.

<RetVar/IF> = <RefObj> can missile <Var/Ware> be installed
Проверяет, возможно ли использование ракеты <Var/Ware> объектом <RefObj>. TRUE, если возможно, иначе FALSE.

@ <RetVar/IF> = <RefObj> move to position continue: x=<Var/Number> y=<Var/Number> z=<Var/Number> with precision <Var/Number> m
<RetVar/IF> <RefObj> move to debris/asteroid <Value> and turn turret <Var/Number> to target: timeout=<Var/Number></t>

4.072 <RetVar/IF> = <RefObj> -> has a free big ship dock slot
Получила дополнительный параметр, и теперь выглядит так:
[color=blue]<RetVar/IF> = <RefObj> has a free ship dock port: ship subtype = <Value>

?Вероятно, проверка на наличие свободного стыковочного узла теперь может вестись по классу (а возможно и выборке классов) кораблей.

set player tracking aim to <RefObj>
Устанавливает указатель прицела на заданный объект в одном секторе с игроком. Если объект находится в другом секторе, переключения не произойдёт.

<RetVar> = <RefObj> get formation
?Очень странным образом работает для объектов класса "корабль". У большинства возвращается значение <invalid> типа DATATYP_CONST. У прочих - null. У хааков, но не их капшипов (выпендрились) - возвращается 0 (хотя это то же, что null, но в файле лога они записывались именно так, по-разному). Вряд ли стоит проверять эту команду на других объектах. Диагноз - в патче 1.3 не работает.

<RetVar/IF> <RefObj> get current action

<RetVar> = <RefObj> get array of missiles aiming to me
?Вероятно, возвращает массив ракет, которые летят в объект <RefObj>. Ни разу не проверял её в бою, однако отсортированность массива по типу ракет, расстоянию до них или времени подлёта представляет собой очень любопытный вопрос Улыбка

<RetVar/IF> <RefObj> turret <Var/Number> can use laser <Var/Ware>
Определяет, рассчитана ли турель под номером <Var/Number> корабля <RefObj> на установку лазера <Var/Ware>. Наличие/отсутствие свободного места в турели роли не играет. TRUE, если установка лазера в принципе возможна, иначе FALSE.

<RefObj> set pirate cover state to <Var/Number>
Если эта опция включена (TRUE), пират будет выглядеть на радаре вполне законопослушным гражданином. Выключена (FALSE) - мгновенно покраснеет Улыбка В самой игре можно использовать сканирование, чтобы раскрыть маскировку (похоже, это не всегда работает) Подмигиваю Разумеется, если <RefObj> - не пират, то не случится ровным счётом ничего.

<RetVar/IF> <RefObj> scan potential pirate <Var/Ship> for illegal wares

@<RetVar/IF> <RefObj> attack run on target <Value> : timeout=<Var/Number>ms speedlimit=<Var/Number>
?Вероятно, обычный attack run, но ещё с ограничением на скорость маневров.

<RetVar/IF> <RefObj> is target visible <Var/Ship/Station>

<RetVar> = <RefObj> get scanner range
Возвращает радиус действия (в метрах) наиболее мощного из установленных на борту <RefObj> сканеров. Сканеры могут быть установлены только на кораблях и станциях.

<RefObj> select and switch lasers for target <Var/Ship/Station> in turret <Var/Number>: scan for friends <Var/Number>
?Вероятно, в этой команде, как в одном флаконе - вся ЭГИДА Улыбка

<RetVar/IF> <RefObj> get homesector
<RefObj> set homesector to <Var/Sector>
?Вероятно, эта пара команд имеет дело с респауном.

<RetVar/IF> <RefObj> get job leader
<RetVar> = <RefObj> get job idle rate
<RetVar> = <RefObj> get flight time
<RefObj> reset flight time
<RetVar> = <RefObj> get job jump range
<RetVar/IF> <RefObj> wait idle rate minimum:<Var/Number> ms

<RetVar> = <RefObj> fire laser of turret <Var/Number> ahead
?Вероятно, просто палит из турели прямо туда, куда та смотрит. Проверить нужно, сидя в турели.

<RefObj> auto sync patrol sector with environment: <Var/Number>
<RefObj> add to patrol group for sector: <Var/Sector>
<RefObj> remove from patrol group for sector: <Var/Sector>
<RefObj> remove all patrol group references
<RefObj> set relations from notoriety: include player as target and race &gt; teladi as owner=<Var/Number>
<RetVar/IF> <RefObj> get job id

Торговые команды :
<RetVar/IF> find station: product <Var/Ware> with best price depend on jumps: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>
<RetVar/IF> find station: resource <Var/Ware> with best price depend on jumps: min.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>
<RetVar/IF> find station sells: resource <Var/Ware> with best price depend on jumps: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>
Команды для поиска продающих/покупающих товар станций, но только среди тех, которые известны игроку. (Andrei[<>Ace])

<RetVar> get relvalue of <Var/Ware>

Торговые команды / для кораблей :
<RetVar/IF> <RefObj> get tradeable ware array from ship

<RetVar> = <RefObj> get upgrade price: cargo-speed-rot <Var/Ware> units:<Var/Number>
Возвращает суммарную цену следующих <Var/Number> апгрейдов типа <Var/Ware> для объекта <RefObj>. Число апгрейдов при этом может задаваться и отрицательным. Если это число в сумме с установленными апгрейдами превысит число допустимых апгрейдов для корабля, каждый юнит сверх положенного будет стоить столько же, сколько и последний "законный" апгрейд.

Торговые команды / для станций : (Часть команд разобрана, осталось написать примечания, добавлена новая группа команд)
<RetVar/IF> <RefObj> uses ware <Var/Ware> as product
Возвращает TRUE, если станция <RefObj> производит товары типа <Var/Ware>, иначе возвращает FALSE.

<RetVar> = <RefObj> get production cycle time: account for secondary resources=<Var/Number>
Для фабрик, принадлежащих игроку, возвращается время, необходимое на производство текущего продукта (это понятие необходимо вводить для комплекс-заводов, которые производят свои многочисленные продукты по очереди) в секундах, независимо от параметра <Var/Number>, поскольку фабрики игрока вторичные ресурсы не потребляют.
Для фабрик, принадлежащих компу, результаты выглядят иначе. Во-первых, времена циклов на одинаковых с игроком фабриках могут отличаться в несколько раз - алгоритм расчёта циклов для NPC будет приведён чуть позднее. Во-вторых, в зависимости от <Var/Number> = TRUE/FALSE, время цикла меняется в сторону уменьшения - проверено опытом на примере Челт-аквариумов (thnx2 hover2006), разброс продолжительности циклов с учётом потребления втор. ресурсов составил 85-100% от их номинальной продолжительности без втор. ресурсов. Для других станций ситуация, вероятно, аналогична.

<RetVar> = <RefObj> get remaining production cycle time
Возвращает время, оставшееся до завершения производственного цикла.
N.B. Я заметил одну поганую особенность - после завершения цикла производства одного продукта на Комплекс-заводе и при невозможности начать новый цикл с другим продуктом, эта команда возвращает полное время предыдущего выполненного цикла. При этом остальные параметры (типа потребления ресурсов и количества продукта) показываются для следующего продукта, а время - для предыдущего. Только когда начнётся новый цикл, время будет показано как надо.

<RetVar> = <RefObj> get number of products per cycle
Для одиночных станций всё понятно - возвращает количество продукта, производимого за один цикл производства. Для комплекс-заводов я провёл один эксперимент - создал точную копию Комплекс-завода лёгких щитов в Судьбе Ролка, но принадлежащую игроку, и прогнал эту команду на обоих объектах. Результат удивил - у неписей вернулось число 3, у игрока - 2. Потом заметил - сначала у игрока произвелось 2 щита на 1 МДж, а в следующем цикле 3 на 5 МДж. Вывод: надо следить за тем, что производится. Как это сделать? Спросите чего полегче.

<RetVar> = <RefObj> get number of resources per cycle for ware <Var/Ware>
Возвращает число первичных ресурсов типа <Var/Ware>, потребляемых станцией за один цикл производства. Для вторичных ресурсов всегда возвращает 0, независимо от того, кому принадлежит фабрика. Вывод: неписи не потребляют вторичные ресурсы, они их выбрасывают.
P.S> Была сделана дополнительная проверка. Диагноз подтвердился.

<RetVar> = <RefObj> get production status: as percentage=<Var/Number>
При percentage=FALSE возвращает 1 (TRUE), если процесс производства идёт, и 0 (FALSE), если станция простаивает, например из-за недостатка ресурсов. Параметр percentage=TRUE означает, что возвращаются значения в процентах, т.е. в случае идущего процесса вернётся не 1, а 100, ну а 0 процентов и в Африке 0 процентов.

<RetVar/IF> <RefObj> get products
Хотелось думать, что эта команда выдаёт массив товаров, являющихся продукцией станции. Ан нет, на всех станциях, которые я подставлял вместо RefObj (а там были и простые станции, и комплекс-заводы, и ДО с ТС, только собственных комплексов не было), результат один - на выходе пустой массив. Так что фиг его знает, зачем эта команда Совсем запутался...
P.S> Дополнительная проверка - скан всей вселенной на предмет рабочести команды. Окончательный диагноз - не работает никогда.

<RetVar/IF> <RefObj> get intermediates buyable
<RefObj> set intermediates buyable to <Var/Number>
<RetVar/IF> <RefObj> get intermediates sellable
<RefObj> set intermediates sellable to <Var/Number>
?Вероятно, команды служат для получения списков промежуточных товаров комплексов станций, которые закупают/продают приписанные транспорты, и управления этими списками.

Торговые команды / Торговец :
add merchant <Var/String> base=<RefObj> wanted wares=<Var/Array> owned wares=<Var/Array> cash=<Var/Number> rank=<Var/Number>
<RetVar> = <RefObj> get merchants
remove merchant <Var/String>
merchant <Var/String> got ware <Var/Ware>: quantity=<Var/Number>
merchant <Var/String> sold ware <Var/Ware>: quantity=<Var/Number>
reset merchant <Var/String> expiry
<RetVar> get data for merchant <Var/String>: item number=<Var/Number>
?Вероятно, эти команды позволяют управлять торговцами, занимающимися бартером на торговых станциях.

<RetVar> get warearray for <Var/Ship>
?Вероятно, возвращает массив товаров, которые являются "желанными" для конкретного корабля, при этом они необязательно будут у него в трюме. Вот небольшой список того, что давала эта команда для различных кораблей:
Арг. гражданский корабль, Арг. такси - Пассажиры (т.е. в результирующем массиве иногда встречаются и необычные товары)
Тел. перевозчик батарей Гриф - Батареи(обычно у возчиков батарей ими всё и ограничивается), Яйца космических мух, Космическое топливо, Космотабак, Рабы (возможно, это был пират. Интересы больно уж характерные)
Бор. перевозчик руды Дельфин - Руда, Кремниевые пластины
Бор. рефрижератор Манта - Стотт специи, БоФу
Пар. поставщик свежих продуктов - Овощи, Фрукты, Мясо аргну, Подсолнечники, Болотная трава, Бифштексы кахуна, Стотт специи, Порошок массом, Соевая мука
Арг. курьер Первооткрыватель - Космическое топливо, Космотабак, Космические мухи (вот это точно был пират под личиной мирного гражданина. Как показывает сканирование, пираты любят прикидываться курьерами)

<RetVar/IF> <RefObj> lock ware: <Var/Ware> on station: <Var/Station> for this
<RetVar/IF> <RefObj> get defined amount of ware <Var/Ware> as ship hardware
<Var/Ware> <RefObj> set defined amount of ware <Var/Number> as ship hardware

<RetVar> = <RefObj> get ship hardware as array
?Эта команда возвращает массивы, содержащие исключительно пушки, ракеты, щиты и дронов - короче, боевое снаряжение. Вероятно, всё это имеется на борту корабля <RefObj> в установленном или складированном в трюме виде, так что цель существования команды - отделение военного барахла на борту от всего прочего.

Работа с объектами :
<RefObj> set hull to <Var/Number>
Выставляет точное значение прочности корпуса указанного объекта. Превысить естественный предел его прочности не получится Подмигиваю Можно выставить 0, и это не убъёт объект Ой, не могу!.. Сначала придётся как-то подействовать на него - стукнуть, там, пальнуть... Гы-гы

<RefObj> set current shield strength to <Var/Number>
<RetVar> = <RefObj> get current max speed
<RetVar> get fight rank
<RetVar> get trade rank

<RetVar> = <RefObj> is known
Возвращает TRUE, если объект известен игроку (иначе говоря, присутствует на его карте - что эта команда будет делать в отношении кораблей пока неясно, они-то движимое имущество Подмигиваю ), и FALSE, если нет.

<RefObj> set known status to <Var/Number>
Устанавливает статус известности объекта <RefObj> игроку. Задайте <Var/Number> равным TRUE, чтобы отметка объекта появилась на карте, и FALSE, чтобы стереть существующую отметку.

<RetVar> = <RefObj> is detectable
<RetVar> = <RefObj> is hired
<RetVar> = <RefObj> serialise object
<RetVar> get player name
<RefObj> disable ship rebuild
<RetVar> = <RefObj> get current speed
<RetVar> order ship in next shipyard: owner=<Var/Race> sector=<Var/Sector> class=<Var/Class> optional: default shiptype for race:<Var/Race>
<RetVar/IF> find nebula: sector=<Var/Sector> type=<Var/Number> effect=<Var/Number> flags=<Var/Number> refobj=<Var/Ship/Station> maxdist=<Var/Number> maxnum=<Var/Number> refpos=<Var/Array>
<RetVar/IF> <RefObj> is hidden
<RefObj> start job
START <RefObj> command <Object Command> : arg1=<Value>, arg2=<Value>, arg3=<Value>, arg4=<Value>
<RetVar> = <RefObj> get true owner
<RetVar> create debris: type=<Var/Number> addto=<Var/Sector> resource=<Var/Number> yield=<Var/Number> x=<Var/Number> y=<Var/Number> z=<Var/Number>
<RefObj> add lasers per value:<Var/Number> flags:<Var/Number>
<RefObj> add shields per value:<Var/Number>
<RetVar/IF> <RefObj> is asteroid scanned
<RefObj> set asteroid scanned to <Var/Number>
<RetVar> = <RefObj> get flying ware count

<RetVar> = <RefObj> get pilot morale
<RetVar> = <RefObj> get pilot aggression
Теперь у NPC-пилотов есть такие параметры, как мораль и агрессия, которые как-то сказываются на их поведении. Эти команды их и считывают.

set notoriety of <Var/Race> -> <Var/Race> to <Var/Number> points
<RetVar/IF> find debris: sector=<Var/Sector> resource=<Var/Ware> min yield=<Var/Number> flags=<Var/Number> refobj=<Value> num=<Var/Number> max distance=<Var/Number> refpos=<Var/Array>

Работа с объектами / информация об оружии :
<RetVar> get power generator of ship/station type <Var/Ware>
<RetVar> = <RefObj> get power generator
<RetVar> = get range of laser <Var/Ware>
<RetVar> = get shield damage of laser <Var/Ware>
<RetVar> = get hull damage of laser <Var/Ware>
<RetVar/IF> get ammunition of laser <Var/Ware>
<RetVar> = get missile range of <Var/Ware>
<RetVar> = get missile max damage of <Var/Ware>

Команды секторов и галактики :

<RetVar> = <Var/Warpgate> get gate destination: return sector=<Var/Number>
Возвращает назначение врат <Var/Warpgate>, при <Var/Number> = 1 возвращается сектор куда ведут врата, при 0 - врата прибытия. (Andrei[<>Ace])

<RetVar> = <Var/Warpgate> get gate id
Возвращает число, соответствующее ID врат, заданному при их постройке. Стандартные значения у Эгософта: 0 - северные врата, 1 - южные врата, 2 - западные врата, 3 - восточные врата. Однако игрок может задавать и свои ID в процессе постройки врат.

<RetVar/IF> <RefObj> get owned ships: class/type=<Value>
<RetVar> = get ship array: of race <Var/Race> class/type=<Value>
<RetVar> = get station array: of race <Var/Race> class/type=<Value>
<RetVar/IF> get next gate on route from &amp;lt;Var/Sector> to <Var/Sector>
<RetVar> = get random NPC
<RetVar> = <RefObj> get NPC personal ship
<RefObj> NPC send voice message: id=<Var/Number>
<RefObj> release NPC personal ship
<RefObj> release NPC
<RetVar> = <RefObj> NPC wants to bail
<RetVar> = <RefObj> NPC is aggressive
<RefObj> spawn NPC personal ship: rank=<Var/Number>
<RefObj> spawn NPC fleet: rank=<Var/Number>
<RetVar> = <RefObj> get NPC fleet

<RetVar> = <RefObj> get asteroid yield
Возвращает содержание минералов в астероиде. А также в обломках астероидов - Andrei[<>Ace].

<RetVar> = find a random sector: startsector=<Var/Sector>, jumps=<Var/Number>, owner=<Var/Race>, security level=<Var/Number>

<RetVar> = <RefObj> get resource waretype of asteroid
Возвращает тип товара, который может добываться из астероида.

<RetVar/IF> <RefObj> has collectible rocks

===== Итого 142 новые команды ====

Примечание: нумерация существовавших ранее команд приведена согласно учебнику DragonP.
4.071 <RetVar/IF> = <RefObj> -> add big ship <dock>
Сменила имя на <RetVar/IF> = <RefObj> add big ship <Var/Ship>

5.1.015 <ship> switch laser in turret <turretid> to <gunid> to <gun>
Сменила имя на
<RefObj> switch laser in turret <Var/Number> gun <Var/Number> to <Var/Ware>

6.071 <RefObj> station trade and production tasks: on=<Var/Number>
Сменила имя на
<RefObj> factory production task: on=<Var/Number>

6.023 <RetVar/IF> <RefObj> get max. missile type that can be installed
Сменила имя на
<RetVar/IF> <RefObj> get most destructive missile type that can be installed

Пропал ряд команд
6.079 set position of sector object <Var/Number>: x=<Var/Number> y=<Var/Number> z=<Var/Number>
6.080 set safe positon of sector object <Var/Number>: x=<Var/Number> y=<Var/Number> z=<Var/Number>
6.081 set rotation of sector object <Var/Number>: x=<Var/Number> y=<Var/Number> z=<Var/Number>
6.082 <RetVar> = create sector object: maintype=<Var/Number> subtype=<Var/Number>
6.083 free sector object <Var/Number>
6.084 kill sector object <Var/Number>: reason=<Var/Number>, killer sector object=<Var/Number>
6.085 start sector object <Var/Number> in space <Var/Number>
6.115 <RefObj> -> set serial name of station to <Var/Station Serial>
_________________
Не спешите меня.
    Posted: 16:18 07-02-2006   
Orfeus
 111 EGP

: 23
Posts: 150
Location: Пенза
Joined: 30 Dec 2005
Как нетрудно догадаться:
<RetVar/IF> <RefObj> uses ware <Var/Ware> as product
Эта и 2 следующие команды (в ScE) являются логическими на вхождение товара в таблицу продутов( которые станция прозиводит), первичных ресурсов и вторичных ресурсов соответственно. Действительно нужна для сортировки товаров станции... но есть немного более другие методы Подмигиваю

<RetVar> = <RefObj> get production cycle time: account for secondary resources=<Var/Number>
Эта выдает время основного рабочего цикла станции в секундах, первый аргумент - станция, второй - продукт, производимый станцией

<RetVar> = <RefObj> get remaining production cycle time
Выдает время в секундах, оставшееся до окончания текущего основного рабочего цикла фабрики/станции

<RetVar> = <RefObj> get number of products per cycle
Выдает количество продукта, производимого за цикл

<RetVar> = <RefObj> get number of resources per cycle for ware <Var/Ware>
Выдает количество потребляемых ресурсов за цикл для первичных ресурсов и !пока абстрактно флуд для вторичных - на самом деле оно имеет значение, но более глубоко спрятанное Подмигиваю

<RetVar> = <RefObj> get production status: as percentage=<Var/Number>
Выдает процент производства (законченности) текущего цикла

<RefObj> factory production task: on=<Var/Number>
Команда для запуска в работу только что созданной станции, аргументы - станция и второй должен быть 1

<RetVar/IF> <RefObj> get products
Выдает массив продуктов данной станции Подмигиваю
_________________
Время - это деньги, которых у нас нет...orfeus aka hover2006 - не пужацца если что ;)
    Posted: 16:38 07-02-2006   
Варсик
 538 EGP


: 117
Posts: 4008
Location: Москва
Joined: 22 Dec 2002
Krom wrote:
Приведу его здесь, а вы вместе со старшими канала скажете, надо оно сейчас или нет. Если надо - список будет постепено наполняться, если нет - тема вскоре умрёт.

Надо - надо... Тока флудить не надо, а остальное - надо.
_________________
WARNING: By reading this post you accept that this post is genius.
    Posted: 20:54 07-02-2006   
Krom
 455 EGP


Рейтинг канала: 1(3)
: 160
Posts: 1983
Location: Горы Урала
Joined: 19 Jul 2005
hover2006:
Я проверил группу команд "Торговые команды/для станций". Есть значительные расхождения с тем, что ты писал, поэтому вопрос - ты просто выдал свои соображения или тестил их у себя?

P.S> Забыл сказать, DragonP благословил затею Хы...
_________________
Не спешите меня.
    Posted: 17:17 09-02-2006   
Orfeus
 111 EGP

: 23
Posts: 150
Location: Пенза
Joined: 30 Dec 2005
Krom wrote:
hover2006:
Я проверил группу команд "Торговые команды/для станций". Есть значительные расхождения с тем, что ты писал, поэтому вопрос - ты просто выдал свои соображения или тестил их у себя?

Вообщето сказать тестил - ничего не сказать ... Я на основе их тест для замера времени списания вторресов писал...С какими конкеретно и какие расхождения? У мну выдавали в точности то, что написал...Я че не проверял не пишу - люди ж читають, вдруг чего из-за мну накроется Гы-гы

ЗЫ Хотя закралось у мну подозрение - я это все проверял на неписевых станциях, на фабах игрока не уверен...

Есть догадка поводу расхождения для команды
<RetVar> = <RefObj> get production cycle time: account for secondary resources=<Var/Number>
для неписевых стаций. Я тож на нее обратил внимание, но потом просто забил. После раскопок обжей вылезла интересная вешь - если у неписей есть вторресы, похож меняется цикл, соотв. если во втором аргументе истина - вроде бы как время цикла при наличии вторресов и при ложь - время цикла без вторресов...попробую поиграться с 1 /2 /3 ресами на станции, возможно каждый из них отдельно влияет на цикл. У игрока естессно нет вторресов и соотв. не меняется цикл Подмигиваю
По поводу
<RetVar> = <RefObj> get number of resources per cycle for ware <Var/Ware>
Она для вторресов не всегда выдает 0, есть подозрение что в ней копится количество вторресов к списанию пока не достигнет кванта, возможно прописывается количество "приговоренных" вторресов к списаню в ожидании прохождения времени - в динамике не экспериментировал Подмигиваю
По поводу команды
<RetVar/IF> <RefObj> get products
Я ее попробовал, она глючила и работала нестабильно, т.е. для каких то станций выдавала продукты, для каких то нет, в результате огранилчился испльзованием получения всех товаров и сортировкой по группам. Думал у мну игра глючит...ан нет, не только у мну

ЗЗЫ Если что, не бейте сильно, скриптер я без году неделя, а вопросы приходится решать на ходу...хотел помочь тем что знаю...в следующий раз попробую точнее и полнее Подмигиваю
ЗЗЗЫ За производимым в данное время можно следить по оставшемуся времени в секундах, завершенности в процентах, ну и знания времени цикла для отдельных ресов (они же ведь чаще всего не совпадають). Если совпадають - х.з. Тем более для комплексов игрока - не дорос я исче - делаю инфу для биде, играть некогда ...
_________________
Время - это деньги, которых у нас нет...orfeus aka hover2006 - не пужацца если что ;)
    Posted: 20:11 09-02-2006   
Krom
 455 EGP


Рейтинг канала: 1(3)
: 160
Posts: 1983
Location: Горы Урала
Joined: 19 Jul 2005
hover2006 wrote:
Вообщето сказать тестил - ничего не сказать...

Гы-гы Ясно, тогда давай сравнивать. Я сидел в Судьбе Ролка, там под рукой была моя солярка (фабрика игрока), плюс созданная скриптом копия комплекс-завода лёгких щитов (фабрика игрока, >1 продукта), неписёвые фабрики с числом продуктов 1-2, док оборудования и торговка. Тестил, соответственно, на всём что было под рукой - по одной штуке фаб каждого типа (может, этого мало - да конечно мало, чего я!). Впрочем, док оборудования и торговку проверял редко, потому как с ними не всё ясно. Насколько я знаю, ТС является доком (maintype=5!), а док - станцией (maintype=6!) Совсем запутался... (Надо передвинуться в Аргон Прайм, там ещё верфь есть...)
hover2006 wrote:
Есть догадка поводу расхождения для команды
<RetVar> = <RefObj> get production cycle time: account for secondary resources=<Var/Number>
для неписевых стаций. Я тож на нее обратил внимание, но потом просто забил. После раскопок обжей вылезла интересная вешь - если у неписей есть вторресы, похож меняется цикл, соотв. если во втором аргументе истина - вроде бы как время цикла при наличии вторресов и при ложь - время цикла без вторресов...

Да, есть такое - уменьшается. Ещё бы увязать с какими-нибудь известными переменными время циклов на неписёвых фабриках - например, relvalue ресурсов, объём складов станции, ещё чего-нибудь... Ну да в обжах формула должна быть прошита. Если получится - ажур будет полнейший Улыбка
hover2006 wrote:
<RetVar> = <RefObj> get number of resources per cycle for ware <Var/Ware>
Она для вторресов не всегда выдает 0

Вот он, недостаток статистики... Тогда вопрос - а в каких пределах меняется результат, иначе говоря, сколько вторресов улетает за цикл работы НПЦ-фабрики?
hover2006 wrote:
<RetVar/IF> <RefObj> get products
Я ее попробовал, она глючила и работала нестабильно, т.е. для каких то станций выдавала продукты, для каких то нет, в результате огранилчился испльзованием получения всех товаров и сортировкой по группам. Думал у мну игра глючит...ан нет, не только у мну

Оч-чень любопытно. А отделить мух от котлет не пробовал? В смысле, есть какие-нибудь общие признаки у фаб, на которых команда не проходит? Может, имеет смысл напасть с этой траблой на Эгософт?
hover2006 wrote:
ЗЗЗЫ За производимым в данное время можно следить по оставшемуся времени в секундах, завершенности в процентах, ну и знания времени цикла для отдельных ресов (они же ведь чаще всего не совпадають). Если совпадають - х.з.

Вот-вот... Расстроен Недотумкали немцы этот нюанс.

P.S> Ладно, на выходных ещё разок прогоню эту группу с расширенной статистикой.
_________________
Не спешите меня.
    Posted: 11:48 10-02-2006   
Sten
 200 EGP


: 30
Posts: 150
Location: Екатеринбург
Joined: 12 Dec 2003
По командам:
<RetVar> register hotkey <Var/String> to call script <Script Name>
и
unregister hotkey <Var/Number>
могу предположить следующее что то число которое вернет регистрирующас команда, надо вводить аргументом при разрегистрации клавиши, как будет время, проверю.
    Posted: 21:54 10-02-2006   
Orfeus
 111 EGP

: 23
Posts: 150
Location: Пенза
Joined: 30 Dec 2005
Krom wrote:

Ясно, тогда давай сравнивать. Я сидел в Судьбе Ролка, там под рукой была моя солярка (фабрика игрока), плюс созданная скриптом копия комплекс-завода лёгких щитов (фабрика игрока, >1 продукта), неписёвые фабрики с числом продуктов 1-2, док оборудования и торговка. Тестил, соответственно, на всём что было под рукой - по одной штуке фаб каждого типа (может, этого мало - да конечно мало, чего я!). Впрочем, док оборудования и торговку проверял редко, потому как с ними не всё ясно. Насколько я знаю, ТС является доком (maintype=5!), а док - станцией (maintype=6!) (Надо передвинуться в Аргон Прайм, там ещё верфь есть...)

Сравнивать туть не чего - сидел Kingdom End, тестил на всем что мне было интересно с точки зрения потребы ресов и вторресов (соотв. не верфи, не доки оборудования и не торгстанции - тока фабы мне интересны были)

По поводу команды:
<RetVar> = <RefObj> get production cycle time: account for secondary resources=<Var/Number>
Потратил 2-е суток на разборы полетов. Могу предоставить скрипт, если что (чтоб не пинали). Результаты следующие:
-eсли во втором параметре False - выдается теоретическое значение цикла в секундах (для NPC и игрока оно часто разное - не забывайте);
-если во втором параметре True - выдается текущая продолжительность цикла (для игрока она всегда равна первой) с поправкой на влияние вторресов.
Вторресы влияють следующим образом: списываются квантами, независимо друг от друга и процесса производства. После списания любого вторреса, начиная со следующего цикла, у станции меняется эффективность (время цикла, но не потребление ресов) на случайную величину до 15 % (минус 15%, т.е. если цикл 60, минимум он будет 51). Затем влияние на эффективность в течение нескольких циклов нивелируется. Скорость снижения эффективности до номинала так же непостоянна - может быть 1 цикл, может быть 3. Если будет одновременно списано несколько вторресов, то эффективность более чем на 15 процентов все равное не увеличится, т.е. 15 % максимум. Как понятно из описания, чем больше видов вторресов на станции, тем чаще будет случаться увеличение эффективности -> тем выше средняя эффективность. Но в любом случае, даже если 4 вторреса, средний цикл примерно на 5-6% ниже стандартного, т.е. не сильно. Все измерения и расчеты производились на примере Split Chelts Aquarium - соотв. на других станциях проценты могут отличаться. Если такое случиться - отпишусь. Хотя скорее всего коэффицинты прописаны в обже, а значит влияния не будеть

Еще одно наблюдение из разбора обжей - циклы проверки необходимости завершения циклов, списания вторресов и прочего происходит в методе TFACTORY.Trade - он цикличен по сути и время задержки между циклами случайно - от 1 до 3000 мс, соотвественно циклы в среднем длиннее их нормального значения на 1,5 секунды - половина от 3 секунд. Измерения на практике попутно с разборами вторресов через внутреннее время игры. С реальным временем вообще соотносится когда как... Подмигиваю. Т.е. для фаб с циклом 60 - это прибавка 2,5%, для большего цикла - она уже не существенна.

По поводу команды
<RetVar> = <RefObj> get number of resources per cycle for ware <Var/Ware>
Да, ее значение не всегда нулевое, там бывают числа не превышающие кванта списания вторреса. Более точную их интерпретацию - в ближайшее время после окончательного разбора обжей.
Krom wrote:

Оч-чень любопытно. А отделить мух от котлет не пробовал? В смысле, есть какие-нибудь общие признаки у фаб, на которых команда не проходит? Может, имеет смысл напасть с этой траблой на Эгософт?

Отделить не пробовал - вчера поставил с нуля 2003 винду и игру на нее - таких глюков уже не было - так что возможно глюк моей винды...

ЗЫ По результатам разобра обжей и вывода алгоритма попробую вывести подробные формулы для расчетов всех параметров...
_________________
Время - это деньги, которых у нас нет...orfeus aka hover2006 - не пужацца если что ;)
    Posted: 12:04 13-02-2006   
Krom
 455 EGP


Рейтинг канала: 1(3)
: 160
Posts: 1983
Location: Горы Урала
Joined: 19 Jul 2005
Перешарил команды ещё раз - ну, это я отписал выше, в сборнике. Жутко повеселил get warearray Улыбка Продолжение следует.
_________________
Не спешите меня.
    Posted: 14:43 16-02-2006   
Andrei [<>Ace]
 303 EGP


Рейтинг канала: 6(416)
: 108
Posts: 765
Location: Беларусь, Салiгорск
Joined: 29 Mar 2006
Quote:
<RetVar/IF> find station: product <Var/Ware> with best price depend on jumps: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>
<RetVar/IF> find station: resource <Var/Ware> with best price depend on jumps: min.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>
<RetVar/IF> find station sells: resource <Var/Ware> with best price depend on jumps: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>
?Возможно, эти команды совмещают функциональность предыдущих команд поиска товаров во вселенной.

Команды для поиска продающих/покупающих товар станций известных игроку.
Quote:
<RetVar> = <Var/Warpgate> get gate destination: return sector=<Var/Number>

Возвращает назначение врат <Var/Warpgate>, при <Var/Number> - 1 сектор куда ведут врата, при 0 -- врата прибытия.

<RetVar> = <RefObj> is known
Проверяет известен ли объект игроку, возвращает 0 или 1

<RetVar> = <RefObj> get asteroid yield
возвращает количество продукта в астероиде/обломке
    Posted: 16:10 03-04-2006   
l0m
 340 EGP


: 87
Posts: 1062

Joined: 18 Mar 2006
sergej4341 wrote:
не скажу с какого патча она появилась



Кажется мне, что она ещё в X2 была... Я начинал с 1.2, там её уже использовал. И в X2, вроде, юзал. хз
    Posted: 18:13 04-06-2006   
Sten
 200 EGP


: 30
Posts: 150
Location: Екатеринбург
Joined: 12 Dec 2003
Могу пояснить по командам:
<RetVar> register hotkey <Var/String> to call script <Script Name>
и
unregister hotkey <Var/Number>

С помощью первой производится регистрация скрипта в меню Опции\Управление\Интерфейс\Внешние. Т.е после выполнения этой команды можно назначить горячую клавишу скрипту. В меню название скрипта будет тем же что вы введете в <Var/String>. При этом возвращается четырехзначный номер. Данный номер рекомендую запомнить и записать в глобальную переменную, ибо:
1. Если данная команда юзается в init или setup.plugin скриптах, то она будет регить скрипт при каждом запуске игры, т.о. через 10 запусках меню будет представлять собой не очень эстетичное зрелище.
Чтобы этого избежать рекомендую выполнить следеющую последовательность:
$a= 'globalname'
$b= get global varitable $a
skip if not b==null
$b = register hotkey 'My script' to call script same.script
set global varitable $a value $b
2. Если юзер захочет убрать скрипт, то потребуется специальный init или setup.plugin скрипт с командой unregister hotkey <Var/Number>, в качестве аргумента нужно записывать число полученное при регистрации. Иначе из меню Опции\Управление\Интерфейс\Внешние регу не удалить.

И еще одно замечание: скрипты пускаемые по зарегистрированным клавищам запускаются глобально, а значит указателя THIS в них быть НЕ ДОЛЖНО.
    Posted: 20:52 04-06-2006   
Krom
 455 EGP


Рейтинг канала: 1(3)
: 160
Posts: 1983
Location: Горы Урала
Joined: 19 Jul 2005
Окей, свёл всю собранную информацию в первый пост и добавил пару своих находок. Пока всё, продолжение следует Гы-гы

Чуток урезал твои "=====", а то страница выезжала за пределы экрана на 1024х768 Улыбка
Executor

_________________
Не спешите меня.
    Posted: 21:04 11-06-2006   
Andrei [<>Ace]
 303 EGP


Рейтинг канала: 6(416)
: 108
Posts: 765
Location: Беларусь, Салiгорск
Joined: 29 Mar 2006
Навигационные команды :
<RetVar/IF> <RefObj> get current action
возвращает текущее действие объекта <RefObj>

Торговые команды / для кораблей :
<RetVar/IF> <RefObj> get tradeable ware array from ship
возвращает массив товаров находящихся в грузовом отсеке корабля, но не являются установленным оборудованием.

Работа с объектами :
<RetVar> create debris: type=<Var/Number> addto=<Var/Sector> resource=<Var/Number> yield=<Var/Number> x=<Var/Number> y=<Var/Number> z=<Var/Number>
создоет объект обломок астероида(debris) типа?, в секторе, ресурса (0,1,2) содержание ресурса в%, по координатам x, y, z.

<RetVar/IF> <RefObj> is asteroid scanned
проверяет был ли сканирован астероид. 1-да, 0-нет.

<RefObj> set asteroid scanned to <Var/Number>
устанавливает значение для астероида -- был сканирован. Информация о содержащемся в астероиде ресурсе будет отражаться на карте.

<RetVar> = <RefObj> get flying ware count
возвращает количество единиц товара в лет.контейнере

<RetVar/IF> find debris: sector=<Var/Sector> resource=<Var/Ware> min yield=<Var/Number> flags=<Var/Number> refobj=<Value> num=<Var/Number> max distance=<Var/Number> refpos=<Var/Array>
возвращает обломок или массив обломков в секторе, содержащем ресурс, минимальное содержание ресурса, флаг поиска, от объекта refobj или позиции refpos, в количестве не менее, дистанция не более.

Команды секторов и галактики :
<RetVar/IF> <RefObj> has collectible rocks
проверяет является ли подбираемым обломок.
    Posted: 16:29 12-06-2006   
unihorn
 220 EGP


: 60
Posts: 464
Location: Москва
Joined: 26 Oct 2004
Krom wrote:
<RetVar/IF> find station: product <Var/Ware> with best price depend on jumps: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>
<RetVar/IF> find station: resource <Var/Ware> with best price depend on jumps: min.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>
<RetVar/IF> find station sells: resource <Var/Ware> with best price depend on jumps: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>
Команды для поиска продающих/покупающих товар станций, но только среди тех, которые известны игроку. (Andrei[<>Ace])


Еще, дополнительное уточнение. Все торгово-посковые команды, в том числе и старые (из X2, такие как <RetVar/IF> find station: product <product> with min. jumps: max.price=<price>, amount=<amount>, max.jumps=<jumps>, startsector=<sector>, trader=<trader>, к примеру), теперь работают только с известными игроку станциями.

И вот еще, "старая" команда move to position, теперь работает только у ИИ кораблей, на плеершип не действует...
_________________
Мир ищу, где волки агнцам служат,
И нету слуг верней
Где слезы никого не душат
Не ведают смертей
    Posted: 14:20 29-06-2006   
Andrei [<>Ace]
 303 EGP


Рейтинг канала: 6(416)
: 108
Posts: 765
Location: Беларусь, Салiгорск
Joined: 29 Mar 2006
unihorn wrote:
И вот еще, "старая" команда move to position, теперь работает только у ИИ кораблей, на плеершип не действует...


Действует без проблем.
    Posted: 15:59 29-06-2006   
Krom
 455 EGP


Рейтинг канала: 1(3)
: 160
Posts: 1983
Location: Горы Урала
Joined: 19 Jul 2005
unihorn wrote:
Все торгово-посковые команды, в том числе и старые... теперь работают только с известными игроку станциями

А как же тогда работают свободные торговцы там, где игрок не бывал? Вау! Они же юзают именно эти команды!
_________________
Не спешите меня.
    Posted: 21:46 29-06-2006   
unihorn
 220 EGP


: 60
Posts: 464
Location: Москва
Joined: 26 Oct 2004
По крайней мере, при юзании плеером (при запуске (например из консоли) от него (от неписей не запускал)), они работают, только с известными (можеш провести проверку, подобную той, что провел Andrei [<>Ace], коли не вериш).

Проблема (по крайней мере для игрока), решается с помощью установки известности станции (коли станция неизвестна) в плюс, проверки на товар, и последующей установкой известности в минус (если станция известна, не производить описанную операцию)).
_________________
Мир ищу, где волки агнцам служат,
И нету слуг верней
Где слезы никого не душат
Не ведают смертей
    Posted: 23:07 29-06-2006   
Krom
 455 EGP


Рейтинг канала: 1(3)
: 160
Posts: 1983
Location: Горы Урала
Joined: 19 Jul 2005
unihorn wrote:
можеш провести проверку, подобную той, что провел Andrei [<>Ace], коли не вериш

Проверил. Текст скрипта:
Code:

$s = $PLAYERSHIP$     - Боронский Кальмар, М4
$t = find station: product БоФу with min. jumps: max.price=999999, amount=1, max.jumps=10, startsector=Конец Королевства, trader=$s
$t = find station: product БоФу with best price: max.price=999999, amount=1, max.jumps=10, startsector=Конец Королевства, trader=$s

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

Оба раза результатом стала Лаборатория БоФу L гамма в Стремлении Ролка, где я вообще ни разу не бывал, и на карте сектора там станций нет. Только врата и астероиды, которые я когда-то специально делал видимыми с помощью скрипта. Вывод - предыдущий вывод ошибочен Гы-гы
unihorn wrote:
И вот еще, "старая" команда move to position, теперь работает только у ИИ кораблей, на плеершип не действует...

Также подтверждаю вывод Andrei [<>Ace] - всё 100% работает. Проверено, насекомых нет.
_________________
Не спешите меня.
    Posted: 08:51 30-06-2006   
Andrei [<>Ace]
 303 EGP


Рейтинг канала: 6(416)
: 108
Posts: 765
Location: Беларусь, Салiгорск
Joined: 29 Mar 2006
unihorn wrote:
можеш провести проверку, подобную той, что провел Andrei [<>Ace], коли не вериш


Провел свое, независимое, исследование.
Начал новую игру "Своя игра"
Текст скрипта:
Code:
001   $st =  find station: product Батареи with best price:  max.price=null, amount=null, max.jumps=10, startsector=[SECTOR], trader=$x
002   write to player logbook $st
003   $st =  find station: product Батареи with best price depend on jumps:  max.price=null, amount=null, max.jumps=10, startsector=[SECTOR], trader=$x
004   write to player logbook $st
005   $st = [THIS] -> find station: product Батареи with best price:  max.price=null, amount=null, max.jumps=10, startsector=[SECTOR], trader=$x
006   write to player logbook $st
007   return null


Получается, что доля правды есть у всех.

Все зависит от того, что подставить в trader=$x
Но учитывая последнее исследование Krom придется поработать еще.

Дело вот в чем.
Если в trader=$x вместо $х подставить null, то все команды найдут по станции, независимо известны они игроку или нет, необязательно все одну и ту же.
Если THIS то все выдадут null

Krom wrote:
Кальмар гарантированно может стыковаться к любой станции, так что влиянием класса корабля-трейдера я пренебрегаю.

trader= проверяет не класс корабля и не сможет ли он пристыковаться, а возможна ли торговля с кораблем. Помоему так всегда было.
    Posted: 09:44 30-06-2006   
Канал X3: Reunion -> Модовый и скриптовый отсек X3: Reunion: «Новые скриптовые команды. Угадайка.»
Go to page: 1, 2  Next | All pages
  
Display posts from previous: 
View previous topic | View next topic |
К списку каналов | Наверх страницы
Цитата не в тему: Нельзя всем дать все. Потому что всех много, а всего мало. (правда о жизни от BuH'a)

  » Новые скриптовые команды. Угадайка. |
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18