Oolite
Имя
Пароль
 Запомнить
  Re: создание OXP
Не в сети
---Elite---
Аватар пользователя

Зарегистрирован: 15.05.11
Сообщений: 1531
Walker:
А наши доблестные OXP-писцы ставят себе задачу писать ОХР на выполнение миссий?

За РСЛ ручаться не буду - они привыкли периодически устраивать сюрпризы, потрясая Оониверсум своими революционными преобразованиями.
Наши песцы из Stranger's World пока занимаются обустройством подмостков, на которых будет вершиться интрига. Да и блох из предыдущих поделок надо вычесывать.
Так что как минимум до Нового года буду занят текущими проектами. Но в принципе задумки на будущее есть.


  Re: создание OXP
Не в сети
---Elite---
Аватар пользователя

Зарегистрирован: 02.12.12
Сообщений: 795
vasig:
...Заправившись на орбитальной станции, я стартовал и, как всегда, взял курс прямо от станции, чтобы поскорее достичь той точки из которой можно будет осуществить прыжок. Цель моего полета находилась на расстоянии 6.8 LY! К тому же на этой станции я не смог (ни за какие деньги) пополнить запасные топливные баки. То есть лишнего топлива не было. Я посматривал одновременно на индикатор гравитации и на индикатор расхода топлива. Вот уже и станция исчезла с поля радара, а прыгать нельзя! Через несколько минут хладнокровный голос компьютера сообщил, что топлива на прыжок недостаточно!


Простите, vasig, но что-то я не пойму ситуацию: Вы на Топливном инжекторе, что ли, оттягивались от станции - с расходом топлива?

Обычно, когда надо прыгнуть в далёкую звёздную систему, то от станции оттягиваются на обычном двигателе, стараясь не расходовать ни капли драгоценного топлива. Как же Вы так легкомысленно поступили, оттягиваясь на Топливном инжекторе? :)


Walker:
...А какое качество графики для показываемых объектов и где появляется изображение? Можно скриншот?


Простите, Walker, что отвечаю не сразу - занят был.

Ситуация с картинками/фотографиями такая. Когда-то давно я научился вставлять картинки в игру в определённых игровых ситуациях. Опытным путём установил наиболее приемлемый для своего монитора и окна (я играю в Oolite не на полном экране, а в окне - мне так удобнее) размер картинки - 1420 x 960 пикселей в формате .PNG

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

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

Так вот, в пакете "Tch_Equipment_Modern_Advanced_Compass.oxp" картинки появляются в следующих игровых ситуациях:

1. Когда корабль выныривает поблизости от маяка гипер-перехода. Если поблизости от этого маяка дощёлкать Компасом до его маркера "W" на Компасе, то появится картинка советского художника-фантаста Соколова "Радионавигационный маяк". Я её туда поставил потому, что просто поразительно, как все маяки в игре похожи на конструкцию маяка в этой картинке. :)

2. Если корабль попадает в астероидное облако, то захватив в прицел любой астероид, можно нащёлкать Компасом до маркера "цель" (кружочек с перекрестьем). При этом появится картинка - если это Астероид Отшельников, то фантастическая картинка "Станции на астероиде", а если это обычный астероид - то фотографии настоящих астероидов или картинки астероидов в космосе.

Я не буду здесь приводить скриншот, просто зайдите в этом пакете в каталог "Images" и посмотрите любым просмотрщиком картинок что там находится. Вот это и будет появляться в игре. :)


Walker:
А наши доблестные OXP-писцы ставят себе задачу писать ОХР на выполнение миссий?


В дальних планах стоит такая задумка. :) Но, пока "декорации" не готовы - нет смысла их писать. Хотя уже очень много сделано для подготовки к писанию миссий - отработаны некоторые игровые моменты, и получается неплохо для нашей "сельской местности". :)


  Re: создание OXP
Не в сети
---Elite---
Аватар пользователя

