v3 client: fix predicatbale random

This commit is contained in:
Matteo Pagliazzi
2016-05-18 15:30:23 +02:00
parent 210ac57165
commit 7ea581bb38
2 changed files with 8 additions and 1 deletions

View File

@@ -5,7 +5,12 @@ import _ from 'lodash';
module.exports = function predictableRandom (user, seed) { module.exports = function predictableRandom (user, seed) {
if (!seed || seed === Math.PI) { if (!seed || seed === Math.PI) {
seed = _.reduce(user.stats, (accumulator, val) => { let stats = user.stats.toObject ? user.stats.toObject() : user.stats;
// These items are not part of the stat object but exists on the server (see controllers/user#getUser)
// we remove them in order to use the same user.stats both on server and on client
stats = _.omit(stats, 'toNextLevel', 'maxHealth', 'maxMP');
seed = _.reduce(stats, (accumulator, val) => {
if (_.isNumber(val)) { if (_.isNumber(val)) {
return accumulator + val; return accumulator + val;
} else { } else {

View File

@@ -37,6 +37,8 @@ api.getUser = {
delete user.apiToken; delete user.apiToken;
// TODO move to model? (maybe virtuals, maybe in toJSON) // TODO move to model? (maybe virtuals, maybe in toJSON)
// NOTE: if an item is manually added to user.stats common/fns/predictableRandom must be tweaked
// so it's not considered. Otherwise the client will have it while the server won't and the results will be different.
user.stats.toNextLevel = common.tnl(user.stats.lvl); user.stats.toNextLevel = common.tnl(user.stats.lvl);
user.stats.maxHealth = common.maxHealth; user.stats.maxHealth = common.maxHealth;
user.stats.maxMP = common.statsComputed(user).maxMP; user.stats.maxMP = common.statsComputed(user).maxMP;