diff options
Diffstat (limited to 'internal/admin/static/objecteditor.js')
| -rw-r--r-- | internal/admin/static/objecteditor.js | 51 |
1 files changed, 31 insertions, 20 deletions
diff --git a/internal/admin/static/objecteditor.js b/internal/admin/static/objecteditor.js index 29ad66b..6abec3e 100644 --- a/internal/admin/static/objecteditor.js +++ b/internal/admin/static/objecteditor.js @@ -21,11 +21,16 @@ var SECTIONS = [ id: 'steal', label: 'Steal', path: 'steal', detect: function(d) { return d.steal !== undefined; }, fields: [ - ['table', 'Table ID', 'search', 'e.g. gem_table', '', null, 'drops'], ['level', 'Level', 'number', '1', 'narrow'], ['xp', 'XP', 'number', '5', 'narrow'], ['speed', 'Speed', 'number', '4', 'narrow'], ['guard_mob', 'Guard Mob', 'search', '', '', null, 'mobs'], + ], + subtables: [ + {label:'Drops', key:'drops', fields:[ + ['item_id', 'Item ID', 'search', '', '', 'items'], ['table', 'Table', 'search', '', '', 'drops'], + ['weight', 'Weight', 'number', '10', 'narrow'], ['quantity', 'Quantity', 'number', '', 'narrow'], + ]} ] }, { @@ -55,7 +60,7 @@ var SECTIONS = [ subtables: [ {label:'Drops', key:'drops', fields:[ ['item_id', 'Item ID', 'search', 'copper_ore', '', 'items'], ['table', 'Table', 'search', 'gem_table', '', 'drops'], - ['weight', 'Weight', 'number', '90', 'narrow'], ['level', 'Level', 'number', '1', 'narrow'], ['xp', 'XP', 'number', '17', 'narrow'], + ['weight', 'Weight', 'number', '10', 'narrow'], ['level', 'Level', 'number', '1', 'narrow'], ['xp', 'XP', 'number', '17', 'narrow'], ['quantity', 'Quantity', 'number', '1', 'narrow'], ['tool', 'Tool', 'select'], ['depletes', 'Depletes node', 'checkbox'], ['message', 'Message', 'text', 'You manage to mine some copper ore.'], ]} @@ -484,24 +489,21 @@ function renderStealCard(data) { var stealData = data.steal || {}; var showGuard = vis.guard_mob || (stealData.guard_mob && stealData.guard_mob !== ''); - var h = '<div style="display:flex;gap:10px">'; - h += '<div style="flex:1">' + renderField(sec, sec.fields[0], data, -1) + '</div>'; + var h = '<div style="display:flex;gap:10px;align-items:flex-start">'; + h += renderField(sec, sec.fields[0], data, -1); h += renderField(sec, sec.fields[1], data, -1); h += renderField(sec, sec.fields[2], data, -1); - h += renderField(sec, sec.fields[3], data, -1); - h += '</div>'; - if (showGuard) { - h += '<div style="display:flex;gap:6px;align-items:flex-start;margin-top:8px">'; - h += '<div style="flex:1">' + renderField(sec, sec.fields[4], data, -1) + '</div>'; + h += '<div style="display:flex;gap:4px;align-items:flex-start">'; + h += '<div style="flex:1">' + renderField(sec, sec.fields[3], data, -1) + '</div>'; h += '<button class="btn btn-sm btn-danger" onclick="hideGuardMob()" style="margin-top:2px">X</button>'; h += '</div>'; } else { - h += '<div style="margin-top:8px">'; - h += '<button class="btn btn-sm" style="background:var(--accent);color:var(--text);border:1px solid #1a5a8e;white-space:nowrap;width:100%" onclick="showGuardMob()">+ Guard Mob</button>'; - h += '</div>'; + h += '<button class="btn btn-sm" style="background:var(--accent);color:var(--text);border:1px solid #1a5a8e;white-space:nowrap;padding:4px 6px;font-size:11px;font-family:monospace;align-self:flex-end;margin-bottom:3px" onclick="showGuardMob()">+ Add Guard Mob</button>'; } + h += '</div>'; + sec.subtables.forEach(function(st) { h += renderSubtable(sec, st, data); }); return h; } @@ -645,7 +647,7 @@ function renderSubtable(sec, st, data) { } else { arr = sectionRoot[st.key] || []; } - var isDrops = sec.id === 'gather' && st.key === 'drops'; + var isDrops = (sec.id === 'gather' || sec.id === 'steal') && st.key === 'drops'; var isVertical = st.vertical; var gatherTools = []; if (isDrops) { @@ -697,12 +699,14 @@ function renderSubtable(sec, st, data) { } }); h += '</div>'; - h += '<div class="obj-sub-row-line">'; - var fidMsg = fieldIDSub(sec, st.key, idx, 'message'); - var msgVal = item.message !== undefined && item.message !== null ? item.message : ''; var msgField = st.fields.find(function(f){return f[0]==='message';}); - h += '<label class="obj-field obj-grow"><span>' + esc(msgField ? msgField[1] : 'Message') + '</span><input id="' + fidMsg + '" value="' + escAttr(String(msgVal)) + '" placeholder="' + escAttr(msgField ? msgField[3] : '') + '"></label>'; - h += '</div>'; + if (msgField) { + h += '<div class="obj-sub-row-line">'; + var fidMsg = fieldIDSub(sec, st.key, idx, 'message'); + var msgVal = item.message !== undefined && item.message !== null ? item.message : ''; + h += '<label class="obj-field obj-grow"><span>' + esc(msgField[1]) + '</span><input id="' + fidMsg + '" value="' + escAttr(String(msgVal)) + '" placeholder="' + escAttr(msgField[3] || '') + '"></label>'; + h += '</div>'; + } } else { if (isVertical && !st.single) { h += '<button class="btn btn-sm btn-danger" style="position:absolute;top:4px;right:6px" onclick="removeSubRow(\'' + sec.id + '\',\'' + st.key + '\',' + idx + ')">X</button>'; @@ -912,7 +916,7 @@ function addSection() { objectData[sec.path] = {}; } } else if (id === 'steal') { - objectData.steal = {table: ''}; + objectData.steal = {drops: []}; } expandedCards[id] = true; renderCurrent(); @@ -981,7 +985,14 @@ function addDropRow(cardID, subKey, dropType) { if (!sec) return; var sectionRoot = objectData[sec.path || ''] || objectData; var arr = sectionRoot[subKey] || []; - var empty = { item_id: '', table: '', weight: 0, level: 0, xp: 0, quantity: 0, depletes: false, tool: '', message: '', _type: (dropType === 'table' ? 't' : 'i') }; + var st = (sec.subtables || []).find(function(s) { return s.key === subKey; }); + var empty = { _type: (dropType === 'table' ? 't' : 'i') }; + if (st) { + st.fields.forEach(function(f) { + empty[f[0]] = f[2] === 'checkbox' ? false : (f[2] === 'number' ? 0 : ''); + }); + } + empty.weight = 10; arr.push(empty); sectionRoot[subKey] = arr; renderCurrent(); |
