mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 14:47:53 +01:00
60 lines
2.0 KiB
JavaScript
60 lines
2.0 KiB
JavaScript
import i18n from '../i18n';
|
|
import _ from 'lodash';
|
|
import splitWhitespace from '../libs/splitWhitespace';
|
|
import { capByLevel } from '../statHelpers';
|
|
|
|
module.exports = function(user, req, cb, analytics) {
|
|
var analyticsData, klass, ref;
|
|
klass = (ref = req.query) != null ? ref["class"] : void 0;
|
|
if (klass === 'warrior' || klass === 'rogue' || klass === 'wizard' || klass === 'healer') {
|
|
analyticsData = {
|
|
uuid: user._id,
|
|
"class": klass,
|
|
acquireMethod: 'Gems',
|
|
gemCost: 3,
|
|
category: 'behavior'
|
|
};
|
|
if (analytics != null) {
|
|
analytics.track('change class', analyticsData);
|
|
}
|
|
user.stats["class"] = klass;
|
|
user.flags.classSelected = true;
|
|
_.each(["weapon", "armor", "shield", "head"], function(type) {
|
|
var foundKey;
|
|
foundKey = false;
|
|
_.findLast(user.items.gear.owned, function(v, k) {
|
|
if (~k.indexOf(type + "_" + klass) && v === true) {
|
|
return foundKey = k;
|
|
}
|
|
});
|
|
user.items.gear.equipped[type] = foundKey ? foundKey : type === "weapon" ? "weapon_" + klass + "_0" : type === "shield" && klass === "rogue" ? "shield_rogue_0" : type + "_base_0";
|
|
if (type === "weapon" || (type === "shield" && klass === "rogue")) {
|
|
user.items.gear.owned[type + "_" + klass + "_0"] = true;
|
|
}
|
|
return true;
|
|
});
|
|
} else {
|
|
if (user.preferences.disableClasses) {
|
|
user.preferences.disableClasses = false;
|
|
user.preferences.autoAllocate = false;
|
|
} else {
|
|
if (!(user.balance >= .75)) {
|
|
return typeof cb === "function" ? cb({
|
|
code: 401,
|
|
message: i18n.t('notEnoughGems', req.language)
|
|
}) : void 0;
|
|
}
|
|
user.balance -= .75;
|
|
}
|
|
_.merge(user.stats, {
|
|
str: 0,
|
|
con: 0,
|
|
per: 0,
|
|
int: 0,
|
|
points: api.capByLevel(user.stats.lvl)
|
|
});
|
|
user.flags.classSelected = false;
|
|
}
|
|
return typeof cb === "function" ? cb(null, _.pick(user, $w('stats flags items preferences'))) : void 0;
|
|
};
|