diff options
Diffstat (limited to 'internal/admin/static/mobeditor.js')
| -rw-r--r-- | internal/admin/static/mobeditor.js | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/internal/admin/static/mobeditor.js b/internal/admin/static/mobeditor.js index c142fb4..b5d2395 100644 --- a/internal/admin/static/mobeditor.js +++ b/internal/admin/static/mobeditor.js @@ -61,10 +61,17 @@ var MOB_SECTIONS = [ id: 'steal', label: 'Steal', path: 'steal', detect: function(d) { return d.steal; }, 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'], + ], + subtables: [ + {label:'Drops', key:'drops', fields:[ + ['item_id', 'Item', 'search', '', '', null, 'items'], + ['table', 'Table', 'search', '', '', null, 'drops'], + ['weight', 'Weight', 'number', '', 'narrow'], + ['quantity', 'Quantity', 'number', '', 'narrow'], + ]} ] }, { @@ -456,7 +463,7 @@ function renderMobSubtable(sec, st, data) { if (st.table) { return renderMobTableSubtable(sec, st, arr); } - if (sec.id === 'drops' && st.key === 'loot') { + if ((sec.id === 'drops' && st.key === 'loot') || (sec.id === 'steal' && st.key === 'drops')) { return renderMobLootSubtable(sec, st, arr); } var h = '<div class="obj-subtable">'; @@ -482,6 +489,7 @@ function renderMobSubtable(sec, st, data) { function renderMobLootSubtable(sec, st, arr) { var byKey = {}; st.fields.forEach(function(f) { byKey[f[0]] = f; }); + var isSteal = sec.id === 'steal'; var rollsField = ['quantity', 'Rolls', 'number', '', 'narrow']; var h = '<div class="obj-subtable">'; @@ -492,7 +500,7 @@ function renderMobLootSubtable(sec, st, arr) { if (kind === 'table') { h += renderMobSubField(sec, st.key, idx, byKey['table'], item.table); h += renderMobSubField(sec, st.key, idx, byKey['weight'], item.weight); - h += renderMobSubField(sec, st.key, idx, rollsField, item.quantity); + h += renderMobSubField(sec, st.key, idx, isSteal ? byKey['quantity'] : rollsField, item.quantity); } else { h += renderMobSubField(sec, st.key, idx, byKey['item_id'], item.item_id); h += renderMobSubField(sec, st.key, idx, byKey['weight'], item.weight); @@ -502,8 +510,8 @@ function renderMobLootSubtable(sec, st, arr) { h += '</div>'; }); h += '<div style="display:flex;gap:6px">'; - h += '<button class="btn btn-sm obj-sub-add" onclick="addMobLootRow(\'item\')">+ Add Item</button>'; - h += '<button class="btn btn-sm obj-sub-add" onclick="addMobLootRow(\'table\')">+ Add Table</button>'; + h += '<button class="btn btn-sm obj-sub-add" onclick="addMobLootRow(\'' + sec.id + '\',\'' + st.key + '\',\'item\')">+ Add Item</button>'; + h += '<button class="btn btn-sm obj-sub-add" onclick="addMobLootRow(\'' + sec.id + '\',\'' + st.key + '\',\'table\')">+ Add Table</button>'; h += '</div>'; h += '</div>'; return h; @@ -615,6 +623,8 @@ function mobAddSection() { mobData[sec.path] = {nodes:{start:{messages:[],options:[]}}}; } else if (id === 'shop') { mobData[sec.path] = {buy_percentage:40, change_percentage:3, buys_anything:true, items:[]}; + } else if (id === 'steal') { + mobData[sec.path] = {drops: []}; } else { mobData[sec.path] = {}; } @@ -641,13 +651,16 @@ function removeMobSubRow(cardID, subKey, idx) { renderMobEditor(mobID, mobData); } -function addMobLootRow(kind) { - if (!mobData.drops) mobData.drops = {}; - if (!Array.isArray(mobData.drops.loot)) mobData.drops.loot = []; +function addMobLootRow(cardID, subKey, kind) { + var sec = MOB_SECTIONS.find(function(s) { return s.id === cardID; }); + if (!sec) return; + var p = mobCardPath(sec); + var root = p ? (mobData[p] || (mobData[p] = {})) : mobData; + if (!Array.isArray(root[subKey])) root[subKey] = []; if (kind === 'table') { - mobData.drops.loot.push({table:'', weight:0, quantity:1, _kind:'table'}); + root[subKey].push({table:'', weight:0, quantity:0, _kind:'table'}); } else { - mobData.drops.loot.push({item_id:'', weight:0, quantity:1, _kind:'item'}); + root[subKey].push({item_id:'', weight:0, quantity:0, _kind:'item'}); } renderCurrent(); } |
