Fix Equipment modal and json filter

This commit is contained in:
2026-07-03 11:53:35 +02:00
parent 130998105a
commit 9720a7befe
5 changed files with 35 additions and 10 deletions
+24
View File
@@ -40,6 +40,30 @@ const DEFAULT_USER_STATS = {
clothing: "None", clothing: "None",
stored: {}, stored: {},
assets: "None" assets: "None"
},
equipment: {
items: [],
slots: {
helmet: null,
ring1: null,
ring2: null,
ring3: null,
ring4: null,
ring5: null,
ring6: null,
ring7: null,
ring8: null,
ring9: null,
ring10: null,
necklace: null,
bodyArmor: null,
pants: null,
shoes: null,
gloves: null,
accessory1: null,
accessory2: null,
accessory3: null
}
} }
}; };
+2 -1
View File
@@ -525,7 +525,8 @@ export async function onMessageReceived(data) {
// Remove the tracker code blocks from the visible message // Remove the tracker code blocks from the visible message
let cleanedMessage = responseText; let cleanedMessage = responseText;
// Note: JSON code blocks are hidden from display by regex script (but preserved in message data) // Remove JSON code blocks (v3 format) — primary defense, works regardless of regex script
cleanedMessage = cleanedMessage.replace(/```(?:json|markdown)?\s*[\s\S]*?```/gim, '');
// Remove old text format code blocks (legacy support) // Remove old text format code blocks (legacy support)
cleanedMessage = cleanedMessage.replace(/```[^`]*?Stats\s*\n\s*---[^`]*?```\s*/gi, ''); cleanedMessage = cleanedMessage.replace(/```[^`]*?Stats\s*\n\s*---[^`]*?```\s*/gi, '');
+7 -7
View File
@@ -77,7 +77,7 @@ function generateItemId() {
* Updates lastGeneratedData and committedTrackerData to include current equipment state * Updates lastGeneratedData and committedTrackerData to include current equipment state
*/ */
function updateEquipmentData() { function updateEquipmentData() {
const equipment = extensionSettings.userStats.equipment; const equipment = extensionSettings.userStats?.equipment || { items: [], slots: {} };
const currentData = lastGeneratedData.userStats || committedTrackerData.userStats; const currentData = lastGeneratedData.userStats || committedTrackerData.userStats;
if (currentData) { if (currentData) {
@@ -153,7 +153,7 @@ export function showCreateModal() {
* @param {string} itemId - ID of the item to edit * @param {string} itemId - ID of the item to edit
*/ */
export function showEditModal(itemId) { export function showEditModal(itemId) {
const equipment = extensionSettings.userStats.equipment; const equipment = extensionSettings.userStats?.equipment || { items: [], slots: {} };
const item = equipment.items.find(i => i.id === itemId); const item = equipment.items.find(i => i.id === itemId);
if (!item) return; if (!item) return;
@@ -363,7 +363,7 @@ export function saveEquipmentItem() {
stats[attr] = Math.max(1, Math.min(20, val)); stats[attr] = Math.max(1, Math.min(20, val));
}); });
const equipment = extensionSettings.userStats.equipment; const equipment = extensionSettings.userStats?.equipment || { items: [], slots: {} };
// Migrate old types (ring1-ring10 -> ring, accessory1-3 -> accessory) // Migrate old types (ring1-ring10 -> ring, accessory1-3 -> accessory)
migrateItemTypes(equipment.items); migrateItemTypes(equipment.items);
@@ -423,7 +423,7 @@ export function saveEquipmentItem() {
* @param {string} itemId - ID of the item to equip * @param {string} itemId - ID of the item to equip
*/ */
export function equipItem(itemId) { export function equipItem(itemId) {
const equipment = extensionSettings.userStats.equipment; const equipment = extensionSettings.userStats?.equipment || { items: [], slots: {} };
const item = equipment.items.find(i => i.id === itemId); const item = equipment.items.find(i => i.id === itemId);
if (!item) return; if (!item) return;
@@ -454,7 +454,7 @@ export function equipItem(itemId) {
* @param {string} slotId - The slot to unequip from * @param {string} slotId - The slot to unequip from
*/ */
export function unequipItem(slotId) { export function unequipItem(slotId) {
const equipment = extensionSettings.userStats.equipment; const equipment = extensionSettings.userStats?.equipment || { items: [], slots: {} };
const item = equipment.items.find(i => i.slot === slotId); const item = equipment.items.find(i => i.slot === slotId);
if (item) { if (item) {
item.slot = null; item.slot = null;
@@ -473,7 +473,7 @@ export function unequipItem(slotId) {
* @param {string} itemId - ID of the item to delete * @param {string} itemId - ID of the item to delete
*/ */
export function deleteItem(itemId) { export function deleteItem(itemId) {
const equipment = extensionSettings.userStats.equipment; const equipment = extensionSettings.userStats?.equipment || { items: [], slots: {} };
// Unequip if currently equipped // Unequip if currently equipped
const item = equipment.items.find(i => i.id === itemId); const item = equipment.items.find(i => i.id === itemId);
@@ -497,7 +497,7 @@ export function deleteItem(itemId) {
* @returns {Object} Map of attribute ID to total bonus value * @returns {Object} Map of attribute ID to total bonus value
*/ */
export function getEquipmentBonuses() { export function getEquipmentBonuses() {
const equipment = extensionSettings.userStats.equipment; const equipment = extensionSettings.userStats?.equipment || { items: [], slots: {} };
const bonuses = {}; const bonuses = {};
const items = equipment.items || []; const items = equipment.items || [];
+1 -1
View File
@@ -64,7 +64,7 @@ function renderSlot(slotDef, item) {
* @returns {string} Complete HTML for the equipment section * @returns {string} Complete HTML for the equipment section
*/ */
function generateEquipmentHTML() { function generateEquipmentHTML() {
const equipment = extensionSettings.userStats.equipment; const equipment = extensionSettings.userStats?.equipment || { items: [], slots: {} };
const slots = equipment.slots || {}; const slots = equipment.slots || {};
const items = equipment.items || []; const items = equipment.items || [];
+1 -1
View File
@@ -12183,7 +12183,7 @@ body.documentstyle .rpg-inline-thoughts {
} }
.rpg-equipment-modal-content { .rpg-equipment-modal-content {
background: var(--SmartThemeDialogBgColor); background: var(--SmartThemeDialogBgColor, #1e1e2e);
border-radius: 8px; border-radius: 8px;
width: 90%; width: 90%;
max-width: 420px; max-width: 420px;