feat(gear): add real healing tools and Frontier armor set

- LoadoutManager now uses real healing_tools.py database (25+ tools)
- Added categorized healing tools: Medical Tools and Restoration Chips
- Added Frontier Set (Adjusted) with all 7 pieces
- Includes Regeneration Chip IV (L) for test run
This commit is contained in:
LemonNexus 2026-02-09 10:51:32 +00:00
parent c8128e954f
commit 95a511bbfd
3 changed files with 582 additions and 389 deletions

View File

@ -1191,6 +1191,83 @@ def get_mock_plates() -> List[ArmorPlate]:
# Helper Functions # Helper Functions
# ============================================================================ # ============================================================================
def create_frontier_set() -> ArmorSet:
"""Create the Frontier armor set (Arkadia mid-level, good mobility)."""
# Frontier Adjusted has 3800 durability = 20.83 hp/pec economy
frontier_economy = Decimal("0.048") # ~20.8 hp/pec
pieces = {
ArmorSlot.HEAD: ArmorPiece(
name="Frontier Helmet, Adjusted",
item_id="frontier_helmet_adj",
slot=ArmorSlot.HEAD,
set_name="Frontier",
decay_per_hp=frontier_economy,
protection=ProtectionProfile(impact=Decimal("4"), cut=Decimal("3"), stab=Decimal("3")),
weight=Decimal("0.5"),
),
ArmorSlot.CHEST: ArmorPiece(
name="Frontier Harness, Adjusted",
item_id="frontier_harness_adj",
slot=ArmorSlot.CHEST,
set_name="Frontier",
decay_per_hp=frontier_economy,
protection=ProtectionProfile(impact=Decimal("8"), cut=Decimal("6"), stab=Decimal("6")),
weight=Decimal("1.0"),
),
ArmorSlot.LEFT_ARM: ArmorPiece(
name="Frontier Arm Guards, Adjusted (L)",
item_id="frontier_arm_l_adj",
slot=ArmorSlot.LEFT_ARM,
set_name="Frontier",
decay_per_hp=frontier_economy,
protection=ProtectionProfile(impact=Decimal("3"), cut=Decimal("2"), stab=Decimal("2")),
weight=Decimal("0.4"),
),
ArmorSlot.RIGHT_ARM: ArmorPiece(
name="Frontier Arm Guards, Adjusted (R)",
item_id="frontier_arm_r_adj",
slot=ArmorSlot.RIGHT_ARM,
set_name="Frontier",
decay_per_hp=frontier_economy,
protection=ProtectionProfile(impact=Decimal("3"), cut=Decimal("2"), stab=Decimal("2")),
weight=Decimal("0.4"),
),
ArmorSlot.LEFT_HAND: ArmorPiece(
name="Frontier Gloves, Adjusted (L)",
item_id="frontier_gloves_l_adj",
slot=ArmorSlot.LEFT_HAND,
set_name="Frontier",
decay_per_hp=frontier_economy,
protection=ProtectionProfile(impact=Decimal("2"), cut=Decimal("1"), stab=Decimal("1")),
weight=Decimal("0.3"),
),
ArmorSlot.RIGHT_HAND: ArmorPiece(
name="Frontier Gloves, Adjusted (R)",
item_id="frontier_gloves_r_adj",
slot=ArmorSlot.RIGHT_HAND,
set_name="Frontier",
decay_per_hp=frontier_economy,
protection=ProtectionProfile(impact=Decimal("2"), cut=Decimal("1"), stab=Decimal("1")),
weight=Decimal("0.3"),
),
ArmorSlot.LEGS: ArmorPiece(
name="Frontier Thigh+Shin Guards, Adjusted",
item_id="frontier_legs_adj",
slot=ArmorSlot.LEGS,
set_name="Frontier",
decay_per_hp=frontier_economy,
protection=ProtectionProfile(impact=Decimal("7"), cut=Decimal("5"), stab=Decimal("5")),
weight=Decimal("1.1"),
),
}
return ArmorSet(
name="Frontier Set (Adjusted)",
set_id="frontier_set_adj",
pieces=pieces,
)
def get_all_armor_sets() -> List[ArmorSet]: def get_all_armor_sets() -> List[ArmorSet]:
"""Get all available armor sets.""" """Get all available armor sets."""
return [ return [
@ -1198,6 +1275,7 @@ def get_all_armor_sets() -> List[ArmorSet]:
create_vigilante_set(), create_vigilante_set(),
create_ghost_set(), create_ghost_set(),
create_shogun_set(), create_shogun_set(),
create_frontier_set(),
create_hermes_set(), create_hermes_set(),
] ]

File diff suppressed because it is too large Load Diff

View File

@ -286,19 +286,35 @@ class LoadoutConfig:
# ============================================================================ # ============================================================================
# Mock Data for Healing # Healing Tools Data - Using real database
# ============================================================================ # ============================================================================
MOCK_HEALING = [ def get_healing_tools_data():
{"name": "Vivo T10", "cost": Decimal("2.0"), "amount": Decimal("12")}, """Get healing tools from the real database."""
{"name": "Vivo T15", "cost": Decimal("3.5"), "amount": Decimal("18")}, try:
{"name": "Vivo S10", "cost": Decimal("4.0"), "amount": Decimal("25")}, from core.healing_tools import HEALING_TOOLS
{"name": "Refurbished H.E.A.R.T.", "cost": Decimal("1.5"), "amount": Decimal("8")}, return [
{"name": "Restoration Chip I", "cost": Decimal("5.0"), "amount": Decimal("30")}, {
{"name": "Restoration Chip II", "cost": Decimal("8.0"), "amount": Decimal("50")}, "name": tool.name,
{"name": "Restoration Chip III", "cost": Decimal("12.0"), "amount": Decimal("80")}, "cost": tool.decay_pec,
{"name": "Mod 2350", "cost": Decimal("15.0"), "amount": Decimal("100")}, "amount": tool.heal_amount,
] "is_chip": tool.is_chip
}
for tool in HEALING_TOOLS
]
except ImportError:
# Fallback to mock data if import fails
return [
{"name": "Vivo T10", "cost": Decimal("0.815"), "amount": Decimal("10")},
{"name": "Vivo S10", "cost": Decimal("1.705"), "amount": Decimal("21")},
{"name": "Hedoc MM10", "cost": Decimal("2.09"), "amount": Decimal("44")},
{"name": "Adjusted Restoration Chip", "cost": Decimal("2.88"), "amount": Decimal("60")},
{"name": "Restoration Chip IV (L)", "cost": Decimal("2.8"), "amount": Decimal("45")},
]
# Legacy mock data for compatibility
MOCK_HEALING = get_healing_tools_data()
# ============================================================================ # ============================================================================
@ -1310,11 +1326,28 @@ class LoadoutManagerDialog(QDialog):
self.armor_set_combo.addItem(display, armor_set) self.armor_set_combo.addItem(display, armor_set)
def _populate_healing_data(self): def _populate_healing_data(self):
"""Populate healing combo with data.""" """Populate healing combo with real data from database."""
self.heal_combo.clear() self.heal_combo.clear()
self.heal_combo.addItem("-- Custom --") self.heal_combo.addItem("-- Custom --")
for heal in MOCK_HEALING:
self.heal_combo.addItem(heal["name"]) # Get real healing tools
healing_tools = get_healing_tools_data()
# Sort by category (chips last)
medical_tools = [h for h in healing_tools if not h.get("is_chip", False)]
chips = [h for h in healing_tools if h.get("is_chip", False)]
# Add medical tools first
if medical_tools:
self.heal_combo.addItem("--- Medical Tools ---")
for tool in medical_tools:
self.heal_combo.addItem(tool["name"])
# Add restoration chips
if chips:
self.heal_combo.addItem("--- Restoration Chips ---")
for chip in sorted(chips, key=lambda x: x["amount"]):
self.heal_combo.addItem(chip["name"])
def _on_select_weapon(self): def _on_select_weapon(self):
"""Open weapon selector dialog.""" """Open weapon selector dialog."""