mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-16 06:07:21 +01:00
* common: import lodash modules separately * remove test/content from .eslintignore, fix with eslint --fix content/index * lint test/content * lint content/index except for lodash methods * upgrade server/models * upgrade server/middlewares and server/libs * port server/controllers/top-level * port server/controllers/api-v3 * port views and tests * client old port lodash and _(, missing _. * upgrade client-old * port common/script (root level files only) * port common/script/fns * port common/libs * port common/script/ops * port common/script/content and common/script/libs/shops.js * misc fixes * misc fixes * misc fixes * more tests fixes * fix payments test stubbing, down to 2 failing tests * remove more instances of lodash wrapping * fix bug where toObject does not clone object * fix tests * upgrade migration or add lodash 4 note * update shrinkwrap * fix linting * upgrade eslint-config-habitrpg * update shrinkwrap * recompile shrinkwrap
88 lines
2.0 KiB
JavaScript
88 lines
2.0 KiB
JavaScript
import each from 'lodash/each';
|
|
import defaults from 'lodash/defaults';
|
|
import moment from 'moment';
|
|
|
|
import {
|
|
CLASSES,
|
|
GEAR_TYPES,
|
|
} from '../constants';
|
|
import { ownsItem } from './gear-helper';
|
|
|
|
import weapon from './weapon';
|
|
import armor from './armor';
|
|
import head from './head';
|
|
import shield from './shield';
|
|
import back from './back';
|
|
import body from './body';
|
|
import headAccessory from './head-accessory';
|
|
import eyewear from './eyewear';
|
|
|
|
let gear = {
|
|
weapon,
|
|
armor,
|
|
head,
|
|
shield,
|
|
back,
|
|
body,
|
|
headAccessory,
|
|
eyewear,
|
|
};
|
|
|
|
/*
|
|
The gear is exported as a tree (defined above), and a flat list (eg, {weapon_healer_1: .., shield_special_0: ...}) since
|
|
they are needed in different forms at different points in the app
|
|
*/
|
|
let flat = {};
|
|
|
|
each(GEAR_TYPES, (type) => {
|
|
let allGearTypes = CLASSES.concat(['base', 'special', 'mystery', 'armoire']);
|
|
|
|
each(allGearTypes, (klass) => {
|
|
each(gear[type][klass], (item, index) => {
|
|
let key = `${type}_${klass}_${index}`;
|
|
let set = `${klass}-${index}`;
|
|
|
|
defaults(item, {
|
|
type,
|
|
key,
|
|
set,
|
|
klass,
|
|
index,
|
|
str: 0,
|
|
int: 0,
|
|
per: 0,
|
|
con: 0,
|
|
canBuy: () => {
|
|
return false;
|
|
},
|
|
});
|
|
|
|
if (item.event) {
|
|
let canOwnFuncTrue = () => {
|
|
return true;
|
|
};
|
|
let _canOwn = item.canOwn || canOwnFuncTrue;
|
|
|
|
item.canOwn = (user) => {
|
|
let userHasOwnedItem = ownsItem(key)(user);
|
|
let eventIsCurrent = moment().isAfter(item.event.start) && moment().isBefore(item.event.end);
|
|
let compatibleWithUserClass = item.specialClass ? user.stats.class === item.specialClass : true;
|
|
|
|
return _canOwn(user) && (userHasOwnedItem || eventIsCurrent) && compatibleWithUserClass;
|
|
};
|
|
}
|
|
|
|
if (item.mystery || key.indexOf('takeThis') !== -1) {
|
|
item.canOwn = ownsItem(key);
|
|
}
|
|
|
|
flat[key] = item;
|
|
});
|
|
});
|
|
});
|
|
|
|
module.exports = {
|
|
tree: gear,
|
|
flat,
|
|
};
|