mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 14:47:53 +01:00
change user quest.progress.collect to quest.progress.collectedItems (#7612)
This commit is contained in:
@@ -37,7 +37,8 @@ module.exports = function randomDrop (user, options, req = {}) {
|
|||||||
chance = diminishingReturns(chance, 0.75);
|
chance = diminishingReturns(chance, 0.75);
|
||||||
|
|
||||||
if (predictableRandom(user, user.stats.gp) < chance) {
|
if (predictableRandom(user, user.stats.gp) < chance) {
|
||||||
user.party.quest.progress.collect++;
|
if (!user.party.quest.progress.collectedItems) user.party.quest.progress.collectedItems = 0;
|
||||||
|
user.party.quest.progress.collectedItems++;
|
||||||
user.markModified('party.quest.progress');
|
user.markModified('party.quest.progress');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ describe('POST /debug/quest-progress', () => {
|
|||||||
|
|
||||||
await user.sync();
|
await user.sync();
|
||||||
|
|
||||||
expect(user.party.quest.progress.collect).to.eql(300);
|
expect(user.party.quest.progress.collectedItems).to.eql(300);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns error when not in production mode', async () => {
|
it('returns error when not in production mode', async () => {
|
||||||
|
|||||||
@@ -102,7 +102,8 @@ describe('POST /groups/:groupId/quests/abort', () => {
|
|||||||
progress: {
|
progress: {
|
||||||
up: 0,
|
up: 0,
|
||||||
down: 0,
|
down: 0,
|
||||||
collect: 0,
|
collect: {},
|
||||||
|
collectedItems: 0,
|
||||||
},
|
},
|
||||||
completed: null,
|
completed: null,
|
||||||
RSVPNeeded: false,
|
RSVPNeeded: false,
|
||||||
|
|||||||
@@ -114,7 +114,8 @@ describe('POST /groups/:groupId/quests/cancel', () => {
|
|||||||
progress: {
|
progress: {
|
||||||
up: 0,
|
up: 0,
|
||||||
down: 0,
|
down: 0,
|
||||||
collect: 0,
|
collect: {},
|
||||||
|
collectedItems: 0,
|
||||||
},
|
},
|
||||||
completed: null,
|
completed: null,
|
||||||
RSVPNeeded: false,
|
RSVPNeeded: false,
|
||||||
|
|||||||
@@ -113,7 +113,8 @@ describe('POST /groups/:groupId/quests/leave', () => {
|
|||||||
progress: {
|
progress: {
|
||||||
up: 0,
|
up: 0,
|
||||||
down: 0,
|
down: 0,
|
||||||
collect: 0,
|
collect: {},
|
||||||
|
collectedItems: 0,
|
||||||
},
|
},
|
||||||
completed: null,
|
completed: null,
|
||||||
RSVPNeeded: false,
|
RSVPNeeded: false,
|
||||||
|
|||||||
@@ -116,7 +116,8 @@ describe('POST /groups/:groupId/quests/reject', () => {
|
|||||||
progress: {
|
progress: {
|
||||||
up: 0,
|
up: 0,
|
||||||
down: 0,
|
down: 0,
|
||||||
collect: 0,
|
collect: {},
|
||||||
|
collectedItems: 0,
|
||||||
},
|
},
|
||||||
completed: null,
|
completed: null,
|
||||||
RSVPNeeded: false,
|
RSVPNeeded: false,
|
||||||
|
|||||||
@@ -508,7 +508,7 @@ describe('cron', () => {
|
|||||||
cron({user, tasksByType, daysMissed, analytics});
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
expect(user.party.quest.progress.up).to.equal(0);
|
expect(user.party.quest.progress.up).to.equal(0);
|
||||||
expect(user.party.quest.progress.down).to.equal(0);
|
expect(user.party.quest.progress.down).to.equal(0);
|
||||||
expect(user.party.quest.progress.collect).to.be.empty;
|
expect(user.party.quest.progress.collectedItems).to.be.empty;
|
||||||
});
|
});
|
||||||
|
|
||||||
it('applies the user progress', () => {
|
it('applies the user progress', () => {
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ describe('Group Model', () => {
|
|||||||
progress = {
|
progress = {
|
||||||
up: 5,
|
up: 5,
|
||||||
down: -5,
|
down: -5,
|
||||||
collect: 5,
|
collectedItems: 5,
|
||||||
};
|
};
|
||||||
|
|
||||||
party.quest.members = {
|
party.quest.members = {
|
||||||
@@ -309,7 +309,7 @@ describe('Group Model', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('sends a chat message if no progress is made', async () => {
|
it('sends a chat message if no progress is made', async () => {
|
||||||
progress.collect = 0;
|
progress.collectedItems = 0;
|
||||||
|
|
||||||
await Group.processQuestProgress(participatingMember, progress);
|
await Group.processQuestProgress(participatingMember, progress);
|
||||||
|
|
||||||
@@ -320,7 +320,7 @@ describe('Group Model', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('handles collection quests with multiple items', async () => {
|
it('handles collection quests with multiple items', async () => {
|
||||||
progress.collect = 10;
|
progress.collectedItems = 10;
|
||||||
party.quest.key = 'evilsanta2';
|
party.quest.key = 'evilsanta2';
|
||||||
party.quest.active = false;
|
party.quest.active = false;
|
||||||
|
|
||||||
@@ -337,7 +337,7 @@ describe('Group Model', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('sends message about victory', async () => {
|
it('sends message about victory', async () => {
|
||||||
progress.collect = 500;
|
progress.collectedItems = 500;
|
||||||
|
|
||||||
await Group.processQuestProgress(participatingMember, progress);
|
await Group.processQuestProgress(participatingMember, progress);
|
||||||
|
|
||||||
@@ -351,7 +351,7 @@ describe('Group Model', () => {
|
|||||||
let quest = questScrolls[party.quest.key];
|
let quest = questScrolls[party.quest.key];
|
||||||
let finishQuest = sandbox.spy(Group.prototype, 'finishQuest');
|
let finishQuest = sandbox.spy(Group.prototype, 'finishQuest');
|
||||||
|
|
||||||
progress.collect = 999;
|
progress.collectedItems = 999; // TODO should this be collectedItems? What is this testing?
|
||||||
|
|
||||||
await Group.processQuestProgress(participatingMember, progress);
|
await Group.processQuestProgress(participatingMember, progress);
|
||||||
|
|
||||||
@@ -458,7 +458,7 @@ describe('Group Model', () => {
|
|||||||
|
|
||||||
expect(participatingMember.party.quest.key).to.eql('whale');
|
expect(participatingMember.party.quest.key).to.eql('whale');
|
||||||
expect(participatingMember.party.quest.progress.down).to.eql(0);
|
expect(participatingMember.party.quest.progress.down).to.eql(0);
|
||||||
expect(participatingMember.party.quest.progress.collect).to.eql(0);
|
expect(participatingMember.party.quest.progress.collectedItems).to.eql(0);
|
||||||
expect(participatingMember.party.quest.completed).to.eql(null);
|
expect(participatingMember.party.quest.completed).to.eql(null);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -470,12 +470,12 @@ describe('Group Model', () => {
|
|||||||
|
|
||||||
expect(participatingMember.party.quest.key).to.eql('whale');
|
expect(participatingMember.party.quest.key).to.eql('whale');
|
||||||
expect(participatingMember.party.quest.progress.down).to.eql(0);
|
expect(participatingMember.party.quest.progress.down).to.eql(0);
|
||||||
expect(participatingMember.party.quest.progress.collect).to.eql(0);
|
expect(participatingMember.party.quest.progress.collectedItems).to.eql(0);
|
||||||
expect(participatingMember.party.quest.completed).to.eql(null);
|
expect(participatingMember.party.quest.completed).to.eql(null);
|
||||||
|
|
||||||
expect(questLeader.party.quest.key).to.eql('whale');
|
expect(questLeader.party.quest.key).to.eql('whale');
|
||||||
expect(questLeader.party.quest.progress.down).to.eql(0);
|
expect(questLeader.party.quest.progress.down).to.eql(0);
|
||||||
expect(questLeader.party.quest.progress.collect).to.eql(0);
|
expect(questLeader.party.quest.progress.collectedItems).to.eql(0);
|
||||||
expect(questLeader.party.quest.completed).to.eql(null);
|
expect(questLeader.party.quest.completed).to.eql(null);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -595,7 +595,7 @@ describe('Group Model', () => {
|
|||||||
|
|
||||||
expect(userQuest.key).to.eql('whale');
|
expect(userQuest.key).to.eql('whale');
|
||||||
expect(userQuest.progress.down).to.eql(0);
|
expect(userQuest.progress.down).to.eql(0);
|
||||||
expect(userQuest.progress.collect).to.eql(0);
|
expect(userQuest.progress.collectedItems).to.eql(0);
|
||||||
expect(userQuest.completed).to.eql(null);
|
expect(userQuest.completed).to.eql(null);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -22,15 +22,15 @@ describe('common.fns.randomDrop', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('drops an item for the user.party.quest.progress', () => {
|
it('drops an item for the user.party.quest.progress', () => {
|
||||||
expect(user.party.quest.progress.collect).to.eql(0);
|
expect(user.party.quest.progress.collectedItems).to.eql(0);
|
||||||
user.party.quest.key = 'vice2';
|
user.party.quest.key = 'vice2';
|
||||||
predictableRandom = () => {
|
predictableRandom = () => {
|
||||||
return 0.0001;
|
return 0.0001;
|
||||||
};
|
};
|
||||||
randomDrop(user, { task, predictableRandom });
|
randomDrop(user, { task, predictableRandom });
|
||||||
expect(user.party.quest.progress.collect).to.eql(1);
|
expect(user.party.quest.progress.collectedItems).to.eql(1);
|
||||||
randomDrop(user, { task, predictableRandom });
|
randomDrop(user, { task, predictableRandom });
|
||||||
expect(user.party.quest.progress.collect).to.eql(2);
|
expect(user.party.quest.progress.collectedItems).to.eql(2);
|
||||||
});
|
});
|
||||||
|
|
||||||
context('drops enabled', () => {
|
context('drops enabled', () => {
|
||||||
|
|||||||
@@ -278,7 +278,7 @@ describe('Groups Controller', function() {
|
|||||||
progress : {
|
progress : {
|
||||||
up : 50,
|
up : 50,
|
||||||
down : 0,
|
down : 0,
|
||||||
collect : {}
|
collectedItems : {}
|
||||||
},
|
},
|
||||||
completed : null,
|
completed : null,
|
||||||
RSVPNeeded : false
|
RSVPNeeded : false
|
||||||
@@ -368,6 +368,7 @@ describe('Groups Controller', function() {
|
|||||||
user.party.quest.progress = {
|
user.party.quest.progress = {
|
||||||
up: 100,
|
up: 100,
|
||||||
down: 32,
|
down: 32,
|
||||||
|
collectedItems: 16,
|
||||||
collect: {
|
collect: {
|
||||||
foo: 12,
|
foo: 12,
|
||||||
bar: 4
|
bar: 4
|
||||||
@@ -380,7 +381,7 @@ describe('Groups Controller', function() {
|
|||||||
expect(user.party.quest.progress).to.eql({
|
expect(user.party.quest.progress).to.eql({
|
||||||
up: 0,
|
up: 0,
|
||||||
down: 0,
|
down: 0,
|
||||||
collect: 0,
|
collectedItems: 0,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -167,11 +167,13 @@ api.questProgress = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (quest.boss) {
|
if (quest.boss) {
|
||||||
|
if (!user.party.quest.progress.up) user.party.quest.progress.up = 0;
|
||||||
user.party.quest.progress.up += 1000;
|
user.party.quest.progress.up += 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (quest.collect) {
|
if (quest.collect) {
|
||||||
user.party.quest.progress.collect += 300;
|
if (!user.party.quest.progress.collectedItems) user.party.quest.progress.collectedItems = 0;
|
||||||
|
user.party.quest.progress.collectedItems += 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
user.markModified('party.quest.progress');
|
user.markModified('party.quest.progress');
|
||||||
|
|||||||
@@ -277,7 +277,7 @@ export function cron (options = {}) {
|
|||||||
// After all is said and done, progress up user's effect on quest, return those values & reset the user's
|
// After all is said and done, progress up user's effect on quest, return those values & reset the user's
|
||||||
let progress = user.party.quest.progress;
|
let progress = user.party.quest.progress;
|
||||||
let _progress = _.cloneDeep(progress);
|
let _progress = _.cloneDeep(progress);
|
||||||
_.merge(progress, {down: 0, up: 0, collect: 0});
|
_.merge(progress, {down: 0, up: 0, collectedItems: 0});
|
||||||
|
|
||||||
// TODO: Clean PMs - keep 200 for subscribers and 50 for free users. Should also be done while resting in the inn
|
// TODO: Clean PMs - keep 200 for subscribers and 50 for free users. Should also be done while resting in the inn
|
||||||
// let numberOfPMs = Object.keys(user.inbox.messages).length;
|
// let numberOfPMs = Object.keys(user.inbox.messages).length;
|
||||||
|
|||||||
@@ -117,7 +117,8 @@ function _cleanQuestProgress (merge) {
|
|||||||
progress: {
|
progress: {
|
||||||
up: 0,
|
up: 0,
|
||||||
down: 0,
|
down: 0,
|
||||||
collect: 0,
|
collect: {},
|
||||||
|
collectedItems: 0,
|
||||||
},
|
},
|
||||||
completed: null,
|
completed: null,
|
||||||
RSVPNeeded: false,
|
RSVPNeeded: false,
|
||||||
@@ -552,7 +553,7 @@ schema.methods._processCollectionQuest = async function processCollectionQuest (
|
|||||||
let quest = questScrolls[group.quest.key];
|
let quest = questScrolls[group.quest.key];
|
||||||
let itemsFound = {};
|
let itemsFound = {};
|
||||||
|
|
||||||
_.times(progress.collect, () => {
|
_.times(progress.collectedItems, () => {
|
||||||
let item = shared.fns.randomVal(user, quest.collect, {key: true, seed: Math.random()});
|
let item = shared.fns.randomVal(user, quest.collect, {key: true, seed: Math.random()});
|
||||||
|
|
||||||
if (!itemsFound[item]) {
|
if (!itemsFound[item]) {
|
||||||
|
|||||||
@@ -376,7 +376,10 @@ export let schema = new Schema({
|
|||||||
progress: {
|
progress: {
|
||||||
up: {type: Number, default: 0},
|
up: {type: Number, default: 0},
|
||||||
down: {type: Number, default: 0},
|
down: {type: Number, default: 0},
|
||||||
collect: {type: Number, default: 0},
|
collect: {type: Schema.Types.Mixed, default: () => {
|
||||||
|
return {};
|
||||||
|
}},
|
||||||
|
collectedItems: {type: Number, default: 0},
|
||||||
},
|
},
|
||||||
completed: String, // When quest is done, we move it from key => completed, and it's a one-time flag (for modal) that they unset by clicking "ok" in browser
|
completed: String, // When quest is done, we move it from key => completed, and it's a one-time flag (for modal) that they unset by clicking "ok" in browser
|
||||||
RSVPNeeded: {type: Boolean, default: false}, // Set to true when invite is pending, set to false when quest invite is accepted or rejected, quest starts, or quest is cancelled
|
RSVPNeeded: {type: Boolean, default: false}, // Set to true when invite is pending, set to false when quest invite is accepted or rejected, quest starts, or quest is cancelled
|
||||||
|
|||||||
Reference in New Issue
Block a user