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