@ -902,6 +902,7 @@
< / td >
< / td >
< td class = "actions" >
< td class = "actions" >
< button class = "btn btn-secondary btn-small" onclick = "editMonster('${m.id}')" > Edit< / button >
< button class = "btn btn-secondary btn-small" onclick = "editMonster('${m.id}')" > Edit< / button >
< button class = "btn btn-secondary btn-small" onclick = "cloneMonster('${m.id}')" > Clone< / button >
< button class = "btn btn-danger btn-small" onclick = "deleteMonster('${m.id}')" > Delete< / button >
< button class = "btn btn-danger btn-small" onclick = "deleteMonster('${m.id}')" > Delete< / button >
< / td >
< / td >
< / tr >
< / tr >
@ -962,6 +963,43 @@
document.getElementById('monsterModal').classList.add('active');
document.getElementById('monsterModal').classList.add('active');
}
}
function cloneMonster(id) {
const monster = monsters.find(m => m.id === id);
if (!monster) return;
// Generate unique key suffix
let suffix = '_copy';
let newKey = monster.key + suffix;
let counter = 1;
while (monsters.some(m => m.key === newKey)) {
newKey = monster.key + suffix + counter;
counter++;
}
document.getElementById('monsterModalTitle').textContent = 'Clone Monster';
document.getElementById('monsterId').value = ''; // Empty = create new
document.getElementById('monsterName').value = monster.name + ' (Copy)';
document.getElementById('monsterKey').value = newKey;
document.getElementById('monsterMinLevel').value = monster.min_level;
document.getElementById('monsterMaxLevel').value = monster.max_level;
document.getElementById('monsterHp').value = monster.base_hp;
document.getElementById('monsterAtk').value = monster.base_atk;
document.getElementById('monsterDef').value = monster.base_def;
document.getElementById('monsterXp').value = monster.base_xp;
document.getElementById('monsterWeight').value = monster.spawn_weight || 100;
document.getElementById('monsterEnabled').checked = false; // Disabled by default
// Parse and copy dialogues
const dialogues = monster.dialogues ? JSON.parse(monster.dialogues) : {};
document.getElementById('dialogueAnnoyed').value = (dialogues.annoyed || []).join('\n');
document.getElementById('dialogueFrustrated').value = (dialogues.frustrated || []).join('\n');
document.getElementById('dialogueDesperate').value = (dialogues.desperate || []).join('\n');
document.getElementById('dialoguePhilosophical').value = (dialogues.philosophical || []).join('\n');
document.getElementById('dialogueExistential').value = (dialogues.existential || []).join('\n');
document.getElementById('monsterModal').classList.add('active');
}
document.getElementById('addMonsterBtn').addEventListener('click', () => {
document.getElementById('addMonsterBtn').addEventListener('click', () => {
document.getElementById('monsterModalTitle').textContent = 'Add Monster';
document.getElementById('monsterModalTitle').textContent = 'Add Monster';
document.getElementById('monsterForm').reset();
document.getElementById('monsterForm').reset();