mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 14:47:53 +01:00
Pull out gear into separate modules
This commit is contained in:
84
common/script/content/gear/index.js
Normal file
84
common/script/content/gear/index.js
Normal file
@@ -0,0 +1,84 @@
|
||||
import {each, defaults} from 'lodash';
|
||||
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}`;
|
||||
|
||||
defaults(item, {
|
||||
type,
|
||||
key,
|
||||
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 userOwnsItem = Boolean(user.items.gear.owned[key]);
|
||||
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) && (userOwnsItem || eventIsCurrent) && compatibleWithUserClass;
|
||||
};
|
||||
}
|
||||
|
||||
if (item.mystery) {
|
||||
item.canOwn = ownsItem(key);
|
||||
}
|
||||
|
||||
flat[key] = item;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
export default {
|
||||
tree: gear,
|
||||
flat,
|
||||
};
|
||||
Reference in New Issue
Block a user