Система добычи 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/. Каждый файл определяет список записей пулов добычи, где каждая запись имеет независимый шанс выдать предмет.
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
isEnabled | Boolean | true | Записывается в файл, но не учитывается: таблицы добычи регистрируются и используются независимо от того, установлено ли значение true. Чтобы таблица не использовалась, удалите её из chestLootTables / barrelLootTables пакета контента и очистите её spawnPools. |
spawnPools | String list | [] | Имена пулов спавна BetterStructures. Когда EliteMob, связанный с подходящим пулом спавна, убит, эта таблица добычи используется для его дропа. Сравнение не учитывает регистр и игнорирует окончание .yml, поэтому и kobold_miner_pool, и Kobold_Miner_Pool.yml подходят. |
lootTable | List 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/. Каждый пул определяет набор возможных предметов. При броске пула один предмет выбирается на основе взвешенной вероятности.
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
isEnabled | Boolean | true | Записывается в файл, но не учитывается: пулы добычи регистрируются и используются независимо от того, установлено ли значение true. Чтобы пул не использовался, удалите ссылку на него из таблиц добычи. |
eliteMobsLoot | List of objects | [] | Пользовательские предметы EliteMobs, которые могут выпасть |
vanillaLoot | List 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 при старте матча. Когда игрок нажимает правой кнопкой мыши на сундук или бочку:
- Ванильный контейнер никогда не открывается — взаимодействие отменяется и заменяется процессом обыска Extractioncraft.
- Игрок должен стоять совершенно неподвижно 3 секунды. Обратный отсчёт показывается в виде подзаголовка.
- Любое движение отменяет взаимодействие («Don't move while opening a container!»). Игрок может открывать только один контейнер за раз.
- При успехе одна таблица добычи выбирается из списка
chestLootTablesилиbarrelLootTablesпакета контента (взвешенный выбор). - Записи выбранной таблицы добычи бросаются независимо, и полученные предметы выпадают на землю в месте расположения контейнера.
- Контейнер уничтожается после разграбления (заменяется воздухом), поэтому каждый контейнер можно обыскать только один раз.
Контейнеры отображают частицы портала каждые 10 тиков, пока активны в матче, что делает их видимыми для игроков.
Дроп из контейнеров передаёт в EliteMobs фиксированный уровень 10 независимо от того, какой пакет контента используется в матче. Диапазон уровней, заявленный пакетами Kobold Mines, относится к мобам на карте, а не к добыче из сундуков и бочек.
Добыча при убийстве мобов
Когда EliteMob погибает во время матча, плагин читает пользовательские данные betterstructures:spawnpool у моба. Мобы без этих данных (всё, что не заспавнено модульным генератором BetterStructures) никогда не генерируют добычу Extractioncraft.
Каждая таблица добычи, чей список spawnPools совпадает с пулом спавна моба, генерирует дроп в месте гибели — это не взвешенный выбор, поэтому указание одного и того же пула спавна в трёх таблицах добычи даёт три независимых набора бросков. Собственный уровень моба передаётся в EliteMobs для генерации предметов соответствующего уровня.
Сам уровень моба определяется плагином BetterStructures при генерации карты: боссы ближе к центру карты спавнятся с уровнем, близким к максимуму их пула спавна, а боссы у краёв — с уровнем, близким к минимуму. Поэтому граница мира, сужающаяся к центру, выталкивает игроков во всё более сложную — и более прибыльную — местность.
Поведение предметов при выходе
- У каждого игрока, покидающего матч, успешно или нет, инвентарь сначала привязывается к душе (с помощью чар soulbind от EliteMobs), поэтому всё, с чем он выходит, привязано к нему.
- Игроки, успешно эвакуировавшиеся, сохраняют все предметы.
- Игроки, не сумевшие эвакуироваться, теряют все предметы инвентаря, когда
deleteItemsOnFailToExtractустановлен вtrueвconfig.yml(по умолчанию). Это касается выхода через/exc leave, отключения от сервера и получения смертельного урона. - Ничего не удаляется, пока матч ещё ожидает или идёт обратный отсчёт; правило действует только после того, как матч запущен.