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üssel | Typ | Standard | Beschreibung |
|---|---|---|---|
isEnabled | Boolean | true | Auf false setzen, damit die Tabelle keine Drops mehr erzeugt. Behälter überspringen eine deaktivierte Tabelle bei der Auswahl, und Mob-Kills ignorieren sie. |
spawnPools | String-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. |
lootTable | Objektliste | [] | 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-prozentige Wahrscheinlichkeit, dass dieser Pool einen Drop erzeugt. chance kann eine Zahl oder eine numerische Zeichenfolge sein. Ein Eintrag, dessen Pool-Datei in loot_pools/ nicht existiert oder dessen chance fehlt oder außerhalb von 0 bis 1 liegt, wird beim Start mit einer Warnung übersprungen; die übrigen Einträge werden trotzdem geladen.
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üssel | Typ | Standard | Beschreibung |
|---|---|---|---|
isEnabled | Boolean | true | Bei false würfeln Loot-Tabellen-Einträge, die auf diesen Pool verweisen, ihn nie. |
eliteMobsLoot | Objektliste | [] | EliteMobs-Custom-Items, die droppen können |
vanillaLoot | Objektliste | [] | 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.
Manche Custom-Items werden schon vor der Auswahl ausgeschlossen:
- Ein Item mit
permissionkommt nur aus Truhen und Fässern infrage, und nur für einen Spieler, der diese Berechtigung besitzt. Das gedroppte Item gehört diesem Spieler, niemand sonst kann es aufheben. Mob-Kills droppen nie berechtigungsgebundene Items. - Ein Item mit
itemType: CLASS_LOOTkommt nur infrage, wenn die EliteMobs-Klassenbeute es für Schwierigkeit und Rang des Drops zulässt. Klassenbeute droppt ungebunden.
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 material, das unbekannt, kein Item oder Luft ist, 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 Dezimalzahlen (0.5), Ganzzahlen (2) oder numerische Zeichenfolgen ("1.5") sein und müssen größer als 0 sein. Ein Eintrag mit fehlendem, null, negativem oder nicht numerischem Gewicht oder ohne filename bzw. material wird beim Start mit einer Warnung übersprungen; der Rest des Pools wird trotzdem geladen.
Container-Loot (Truhen und Fässer)
Sobald das Match live ist, platziert BetterStructures an jeder Behältermarkierung der Karte eine Truhe oder ein Fass. Wenn ein Spieler im Match eine Truhe oder ein Fass mit Rechtsklick anklickt:
- Der Vanilla-Behälter öffnet sich nie. Die Interaktion wird abgebrochen und durch den Loot-Ablauf von Extractioncraft ersetzt, der nur läuft, solange das Match live ist, und nur für Behälter, die das Match platziert hat.
- Der Spieler muss 3 Sekunden lang völlig stillstehen. Ein Countdown wird als Untertitel angezeigt.
- Jede Positionsänderung bricht die Interaktion ab ("Don't move while opening a container!"). Umschauen ohne Bewegung ist erlaubt. Ein Spieler kann immer nur einen Behälter gleichzeitig öffnen, und ein Behälter kann immer nur von einem Spieler gleichzeitig geöffnet werden.
- Die Loot-Tabelle wurde bereits zu Beginn der Interaktion aus der gewichteten
chestLootTables- oderbarrelLootTables-Liste des Pakets ausgewählt. Bei Erfolg erzeugt sie die Drops. - Der Behälter wird durch Luft ersetzt, und die Einträge der ausgewählten Loot-Tabelle werden jeweils unabhängig gewürfelt. Die resultierenden Items droppen am Standort des Behälters.
Behälter zeigen alle 10 Ticks Portal-Partikel an, solange sie in einem Match aktiv sind, um sie für Spieler sichtbar zu machen.
Behälter-Drops verwenden das contentLevel des Pakets (Standard 10) als EliteMobs-Item-Level. Ihre Klassenbeute-Schwierigkeit ergibt sich aus der Zone, in der der Behälter steht, wie unter Mob-Kill-Loot beschrieben, und ihr Rang ist der niedrigste, Trash.
Mob-Kill-Loot
Stirbt ein EliteMob in der Welt eines laufenden Extractioncraft-Matches, liest das Plugin die Custom-Data betterstructures:spawnpool aus, die BetterStructures den von ihm gespawnten Bossen anhängt. Mobs ohne diese Daten und Tode außerhalb einer laufenden Match-Welt erzeugen nie Extractioncraft-Loot.
Jede aktivierte 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 zusammen mit der Klassenbeute-Schwierigkeit und dem Rang des Bosses an EliteMobs für levelgerechte Item-Generierung weitergegeben.
BetterStructures spawnt jeden instanzierten Boss beim Live-Gang des Matches auf dem maxLevel seines Spawn-Pools. Jeder dieser Bosse erhält außerdem die Schwierigkeit der Zone, in der er gespawnt ist. Die Zonen sind quadratische Ringe um die Kartenmitte:
| Zone | Abstand von der Mitte auf einer der beiden Achsen | Standard-Schwierigkeit in EliteMobs |
|---|---|---|
2 | Weniger als ein Sechstel der Kartenbreite | Mythic |
1 | Weniger als ein Drittel der Kartenbreite | Hard |
0 | Der Rest der Karte | Normal |
Die Namen der Schwierigkeitsgrade stammen aus der Zuordnung difficultyIds in den Klassenbeute-Einstellungen von EliteMobs. EliteMobs wendet außerdem Boss-Kräfte, die per difficultyID eingeschränkt sind, nur in den passenden Zonen an; die Kobold-Mines-Bosse nutzen das. Die zur Mitte hin schrumpfende Weltgrenze drängt die Spieler daher in die Zonen Hard und Mythic.
Item-Verhalten beim Verlassen
- Spieler, die sich erfolgreich extrahieren, behalten alle Items. Extractioncraft bindet jedes ungebundene Item in Inventar, Mauszeiger und Handwerksraster per Soulbind an sie; bereits gebundene Items behalten ihren Besitzer. Gebunden wird nur, solange die EliteMobs-Verzauberung Soulbind aktiviert ist.
- Ein Server-Shutdown oder Plugin-Reload während eines laufenden Matches zählt wie eine Extraktion.
- Jedes andere Verlassen eines laufenden Matches leert Inventar, Mauszeiger und Handwerksraster, wenn
deleteItemsOnFailToExtractauftruesteht (Standard). Steht es auffalse, werden diese Items stattdessen per Soulbind gebunden. - Wer geht, während das Match wartet oder herunterzählt, behält sein Inventar unverändert. Alle Arten des Verlassens findest du unter Match-Ablauf.