3caa74fbf8
- Add pre-encounter narrative configuration modal with combat/summary style settings - Change POV fields to text inputs (default: narrator) for custom character names - Fix targeting system for enemies with spaces in names (e.g., 'Gilded Thrall 1') - Display character-specific sprites/avatars in targeting modal instead of generic emojis - Add combat difficulty scaling guidance to prevent trivial god defeats or endless wolf battles - Integrate tracker updates in combat summary generation (together mode) - Update auto-save logs description to clarify file storage vs chat history - Apply extension theming to Close Combat Window button
131 lines
3.3 KiB
JavaScript
131 lines
3.3 KiB
JavaScript
/**
|
|
* Encounter State Module
|
|
* Manages combat encounter state and history
|
|
*/
|
|
|
|
/**
|
|
* Current encounter state
|
|
*/
|
|
export let currentEncounter = {
|
|
active: false,
|
|
initialized: false,
|
|
combatHistory: [], // Array of {role: 'user'|'assistant'|'system', content: string}
|
|
combatStats: null, // Current combat stats (HP, party, enemies, etc.)
|
|
preEncounterContext: [], // Messages from before the encounter started
|
|
encounterStartMessage: '', // The message that triggered the encounter
|
|
encounterLog: [] // Full log of combat actions for final summary
|
|
};
|
|
|
|
/**
|
|
* Encounter logs storage (per chat)
|
|
*/
|
|
export let encounterLogs = {
|
|
// chatId: [
|
|
// {
|
|
// timestamp: Date,
|
|
// log: [],
|
|
// summary: string,
|
|
// result: 'victory'|'defeat'|'fled'
|
|
// }
|
|
// ]
|
|
};
|
|
|
|
/**
|
|
* Sets the current encounter state
|
|
* @param {object} encounter - The encounter state object
|
|
*/
|
|
export function setCurrentEncounter(encounter) {
|
|
currentEncounter = encounter;
|
|
}
|
|
|
|
/**
|
|
* Updates current encounter state with partial data
|
|
* @param {object} updates - Partial encounter state to merge
|
|
*/
|
|
export function updateCurrentEncounter(updates) {
|
|
Object.assign(currentEncounter, updates);
|
|
}
|
|
|
|
/**
|
|
* Resets the encounter state
|
|
*/
|
|
export function resetEncounter() {
|
|
currentEncounter = {
|
|
active: false,
|
|
initialized: false,
|
|
combatHistory: [],
|
|
combatStats: null,
|
|
preEncounterContext: [],
|
|
encounterStartMessage: '',
|
|
encounterLog: []
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Adds a message to combat history
|
|
* @param {string} role - Message role ('user', 'assistant', or 'system')
|
|
* @param {string} content - Message content
|
|
*/
|
|
export function addCombatMessage(role, content) {
|
|
currentEncounter.combatHistory.push({ role, content });
|
|
}
|
|
|
|
/**
|
|
* Adds an entry to the encounter log
|
|
* @param {string} action - The action taken
|
|
* @param {string} result - The result of the action
|
|
*/
|
|
export function addEncounterLogEntry(action, result) {
|
|
currentEncounter.encounterLog.push({
|
|
timestamp: Date.now(),
|
|
action,
|
|
result
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Saves an encounter log for a specific chat
|
|
* @param {string} chatId - The chat identifier
|
|
* @param {object} logData - The encounter log data
|
|
*/
|
|
export function saveEncounterLog(chatId, logData) {
|
|
if (!encounterLogs[chatId]) {
|
|
encounterLogs[chatId] = [];
|
|
}
|
|
encounterLogs[chatId].push({
|
|
timestamp: new Date(),
|
|
log: logData.log || [],
|
|
summary: logData.summary || '',
|
|
result: logData.result || 'unknown'
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Gets encounter logs for a specific chat
|
|
* @param {string} chatId - The chat identifier
|
|
* @returns {Array} Array of encounter logs
|
|
*/
|
|
export function getEncounterLogs(chatId) {
|
|
return encounterLogs[chatId] || [];
|
|
}
|
|
|
|
/**
|
|
* Clears all encounter logs for a specific chat
|
|
* @param {string} chatId - The chat identifier
|
|
*/
|
|
export function clearEncounterLogs(chatId) {
|
|
if (encounterLogs[chatId]) {
|
|
delete encounterLogs[chatId];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Exports encounter logs as JSON
|
|
* @param {string} chatId - The chat identifier
|
|
* @returns {string} JSON string of encounter logs
|
|
*/
|
|
export function exportEncounterLogs(chatId) {
|
|
const logs = getEncounterLogs(chatId);
|
|
return JSON.stringify(logs, null, 2);
|
|
}
|