Зарегистрирован: 01.10.12
Сообщений: 747
Откуда: Novosibirsk
to Tch

Это "Gravity Well" так работает, что расход топлива есть всегда. К тому же я никогда не делаю переход пока не покину зону станции, даже если уже можно. Но это так - личные принципы. А в данном случае это конечно случайность, что из зоны притяжения планеты попал в зону притяжения Луны :).


  Re: создание OXP
Не в сети
---Elite---
Аватар пользователя

Зарегистрирован: 15.05.11
Сообщений: 1531
To vasig

Расход топлива в моих пакетах идет не в Gravity Well, а в Collapsible Shields. Но в принципе это идея на будущее - слить оба пакета в один и увеличить расход топлива в ближних окрестностях небесного тела. Я над этим подумаю.


  Re: создание OXP
Не в сети
---Elite---
Аватар пользователя

Зарегистрирован: 01.10.12
Сообщений: 747
Откуда: Novosibirsk
А я только хотел извиниться за ошибку! :)


  Re: создание OXP
Не в сети
---Elite---
Аватар пользователя

Зарегистрирован: 02.12.12
Сообщений: 795
stranger:
...Расход топлива в моих пакетах идет не в Gravity Well, а в Collapsible Shields. Но в принципе это идея на будущее - слить оба пакета в один и увеличить расход топлива в ближних окрестностях небесного тела. Я над этим подумаю.

Но зачем?!!! :o stranger, в чём соль этого игрового момента? С какой целью и по каким соображениям сделан расход топлива в окрестностях планетоидов?


  Re: создание OXP
Не в сети
Deadly

Зарегистрирован: 14.08.13
Сообщений: 281
Откуда: Киев
To stranger

Не надо соединять и усложнять без нужды... Пусть излишний расход топлива будет отдельным ОХР - на любителя.

Кстати, меня волнует, а почему объем двигателя только на 7 св.л.? Почему нет на 10,12,15 ... 25? Что за число такое загадочное?


  Re: создание OXP
Не в сети
---Elite---
Аватар пользователя

Зарегистрирован: 15.05.11
Сообщений: 1531
Tch:
stranger:
...Расход топлива в моих пакетах идет не в Gravity Well, а в Collapsible Shields. Но в принципе это идея на будущее - слить оба пакета в один и увеличить расход топлива в ближних окрестностях небесного тела. Я над этим подумаю.

Но зачем?!!! :o stranger, в чём соль этого игрового момента? С какой целью и по каким соображениям сделан расход топлива в окрестностях планетоидов?

Элементарно, Ватсон.
Расход топлива в пакете Collapsible Shields идет на поддержание работы силовой установки, которая питает силовые щиты, энергобанки и прочие корабельные системы. Темп расхода топлива постоянный и равен 2 LY/час. При этом темпе одного ПТБ хватает на полтора часа патрулирования в системе. Время путешествия от входного маяка до станции, если не слишком отвлекаться по пути, обычно не превышает получаса. 1 LY топлива даже при моей цене 5 Cr/LY - право, вполне приемлемые затраты на путешествие в пределах системы.
Дополнительный расход топлива в окрестностях массивных небесных тел я пока лишь планирую ввести. Это топливо будет расходоваться на работу компенсатора гравитации.
Расход топлива стимулирует геймера планировать свою активность, чтобы вовремя вернуться к станции. Это добавляет игровую реальность. При неисчерпаемом запасе топлива активность геймера ограничена лишь его усидчивостью, емкостью мочевого пузыря и терпением изнывающей в постели жены.
Аналогично Gravity Well симулирует влияние гравитации в окрестностях массивных небесных тел, что вынуждает геймера планировать прыжок лишь на безопасной высоте. Гравитация в моем Оониверсуме не проявляется непосредственно, но таки игрок вынужден считаться с ее побочными эффектами. Я считаю это удачной реализацией в пределах существующего пространства решений (ну нет возможности нормально симулировать гравитацию через OXP!).
Commander vasig регулярно использует мои пакеты Collapsible Shields и Gravity Well - и успешно выполняет эскортные миссии.

