diff --git a/common/script/index.js b/common/script/index.js index 2246bc259a..6e74393255 100644 --- a/common/script/index.js +++ b/common/script/index.js @@ -2287,15 +2287,15 @@ api.wrap = function(user, main) { user.stats.lvl++; experienceToNextLevel = api.tnl(user.stats.lvl); user.stats.hp = 50; - var userTotalStatPoints = user.stats.str + user.stats.int + user.stats.con + user.stats.per; + var allocatedStatPoints = user.stats.str + user.stats.int + user.stats.con + user.stats.per - if (userTotalStatPoints >= MAX_STAT_POINTS) { + if (allocatedStatPoints >= MAX_STAT_POINTS) { continue; } if (user.preferences.automaticAllocation) { user.fns.autoAllocate(); } else { - user.stats.points = user.stats.lvl - userTotalStatPoints; + user.stats.points = MAX_STAT_POINTS - allocatedStatPoints; if (user.stats.points < 0) { user.stats.points = 0; } diff --git a/test/common/user.fns.updateStats.test.js b/test/common/user.fns.updateStats.test.js index 0e41812cb3..05b1a13432 100644 --- a/test/common/user.fns.updateStats.test.js +++ b/test/common/user.fns.updateStats.test.js @@ -38,7 +38,7 @@ describe('user.fns.updateStats', () => { }); context('Stat Allocation', () => { - it('Adds an attibute point when user\'s stat points are less than max level', () => { + it('adds an attibute point when user\'s stat points are less than max level', () => { let stats = { exp: 3581, }; @@ -54,7 +54,7 @@ describe('user.fns.updateStats', () => { expect(user.stats.points).to.eql(1); }); - it('Does not add an attibute point when user\'s stat points are equal to max level', () => { + it('does not add an attibute point when user\'s stat points are equal to max level', () => { let stats = { exp: 3581, }; @@ -69,5 +69,39 @@ describe('user.fns.updateStats', () => { expect(user.stats.points).to.eql(0); }); + + it('does not add an attibute point when user\'s stat points + unallocated points are equal to max level', () => { + let stats = { + exp: 3581, + }; + + user.stats.lvl = 99; + user.stats.str = 25; + user.stats.int = 25; + user.stats.con = 25; + user.stats.per = 15; + user.stats.points = 10; + + user.fns.updateStats(stats); + + expect(user.stats.points).to.eql(10); + }); + + it('if user is missing unallocated stat points and is over level 100, only awards stat points up to level 100', () => { + let stats = { + exp: 5581, + }; + + user.stats.lvl = 104; + user.stats.str = 25; + user.stats.int = 25; + user.stats.con = 25; + user.stats.per = 15; + user.stats.points = 0; + + user.fns.updateStats(stats); + + expect(user.stats.points).to.eql(10); + }); }); });