Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 54e1b0c2b2 | |||
| 9720a7befe | |||
| 130998105a | |||
| 411dc3eb9c |
+28
-19
@@ -40,6 +40,30 @@ const DEFAULT_USER_STATS = {
|
||||
clothing: "None",
|
||||
stored: {},
|
||||
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
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1016,23 +1040,7 @@ export function loadChatData() {
|
||||
if (!savedData) {
|
||||
// Reset to defaults if no metadata exists, then try to rebuild from message swipe data below.
|
||||
updateExtensionSettings({
|
||||
userStats: {
|
||||
health: 100,
|
||||
satiety: 100,
|
||||
energy: 100,
|
||||
hygiene: 100,
|
||||
arousal: 0,
|
||||
mood: '😐',
|
||||
conditions: 'None',
|
||||
// Use v2 inventory format for defaults
|
||||
inventory: {
|
||||
version: 2,
|
||||
onPerson: "None",
|
||||
clothing: "None",
|
||||
stored: {},
|
||||
assets: "None"
|
||||
}
|
||||
},
|
||||
userStats: cloneSerializable(DEFAULT_USER_STATS),
|
||||
quests: {
|
||||
main: "None",
|
||||
optional: []
|
||||
@@ -1052,9 +1060,10 @@ export function loadChatData() {
|
||||
clearThoughtBasedExpressionPortraits();
|
||||
}
|
||||
|
||||
// Restore stats
|
||||
// Restore stats — merge with defaults to preserve properties like `equipment`
|
||||
// that may not exist in older saves
|
||||
if (savedData?.userStats) {
|
||||
extensionSettings.userStats = { ...savedData.userStats };
|
||||
extensionSettings.userStats = mergeWithDefaults(DEFAULT_USER_STATS, savedData.userStats);
|
||||
}
|
||||
|
||||
// Restore classic stats
|
||||
|
||||
@@ -525,7 +525,8 @@ export async function onMessageReceived(data) {
|
||||
// Remove the tracker code blocks from the visible message
|
||||
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)
|
||||
cleanedMessage = cleanedMessage.replace(/```[^`]*?Stats\s*\n\s*---[^`]*?```\s*/gi, '');
|
||||
|
||||
@@ -77,7 +77,7 @@ function generateItemId() {
|
||||
* Updates lastGeneratedData and committedTrackerData to include current equipment state
|
||||
*/
|
||||
function updateEquipmentData() {
|
||||
const equipment = extensionSettings.userStats.equipment;
|
||||
const equipment = extensionSettings.userStats?.equipment || { items: [], slots: {} };
|
||||
const currentData = lastGeneratedData.userStats || committedTrackerData.userStats;
|
||||
|
||||
if (currentData) {
|
||||
@@ -153,7 +153,7 @@ export function showCreateModal() {
|
||||
* @param {string} itemId - ID of the item to edit
|
||||
*/
|
||||
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);
|
||||
if (!item) return;
|
||||
|
||||
@@ -363,7 +363,7 @@ export function saveEquipmentItem() {
|
||||
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)
|
||||
migrateItemTypes(equipment.items);
|
||||
@@ -423,7 +423,7 @@ export function saveEquipmentItem() {
|
||||
* @param {string} itemId - ID of the item to equip
|
||||
*/
|
||||
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);
|
||||
if (!item) return;
|
||||
|
||||
@@ -454,7 +454,7 @@ export function equipItem(itemId) {
|
||||
* @param {string} slotId - The slot to unequip from
|
||||
*/
|
||||
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);
|
||||
if (item) {
|
||||
item.slot = null;
|
||||
@@ -473,7 +473,7 @@ export function unequipItem(slotId) {
|
||||
* @param {string} itemId - ID of the item to delete
|
||||
*/
|
||||
export function deleteItem(itemId) {
|
||||
const equipment = extensionSettings.userStats.equipment;
|
||||
const equipment = extensionSettings.userStats?.equipment || { items: [], slots: {} };
|
||||
|
||||
// Unequip if currently equipped
|
||||
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
|
||||
*/
|
||||
export function getEquipmentBonuses() {
|
||||
const equipment = extensionSettings.userStats.equipment;
|
||||
const equipment = extensionSettings.userStats?.equipment || { items: [], slots: {} };
|
||||
const bonuses = {};
|
||||
const items = equipment.items || [];
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ function renderSlot(slotDef, item) {
|
||||
* @returns {string} Complete HTML for the equipment section
|
||||
*/
|
||||
function generateEquipmentHTML() {
|
||||
const equipment = extensionSettings.userStats.equipment;
|
||||
const equipment = extensionSettings.userStats?.equipment || { items: [], slots: {} };
|
||||
const slots = equipment.slots || {};
|
||||
const items = equipment.items || [];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user