Walker:
Не надо соединять и усложнять без нужды... Пусть излишний расход топлива будет отдельным ОХР - на любителя.

Дык это и есть отдельный OXP на любителя.
Collapsible Shields и Gravity Well - пакеты из "самурайского" набора, оба пакета изменяют игровую механику в сторону введения дополнительных ограничений. Их вполне логично объединить. В Collapsible Shields отлажена процедура расхода топлива, в Gravity Well обработка событий в ближних окрестностях небесных тел. Гибридный пакет потребует лишь небольшой модификации в коде.
Максимальная дальность прыжка 7 LY задана в теле программы. Это опять же удачное игровое решение, при котором создаются карты с относительно изолированными скоплениями систем, соединенных торговыми путями (порой через бутылочное горло из одной системы). Увеличение дальности прыжка приведет к тому, что эта интересная топология разрушится и до любой системы можно будет добраться напрямую, как по ровной степи.
К счастью, этот параметр задан хардкорно и русские коллеги из РСЛ вряд ли смогут смастерить супердвигатель на 25 LY в рамках OXP.


  Re: создание OXP
Не в сети
---Elite---
Аватар пользователя

Зарегистрирован: 02.12.12
Сообщений: 795
stranger:
...Расход топлива в пакете Collapsible Shields идет на поддержание работы силовой установки, которая питает силовые щиты, энергобанки и прочие корабельные системы...
...Дополнительный расход топлива в окрестностях массивных небесных тел я пока лишь планирую ввести. Это топливо будет расходоваться на работу компенсатора гравитации...
...Гравитация в моем Оониверсуме не проявляется непосредственно, но таки игрок вынужден считаться с ее побочными эффектами. Я считаю это удачной реализацией в пределах существующего пространства решений (ну нет возможности нормально симулировать гравитацию через OXP!)...

Вон оно как задумано, теперь понятна фишка... :) Ну, что же - РСЛ всегда одобрительно относились к любым попыткам любых изменений игровой среды. Если кого-то устраивают такие условия - значит, эта эволюционная ветка развития Игры вполне жизнеспособна. :)

stranger:
...К счастью, этот параметр задан хардкорно и русские коллеги из РСЛ вряд ли смогут смастерить супердвигатель на 25 LY в рамках OXP.

Почти все изобретения РСЛ сделаны как побочный продукт исследований технических возможностей программной среды Oolite. Поэтому - как знать, какие ещё открытия нас ожидают впереди? :)


  Re: создание OXP
Не в сети
---Elite---
Аватар пользователя

Зарегистрирован: 01.10.12
Сообщений: 747
Откуда: Novosibirsk
to Tch

