Раз уж затронули эту тему, решил написать побольше и пообъемнее. Подго...
X3 Terran Conflict / X3 Земной конфликт
 
X3 Terran conflict  
 

На сайте онлайн (человек): 44



 



Раз уж затронули эту тему, решил написать побольше и пообъемнее. Подго...

Terran Conflict (X3TC) / Форум / Форум по игре X3 Terran Conflict (X3TC) / X3 Земной конфликт / Сектор несфокусированного прыжка

Сектор несфокусированного прыжка
(http://x3tc.net/x3_forum/?tid=914)
Автор: Malstrime
(03.09.2010 21:34:47)

Раз уж затронули эту тему, решил написать побольше и пообъемнее.
Подготовка.
Начиная с 833 сроки файла 3.08 Sector Management идет особый код специально отведенного для несфокусированного прыжка сектора (23-19).

 Код:
  1. <find_sector name="UFJD Sector" x="23" y="19" exact="0"/>
  2. <do_if value="{sector.exists@UFJD Sector}" exact="0">
  3.   <cancel_cue cue="UFJD"/>
  4. </do_if>
 
Первым делом идет поиск и проверка существования сектора (мало ли, но все же). Сектора нет - дальнейшие действия не предпринимаются.
Дальнейший код зависит от игрока, то есть от использования НПД. Если "впрыгивает", то активируется дальнейший код. Если "выпрыгивает" - все содержимое сектора безжалостно уничтожается и код прерывается, возвращаясь к началу. Кстати, существует шанс 2%, что игрок попадет в уже известную вселенную, но это уже не по рассматриваемой части.

Генерация.
Все следующие действия происходят, когда игрок совершает прыжок.
 Код:
  1. <do_any>
  2.  <set_value chance="4" name="this.Enemy" exact="{lookup.race@xenon}"/>
  3.  <set_value chance="2" name="this.Enemy" exact="{lookup.race@khaak}"/>
  4.  <set_value chance="3" name="this.Enemy" exact="0"/>
  5. </do_any>
 
В этом куске кода определяется раса, которая будет присутствовать в сектора.Шанс появления ксенона равен 4 из 9, хаака 2 из 9, а отсутствие расы 3 из 9. Исходя из этого, можно сказать, что если Вы обнаружите Хааков, то Ксенонов точно не встретите (и наоборот), а также можно вообще никого не встретить.



Следующий кусок кода довольно объемный, но он отвечает за исчезновение одного из товаров:
  • Сканер грузов
  • Транспортер
  • Сканер С3
    Шанс у всех одинаковый (3 из 29), однако, если выпадет Сканер грузов, но его не окажется на борту, то другое оборудование проигнорируется. Шанс, что оборудование не уничтожится 20 из 29.


    Следующий кусок отвечает за наличие светила. В 30 из 33 случаев сгенерируется одно из девяти солнц. Причем позиция будет одинаковой:
     Код:
    1. <position min="2000km" max="2500km" height="600km"/>
     



     Код:
    1. <set_value name="this.Nividium Chance" max="100" profile="decreasing"/>
    2. <set_value name="this.Ore Chance" max="150" profile="bell"/>
    3. <set_value name="this.Silicon Chance" max="200" profile="bell"/>
     
    Этот кусок отвечает за шанс создания астероида одного из трех типов:
  • Нивидиум - от 0 до 100 (преимущественно ближе к нулю)
  • Руда - от 0 до 150 (преимущественно усредненные значения)
  • Кремний - от 0 до 200 (преимущественно усредненные значения)

     Код:
    1. <set_value name="this.MinRange" min="0" max="3"/>
    2. <set_value name="this.MaxRange" min="50" max="60"/>
    3. <create_spacefly name="this.Position" swarm="1">
    4.   <position x="0" y="0" z="0" min="3km" max="5km"/>
    5.   <sector sector="UFJD Sector"/>
    6. </create_spacefly>
     
    Первые две строки задают рандомное (преимущественно) расстояние (или его множитель) (далее: Min и Max соответственно).
    Космическая муха неубиваема и служит точкой, практически заменяющей центр сектора (все объекты используют ее в качестве центра).

     Код:
    1. <!--<set_value name="this.background" min="71" max="74"/>
    2. <alter_sector background="131072{value@this.background}" population="0" size="{value@this.MaxRange}"/>-->
     
    По идее этот кусок должен отвечать за рандомный бекграунд, но он закомментирован (игнорируется), так как прописан в другом месте.

     Код:
    1.               <do_choose>
    2.                 <do_when value="{value@UFJD Sector Custom ID}" exact="1">
    3.                   <set_value name="this.Nividium Chance" min="40" max="170"/>
    4.                   <set_value name="this.Ore Chance" max="60" profile="bell"/>
    5.                   <set_value name="this.Silicon Chance" max="35" profile="bell"/>
    6.                   <set_value name="this.Enemy" exact="{lookup.race@khaak}"/>
    7.                 </do_when>
    8.                 <do_when value="{value@UFJD Sector Custom ID}" exact="2">
    9.                   <set_value name="this.Nividium Chance" min="25" max="60"/>
    10.                   <set_value name="this.Ore Chance" min="30" max="60" profile="bell"/>
    11.                   <set_value name="this.Silicon Chance" min="20" max="35" profile="bell"/>
    12.                 </do_when>
    13.               </do_choose>
     
    Это готовые настройки. Они, видимо, нужны для сюжеток и т.п.

     Код:
    1. <do_if value="{value@this.Enemy}" exact="0" negate="1">
    2.   <set_value name="this.OBS Instances" min="0" max="10" profile="decreasing" chance="90"/>
    3.   <set_value name="this.Enemy Level" min="{lookup.level@easy}" max="{lookup.level@veryhard}" profile="bell"/>
    4. </do_if>
     
    Если в коде выше таки сгенерировались ксеноны или хааки, то во второй строке генерируется множитель кол-ва (который правда все равно будет меняться), а в третьей их "уровень" (преимущественно средний).

    Объекты.
    Дальше идет генерация станции и ее охраны. Раса, естественно, та, которая сгенерировалась. Код довольно объемный. Основные моменты:
    Ксеноны:
  • Генерируется ксенонская станция. Одна, с щитам. Позиция: от Min км до Max км по всем осям (от Мухи).
  • Множитель OBS Instances (далее: OBS (использую как переменную)) принимает усредненное значение между 3 и 12.
  • Создается OBS*2 ксенонских истребителей. Без корветов и бигшипов.

    Хааки:
  • Максимальный шанс появления нивидиумного астероида увеличивается вдвое (значения, близкие к минимуму).
    Далее или легкие или тяжелые.
    Тяжелые:
  • Максимальный шанс появления нивидиумного астероида увеличивается вдвое (усредненные значения) (да-да, еще раз!).
  • Множитель OBS принимает усредненные значения между 3 и 13 (усредненные значения).
  • Создается Хаакская станция.
    Легкие:
  • Максимальный шанс появления нивидиумного астероида уменьшается вдвое, а минимальный шанс появления нивидиумного астероида уменьшается вдвое (значения, близкие к минимуму).
  • Множитель OBS принимает усредненные значения между 3 и 13 (усредненные значения).
  • Генерация обломков и прочей фигни, от 5 до 15 штук.
    Дальше снова общий код, где происходит...
  • Генерация хаакских истребителей кол-вом OBS*2. Без корветов и бигшипов. Позиция: от Min км до Max км по всем осям (от Мухи).
  • Генерация OBS хааксикх кластеров. Две группы: Кластер+Кластер6 и Кластер14+Кластер27. Генерируется один из двух в каждой группе. У первой группы шанс в три раза выше. Позиция: от Min км до Max км по всем осям (от Мухи).
    Однако, даже если выпадет наличие врагов, есть шанс, что их не будет, но и шанс появления астероидов с нивидиумом не будет меняться и т.п.

    Астероиды. Важные факты:
  • Если шанс появления ресурса в астероиде меньше 25, то он астероиды с таким ресурсом созданы не будут.
  • Кол-во астероидов определяется по формуле Шанс/5 (для каждого типа), т.е. астероидов с одним ресурсом не будет меньше пяти.
  • Помимо астероидов создается астероидный мусор (очень разнообразных размеров). Шанс появления последнего в два раза выше.
  • Шанс 30%, что у астероида/астероидного_мусора появится космомуха (причем может появиться всего одна).

    Три особых объекта: Странник, Аран и Врата - взаимоисключающие.
    Странник:
  • Шанс ~0,25% (сначала шанс ~2.5%, что выпадет фрагмент создания, а после 10% шанс, что он вообще создастся).
  • Немного оборудования на борту.
  • От 100 до 300 батарей.
  • Корпус: 3%-30%
  • В 1 из 5 случаев может сгенериться прыжковый двигатель.
  • Невидим. Захватываем (правда как его взять в прицел?).
  • Позиция: от Min км до Max км по всем осям (от Мухи).
    Аран:
  • Шанс ~2.5%.
  • От 100 до 300 батарей.
  • Корпус: 3%-30%.
  • Позиция: от Min*2 км до Max*3 км по всем осям (от Мухи).
    Врата:
  • Шанс ~4.5%.
  • Позиция: от Min км до Max км по всем осям (от Мухи).
    Пустота.
  • Шанс ~90%, что ничего не сгенерируется.

    Батарейки. Они нужны, чтобы в случае чего можно было выбраться из сектора. Они создаются уже после того, как окончится генерация сектора.
    Обычными словами хорошо не объяснить этот код, но я попытаюсь.
    1. Получаем массив кораблей игрока.
    2. Анализ суммарного кол-ва батарей.
    3. Если батарей больше 800, то переходим к пункту пять.
    4. Четыре раза создаем по два контейнера. Один секретный и находится на расстоянии от Min км до Max км от космической мухи, созданной в начале, другой обычный, но может находиться до двух раз дальше (от Min*2 км до Max*2 км) (т.е. четыре обычных и четыре секретных). Кол-во батарей: от 100 до 500 в каждом из восьми контейнеров.
    5. Через 10-20 минут переходим на пункт один.

    Завершение.
    Далее, при покидании игроком сектора все содержимое выпиливается, все возвращается на пункт "Генерация" и ждет, пока игрок вновь использует НПД. А если Вы думаете, что, прочитав это, Вы познаете "23-19", то я вынужден Вас огорчить. Удачных поисков, добычи и битв

    P.S. Спасибо V2200 и GreenCross.
  • дерево темы → Сектор несфокусированного прыжка Сектор несфокусированного прыжка »
    Список игр