From 2bbe6b8e912bbc5f4a61a33988fb27aca7bd5eb3 Mon Sep 17 00:00:00 2001
From: historia <[not public]>
Date: Wed, 8 Jul 2026 02:23:59 -0400
Subject: feat: object and mob steal tables can include both tables and items
---
internal/admin/static/objecteditor.js | 51 +++++++++++++++++++++--------------
1 file changed, 31 insertions(+), 20 deletions(-)
(limited to 'internal/admin/static/objecteditor.js')
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 = '
';
- h += '
' + renderField(sec, sec.fields[0], data, -1) + '
';
+ var h = '
';
+ 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 += '
';
-
if (showGuard) {
- h += '
';
- h += '
' + renderField(sec, sec.fields[4], data, -1) + '
';
+ h += '
';
+ h += '
' + renderField(sec, sec.fields[3], data, -1) + '
';
h += '
';
h += '
';
} else {
- h += '
';
- h += '';
- h += '
';
+ h += '
';
}
+ h += '
';
+ 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 += '
';
- h += '';
- 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 += '';
- h += '
';
+ if (msgField) {
+ h += '';
+ var fidMsg = fieldIDSub(sec, st.key, idx, 'message');
+ var msgVal = item.message !== undefined && item.message !== null ? item.message : '';
+ h += '';
+ h += '
';
+ }
} else {
if (isVertical && !st.single) {
h += '';
@@ -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();
--
cgit v1.2.3