diff --git a/src/server/clientComponents/inventory.js b/src/server/clientComponents/inventory.js index 07adfade..214e01fb 100644 --- a/src/server/clientComponents/inventory.js +++ b/src/server/clientComponents/inventory.js @@ -11,52 +11,44 @@ define([ init: function (blueprint) { events.emit('onGetItems', this.items); }, - extend: function (blueprint) { - let rerender = false; - if (blueprint.destroyItems) { - rerender = true; - events.emit('onDestroyItems', blueprint.destroyItems, this.items); + extend: function ({ destroyItems, getItems }) { + const { items } = this; + + let rerenderNeeded = false; + + if (destroyItems) { + rerenderNeeded = true; + events.emit('onDestroyItems', destroyItems, this.items); } - if (blueprint.getItems) { - let items = this.items; - let newItems = blueprint.getItems || []; - let nLen = newItems.length; - - for (let i = 0; i < nLen; i++) { - let nItem = newItems[i]; - let nId = nItem.id; - - let findItem = items.find(f => f.id === nId); - if (findItem) { - if (!rerender) { - rerender = ( - (findItem.pos !== nItem.pos) || - (findItem.eq !== nItem.eq) || - (findItem.active !== nItem.active) || - (findItem.quickSlot !== nItem.quickSlot) || - (findItem.quantity !== nItem.quantity) - ); - } - - for (let p in findItem) - delete findItem[p]; - - $.extend(true, findItem, nItem); - - newItems.splice(i, 1); - i--; - nLen--; - } else { - rerender = true; - nItem.isNew = true; + if (getItems) { + getItems.forEach(g => { + const findItem = items.find(i => i.id === g.id); + + if (!findItem) { + rerenderNeeded = true; + g.isNew = true; + + items.push(g); + + return; + } + + if (!rerenderNeeded) { + rerenderNeeded = ( + findItem.pos !== g.pos || + findItem.eq !== g.eq || + findItem.active !== g.active || + findItem.quickSlot !== g.quickSlot || + findItem.quantity !== g.quantity + ); } - } - this.items.push.apply(this.items, blueprint.getItems || []); + Object.assign(findItem, g); + }); - events.emit('onGetItems', this.items, rerender, blueprint.getItems); + events.emit('onGetItems', this.items, rerenderNeeded, getItems); } },