Fix some bugs, clean up, etc. in achievements
This commit is contained in:
parent
2726a7becc
commit
091a9ae2c7
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue