From 349eba823909cfbe3e4bdade119f1e63c0ec81b5 Mon Sep 17 00:00:00 2001 From: Shaun Date: Sat, 28 May 2022 09:05:36 +0200 Subject: [PATCH] modding #1946: Added new events for beforeDropBag and beforeUseItem --- src/server/components/inventory/dropBag.js | 24 +++++++++++++++------- src/server/components/inventory/useItem.js | 11 +++++++++- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/server/components/inventory/dropBag.js b/src/server/components/inventory/dropBag.js index bad0364a..e8269e43 100644 --- a/src/server/components/inventory/dropBag.js +++ b/src/server/components/inventory/dropBag.js @@ -1,13 +1,15 @@ let generator = require('../../items/generator'); module.exports = (cpnInv, ownerName, killSource) => { - if (!cpnInv.blueprint) + const { obj, blueprint } = cpnInv; + + if (!blueprint) return; - const obj = cpnInv.obj; + const { stats, instance: { objects, eventEmitter } } = obj; //Only drop loot if this player is in the zone - let playerObject = obj.instance.objects.find(o => o.player && o.name === ownerName); + let playerObject = objects.find(o => o.player && o.name === ownerName); if (!playerObject) return; @@ -18,7 +20,6 @@ module.exports = (cpnInv, ownerName, killSource) => { delete items[i].pos; } - let blueprint = cpnInv.blueprint; let magicFind = (blueprint.magicFind || 0); let savedItems = extend([], cpnInv.items); @@ -44,7 +45,7 @@ module.exports = (cpnInv, ownerName, killSource) => { continue; let itemBlueprint = { - level: obj.stats.values.level, + level: stats.values.level, magicFind: magicFind, bonusMagicFind: bonusMagicFind, noCurrency: i > 0 @@ -64,7 +65,7 @@ module.exports = (cpnInv, ownerName, killSource) => { else if ((drop.chance) && (~~(Math.random() * 100) >= drop.chance * dropEvent.chanceMultiplier)) continue; - drop.level = drop.level || obj.stats.values.level; + drop.level = drop.level || stats.values.level; drop.magicFind = magicFind; let item = drop; @@ -80,8 +81,17 @@ module.exports = (cpnInv, ownerName, killSource) => { playerObject.fireEvent('beforeTargetDeath', obj, cpnInv.items); - obj.instance.eventEmitter.emit('onBeforeDropBag', obj, cpnInv.items, killSource); + //Deprecated + eventEmitter.emit('onBeforeDropBag', obj, cpnInv.items, killSource); obj.fireEvent('onBeforeDropBag', cpnInv.items, killSource); + //New + const eventMsg = { + objDropper: obj, + objLooter: playerObject, + objKillSource: killSource, + items: cpnInv.items + }; + eventEmitter.emit('beforeDropBag', eventMsg); if (cpnInv.items.length > 0) cpnInv.createBag(obj.x, obj.y, cpnInv.items, ownerName); diff --git a/src/server/components/inventory/useItem.js b/src/server/components/inventory/useItem.js index 16779d6e..3b530d16 100644 --- a/src/server/components/inventory/useItem.js +++ b/src/server/components/inventory/useItem.js @@ -56,10 +56,19 @@ module.exports = async (cpnInv, itemId) => { success: true, cdMax: item.cdMax }; + //Deprecated obj.instance.eventEmitter.emit('onBeforeUseItem', obj, item, result); obj.fireEvent('onBeforeUseItem', item, result); + //New + const eventMsg = { + obj, + item, + cdMax: item.cdMax, + success: true + }; + obj.instance.eventEmitter.emit('beforeUseItem', eventMsg); - if (!result.success) + if (!result.success || !eventMsg.success) return; placeItemOnCooldown(obj, cpnInv, item, result);