Add customizable RPG attributes and fix character stats editing

Features:
- Made RPG attributes (STR/DEX/CON/INT/WIS/CHA) fully customizable
- Added enable/disable toggle for entire RPG Attributes section
- Users can add/remove/rename/toggle individual attributes
- Custom attribute names now appear in AI prompts for dice rolls
- Added proper CSS styling for attribute editor fields

Bug Fixes:
- Fixed character stat editing showing 0% on blur but saving correctly
- Character stats now create Stats line if missing from AI response
- Separated stat name from editable percentage value
- Added value sanitization (removes %, validates 0-100 range)
- Stats line now inserts before Thoughts line when created

Technical:
- Added buildAttributesString() helper in promptBuilder.js
- Updated generateTrackerInstructions and generateContextualSummary
- Restructured character stat HTML to prevent nested contenteditable
- Enhanced updateCharacterField to handle missing Stats lines
- Removed legacy default preset/regex import code
This commit is contained in:
Spicy_Marinara
2025-11-03 17:01:53 +01:00
parent f20710f5a3
commit d8707318c8
10 changed files with 218 additions and 143 deletions
+6
View File
@@ -365,6 +365,7 @@ function migrateToTrackerConfig() {
extensionSettings.trackerConfig = {
userStats: {
customStats: [],
showRPGAttributes: true,
rpgAttributes: [
{ id: 'str', name: 'STR', enabled: true },
{ id: 'dex', name: 'DEX', enabled: true },
@@ -457,6 +458,11 @@ function migrateToTrackerConfig() {
];
}
// Ensure showRPGAttributes exists (defaults to true)
if (extensionSettings.trackerConfig.userStats.showRPGAttributes === undefined) {
extensionSettings.trackerConfig.userStats.showRPGAttributes = true;
}
// Ensure all rpgAttributes have corresponding values in classicStats
if (extensionSettings.classicStats) {
for (const attr of extensionSettings.trackerConfig.userStats.rpgAttributes) {
+1
View File
@@ -72,6 +72,7 @@ export let extensionSettings = {
{ id: 'arousal', name: 'Arousal', enabled: true }
],
// RPG Attributes (customizable D&D-style attributes)
showRPGAttributes: true,
rpgAttributes: [
{ id: 'str', name: 'STR', enabled: true },
{ id: 'dex', name: 'DEX', enabled: true },