feat: add Equipment tab with slot-type validation
Add a new Equipment tab to manage player gear and stat bonuses. Features: - 19 equipment slots across 8 categories (helmet, necklace, body armor, gloves, pants, shoes, rings, accessories) - Type-to-slot validation: each type has max equipped limits (1 helmet, 10 rings, 3 accessories, etc.) - Auto-slot assignment: equipping a ring fills the first available ring slot - Stat bonuses from equipped items display on RPG attributes (e.g. STR 10 +2) - Create/edit modal with stat checkboxes per RPG attribute - Inventory list for unequipped items Architecture: - Shared constants in src/systems/equipment/constants.js - Category-based types (Ring, Accessory) with auto-slot assignment - v7 migration converts legacy slot-specific types to generic categories - Full i18n support for all UI strings Files: - New: src/systems/equipment/constants.js - New: src/systems/interaction/equipmentActions.js - New: src/systems/rendering/equipment.js - Modified: state.js, persistence.js, template.html, index.js - Modified: userStats.js, desktop.js, mobile.js, layout.js, modals.js - Modified: apiClient.js, sillytavern.js, style.css, en.json
This commit is contained in:
@@ -317,6 +317,12 @@ export function updateSectionVisibility() {
|
||||
$('#rpg-quests').hide();
|
||||
}
|
||||
|
||||
if (extensionSettings.showEquipment) {
|
||||
$('#rpg-equipment').show();
|
||||
} else {
|
||||
$('#rpg-equipment').hide();
|
||||
}
|
||||
|
||||
if ($musicPlayerContainer) {
|
||||
if (extensionSettings.enableSpotifyMusic) {
|
||||
$musicPlayerContainer.show();
|
||||
@@ -328,7 +334,7 @@ export function updateSectionVisibility() {
|
||||
// Show/hide dividers intelligently
|
||||
// Divider after User Stats: shown if User Stats is visible AND at least one section after it is visible
|
||||
const showDividerAfterStats = extensionSettings.showUserStats &&
|
||||
(extensionSettings.showInfoBox || extensionSettings.showCharacterThoughts || extensionSettings.showInventory || extensionSettings.showQuests || extensionSettings.enableSpotifyMusic);
|
||||
(extensionSettings.showInfoBox || extensionSettings.showCharacterThoughts || extensionSettings.showInventory || extensionSettings.showEquipment || extensionSettings.showQuests || extensionSettings.enableSpotifyMusic);
|
||||
if (showDividerAfterStats) {
|
||||
$('#rpg-divider-stats').show();
|
||||
} else {
|
||||
@@ -337,7 +343,7 @@ export function updateSectionVisibility() {
|
||||
|
||||
// Divider after Info Box: shown if Info Box is visible AND at least one section after it is visible
|
||||
const showDividerAfterInfo = extensionSettings.showInfoBox &&
|
||||
(extensionSettings.showCharacterThoughts || extensionSettings.showInventory || extensionSettings.showQuests);
|
||||
(extensionSettings.showCharacterThoughts || extensionSettings.showInventory || extensionSettings.showEquipment || extensionSettings.showQuests);
|
||||
if (showDividerAfterInfo) {
|
||||
$('#rpg-divider-info').show();
|
||||
} else {
|
||||
@@ -346,21 +352,29 @@ export function updateSectionVisibility() {
|
||||
|
||||
// Divider after Thoughts: shown if Thoughts is visible AND at least one section after it is visible
|
||||
const showDividerAfterThoughts = extensionSettings.showCharacterThoughts &&
|
||||
(extensionSettings.showInventory || extensionSettings.showQuests || extensionSettings.enableSpotifyMusic);
|
||||
(extensionSettings.showInventory || extensionSettings.showEquipment || extensionSettings.showQuests || extensionSettings.enableSpotifyMusic);
|
||||
if (showDividerAfterThoughts) {
|
||||
$('#rpg-divider-thoughts').show();
|
||||
} else {
|
||||
$('#rpg-divider-thoughts').hide();
|
||||
}
|
||||
|
||||
// Divider after Inventory: shown if Inventory is visible AND (Quests or Music) is visible
|
||||
const showDividerAfterInventory = extensionSettings.showInventory && (extensionSettings.showQuests || extensionSettings.enableSpotifyMusic);
|
||||
// Divider after Inventory: shown if Inventory is visible AND (Equipment, Quests or Music) is visible
|
||||
const showDividerAfterInventory = extensionSettings.showInventory && (extensionSettings.showEquipment || extensionSettings.showQuests || extensionSettings.enableSpotifyMusic);
|
||||
if (showDividerAfterInventory) {
|
||||
$('#rpg-divider-inventory').show();
|
||||
} else {
|
||||
$('#rpg-divider-inventory').hide();
|
||||
}
|
||||
|
||||
// Divider after Equipment: shown if Equipment is visible AND (Quests or Music) is visible
|
||||
const showDividerAfterEquipment = extensionSettings.showEquipment && (extensionSettings.showQuests || extensionSettings.enableSpotifyMusic);
|
||||
if (showDividerAfterEquipment) {
|
||||
$('#rpg-divider-equipment').show();
|
||||
} else {
|
||||
$('#rpg-divider-equipment').hide();
|
||||
}
|
||||
|
||||
// Divider after Quests: shown if Quests is visible AND Music is visible
|
||||
const showDividerAfterQuests = extensionSettings.showQuests && extensionSettings.enableSpotifyMusic;
|
||||
if (showDividerAfterQuests) {
|
||||
|
||||
Reference in New Issue
Block a user