Fix some bugs, clean up, etc. in achievements

This commit is contained in:
Bryan Ashby 2019-01-09 20:07:59 -07:00
parent 2726a7becc
commit 091a9ae2c7
1 changed files with 32 additions and 16 deletions

View File

@ -86,7 +86,7 @@ class Achievement {
} }
isValidMatchDetails(details) { isValidMatchDetails(details) {
if(!_.isString(details.title) || !_.isString(details.text) || !_.isNumber(details.points)) { if(!details || !_.isString(details.title) || !_.isString(details.text) || !_.isNumber(details.points)) {
return false; return false;
} }
return (_.isString(details.globalText) || !details.globalText); return (_.isString(details.globalText) || !details.globalText);
@ -109,13 +109,16 @@ class UserStatAchievement extends Achievement {
} }
getMatchDetails(matchValue) { getMatchDetails(matchValue) {
let ret = [];
let matchField = this.matchKeys.find(v => matchValue >= v); let matchField = this.matchKeys.find(v => matchValue >= v);
if(matchField) { if(matchField) {
const match = this.data.match[matchField]; const match = this.data.match[matchField];
if(this.isValidMatchDetails(match)) { matchField = parseInt(matchField);
return [ match, parseInt(matchField), matchValue ]; if(this.isValidMatchDetails(match) && !isNaN(matchField)) {
ret = [ match, matchField, matchValue ];
} }
} }
return ret;
} }
} }
@ -180,7 +183,7 @@ class Achievements {
WHERE user_id = ? AND achievement_tag = ? AND match_field = ?;`, WHERE user_id = ? AND achievement_tag = ? AND match_field = ?;`,
[ user.userId, achievementTag, field], [ user.userId, achievementTag, field],
(err, row) => { (err, row) => {
return cb(err, row && row.count || 0); return cb(err, row ? row.count : 0);
} }
); );
} }
@ -286,20 +289,20 @@ class Achievements {
return; return;
} }
const statValue = parseInt( const statValue = parseInt(Achievement.Types.UserStatSet === achievement.data.type ?
Achievement.Types.UserStatSet === achievement.data.type ? userStatEvent.statValue : userStatEvent.statIncrementBy, userStatEvent.statValue :
10 userStatEvent.statIncrementBy
); );
if(isNaN(statValue)) { if(isNaN(statValue)) {
return; return;
} }
const [ details, matchField, matchValue ] = achievement.getMatchDetails(statValue); const [ details, matchField, matchValue ] = achievement.getMatchDetails(statValue);
if(!details || _.isUndefined(matchField) || _.isUndefined(matchValue)) { if(!details) {
return; return;
} }
async.waterfall( async.series(
[ [
(callback) => { (callback) => {
this.loadAchievementHitCount(userStatEvent.user, achievementTag, matchField, (err, count) => { this.loadAchievementHitCount(userStatEvent.user, achievementTag, matchField, (err, count) => {
@ -335,19 +338,32 @@ class Achievements {
// ^------------^ retroactive range // ^------------^ retroactive range
// //
const index = achievement.matchKeys.findIndex(v => v < matchField); const index = achievement.matchKeys.findIndex(v => v < matchField);
if(index > -1) { if(index > -1 && Array.isArray(achievement.matchKeys)) {
achievementsInfo.push(...achievement.matchKeys.slice(index).map(k => { achievement.matchKeys.slice(index).forEach(k => {
const [ d, f, v ] = achievement.getMatchDetails(k); const [ det, fld, val ] = achievement.getMatchDetails(k);
return Object.assign({}, info, { details : d, matchField : f, achievedValue : f, matchValue : v } ); if(det) {
})); achievementsInfo.push(Object.assign(
{},
info,
{
details : det,
matchField : fld,
achievedValue : fld,
matchValue : val,
}
));
}
});
} }
} }
// reverse achievementsInfo so we display smallest > largest // reverse achievementsInfo so we display smallest > largest
achievementsInfo.reverse(); achievementsInfo.reverse();
async.each(achievementsInfo, (achInfo, nextAchInfo) => { async.eachSeries(achievementsInfo, (achInfo, nextAchInfo) => {
return this.recordAndDisplayAchievement(achInfo, nextAchInfo); return this.recordAndDisplayAchievement(achInfo, err => {
return nextAchInfo(err);
});
}, },
err => { err => {
return callback(err); return callback(err);