Zum Hauptinhalt springen

Extractioncraft Loot-System

Extractioncraft hat ein mehrschichtiges Loot-System, das auf drei Konzepten aufbaut: Inhaltspakete referenzieren Loot-Tabellen, Loot-Tabellen referenzieren Loot-Pools, und Loot-Pools definieren die tatsächlichen Items, die droppen können.

Übersicht

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-Tabellen

Loot-Tabellen-Konfigurationen befinden sich im Ordner loot_tables/. Jede Datei definiert eine Liste von Loot-Pool-Einträgen, wobei jeder Eintrag eine unabhängige Chance hat, ein Item zu erzeugen.

SchlüsselTypStandardBeschreibung
isEnabledBooleantrueWird zwar in die Datei geschrieben, aber nicht erzwungen: Loot-Tabellen werden registriert und sind nutzbar, unabhängig davon, ob dieser Wert true ist. Um eine Tabelle außer Betrieb zu nehmen, entferne sie aus chestLootTables / barrelLootTables des Inhaltspakets und leere ihre spawnPools.
spawnPoolsString-Liste[]BetterStructures-Spawn-Pool-Namen. Wenn ein EliteMob, der einem passenden Spawn-Pool zugeordnet ist, getötet wird, wird diese Loot-Tabelle für seine Drops verwendet. Der Vergleich ignoriert Groß-/Kleinschreibung sowie ein angehängtes .yml, sodass sowohl kobold_miner_pool als auch Kobold_Miner_Pool.yml passen.
lootTableObjektliste[]Jeder Eintrag referenziert einen Loot-Pool-Dateinamen und eine chance (0.0 bis 1.0)

Loot-Tabellen-Eintragsformat

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

Jeder Eintrag wird unabhängig gewürfelt. Eine chance von 0.5 bedeutet eine 50%-ige Wahrscheinlichkeit, dass dieser Pool einen Drop erzeugt.

Loot-Pools

Loot-Pool-Konfigurationen befinden sich im Ordner loot_pools/. Jeder Pool definiert eine Menge möglicher Items. Wenn ein Pool gewürfelt wird, wird ein Item basierend auf gewichteter Wahrscheinlichkeit ausgewählt.

SchlüsselTypStandardBeschreibung
isEnabledBooleantrueWird zwar in die Datei geschrieben, aber nicht erzwungen: Loot-Pools werden registriert und sind nutzbar, unabhängig davon, ob dieser Wert true ist. Um einen Pool außer Betrieb zu nehmen, entferne seinen Eintrag aus den Loot-Tabellen, die auf ihn verweisen.
eliteMobsLootObjektliste[]EliteMobs-Custom-Items, die droppen können
vanillaLootObjektliste[]Vanilla-Minecraft-Items, die droppen können

EliteMobs-Loot-Eintrag

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

Der filename referenziert eine EliteMobs-Custom-Item-Konfiguration. Das weight bestimmt die relative Drop-Wahrscheinlichkeit unter allen Einträgen im Pool.

Vanilla-Loot-Eintrag

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

Das material ist ein Bukkit Material-Enum-Name. Das weight funktioniert genauso wie bei Elite-Loot-Einträgen. Alle Elite- und Vanilla-Einträge in einem Pool konkurrieren in einer einzigen gewichteten Auswahl, ein Pool erzeugt pro Wurf also höchstens ein Item. Vanilla-Items droppen immer als einzelnes Item. Ein unbekanntes material wird beim Start mit einer Warnung übersprungen, und ein eliteMobsLoot-Dateiname, zu dem es kein EliteMobs-Custom-Item gibt, erzeugt beim Drop eine Warnung im Log und nichts weiter.

Gewichte dürfen als Dezimalzahlen (0.5), ganze Zahlen (2) oder als Zeichenketten in Anführungszeichen ("1.5") geschrieben werden; alle drei Varianten lassen sich parsen. Ein fehlendes oder nicht-numerisches weight wird als 0 behandelt und erzeugt eine Warnung.

Container-Loot (Truhen und Fässer)

Während eines Matches werden Truhen und Fässer beim Start des Matches von BetterStructures gespawnt. Wenn ein Spieler eine Truhe oder ein Fass mit Rechtsklick anklickt:

  1. Der Vanilla-Behälter öffnet sich nie — die Interaktion wird abgebrochen und durch den Loot-Ablauf von Extractioncraft ersetzt.
  2. Der Spieler muss 3 Sekunden lang völlig stillstehen. Ein Countdown wird als Untertitel angezeigt.
  3. Jede Bewegung bricht die Interaktion ab ("Don't move while opening a container!"). Ein Spieler kann immer nur einen Behälter gleichzeitig öffnen.
  4. Bei Erfolg wird eine Loot-Tabelle aus der chestLootTables- oder barrelLootTables-Liste des Inhaltspakets ausgewählt (gewichtete Auswahl).
  5. Die Einträge der ausgewählten Loot-Tabelle werden jeweils unabhängig gewürfelt, und resultierende Items droppen am Standort des Behälters.
  6. Der Behälter wird nach dem Looten zerstört (durch Luft ersetzt), jeder Behälter kann also nur einmal geplündert werden.

Behälter zeigen alle 10 Ticks Portal-Partikel an, solange sie in einem Match aktiv sind, um sie für Spieler sichtbar zu machen.

Container-Loot wird immer auf Level 10 generiert

Behälter-Drops übergeben EliteMobs ein festes Level von 10, unabhängig davon, welches Inhaltspaket das Match verwendet. Der von den Kobold-Mines-Paketen angegebene Levelbereich stammt von den Mobs auf der Karte, nicht vom Truhen- und Fass-Loot.

Mob-Kill-Loot

Wenn ein EliteMob während eines Matches stirbt, liest das Plugin die Custom-Data betterstructures:spawnpool des Mobs aus. Mobs ohne diese Daten (also alles, was nicht vom BetterStructures-Modulgenerator gespawnt wurde) erzeugen nie Extractioncraft-Loot.

Jede Loot-Tabelle, deren spawnPools-Liste zum Spawn-Pool des Mobs passt, erzeugt Drops am Todesort — das ist keine gewichtete Auswahl. Denselben Spawn-Pool in drei Loot-Tabellen aufzuführen ergibt also drei unabhängige Wurfserien. Das Level des Mobs wird an EliteMobs für levelgerechte Item-Generierung weitergegeben.

Das Mob-Level selbst wird von BetterStructures bei der Kartengenerierung festgelegt: Bosse näher an der Kartenmitte spawnen nahe dem Maximallevel ihres Spawn-Pools, Bosse weiter außen nahe dem Minimum. Die zur Mitte hin schrumpfende Weltgrenze drängt die Spieler daher in immer schwierigeres — und lohnenderes — Gebiet.

Item-Verhalten beim Verlassen

  • Jedem Spieler, der ein Match verlässt — erfolgreich oder nicht —, wird zuerst das Inventar seelengebunden (über die EliteMobs-Soulbind-Verzauberung), sodass alles, womit er herausgeht, an ihn gebunden ist.
  • Spieler, die sich erfolgreich extrahieren, behalten alle Items.
  • Spieler, die die Extraktion nicht schaffen, verlieren alle Inventar-Items, wenn deleteItemsOnFailToExtract in der config.yml auf true steht (Standard). Das gilt für das Verlassen per /exc leave, für Verbindungsabbrüche und für tödlichen Schaden.
  • Solange das Match noch wartet oder herunterzählt, wird nichts gelöscht; die Regel greift erst, wenn das Match läuft.