aboutsummaryrefslogtreecommitdiff
path: root/internal/admin/static/techeditor.js
diff options
context:
space:
mode:
Diffstat (limited to 'internal/admin/static/techeditor.js')
-rw-r--r--internal/admin/static/techeditor.js71
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'); });
+}