diff options
Diffstat (limited to 'internal/admin/static/techeditor.js')
| -rw-r--r-- | internal/admin/static/techeditor.js | 71 |
1 files changed, 57 insertions, 14 deletions
diff --git a/internal/admin/static/techeditor.js b/internal/admin/static/techeditor.js index ffb2b7b..8e18a7a 100644 --- a/internal/admin/static/techeditor.js +++ b/internal/admin/static/techeditor.js @@ -7,25 +7,25 @@ var TECH_SECTIONS = [ { id: 'core', label: 'Core', always: true, fields: [ - ['name', 'Name', 'text'], - ['level', 'Level', 'number', '', 'narrow'], - ['drain_rate', 'Drain Rate', 'number', '', 'narrow'], - ['category', 'Category', 'text'], - ['group', 'Group', 'text'], + ['name', 'Name', 'text', 'Protect from Melee'], + ['level', 'Level', 'number', '37', 'narrow'], + ['drain_rate', 'Drain Rate', 'number', '0.5', 'narrow'], + ['category', 'Category', 'text', 'protection'], + ['group', 'Group', 'text', 'melee'], ] }, { id: 'effects', label: 'Effects', always: true, path: 'effects', fields: [ - ['accuracy_percent', 'Accuracy %', 'number', '', 'narrow'], - ['strength_percent', 'Strength %', 'number', '', 'narrow'], - ['defense_percent', 'Defense %', 'number', '', 'narrow'], - ['ranged_percent', 'Ranged %', 'number', '', 'narrow'], - ['science_percent', 'Science %', 'number', '', 'narrow'], - ['damage_reduction', 'Damage Reduction', 'number', '', 'narrow'], - ['hp_regen_multi', 'HP Regen Multi', 'number', '', 'narrow'], - ['preserve_drain', 'Preserve Drain', 'number', '', 'narrow'], - ['retribution_pct', 'Retribution %', 'number', '', 'narrow'], + ['accuracy_percent', 'Accuracy %', 'number', '5', 'narrow'], + ['strength_percent', 'Strength %', 'number', '5', 'narrow'], + ['defense_percent', 'Defense %', 'number', '5', 'narrow'], + ['ranged_percent', 'Ranged %', 'number', '5', 'narrow'], + ['science_percent', 'Science %', 'number', '5', 'narrow'], + ['damage_reduction', 'Damage Reduction', 'number', '40', 'narrow'], + ['hp_regen_multi', 'HP Regen Multi', 'number', '2', 'narrow'], + ['preserve_drain', 'Preserve Drain', 'number', '1', 'narrow'], + ['retribution_pct', 'Retribution %', 'number', '25', 'narrow'], ['protect_melee', 'Protect Melee', 'checkbox'], ['protect_ranged', 'Protect Ranged', 'checkbox'], ['protect_science', 'Protect Science', 'checkbox'], @@ -89,6 +89,7 @@ function renderTechEditor(id, data) { html += '<div class="btn-row">'; html += '<button class="btn btn-primary" onclick="saveTech()">Save</button>'; + html += '<button class="btn" onclick="duplicateTech()">Duplicate</button>'; html += '<button class="btn btn-danger" onclick="deleteTech()">Delete</button>'; html += '<button class="btn btn-sm" style="margin-left:auto" onclick="createNewDir()">New Directory</button>'; html += '</div>'; @@ -192,3 +193,45 @@ function deleteTech() { loadList(); }).catch(function(e) { notify('Delete failed: ' + e.message, 'error'); }); } + +function duplicateTech() { + var baseID = techID + '_copy'; + var newID = baseID; + var counter = 2; + while (true) { + var exists = false; + for (var i = 0; i < allIDs.length; i++) { + if (allIDs[i] === newID) { exists = true; break; } + } + if (!exists) break; + newID = baseID + '_' + counter; + counter++; + } + + var copy = JSON.parse(JSON.stringify(techData)); + delete copy._raw; + delete copy._path; + copy.id = newID; + + var dir = ''; + if (techData._path) { + var parts = techData._path.split('/'); + var parentDir = parts[parts.length - 2]; + if (parentDir !== 'techs') dir = parentDir; + } + + API.post('/api/techs', {id: newID}).then(function() { + var putOp = API.put('/api/techs/' + encodeURIComponent(newID), copy); + if (dir) { + return putOp.then(function() { + return API.post('/api/techs/move', {id: newID, dir: dir}); + }); + } + return putOp; + }).then(function() { + notify('Duplicated as ' + newID, 'success'); + updateUndoBar(); + loadList(); + loadTechEditor(newID); + }).catch(function(e) { notify('Duplicate failed: ' + e.message, 'error'); }); +} |
