From 57193bd5f36bab5cc26c72533520d5457515a786 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Thu, 7 Dec 2017 12:33:40 -0500 Subject: [PATCH] Ensured quest drops are only from incomplete progress (#9671) * Ensured quest drops are only from incomplete progress * Fixed spelling error --- test/api/v3/unit/models/group.test.js | 14 ++++++++++++++ website/server/models/group.js | 11 ++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/test/api/v3/unit/models/group.test.js b/test/api/v3/unit/models/group.test.js index a2db74fcc2..db44574a8b 100644 --- a/test/api/v3/unit/models/group.test.js +++ b/test/api/v3/unit/models/group.test.js @@ -391,6 +391,20 @@ describe('Group Model', () => { expect(party.quest.progress.collect.soapBars).to.eq(5); }); + it('does not drop an item if not need when on a collection quest', async () => { + party.quest.key = 'dilatoryDistress1'; + party.quest.active = false; + await party.startQuest(questLeader); + party.quest.progress.collect.fireCoral = 20; + await party.save(); + + await Group.processQuestProgress(participatingMember, progress); + + party = await Group.findOne({_id: party._id}); + + expect(party.quest.progress.collect.fireCoral).to.eq(20); + }); + it('sends a chat message about progress', async () => { await Group.processQuestProgress(participatingMember, progress); diff --git a/website/server/models/group.js b/website/server/models/group.js index a5db42a748..65b85e4b47 100644 --- a/website/server/models/group.js +++ b/website/server/models/group.js @@ -874,8 +874,17 @@ schema.methods._processCollectionQuest = async function processCollectionQuest ( let quest = questScrolls[group.quest.key]; let itemsFound = {}; + const possibleItemKeys = Object.keys(quest.collect).filter((key) => { + return group.quest.progress.collect[key] !== quest.collect[key].count; + }); + + const possibleItemsToCollect = possibleItemKeys.reduce((accumulator, current, index) => { + accumulator[possibleItemKeys[index]] = quest.collect[current]; + return accumulator; + }, {}); + _.times(progress.collectedItems, () => { - let item = shared.randomVal(quest.collect, {key: true}); + let item = shared.randomVal(possibleItemsToCollect, {key: true}); if (!itemsFound[item]) { itemsFound[item] = 0;