scripts/blacksmith.pyΒΆ

Part of Dungeon Explorer.

 1"""Blacksmith: combine 3 same-rarity items into 1 next-rarity item."""
 2
 3from .inventory import Inventory
 4from .item import Item, Rarity
 5
 6
 7def upgrade(inventory: Inventory, indices: list[int]) -> Item | None:
 8    """Combine 3 same-rarity items into 1 next-rarity item.
 9
10    Returns the new item, or None if upgrade fails.
11    """
12    if len(indices) != 3:
13        return None
14    items = [inventory.get(i) for i in indices]
15    if any(item is None for item in items):
16        return None
17    rarities = {item.rarity for item in items if item is not None}
18    if len(rarities) != 1:
19        return None
20    base_rarity = rarities.pop()
21    if base_rarity >= Rarity.LEGENDARY:
22        return None  # Can't upgrade legendary
23
24    # Pick the first item as template
25    template = items[0]
26    new_rarity = Rarity(int(base_rarity) + 1)
27
28    # Remove source items
29    for i in sorted(indices, reverse=True):
30        inventory.remove(i)
31
32    # Create upgraded item
33    new_item = Item(
34        template_key=template.template_key,
35        display_base=template.display_base,
36        slot=template.slot,
37        rarity=new_rarity,
38        ilvl=template.ilvl + 2,
39        base_stats={k: v * 1.3 for k, v in template.base_stats.items()},
40        prefixes=list(template.prefixes),
41        suffixes=list(template.suffixes),
42    )
43    inventory.add(new_item)
44    return new_item