import i18n from '../i18n'; import _ from 'lodash'; import splitWhitespace from '../libs/splitWhitespace'; import { capByLevel } from '../statHelpers'; import { NotAuthorized, } from '../libs/errors'; module.exports = function changeClass (user, req = {}, analytics) { let klass = _.get(req, 'query.class'); if (klass === 'warrior' || klass === 'rogue' || klass === 'wizard' || klass === 'healer') { user.stats.class = klass; user.flags.classSelected = true; _.each(['weapon', 'armor', 'shield', 'head'], (type) => { let foundKey = false; _.findLast(user.items.gear.owned, (val, key) => { if (key.indexOf(`${type}_${klass}`) !== -1 && val === true) { foundKey = key; return true; } }); if (!foundKey) { if (type === 'weapon') { foundKey = `weapon_${klass}_0`; } else if (type === 'shield' && klass === 'rogue') { foundKey = 'shield_rogue_0'; } else { foundKey = `${type}_base_0`; } } user.items.gear.equipped[type] = foundKey; if (type === 'weapon' || (type === 'shield' && klass === 'rogue')) { // eslint-disable-line no-extra-parens user.items.gear.owned[`${type}_${klass}_0`] = true; } }); if (analytics) { analytics.track('change class', { uuid: user._id, class: klass, acquireMethod: 'Gems', gemCost: 3, category: 'behavior', }); } } else { if (user.preferences.disableClasses) { user.preferences.disableClasses = false; user.preferences.autoAllocate = false; } else { if (user.balance < 0.75) throw new NotAuthorized(i18n.t('notEnoughGems', req.language)); user.balance -= 0.75; } user.stats.str = 0; user.stats.con = 0; user.stats.per = 0; user.stats.int = 0; user.stats.points = capByLevel(user.stats.lvl); user.flags.classSelected = false; } return { data: _.pick(user, splitWhitespace('stats flags items preferences')), }; };