Перейти к основному содержимому

Система добычи Extractioncraft

Extractioncraft имеет многоуровневую систему добычи, построенную на трёх концепциях: пакеты контента ссылаются на таблицы добычи, таблицы добычи ссылаются на пулы добычи, а пулы добычи определяют фактические предметы, которые могут выпасть.

Обзор

Content Package
-> chestLootTables / barrelLootTables (weighted selection)
-> Loot Table
-> lootTable entries (each has a chance to roll)
-> Loot Pool
-> eliteMobsLoot / vanillaLoot (weighted selection of one item)

Таблицы добычи

Конфигурации таблиц добычи находятся в папке loot_tables/. Каждый файл определяет список записей пулов добычи, где каждая запись имеет независимый шанс выдать предмет.

КлючТипПо умолчаниюОписание
isEnabledBooleantrueЗаписывается в файл, но не учитывается: таблицы добычи регистрируются и используются независимо от того, установлено ли значение true. Чтобы таблица не использовалась, удалите её из chestLootTables / barrelLootTables пакета контента и очистите её spawnPools.
spawnPoolsString list[]Имена пулов спавна BetterStructures. Когда EliteMob, связанный с подходящим пулом спавна, убит, эта таблица добычи используется для его дропа. Сравнение не учитывает регистр и игнорирует окончание .yml, поэтому и kobold_miner_pool, и Kobold_Miner_Pool.yml подходят.
lootTableList of objects[]Каждая запись ссылается на файл пула добычи и chance (от 0.0 до 1.0)

Формат записи таблицы добычи

lootTable:
- filename: my_loot_pool.yml
chance: 0.5
- filename: another_pool.yml
chance: 0.2

Каждая запись бросается независимо. chance равный 0.5 означает 50% вероятность того, что этот пул выдаст предмет.

Пулы добычи

Конфигурации пулов добычи находятся в папке loot_pools/. Каждый пул определяет набор возможных предметов. При броске пула один предмет выбирается на основе взвешенной вероятности.

КлючТипПо умолчаниюОписание
isEnabledBooleantrueЗаписывается в файл, но не учитывается: пулы добычи регистрируются и используются независимо от того, установлено ли значение true. Чтобы пул не использовался, удалите ссылку на него из таблиц добычи.
eliteMobsLootList of objects[]Пользовательские предметы EliteMobs, которые могут выпасть
vanillaLootList of objects[]Ванильные предметы Minecraft, которые могут выпасть

Запись добычи EliteMobs

eliteMobsLoot:
- filename: my_elite_item.yml
weight: 1.0
- filename: another_item.yml
weight: 0.5

filename ссылается на конфигурацию пользовательского предмета EliteMobs. weight определяет относительную вероятность выпадения среди всех записей в пуле.

Запись ванильной добычи

vanillaLoot:
- material: DIAMOND
weight: 1.0
- material: GOLD_INGOT
weight: 2.0

material — это имя перечисления Bukkit Material. weight работает так же, как и для записей элитной добычи. Все записи элитной и ванильной добычи в пуле участвуют в одном взвешенном выборе, поэтому пул всегда выдаёт не более одного предмета за бросок. Ванильные предметы всегда выпадают в количестве одной штуки. Нераспознанный material пропускается с предупреждением при запуске, а имя файла в eliteMobsLoot, которому не соответствует пользовательский предмет EliteMobs, записывает предупреждение в момент выпадения и ничего не выдаёт.

Веса можно записывать десятичными дробями (0.5), целыми числами (2) или строками в кавычках ("1.5"); все три варианта разбираются корректно. Отсутствующий или нечисловой weight считается равным 0 и записывает предупреждение.

Добыча из контейнеров (сундуки и бочки)

Во время матча сундуки и бочки размещаются плагином BetterStructures при старте матча. Когда игрок нажимает правой кнопкой мыши на сундук или бочку:

  1. Ванильный контейнер никогда не открывается — взаимодействие отменяется и заменяется процессом обыска Extractioncraft.
  2. Игрок должен стоять совершенно неподвижно 3 секунды. Обратный отсчёт показывается в виде подзаголовка.
  3. Любое движение отменяет взаимодействие («Don't move while opening a container!»). Игрок может открывать только один контейнер за раз.
  4. При успехе одна таблица добычи выбирается из списка chestLootTables или barrelLootTables пакета контента (взвешенный выбор).
  5. Записи выбранной таблицы добычи бросаются независимо, и полученные предметы выпадают на землю в месте расположения контейнера.
  6. Контейнер уничтожается после разграбления (заменяется воздухом), поэтому каждый контейнер можно обыскать только один раз.

Контейнеры отображают частицы портала каждые 10 тиков, пока активны в матче, что делает их видимыми для игроков.

Добыча из контейнеров всегда генерируется на уровне 10

Дроп из контейнеров передаёт в EliteMobs фиксированный уровень 10 независимо от того, какой пакет контента используется в матче. Диапазон уровней, заявленный пакетами Kobold Mines, относится к мобам на карте, а не к добыче из сундуков и бочек.

Добыча при убийстве мобов

Когда EliteMob погибает во время матча, плагин читает пользовательские данные betterstructures:spawnpool у моба. Мобы без этих данных (всё, что не заспавнено модульным генератором BetterStructures) никогда не генерируют добычу Extractioncraft.

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

Сам уровень моба определяется плагином BetterStructures при генерации карты: боссы ближе к центру карты спавнятся с уровнем, близким к максимуму их пула спавна, а боссы у краёв — с уровнем, близким к минимуму. Поэтому граница мира, сужающаяся к центру, выталкивает игроков во всё более сложную — и более прибыльную — местность.

Поведение предметов при выходе

  • У каждого игрока, покидающего матч, успешно или нет, инвентарь сначала привязывается к душе (с помощью чар soulbind от EliteMobs), поэтому всё, с чем он выходит, привязано к нему.
  • Игроки, успешно эвакуировавшиеся, сохраняют все предметы.
  • Игроки, не сумевшие эвакуироваться, теряют все предметы инвентаря, когда deleteItemsOnFailToExtract установлен в true в config.yml (по умолчанию). Это касается выхода через /exc leave, отключения от сервера и получения смертельного урона.
  • Ничего не удаляется, пока матч ещё ожидает или идёт обратный отсчёт; правило действует только после того, как матч запущен.