Система добычи 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 | Установите false, чтобы таблица перестала выдавать какой-либо дроп. Контейнеры пропускают отключённую таблицу при выборе, а убийства мобов её игнорируют. |
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% вероятность того, что этот пул выдаст предмет. chance может быть числом или числовой строкой. Запись, файла пула которой нет в loot_pools/, или с отсутствующим chance либо chance вне диапазона от 0 до 1, пропускается с предупреждением при запуске; остальные записи всё равно загружаются.
Пулы добычи
Конфигурации пулов добычи находятся в папке loot_pools/. Каждый пул определяет набор возможных предметов. При броске пула один предмет выбирается на основе взвешенной вероятности.
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
isEnabled | Boolean | true | Если установить false, записи таблиц добычи, ссылающиеся на этот пул, никогда его не бросают. |
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 определяет относительную вероятность выпадения среди всех записей в пуле.
Некоторые пользовательские предметы исключаются из выбора ещё до его проведения:
- Предмет с
permissionможет выпасть только из сундуков и бочек и только для игрока с этим разрешением. Выпавший предмет принадлежит этому игроку, поэтому никто другой не может его подобрать. При убийстве мобов предметы, закрытые разрешением, никогда не выпадают. - Предмет с
itemType: CLASS_LOOTможет выпасть, только если классовая добыча EliteMobs разрешает его для сложности и ранга этого выпадения. Классовая добыча выпадает непривязанной.
Запись ванильной добычи
vanillaLoot:
- material: DIAMOND
weight: 1.0
- material: GOLD_INGOT
weight: 2.0
material — это имя перечисления Bukkit Material. weight работает так же, как и для записей элитной добычи. Все записи элитной и ванильной добычи в пуле участвуют в одном взвешенном выборе, поэтому пул всегда выдаёт не более одного предмета за бросок. Ванильные предметы всегда выпадают в количестве одной штуки. material, который не распознан, не является предметом или является воздухом, пропускается с предупреждением при запуске, а имя файла в eliteMobsLoot, которому не соответствует пользовательский предмет EliteMobs, записывает предупреждение в момент выпадения и ничего не выдаёт.
Вес допускает дробные числа (0.5), целые (2) или числовые строки ("1.5") и должен быть больше 0. Запись с отсутствующим, нулевым, отрицательным или нечисловым весом либо без filename или material пропускается с предупреждением при запуске; остальная часть пула всё равно загружается.
Добыча из контейнеров (сундуки и бочки)
Когда матч переходит в активную фазу, BetterStructures размещает сундук или бочку на каждом маркере контейнера на карте. Когда игрок в матче нажимает правой кнопкой мыши на сундук или бочку:
- Ванильный контейнер никогда не открывается. Взаимодействие отменяется и заменяется процессом обыска Extractioncraft, который работает только в активной фазе матча и только для контейнеров, размещённых матчем.
- Игрок должен стоять совершенно неподвижно 3 секунды. Обратный отсчёт показывается в виде подзаголовка.
- Любое изменение позиции отменяет взаимодействие («Don't move while opening a container!»). Осматриваться, не сходя с места, разрешено. Игрок может открывать только один контейнер за раз, а контейнер может открывать только один игрок за раз.
- Таблица добычи уже выбрана из взвешенного списка
chestLootTablesилиbarrelLootTablesпакета в начале взаимодействия. При успехе она генерирует дроп. - Контейнер заменяется воздухом, а записи выбранной таблицы добычи бросаются независимо. Полученные предметы выпадают на землю в месте расположения контейнера.
Контейнеры отображают частицы портала каждые 10 тиков, пока активны в матче, что делает их видимыми для игроков.
Дроп из контейнеров использует contentLevel пакета (по умолчанию 10) как уровень предметов EliteMobs. Сложность классовой добычи для них берётся из зоны, в которой стоит контейнер (см. добыча при убийстве мобов), а ранг — самый низкий, trash.
Добыча при убийстве мобов
Когда EliteMob погибает в мире активного матча Extractioncraft, плагин читает пользовательские данные betterstructures:spawnpool, которые BetterStructures прикрепляет к создаваемым им боссам. Мобы без этих данных, а также смерти за пределами мира активного матча никогда не генерируют добычу Extractioncraft.
Каждая включённая таблица добычи, чей список spawnPools совпадает с пулом спавна моба, генерирует дроп в месте гибели. Это не взвешенный выбор, поэтому указание одного и того же пула спавна в трёх таблицах добычи даёт три независимых набора бросков. Собственный уровень моба передаётся в EliteMobs для генерации предметов соответствующего уровня вместе со сложностью и рангом классовой добычи босса.
Когда матч переходит в активную фазу, BetterStructures спавнит каждого инстансового босса с уровнем maxLevel его пула спавна. Каждый такой босс также получает сложность зоны, в которой он появился. Зоны — это квадратные пояса вокруг центра карты:
| Зона | Расстояние от центра по любой из осей | Сложность EliteMobs по умолчанию |
|---|---|---|
2 | Меньше одной шестой ширины карты | Mythic |
1 | Меньше одной трети ширины карты | Hard |
0 | Остальная часть карты | Normal |
Названия сложностей берутся из сопоставления difficultyIds в настройках классовой добычи EliteMobs. Кроме того, EliteMobs применяет силы боссов, ограниченные difficultyID, только в соответствующих зонах; боссы Kobold Mines это используют. Поэтому граница мира, сужающаяся к центру, выталкивает игроков в зоны Hard и Mythic.
Поведение предметов при выходе
- Игроки, успешно эвакуировавшиеся, сохраняют все предметы. Extractioncraft привязывает к ним каждый непривязанный предмет в инвентаре, на курсоре и в сетке крафта; уже привязанные предметы сохраняют своего владельца. Привязка происходит только при включённых чарах EliteMobs Soulbind.
- Выключение сервера или перезагрузка плагина во время активного матча считаются так же, как эвакуация.
- Любой другой выход из активного матча очищает инвентарь, курсор и сетку крафта, если
deleteItemsOnFailToExtractравноtrue(по умолчанию). При значенииfalseэти предметы вместо этого привязываются. - Выход во время ожидания или обратного отсчёта не затрагивает инвентарь. Все способы выхода описаны на странице ход матча.