diff --git a/lib/client/receiver.js b/lib/client/receiver.js index 504c536..b308e90 100644 --- a/lib/client/receiver.js +++ b/lib/client/receiver.js @@ -7,7 +7,7 @@ const ItemsManager = require('../manager'); const ItemsConst = require('../constants'); const ItemBase = require('../item/type/item-base'); -const { ErrorManager } = require('@reldens/utils'); +const { Logger, ErrorManager } = require('@reldens/utils'); class Receiver { @@ -66,12 +66,11 @@ class Receiver onSetItems(message) { let tempItemsList = {}; - for(let idx in message.items){ - let messageItem = message.items[idx]; - let itemsProps = Object.assign({manager: this.manager}, messageItem, {uid: idx}); + for(let i of Object.keys(message.items)){ + let messageItem = message.items[i]; + let itemsProps = Object.assign({manager: this.manager}, messageItem, {uid: i}); let itemClass = this.getItemClass(itemsProps.key); - let tmpItem = new itemClass(itemsProps); - tempItemsList[idx] = tmpItem; + tempItemsList[i] = new itemClass(itemsProps); } this.manager.setItems(tempItemsList); } @@ -82,27 +81,37 @@ class Receiver let itemsProps = Object.assign({manager: this.manager}, message.item, {uid: message.item.idx}); let itemClass = this.getItemClass(itemsProps.key); let tmpItem = new itemClass(itemsProps); - this.manager.addItem(tmpItem); + this.manager.addItem(tmpItem).catch((err) => { + Logger.error(['Error receiver onAddItem.', err]); + }); } onRemoveItem(message) { - this.manager.removeItem(message.item.idx); + this.manager.removeItem(message.item.idx).catch((err) => { + Logger.error(['Error receiver onRemoveItem.', err]); + }); } onSetQty(message) { - this.manager.setItemQty(message.item.idx, message.item.qty); + this.manager.setItemQty(message.item.idx, message.item.qty).catch((err) => { + Logger.error(['Error receiver onSetQty.', err]); + }); } onEquipItem(message) { - this.manager.items[message.item.idx].equip(false); + this.manager.items[message.item.idx].equip(false).catch((err) => { + Logger.error(['Error receiver onEquipItem.', err]); + }); } onUnequipItem(message) { - this.manager.items[message.item.idx].unequip(false); + this.manager.items[message.item.idx].unequip(false).catch((err) => { + Logger.error(['Error receiver onUnequipItem.', err]); + }); } // @NOTE: override to apply custom behaviors on these. diff --git a/lib/item/inventory.js b/lib/item/inventory.js index f6b2bc9..280fc64 100644 --- a/lib/item/inventory.js +++ b/lib/item/inventory.js @@ -19,6 +19,8 @@ class Inventory // @NOTE: -1 is for disable, 0 is reserved for possible items "seat" or "placeholder". this.limitPerItem = {}.hasOwnProperty.call(props, 'limitPerItem') ? props.limitPerItem : -1; this.itemsLimit = {}.hasOwnProperty.call(props, 'itemsLimit') ? props.itemsLimit : -1; + this.applyModifiersAuto = true; + this.revertModifiersAuto = true; } async validate(item) diff --git a/lib/item/type/equipment.js b/lib/item/type/equipment.js index 74cf09b..7f66626 100644 --- a/lib/item/type/equipment.js +++ b/lib/item/type/equipment.js @@ -21,22 +21,23 @@ class Equipment extends ItemBase async equip(applyMods) { + this.equipped = true; await this.manager.events.emit(ItemsEvents.EQUIP_ITEM, this); - // apply modifiers automatically by default: - if(applyMods !== false){ - this.equipped = true; + // apply modifiers automatically or not: + if(!applyMods && !this.manager.applyModifiersAuto){ + return false; } await this.applyModifiers(); } async unequip(revertMods) { + this.equipped = false; await this.manager.events.emit(ItemsEvents.UNEQUIP_ITEM, this); - // revert modifiers automatically by default: - if(revertMods !== false){ - await this.revertModifiers(); + // revert modifiers automatically or not: + if(!revertMods && !this.manager.revertModifiersAuto){ + return false; } - this.equipped = false; } async applyModifiers() diff --git a/lib/item/type/item-base.js b/lib/item/type/item-base.js index e0cb75a..453775f 100644 --- a/lib/item/type/item-base.js +++ b/lib/item/type/item-base.js @@ -56,7 +56,7 @@ class ItemBase setProperties(props) { - for(let k in props){ + for(let k of Object.keys(props)){ this[k] = props[k]; } } @@ -74,8 +74,8 @@ class ItemBase async changeModifiers(revert) { await this.manager.events.emit(ItemsEvents.EQUIP_BEFORE+(revert ? 'Revert': 'Apply')+'Modifiers', this); - for(let idx in this.modifiers){ - let modifier = this.modifiers[idx]; + for(let i of Object.keys(this.modifiers)){ + let modifier = this.modifiers[i]; let ownerProperty = this.getOwnerProperty(modifier.propertyKey); let newValue = this.modifyValue(modifier, ownerProperty, revert); this.setOwnerProperty(modifier.propertyKey, newValue); @@ -181,6 +181,11 @@ class ItemBase return obj[propName]; } + isType(type) + { + return this.type === type; + } + } module.exports = ItemBase; diff --git a/lib/server/sender.js b/lib/server/sender.js index ada9220..7d07ade 100644 --- a/lib/server/sender.js +++ b/lib/server/sender.js @@ -36,8 +36,7 @@ class Sender let broadcast = ItemsConst.BEHAVIOR_BROADCAST; // @NOTE: so far I didn't find a case where I would need to broadcast let's say the item key that's been used // and some different data to the client, but I'll contemplate that case may happen and keep this as feature. - // eslint-disable-next-line no-unused-vars - let both = ItemsConst.BEHAVIOR_BOTH; + // let both = ItemsConst.BEHAVIOR_BOTH; let addProperties = ['id', 'key', 'qty', 'label', 'description']; this.setPropertyBehavior(ItemsConst.ACTION_ADD, props, {behavior: send, send: addProperties}); this.setPropertyBehavior(ItemsConst.ACTION_REMOVE, props, {behavior: send, send: ['id', 'key']}); @@ -80,7 +79,7 @@ class Sender Logger.error(['Undefined property:', prop, 'Item:', item.getInventoryId()]); } } - return itemProps + return itemProps; } listenEvents() @@ -123,8 +122,8 @@ class Sender return false; } let itemsToSend = {}; - for(let idx in data.items){ - let item = data.items[idx]; + for(let i of Object.keys(data.items)){ + let item = data.items[i]; let itemData = this.getItemProperties(item, ItemsConst.ACTION_ADD, ItemsConst.BEHAVIOR_SEND); itemData.singleInstance = item.singleInstance; itemsToSend[item.getInventoryId()] = itemData; @@ -172,8 +171,7 @@ class Sender let behavior = actionBehavior === ItemsConst.BEHAVIOR_BOTH ? ItemsConst.BEHAVIOR_BROADCAST : ItemsConst.BEHAVIOR_SEND; if({}.hasOwnProperty.call(this.sendTargetProps, behavior) && this.sendTargetProps[behavior].length){ - for (let i in this.sendTargetProps[behavior]){ - let tProp = this.sendTargetProps[behavior][i]; + for (let tProp of this.sendTargetProps[behavior]){ if(tProp === 'id'){ tProp = this.manager.ownerIdProperty; } diff --git a/package.json b/package.json index ea7c04d..a9fe7b1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@reldens/items-system", - "version": "0.2.0", + "version": "0.3.0", "description": "Reldens - Items System", "source": true, "homepage": "https://github.com/damian-pastorini/reldens-items",