port allocateNow and autoAllocate
This commit is contained in:
@@ -7,50 +7,59 @@ import splitWhitespace from '../libs/splitWhitespace';
|
||||
{update} if aggregated changes, pass in userObj as update. otherwise commits will be made immediately
|
||||
*/
|
||||
|
||||
module.exports = function(user) {
|
||||
return user.stats[(function() {
|
||||
var diff, ideal, lvlDiv7, preference, stats, suggested;
|
||||
switch (user.preferences.allocationMode) {
|
||||
case "flat":
|
||||
stats = _.pick(user.stats, splitWhitespace('con str per int'));
|
||||
return _.invert(stats)[_.min(stats)];
|
||||
case "classbased":
|
||||
lvlDiv7 = user.stats.lvl / 7;
|
||||
ideal = [lvlDiv7 * 3, lvlDiv7 * 2, lvlDiv7, lvlDiv7];
|
||||
preference = (function() {
|
||||
switch (user.stats["class"]) {
|
||||
case "wizard":
|
||||
return ["int", "per", "con", "str"];
|
||||
case "rogue":
|
||||
return ["per", "str", "int", "con"];
|
||||
case "healer":
|
||||
return ["con", "int", "str", "per"];
|
||||
default:
|
||||
return ["str", "con", "per", "int"];
|
||||
}
|
||||
})();
|
||||
diff = [user.stats[preference[0]] - ideal[0], user.stats[preference[1]] - ideal[1], user.stats[preference[2]] - ideal[2], user.stats[preference[3]] - ideal[3]];
|
||||
suggested = _.findIndex(diff, (function(val) {
|
||||
if (val === _.min(diff)) {
|
||||
return true;
|
||||
}
|
||||
}));
|
||||
if (~suggested) {
|
||||
return preference[suggested];
|
||||
} else {
|
||||
return "str";
|
||||
}
|
||||
case "taskbased":
|
||||
suggested = _.invert(user.stats.training)[_.max(user.stats.training)];
|
||||
_.merge(user.stats.training, {
|
||||
str: 0,
|
||||
int: 0,
|
||||
con: 0,
|
||||
per: 0
|
||||
});
|
||||
return suggested || "str";
|
||||
default:
|
||||
return "str";
|
||||
}
|
||||
})()]++;
|
||||
function getStatToAllocate (user) {
|
||||
let suggested;
|
||||
|
||||
switch (user.preferences.allocationMode) {
|
||||
case 'flat':
|
||||
let stats = _.pick(user.stats, splitWhitespace('con str per int'));
|
||||
return _.invert(stats)[_.min(stats)];
|
||||
case 'classbased':
|
||||
let lvlDiv7 = user.stats.lvl / 7;
|
||||
let ideal = [lvlDiv7 * 3, lvlDiv7 * 2, lvlDiv7, lvlDiv7];
|
||||
|
||||
let preference;
|
||||
switch (user.stats.class) {
|
||||
case 'wizard':
|
||||
preference = ['int', 'per', 'con', 'str'];
|
||||
break;
|
||||
case 'rogue':
|
||||
preference = ['per', 'str', 'int', 'con'];
|
||||
break;
|
||||
case 'healer':
|
||||
preference = ['con', 'int', 'str', 'per'];
|
||||
break;
|
||||
default:
|
||||
preference = ['str', 'con', 'per', 'int'];
|
||||
}
|
||||
|
||||
let diff = [
|
||||
user.stats[preference[0]] - ideal[0],
|
||||
user.stats[preference[1]] - ideal[1],
|
||||
user.stats[preference[2]] - ideal[2],
|
||||
user.stats[preference[3]] - ideal[3],
|
||||
];
|
||||
|
||||
suggested = _.findIndex(diff, (val) => {
|
||||
if (val === _.min(diff)) return true;
|
||||
});
|
||||
|
||||
return suggested !== -1 ? preference[suggested] : 'str';
|
||||
case 'taskbased':
|
||||
suggested = _.invert(user.stats.training)[_.max(user.stats.training)];
|
||||
|
||||
let training = user.stats.training;
|
||||
training.str = 0;
|
||||
training.int = 0;
|
||||
training.con = 0;
|
||||
training.per = 0;
|
||||
|
||||
return suggested || 'str';
|
||||
default:
|
||||
return 'str';
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = function autoAllocate (user) {
|
||||
return user.stats[getStatToAllocate(user)]++;
|
||||
};
|
||||
|
||||
@@ -108,6 +108,7 @@ import buy from './ops/buy';
|
||||
import buyMysterySet from './ops/buyMysterySet';
|
||||
import buyQuest from './ops/buyQuest';
|
||||
import buySpecialSpell from './ops/buySpecialSpell';
|
||||
import allocateNow from './ops/allocateNow';
|
||||
|
||||
api.ops = {
|
||||
scoreTask,
|
||||
@@ -117,18 +118,21 @@ api.ops = {
|
||||
buyMysterySet,
|
||||
buySpecialSpell,
|
||||
buyQuest,
|
||||
allocateNow,
|
||||
};
|
||||
|
||||
import handleTwoHanded from './fns/handleTwoHanded';
|
||||
import predictableRandom from './fns/predictableRandom';
|
||||
import randomVal from './fns/randomVal';
|
||||
import ultimateGear from './fns/ultimateGear';
|
||||
import autoAllocate from './fns/autoAllocate';
|
||||
|
||||
api.fns = {
|
||||
handleTwoHanded,
|
||||
predictableRandom,
|
||||
randomVal,
|
||||
ultimateGear,
|
||||
autoAllocate,
|
||||
};
|
||||
|
||||
|
||||
@@ -191,7 +195,6 @@ api.wrap = function wrapUser (user, main = true) {
|
||||
reset: _.partial(importedOps.reset, user),
|
||||
reroll: _.partial(importedOps.reroll, user),
|
||||
rebirth: _.partial(importedOps.rebirth, user),
|
||||
allocateNow: _.partial(importedOps.allocateNow, user),
|
||||
clearCompleted: _.partial(importedOps.clearCompleted, user),
|
||||
sortTask: _.partial(importedOps.sortTask, user),
|
||||
updateTask: _.partial(importedOps.updateTask, user),
|
||||
@@ -222,7 +225,6 @@ api.wrap = function wrapUser (user, main = true) {
|
||||
unlock: _.partial(importedOps.unlock, user),
|
||||
changeClass: _.partial(importedOps.changeClass, user),
|
||||
disableClasses: _.partial(importedOps.disableClasses, user),
|
||||
allocate: _.partial(importedOps.allocate, user),
|
||||
readCard: _.partial(importedOps.readCard, user),
|
||||
openMysteryItem: _.partial(importedOps.openMysteryItem, user),
|
||||
scoreTask: _.partial(importedOps.scoreTask, user),
|
||||
@@ -235,7 +237,6 @@ api.wrap = function wrapUser (user, main = true) {
|
||||
dotSet: _.partial(importedFns.dotSet, user),
|
||||
dotGet: _.partial(importedFns.dotGet, user),
|
||||
randomDrop: _.partial(importedFns.randomDrop, user),
|
||||
autoAllocate: _.partial(importedFns.autoAllocate, user),
|
||||
updateStats: _.partial(importedFns.updateStats, user),
|
||||
cron: _.partial(importedFns.cron, user),
|
||||
preenUserHistory: _.partial(importedFns.preenUserHistory, user),
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import _ from 'lodash';
|
||||
import autoAllocate from '../fns/autoAllocate';
|
||||
|
||||
module.exports = function(user, req, cb) {
|
||||
_.times(user.stats.points, user.fns.autoAllocate);
|
||||
module.exports = function allocateNow (user) {
|
||||
_.times(user.stats.points, () => autoAllocate(user));
|
||||
user.stats.points = 0;
|
||||
if (typeof user.markModified === "function") {
|
||||
user.markModified('stats');
|
||||
}
|
||||
return typeof cb === "function" ? cb(null, user.stats) : void 0;
|
||||
return {
|
||||
data: _.pick(user, 'stats'),
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user