data.recruit = _.map(data.recruit, function (recruit) { // attach monster data for this recruit monster = _.find(data.monster, { name : recruit.species }); if (monster) { recruit = _.merge({}, monster, recruit); recruit.status = helpers.fixStatus(recruit.status); return recruit; } else { throw new Error('Unable to find monster data for recruit ' + recruit.name + ', species: ' + recruit.species); } });
_.each(data[type], function (member) { member.type = type; member.experience = Math.max(member.experience, 0); member.gold = Math.max(member.gold, 0); // make sure base STR/AGI are in-bounds member.base_strength = Math.min(member.base_strength, max_stat['base_strength']); member.base_agility = Math.min(member.base_agility, max_stat['base_agility']); helpers.recalculateStats(data, member); // run_fac (only used for PvP) member.run_fac = 1; member.run_score = function () { return (parseInt(this.run_fac * this.curr_agility, 10) || 1); }; // resist _.each(member.resist, function (base_value, key) { member.resist[key] = helpers.calculateStatBoost('resist.' + key, base_value, data, member); member.resist[key] = Math.max(member.resist[key], 0); }); // saver member.saver = { burn : false, phys : false, ment : false }; _.each(member.saver, function (value, key) { member.saver[key] = helpers.calculateStatBoost('saver.' + key, false, data, member); }); // is_cursed member.is_cursed = helpers.calculateStatBoost('is_cursed', false, data, member); // target_group member.target_group = helpers.calculateStatBoost('target_group', false, data, member); // target_all member.target_all = helpers.calculateStatBoost('target_all', false, data, member); // hits (minimum of 1 and maximum of 2) member.hits = helpers.calculateStatBoost('double_hit', false, data, member) ? 2 : 1; // status should be an array member.status = helpers.fixStatus(member.status); // effects should be an array if (member.effects) { member.effects = _.compact(_.map(member.effects.split(';'), function (effect) { return effect.trim(); })); } else { member.effects = []; } // abilities should be an array if (member.abilities) { member.abilities = _.compact(_.map(member.abilities.split(';'), function (ability) { return ability.trim(); })); } else { member.abilities = []; } // sanitize lottery tickets if (member.loto3) { member.loto3 = _.map(member.loto3, function (ticket) { return ticket.replace(/\s/g, ''); }); } if (member.bol) { member.bol = _.map(member.bol, function (ticket) { return ticket.replace(/\s/g, ''); }); } member.displayName = function () { return (this.name + (this.symbol || '')); } });