Владимир Петрович! У меня такой вопрос: как сделать, чтобы вероятность появления нужного мне корабля была 100%. На сколько я понимаю это зависит от функции Math.random
В моем конкретном случае этот кусок кода выглядит так:
Код:
this.shipWillExitWitchspace = function(){
   var myRND = Math.random();
   /* if (system.isInterstellarSpace || myRND <= 0.05) return;
   if (system.countShipsWithRole(this.role1) > 0) return;
   if (system.population < 25 || system.government <= 2) return; */
   system.addShipsToRoute(this.role1, 1, Math.random(), "wp");

Первые три строчки я отключил, так как они по-моему и определяют все условия его появления. Но все равно корабль не появляется :(. Может нужно ввести какой-нибудь дополнительный параметр? Правильно ли я мыслю или иду совершенно в неправильном направлении?
В Latest.log никаких ошибок, связанных с этим ОХР, нет! Влияние других ОХР я тоже (на время проверки) исключил.


  Re: создание OXP
Не в сети
---Elite---
Аватар пользователя

Зарегистрирован: 02.12.12
Сообщений: 795
vasig:
...У меня такой вопрос: как сделать, чтобы вероятность появления нужного мне корабля была 100%. На сколько я понимаю это зависит от функции Math.random

Сразу лезем в справочник и смотрим, что представляет из себя эта функция system.addShipsToRoute()

Вот корявый машинный перевод на русский язык описания этой функции:
=...
Добавляют суда к системе на определенных общих маршрутах и возвращают добавленные суда как множество. Маршруты - два кодекса характера wp, pw, ws, коротковолновый, SP и PS, где w обозначает witchpoint, p для планеты и s для солнца.

Когда никакой маршрут не определен, маршрут witchpoint ? главная станция принят.

Положение - часть маршрута и должно быть между 0 и 1. В отличие от наследства приказывает, чтобы часть взяла планетарные радиусы в счете, таким образом, это не начинает учитываться в центре солнца/планеты, но от его поверхности. Когда никакая часть не определена, случайная часть выбрана. Суда добавлены в пределах диапазона сканера этого положения. Суда, добавленные в диапазоне witchpoint автоматически, создают witchpoint облако входа.

Пример:
суда вара = system.addShipsToRoute ("myShips", 2, 0.7, "коротковолновый")
пираты вара = system.addShipsToRoute ("пират", 3 лет, Math.random (), "SP")

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

Примечание: этот метод подведет и возвратит пустой указатель, если любая из конечных точек маршрута не будет существовать. Никакие действительные маршруты не существуют в межзвездном пространстве.
...=

Из этого набора слов можно уловить такой смысл: случайная величина здесь определяет лишь место на маршруте, где должны появляться корабли - или ближе к началу маршрута, или в конце. То есть, вероятность появления корабля в любом случае 100 процентов. :)

А далее идут нюансы - если точки маршрута обозначены, но одна из них не существует, то корабль не появится (это относится и к межзвёздному пространству).

Другой нюанс - разброс места появления корабля по величине сканерного интервала. Это означает, как я понимаю, следующее - положим, случайная величина выбрала точку на трассе ближе к концу маршрута. Тогда корабли должны появиться относительно этой точки в пределах сканерного интервала - когда Вы долетите, наконец, до этой точки, может случится так, что корабли уже улетят за пределы дальности радара. :)

Как-то так.

Значит, что можно проверить: задать случайную величину прямо числом, близким к нулю, скажем, 0.01. И выбросить при этом все остальные условия проверки.

Тем самым мы задаём появление корабля в самом начале маршрута, в Вашем случае, как я понимаю по буквам "wp" - прямо около маяка гипер-перехода. Тогда корабль не должен успеть улететь за сканерный интервал, и игрок должен его успеть увидеть.

Что ещё? Я не вижу у Вас нигде определения роли кораблей. Есть переменная this.role1, а она задаётся где либо, типа this.role1 = "pirate"; ? Обязательно надо её задать. Либо непосредственно проставить роль кораблей в самой функции.

И лучше всего для проверки вот что сделать - добавить сразу несколько кораблей, чтобы проверить работоспособность функции (разрешается добавлять до 64 кораблей). Штук десять добавим. :)

И тогда кусок кода для проверки будет выглядеть так:
Код:
this.shipWillExitWitchspace = function(){
   system.addShipsToRoute("pirate", 10, 0.01, "wp");


Если сработает, тогда можно экспериментировать дальше. :)

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

Для примера - у Вас написано вот так:
Код:
if (system.countShipsWithRole(this.role1) > 0) return;

Этот же кусок кода я бы написал вот так:
Код:
if (system.countShipsWithRole(this.role1) > 0){
   //--- Если такие корабли с этой ролью уже присутствуют в системе, то ничего больше не добавляем в систему, а сразу же выходим из функции
    return;
}


В текстах программ лучше не экономить на чёткости структуры и комментариях - самому же потом легче будет редактировать код. :)


  Re: создание OXP
