feat: DBD custom items - medkit/flashlight/toolbox/key/map with charges, ItemUseListener, starting items for survivors
This commit is contained in:
parent
371384ca8a
commit
f9847dbb73
4 changed files with 495 additions and 57 deletions
|
|
@ -13,65 +13,14 @@ public class ChestLoot {
|
|||
this.random = ThreadLocalRandom.current();
|
||||
}
|
||||
|
||||
/** Roll a random item with weighted probabilities. */
|
||||
public ItemStack rollLoot() {
|
||||
int roll = random.nextInt(100);
|
||||
int currentWeight = 0;
|
||||
|
||||
currentWeight += 30;
|
||||
if (roll < currentWeight) {
|
||||
return createMedkit();
|
||||
}
|
||||
|
||||
currentWeight += 25;
|
||||
if (roll < currentWeight) {
|
||||
return createFlashlight();
|
||||
}
|
||||
|
||||
currentWeight += 25;
|
||||
if (roll < currentWeight) {
|
||||
return createToolbox();
|
||||
}
|
||||
|
||||
currentWeight += 12;
|
||||
if (roll < currentWeight) {
|
||||
return createKey();
|
||||
}
|
||||
|
||||
return createMap();
|
||||
}
|
||||
|
||||
private ItemStack createMedkit() {
|
||||
int charges = 12 + random.nextInt(8);
|
||||
return new ItemMedkit(charges).createItemStack();
|
||||
}
|
||||
|
||||
private ItemStack createFlashlight() {
|
||||
int charges = 6 + random.nextInt(6);
|
||||
return new ItemFlashlight(charges).createItemStack();
|
||||
}
|
||||
|
||||
private ItemStack createToolbox() {
|
||||
int charges = 10 + random.nextInt(10);
|
||||
return new ItemToolbox(charges).createItemStack();
|
||||
}
|
||||
|
||||
private ItemStack createKey() {
|
||||
int charges = 24 + random.nextInt(16);
|
||||
return new ItemKey(charges).createItemStack();
|
||||
}
|
||||
|
||||
private ItemStack createMap() {
|
||||
int charges = 8 + random.nextInt(12);
|
||||
return new ItemMap(charges).createItemStack();
|
||||
}
|
||||
|
||||
public int getRarity(ItemType type) {
|
||||
return switch (type) {
|
||||
case MEDKIT -> 30;
|
||||
case FLASHLIGHT -> 25;
|
||||
case TOOLBOX -> 25;
|
||||
case KEY -> 12;
|
||||
case MAP -> 8;
|
||||
};
|
||||
if (roll < 30) return DBDItems.medkit(12 + random.nextInt(5)); // 30%
|
||||
if (roll < 55) return DBDItems.flashlight(6 + random.nextInt(4)); // 25%
|
||||
if (roll < 80) return DBDItems.toolbox(10 + random.nextInt(7)); // 25%
|
||||
if (roll < 92) return DBDItems.key(24 + random.nextInt(9)); // 12%
|
||||
return DBDItems.map(8 + random.nextInt(9)); // 8%
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue