fix(ui): improve armor set piece slot detection
- Added name-based slot detection as fallback when Type field doesn't match - Added more slot mapping variations (chest, armguards, thighguards, etc.) - Added _get_slot_from_name() helper for name-based detection - Now correctly equips all 7 pieces of armor sets like Frontier Adjusted
This commit is contained in:
parent
4375a00f0f
commit
297552fd1c
|
|
@ -1610,7 +1610,7 @@ class LoadoutManagerDialog(QDialog):
|
|||
"""Handle full armor set selection from API."""
|
||||
from core.nexus_full_api import get_nexus_api
|
||||
|
||||
# Get all armors to find matching pieces
|
||||
# Get all armors to find matching pieces with full data
|
||||
api = get_nexus_api()
|
||||
all_armors = api.get_all_armors()
|
||||
|
||||
|
|
@ -1619,16 +1619,21 @@ class LoadoutManagerDialog(QDialog):
|
|||
'head': self.slot_widgets[ArmorSlot.HEAD],
|
||||
'torso': self.slot_widgets[ArmorSlot.TORSO],
|
||||
'harness': self.slot_widgets[ArmorSlot.TORSO],
|
||||
'chest': self.slot_widgets[ArmorSlot.TORSO],
|
||||
'arms': self.slot_widgets[ArmorSlot.ARMS],
|
||||
'arm guards': self.slot_widgets[ArmorSlot.ARMS],
|
||||
'armguards': self.slot_widgets[ArmorSlot.ARMS],
|
||||
'hands': self.slot_widgets[ArmorSlot.HANDS],
|
||||
'gloves': self.slot_widgets[ArmorSlot.HANDS],
|
||||
'legs': self.slot_widgets[ArmorSlot.LEGS],
|
||||
'thigh guards': self.slot_widgets[ArmorSlot.LEGS],
|
||||
'thighguards': self.slot_widgets[ArmorSlot.LEGS],
|
||||
'shins': self.slot_widgets[ArmorSlot.SHINS],
|
||||
'shin guards': self.slot_widgets[ArmorSlot.SHINS],
|
||||
'shinguards': self.slot_widgets[ArmorSlot.SHINS],
|
||||
'feet': self.slot_widgets[ArmorSlot.FEET],
|
||||
'foot guards': self.slot_widgets[ArmorSlot.FEET],
|
||||
'footguards': self.slot_widgets[ArmorSlot.FEET],
|
||||
}
|
||||
|
||||
pieces_found = 0
|
||||
|
|
@ -1644,23 +1649,45 @@ class LoadoutManagerDialog(QDialog):
|
|||
break
|
||||
|
||||
if matching_armor:
|
||||
# Determine slot from armor type
|
||||
# Get slot from the armor's Type field or parse from name
|
||||
armor_type = matching_armor.type.lower()
|
||||
slot_widget = None
|
||||
|
||||
# Find matching slot
|
||||
# First try direct Type match
|
||||
if armor_type in slot_mapping:
|
||||
slot_widget = slot_mapping[armor_type]
|
||||
else:
|
||||
# Try parsing from armor type
|
||||
for type_key, widget in slot_mapping.items():
|
||||
if type_key in armor_type:
|
||||
slot_widget = widget
|
||||
break
|
||||
|
||||
# If still no match, try parsing from name
|
||||
if not slot_widget:
|
||||
name_lower = piece_name.lower()
|
||||
if 'helmet' in name_lower or 'cap' in name_lower:
|
||||
slot_widget = self.slot_widgets[ArmorSlot.HEAD]
|
||||
elif 'harness' in name_lower or 'chest' in name_lower or 'torso' in name_lower:
|
||||
slot_widget = self.slot_widgets[ArmorSlot.TORSO]
|
||||
elif 'arm' in name_lower or 'shoulder' in name_lower:
|
||||
slot_widget = self.slot_widgets[ArmorSlot.ARMS]
|
||||
elif 'glove' in name_lower or 'hand' in name_lower:
|
||||
slot_widget = self.slot_widgets[ArmorSlot.HANDS]
|
||||
elif 'thigh' in name_lower or ('leg' in name_lower and 'shin' not in name_lower):
|
||||
slot_widget = self.slot_widgets[ArmorSlot.LEGS]
|
||||
elif 'shin' in name_lower:
|
||||
slot_widget = self.slot_widgets[ArmorSlot.SHINS]
|
||||
elif 'foot' in name_lower or 'boot' in name_lower:
|
||||
slot_widget = self.slot_widgets[ArmorSlot.FEET]
|
||||
|
||||
if slot_widget:
|
||||
# Create ArmorPiece from NexusArmor
|
||||
from core.armor_system import ArmorPiece
|
||||
piece = ArmorPiece(
|
||||
item_id=matching_armor.item_id,
|
||||
name=matching_armor.name,
|
||||
slot=self._get_slot_from_type(armor_type),
|
||||
slot=self._get_slot_from_type(armor_type) if armor_type in slot_mapping else self._get_slot_from_name(piece_name),
|
||||
protection=ProtectionProfile(
|
||||
impact=matching_armor.protection_impact,
|
||||
cut=matching_armor.protection_cut,
|
||||
|
|
@ -1676,7 +1703,7 @@ class LoadoutManagerDialog(QDialog):
|
|||
slot_widget.set_piece(piece)
|
||||
pieces_found += 1
|
||||
else:
|
||||
pieces_not_found.append(f"{piece_name} (unknown slot)")
|
||||
pieces_not_found.append(f"{piece_name} (unknown slot: {armor_type})")
|
||||
else:
|
||||
pieces_not_found.append(piece_name)
|
||||
|
||||
|
|
@ -1698,7 +1725,7 @@ class LoadoutManagerDialog(QDialog):
|
|||
armor_type = armor_type.lower()
|
||||
if 'head' in armor_type or 'helmet' in armor_type:
|
||||
return ArmorSlot.HEAD
|
||||
elif 'torso' in armor_type or 'harness' in armor_type:
|
||||
elif 'torso' in armor_type or 'harness' in armor_type or 'chest' in armor_type:
|
||||
return ArmorSlot.TORSO
|
||||
elif 'arm' in armor_type:
|
||||
return ArmorSlot.ARMS
|
||||
|
|
@ -1713,6 +1740,26 @@ class LoadoutManagerDialog(QDialog):
|
|||
else:
|
||||
return ArmorSlot.TORSO # Default
|
||||
|
||||
def _get_slot_from_name(self, piece_name: str) -> 'ArmorSlot':
|
||||
"""Map armor piece name to ArmorSlot enum."""
|
||||
name_lower = piece_name.lower()
|
||||
if 'helmet' in name_lower or 'cap' in name_lower:
|
||||
return ArmorSlot.HEAD
|
||||
elif 'harness' in name_lower or 'chest' in name_lower or 'torso' in name_lower:
|
||||
return ArmorSlot.TORSO
|
||||
elif 'arm' in name_lower or 'shoulder' in name_lower:
|
||||
return ArmorSlot.ARMS
|
||||
elif 'glove' in name_lower or 'hand' in name_lower:
|
||||
return ArmorSlot.HANDS
|
||||
elif 'thigh' in name_lower or ('leg' in name_lower and 'shin' not in name_lower):
|
||||
return ArmorSlot.LEGS
|
||||
elif 'shin' in name_lower:
|
||||
return ArmorSlot.SHINS
|
||||
elif 'foot' in name_lower or 'boot' in name_lower:
|
||||
return ArmorSlot.FEET
|
||||
else:
|
||||
return ArmorSlot.TORSO # Default
|
||||
|
||||
def _on_select_healing_from_api(self):
|
||||
"""Open healing tool selector dialog from Nexus API."""
|
||||
from ui.healing_selector import HealingSelectorDialog
|
||||
|
|
|
|||
Loading…
Reference in New Issue