Не в сети
---Elite---
Аватар пользователя

Зарегистрирован: 01.10.12
Сообщений: 747
Откуда: Novosibirsk
to Tch

Владимир Петрович! Спасибо за подробный ответ. И хотя пока ничего не получилось :(, похоже что я шел правильным путем :). Что касается типа корабля, то он указан в функции - я просто эту строчку не скопировал, как и упустит скобку - там в скрипте все правильно. Но почему-то корабль так и не появляется. Значит для этого есть еще какие-то препятствия :). Это не единственный корабль который не появляется - может что-то общее. Буду разбираться.


  Re: создание OXP
Не в сети
---Elite---
Аватар пользователя

Зарегистрирован: 02.12.12
Сообщений: 795
vasig:
...Что касается типа корабля, то он указан в функции - я просто эту строчку не скопировал, как и упустит скобку - там в скрипте все правильно. Но почему-то корабль так и не появляется. Значит для этого есть еще какие-то препятствия :). Это не единственный корабль который не появляется - может что-то общее. Буду разбираться.


Стоп-стоп-стоп! vasig, будьте внимательны! Роль корабля и тип корабля - это две большие разницы, этот момент необходимо чётко уяснить.

Покажу на примере корабля-убийцы "Cobra3 XT".

Откройте в пакете "Cobra3 XT.oxp" в папке "Config" файл "shipdata.plist"

Обратите внимание: сколько там типов этих кобр - "cobra3XT-pirate", "cobra3XT-black_knave", "cobra3XT-alternate", "cobra3XT-player" - это всё ТИПЫ кораблей.

Тип корабля - это то название, которое открывает программную конструкцию объекта, вот код для примера с открывающей скобкой начала конструкции:
Код:
"cobra3XT-pirate" =
   {

А роль корабля - это то, что этот тип корабля будет делать в игре: изображать пирата или изображать торговца, либо вообще выполнять свою индивидуальную задачу. Ищем в этой же конструкции следующие строчки кода
Код:
      name = "Cobra Mk3-XT";
      roles = "pirate";

Итак, смотрите, что получается:
тип корабля - "cobra3XT-pirate"
имя корабля - "Cobra Mk3-XT", оно будет видно на маркере цели
роль корабля- "pirate", это то, что будет делать корабль в игре.

Теперь, в зависимости от этих названий, можно вводить этот корабль в игру. Это можно сделать несколькими разными способами. Вам для справки лучше заглянуть на страничку "Methods", вот по этой ссылке: http://wiki.alioth.net/index.php/Methods

Ищите там тему "Looking for, and adding ships". Там полный перечень функций, каким образом это можно сделать. :)

Просто Вы выбрали не самый удачный способ введения нужного Вам корабля в игру - через появление его на маршруте. :)

Если мы посмотрим для примера, каким способом вводится в игру тот же корабль-убийца "Cobra3 XT", то в пакете "Cobra3 XT.oxp" в папке "Scripts" в файле "spawnknave-script.js" увидим, что введение корабля задаётся непосредственно в выбранной позиции, совершенно другой функцией:
Код:
      system.addShips(this.role1, this.count1, player.ship.position, 10000);

т.е. прямо около корабля игрока! :)

Этот код стоит показать полностью и прокомментировать:
Код:
this.role1 = "black_knave";
this.count1 = 1;

Итак, роль корабля в игре - "black_knave". Такая необычная роль означает на практике, что в игре может появится только один-единственный тип корабля, у которого эта роль записана в его конструкции - "cobra3XT-black_knave". Думаю, что во всех пакетах нет больше кораблей, у которых есть эта роль. Ни Питон, ни Мамба, ни Боа - только кобра-убийца "cobra3XT-black_knave" :)

