diff --git a/index.js b/index.js index d838c2a..1ac234c 100644 --- a/index.js +++ b/index.js @@ -1682,6 +1682,11 @@ function renderUserStats() { const stats = extensionSettings.userStats; const userName = getContext().name1; + // Initialize lastGeneratedData.userStats if it doesn't exist + if (!lastGeneratedData.userStats) { + lastGeneratedData.userStats = `Health: ${stats.health}%\nSustenance: ${stats.sustenance}%\nEnergy: ${stats.energy}%\nHygiene: ${stats.hygiene}%\nArousal: ${stats.arousal}%\n${stats.mood}: ${stats.conditions}\nInventory: ${stats.inventory}`; + } + // Get user portrait const userPortrait = getThumbnailUrl('persona', user_avatar); @@ -2149,21 +2154,9 @@ function renderThoughts() { $thoughtsContainer.addClass('rpg-content-updating'); } - // If no data yet, show placeholder + // Initialize if no data yet if (!lastGeneratedData.characterThoughts) { - const placeholderHtml = ` -
-
-
No characters detected
-
Generate a new response in the roleplay or switch to "Separate Generation" in Settings to access and click the "Refresh RPG Info" button
-
-
- `; - $thoughtsContainer.html(placeholderHtml); - if (extensionSettings.enableAnimations) { - setTimeout(() => $thoughtsContainer.removeClass('rpg-content-updating'), 600); - } - return; + lastGeneratedData.characterThoughts = ''; } const lines = lastGeneratedData.characterThoughts.split('\n'); @@ -2222,8 +2215,36 @@ function renderThoughts() { // console.log('[RPG Companion] Total characters parsed:', presentCharacters.length); // console.log('[RPG Companion] Characters array:', presentCharacters); + // If no characters parsed, show a placeholder editable card if (presentCharacters.length === 0) { - html += '
Unavailable
'; + // Get default character portrait (try to use the current character if in 1-on-1 chat) + let defaultPortrait = 'img/user-default.png'; + let defaultName = 'Character'; + + if (this_chid !== undefined && characters[this_chid]) { + if (characters[this_chid].avatar && characters[this_chid].avatar !== 'none') { + defaultPortrait = getThumbnailUrl('avatar', characters[this_chid].avatar); + } + defaultName = characters[this_chid].name || 'Character'; + } + + html += '
'; + html += ` +
+
+ ${defaultName} +
⚖️
+
+
+
+ 😊 + ${defaultName} +
+
Traits
+
+
+ `; + html += '
'; } else { html += '
'; for (const char of presentCharacters) { @@ -2409,7 +2430,7 @@ function updateInfoBoxField(field, value) { break; } } - + if (!weatherLineFound) { const dividerIndex = updatedLines.findIndex(line => line.includes('---')); if (dividerIndex >= 0) { @@ -2516,10 +2537,18 @@ function updateCharacterField(characterName, field, value) { // console.log('[RPG Companion] 📝 updateCharacterField called - character:', characterName, 'field:', field, 'value:', value); // console.log('[RPG Companion] 📝 Current lastGeneratedData.characterThoughts:', lastGeneratedData.characterThoughts); - if (!lastGeneratedData.characterThoughts) return; const lines = lastGeneratedData.characterThoughts.split('\n'); + // Initialize if it doesn't exist + if (!lastGeneratedData.characterThoughts) { + lastGeneratedData.characterThoughts = 'Present Characters\n---\n'; + } + + const lines = lastGeneratedData.characterThoughts.split('\n'); + let characterFound = false; + const updatedLines = lines.map(line => { // Case-insensitive character name matching if (line.toLowerCase().includes(characterName.toLowerCase())) { + characterFound = true; const parts = line.split('|').map(p => p.trim()); if (parts.length >= 2) { const firstPart = parts[0]; @@ -2561,6 +2590,43 @@ function updateCharacterField(characterName, field, value) { return line; }); + // If character wasn't found, create a new character line + if (!characterFound) { + // Find the divider line + const dividerIndex = updatedLines.findIndex(line => line.includes('---')); + if (dividerIndex >= 0) { + // Create initial character line with the edited field + let emoji = '😊'; + let name = characterName; + let traits = 'Traits'; + let relationship = 'Neutral'; + let thoughts = ''; + + // Apply the edited field + if (field === 'emoji') { + emoji = value; + } else if (field === 'name') { + name = value; + } else if (field === 'traits') { + traits = value; + } else if (field === 'thoughts') { + thoughts = value; + } else if (field === 'relationship') { + const emojiToRelationship = { + '⚔️': 'Enemy', + '⚖️': 'Neutral', + '⭐': 'Friend', + '❤️': 'Lover' + }; + relationship = emojiToRelationship[value] || value; + } + + const newCharacterLine = `${emoji}: ${name}, ${traits} | ${relationship} | ${thoughts}`; + // Insert after the divider + updatedLines.splice(dividerIndex + 1, 0, newCharacterLine); + } + } + lastGeneratedData.characterThoughts = updatedLines.join('\n'); // console.log('[RPG Companion] 💾 Updated lastGeneratedData.characterThoughts:', lastGeneratedData.characterThoughts);