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."""
|
"""Handle full armor set selection from API."""
|
||||||
from core.nexus_full_api import get_nexus_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()
|
api = get_nexus_api()
|
||||||
all_armors = api.get_all_armors()
|
all_armors = api.get_all_armors()
|
||||||
|
|
||||||
|
|
@ -1619,16 +1619,21 @@ class LoadoutManagerDialog(QDialog):
|
||||||
'head': self.slot_widgets[ArmorSlot.HEAD],
|
'head': self.slot_widgets[ArmorSlot.HEAD],
|
||||||
'torso': self.slot_widgets[ArmorSlot.TORSO],
|
'torso': self.slot_widgets[ArmorSlot.TORSO],
|
||||||
'harness': self.slot_widgets[ArmorSlot.TORSO],
|
'harness': self.slot_widgets[ArmorSlot.TORSO],
|
||||||
|
'chest': self.slot_widgets[ArmorSlot.TORSO],
|
||||||
'arms': self.slot_widgets[ArmorSlot.ARMS],
|
'arms': self.slot_widgets[ArmorSlot.ARMS],
|
||||||
'arm guards': self.slot_widgets[ArmorSlot.ARMS],
|
'arm guards': self.slot_widgets[ArmorSlot.ARMS],
|
||||||
|
'armguards': self.slot_widgets[ArmorSlot.ARMS],
|
||||||
'hands': self.slot_widgets[ArmorSlot.HANDS],
|
'hands': self.slot_widgets[ArmorSlot.HANDS],
|
||||||
'gloves': self.slot_widgets[ArmorSlot.HANDS],
|
'gloves': self.slot_widgets[ArmorSlot.HANDS],
|
||||||
'legs': self.slot_widgets[ArmorSlot.LEGS],
|
'legs': self.slot_widgets[ArmorSlot.LEGS],
|
||||||
'thigh guards': self.slot_widgets[ArmorSlot.LEGS],
|
'thigh guards': self.slot_widgets[ArmorSlot.LEGS],
|
||||||
|
'thighguards': self.slot_widgets[ArmorSlot.LEGS],
|
||||||
'shins': self.slot_widgets[ArmorSlot.SHINS],
|
'shins': self.slot_widgets[ArmorSlot.SHINS],
|
||||||
'shin guards': self.slot_widgets[ArmorSlot.SHINS],
|
'shin guards': self.slot_widgets[ArmorSlot.SHINS],
|
||||||
|
'shinguards': self.slot_widgets[ArmorSlot.SHINS],
|
||||||
'feet': self.slot_widgets[ArmorSlot.FEET],
|
'feet': self.slot_widgets[ArmorSlot.FEET],
|
||||||
'foot guards': self.slot_widgets[ArmorSlot.FEET],
|
'foot guards': self.slot_widgets[ArmorSlot.FEET],
|
||||||
|
'footguards': self.slot_widgets[ArmorSlot.FEET],
|
||||||
}
|
}
|
||||||
|
|
||||||
pieces_found = 0
|
pieces_found = 0
|
||||||
|
|
@ -1644,15 +1649,37 @@ class LoadoutManagerDialog(QDialog):
|
||||||
break
|
break
|
||||||
|
|
||||||
if matching_armor:
|
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()
|
armor_type = matching_armor.type.lower()
|
||||||
slot_widget = None
|
slot_widget = None
|
||||||
|
|
||||||
# Find matching slot
|
# First try direct Type match
|
||||||
for type_key, widget in slot_mapping.items():
|
if armor_type in slot_mapping:
|
||||||
if type_key in armor_type:
|
slot_widget = slot_mapping[armor_type]
|
||||||
slot_widget = widget
|
else:
|
||||||
break
|
# 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:
|
if slot_widget:
|
||||||
# Create ArmorPiece from NexusArmor
|
# Create ArmorPiece from NexusArmor
|
||||||
|
|
@ -1660,7 +1687,7 @@ class LoadoutManagerDialog(QDialog):
|
||||||
piece = ArmorPiece(
|
piece = ArmorPiece(
|
||||||
item_id=matching_armor.item_id,
|
item_id=matching_armor.item_id,
|
||||||
name=matching_armor.name,
|
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(
|
protection=ProtectionProfile(
|
||||||
impact=matching_armor.protection_impact,
|
impact=matching_armor.protection_impact,
|
||||||
cut=matching_armor.protection_cut,
|
cut=matching_armor.protection_cut,
|
||||||
|
|
@ -1676,7 +1703,7 @@ class LoadoutManagerDialog(QDialog):
|
||||||
slot_widget.set_piece(piece)
|
slot_widget.set_piece(piece)
|
||||||
pieces_found += 1
|
pieces_found += 1
|
||||||
else:
|
else:
|
||||||
pieces_not_found.append(f"{piece_name} (unknown slot)")
|
pieces_not_found.append(f"{piece_name} (unknown slot: {armor_type})")
|
||||||
else:
|
else:
|
||||||
pieces_not_found.append(piece_name)
|
pieces_not_found.append(piece_name)
|
||||||
|
|
||||||
|
|
@ -1698,7 +1725,7 @@ class LoadoutManagerDialog(QDialog):
|
||||||
armor_type = armor_type.lower()
|
armor_type = armor_type.lower()
|
||||||
if 'head' in armor_type or 'helmet' in armor_type:
|
if 'head' in armor_type or 'helmet' in armor_type:
|
||||||
return ArmorSlot.HEAD
|
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
|
return ArmorSlot.TORSO
|
||||||
elif 'arm' in armor_type:
|
elif 'arm' in armor_type:
|
||||||
return ArmorSlot.ARMS
|
return ArmorSlot.ARMS
|
||||||
|
|
@ -1713,6 +1740,26 @@ class LoadoutManagerDialog(QDialog):
|
||||||
else:
|
else:
|
||||||
return ArmorSlot.TORSO # Default
|
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):
|
def _on_select_healing_from_api(self):
|
||||||
"""Open healing tool selector dialog from Nexus API."""
|
"""Open healing tool selector dialog from Nexus API."""
|
||||||
from ui.healing_selector import HealingSelectorDialog
|
from ui.healing_selector import HealingSelectorDialog
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue