mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 07:37:25 +01:00
Move flattening function to gear module
This commit is contained in:
@@ -12,8 +12,7 @@ t = require('../../dist/scripts/content/helpers').translator
|
|||||||
---------------------------------------------------------------
|
---------------------------------------------------------------
|
||||||
###
|
###
|
||||||
|
|
||||||
classes = ['warrior', 'rogue', 'healer', 'wizard']
|
classes = require('../../dist/scripts/content/classes')
|
||||||
gearTypes = [ 'weapon', 'armor', 'head', 'shield', 'body', 'back', 'headAccessory', 'eyewear']
|
|
||||||
|
|
||||||
events = require('../../dist/scripts/content/events')
|
events = require('../../dist/scripts/content/events')
|
||||||
|
|
||||||
@@ -29,28 +28,8 @@ gear = require('../../dist/scripts/content/gear/index')
|
|||||||
###
|
###
|
||||||
api.gear =
|
api.gear =
|
||||||
tree: gear
|
tree: gear
|
||||||
flat: {}
|
flat: gear.flat
|
||||||
|
|
||||||
_.each gearTypes, (type) ->
|
|
||||||
_.each classes.concat(['base', 'special', 'mystery', 'armoire']), (klass) ->
|
|
||||||
# add "type" to each item, so we can reference that as "weapon" or "armor" in the html
|
|
||||||
_.each gear[type][klass], (item, i) ->
|
|
||||||
key = "#{type}_#{klass}_#{i}"
|
|
||||||
_.defaults item, {type, key, klass, index: i, str:0, int:0, per:0, con:0}
|
|
||||||
|
|
||||||
if item.event
|
|
||||||
#? indicates null/undefined. true means they own currently, false means they once owned - and false is what we're
|
|
||||||
# after (they can buy back if they bought it during the event's timeframe)
|
|
||||||
_canOwn = item.canOwn or (->true)
|
|
||||||
item.canOwn = (u)->
|
|
||||||
_canOwn(u) and
|
|
||||||
(u.items.gear.owned[key]? or (moment().isAfter(item.event.start) and moment().isBefore(item.event.end))) and
|
|
||||||
(if item.specialClass then (u.stats.class is item.specialClass) else true)
|
|
||||||
|
|
||||||
if item.mystery
|
|
||||||
item.canOwn = (u)-> u.items.gear.owned[key]?
|
|
||||||
|
|
||||||
api.gear.flat[key] = item
|
|
||||||
|
|
||||||
###
|
###
|
||||||
Time Traveler Store, mystery sets need their items mapped in
|
Time Traveler Store, mystery sets need their items mapped in
|
||||||
@@ -101,7 +80,7 @@ api.classes = classes
|
|||||||
---------------------------------------------------------------
|
---------------------------------------------------------------
|
||||||
###
|
###
|
||||||
|
|
||||||
api.gearTypes = gearTypes
|
api.gearTypes = gear.gearTypes
|
||||||
|
|
||||||
api.spells = require('../../dist/scripts/content/spells/index')
|
api.spells = require('../../dist/scripts/content/spells/index')
|
||||||
|
|
||||||
|
|||||||
3
common/script/src/content/classes.js
Normal file
3
common/script/src/content/classes.js
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
let classes = ['warrior', 'rogue', 'healer', 'wizard'];
|
||||||
|
|
||||||
|
export default classes;
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
import {translator as t} from '../helpers';
|
import {translator as t} from '../helpers';
|
||||||
import events from '../events';
|
import {each, defaults} from 'lodash';
|
||||||
|
import classes from '../classes';
|
||||||
|
|
||||||
import weapon from './weapon';
|
import weapon from './weapon';
|
||||||
import armor from './armor';
|
import armor from './armor';
|
||||||
@@ -10,6 +11,8 @@ import body from './body';
|
|||||||
import headAccessory from './head-accessory';
|
import headAccessory from './head-accessory';
|
||||||
import eyewear from './eyewear';
|
import eyewear from './eyewear';
|
||||||
|
|
||||||
|
const GEAR_TYPES = [ 'weapon', 'armor', 'head', 'shield', 'body', 'back', 'headAccessory', 'eyewear']
|
||||||
|
|
||||||
let gear = {
|
let gear = {
|
||||||
weapon: weapon,
|
weapon: weapon,
|
||||||
armor: armor,
|
armor: armor,
|
||||||
@@ -21,4 +24,48 @@ let gear = {
|
|||||||
eyewear: eyewear,
|
eyewear: eyewear,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default gear;
|
let flat = {};
|
||||||
|
|
||||||
|
|
||||||
|
// 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
|
||||||
|
|
||||||
|
each(GEAR_TYPES, function(type) {
|
||||||
|
let classTypes = classes.concat(['base', 'special', 'mystery', 'armoire']);
|
||||||
|
|
||||||
|
each(classTypes, function(klass) {
|
||||||
|
each(gear[type][klass], function(item, i) {
|
||||||
|
let key = type + "_" + klass + "_" + i;
|
||||||
|
defaults(item, {
|
||||||
|
type: type,
|
||||||
|
key: key,
|
||||||
|
klass: klass,
|
||||||
|
index: i,
|
||||||
|
str: 0,
|
||||||
|
int: 0,
|
||||||
|
per: 0,
|
||||||
|
con: 0
|
||||||
|
});
|
||||||
|
if (item.event) {
|
||||||
|
let _canOwn = item.canOwn || (function() {
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
item.canOwn = function(u) {
|
||||||
|
return _canOwn(u) && ((u.items.gear.owned[key] != null) || (moment().isAfter(item.event.start) && moment().isBefore(item.event.end))) && (item.specialClass ? u.stats["class"] === item.specialClass : true);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (item.mystery) {
|
||||||
|
item.canOwn = function(u) {
|
||||||
|
return u.items.gear.owned[key] != null;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
flat[key] = item;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
export default {
|
||||||
|
tree: gear,
|
||||||
|
flat: flat,
|
||||||
|
gearTypes: GEAR_TYPES
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user