Следующая строчка кода - это задаётся количество кораблей с этой ролью, которое должно появиться. Я уже писал в своих "Демонстрационных полётах", что пытался запустить в игру сразу 100 этих Кобр-убийц, но компилятор выдал ошибку: "Error: System.addShips: Invalid arguments (100) -- expected number (positive count no greater than 64)."

Далее код такой:
Код:
this.shipWillExitWitchspace = function()
{
   if (Math.random() >= 0.99 && player.score >= 128)   
   {
      system.addShips(this.role1, this.count1, player.ship.position, 10000);
   }
};

Это означает, что Кобра-убийца появится в системе в непосредственной близости от корабля игрока, в случайной точке пространства в пределах дальности 10000 м (player.ship.position, 10000), сразу после того, как корабль игрока вынырнет из гипер-пространства (this.shipWillExitWitchspace), при этом если игрок уже имеет достаточный боевой опыт (player.score >= 128) и если преставится удобный случай - один шанс из 100 (Math.random() >= 0.99)

Обратите внимание - генератор случайного числа Math.random() очень редко выдаёт число, которое более 0.99 (0.992674884, или 0.99868577 или т.п) - вот почему вероятность появления Кобры-убийцы будет здесь 1 процент.

А если мы хотим получить 100-процентную вероятность появления Кобры-убийцы, нам нужно изменить строчку кода вот так: Math.random() >= 0 - и тогда, какое бы число не сгенерировал генератор, оно всегда будет больше 0 и поэтому Кобра появится гарантировано в 100 случаях из 100. :)


  Re: создание OXP
Не в сети
---Elite---
Аватар пользователя

Зарегистрирован: 02.12.12
Сообщений: 795
Для vasig

Вот же я тупой - не сообразил сразу, что Вам нужно! :oops:

Сделайте вот что: создайте свой тестирующий пакет с оригинальным названием, например "vasig_test_ships.oxp", в пакете создайте папку "Config", в этой папке создайте файл "script.js", в этот файл запишите вот такой код:
Код:
//--- Главное событие: Корабль стартует из станции, ПОСЛЕ прохода туннеля
this.shipLaunchedFromStation = function( station ){

   system.addShips("Роль корабля", 10, player.ship.position, 10000);
}


Затем делайте вот что: в проблемном пакете ОХР в папке "Config" ищите файл "shipdata.plist", в этом файле ищите тип корабля, который у Вас почему-либо не появляется в игре, и смотрите, какая задана роль у этого типа корабля, затем копируйте название этой роли и подставляйте в код, который я написал выше, вместо "Роль корабля".

Обычно в пакетах для корабля задаются несколько ролей - стандартные (например, "pirate") и оригинальная, с особым именем. Берите оригинальную роль. А если там есть только стандартные, то временно вместо "pirate" напишите что-нибудь своё латинскими буквами, например, "vasig_test_this_ship" и эту же фразу подставьте вместо "Роль корабля" в коде.

Таким образом, сразу после вылета из любой орбитальной станции у Вас игре около корабля должно появиться сразу 10 таких кораблей именно этого типа, на расстоянии 10000 м от корабля. Такую шайку легко заметить. :)

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


  Re: создание OXP
Не в сети
---Elite---
Аватар пользователя

Зарегистрирован: 01.10.12
Сообщений: 747
Откуда: Novosibirsk
to Tch

Владимир Петрович! Это конечно я виноват, что заморочил Вам голову этим кусочком кода. Нужно было выложить весь скрипт. Я воспользовался Вашим советом и провел эксперимент с несколькими кораблями - все получилось, Но тот, который я так долго ищу:
16.jpeg


все-равно не появляется даже таким насильственным методом :x . Не буду больше отвлекать Вас от более важных дел. Буду разбираться сам. Еще раз спасибо!

P.S.
Чтобы не захламляться - можете все это, начиная с моего вопроса, удалить :).


Новая тема  Ответить  
Показать сообщения за:  Сортировать по:  









Список форумов / Обсуждение игры и OXP

cron