diff --git a/common/script/index.coffee b/common/script/index.coffee index 8d71e8e3d6..a146923abf 100644 --- a/common/script/index.coffee +++ b/common/script/index.coffee @@ -1722,12 +1722,16 @@ api.wrap = (user, main=true) -> daily.completed = false return + multiDaysCountAsOneDay = true + # If the user does not log in for two or more days, cron (mostly) acts as if it were only one day. + # When site-wide difficulty settings are introduced, this can be a user preference option. + # Tally each task todoTally = 0 user.todos.forEach (task) -> # make uncompleted todos redder return unless task {id, completed} = task - delta = user.ops.score({params:{id:task.id, direction:'down'}, query:{times:(daysMissed), cron:true}}) + delta = user.ops.score({params:{id:task.id, direction:'down'}, query:{times:(multiDaysCountAsOneDay ? 1 : daysMissed), cron:true}}) absVal = if (completed) then Math.abs(task.value) else task.value todoTally += absVal @@ -1745,14 +1749,22 @@ api.wrap = (user, main=true) -> dailyChecked += 1 else # dailys repeat, so need to calculate how many they've missed according to their own schedule + console.log("task: " + task.text) # XXX Alys to remove these scheduleMisses = 0 + keepGoing = true # XXX Alys to improve how we break out of _.times _.times daysMissed, (n) -> - thatDay = moment(now).subtract({days: n + 1}) - if api.shouldDo(thatDay.toDate(), task, user.preferences) - scheduleMisses++ - if user.stats.buffs.stealth - user.stats.buffs.stealth-- - EvadeTask++ + if keepGoing + console.log("n: " + n) + thatDay = moment(now).subtract({days: n + 1}) + if api.shouldDo(thatDay.toDate(), task, user.preferences) + console.log("damage") + scheduleMisses++ + if user.stats.buffs.stealth + user.stats.buffs.stealth-- + EvadeTask++ + if multiDaysCountAsOneDay + console.log("end") + keepGoing = false if scheduleMisses > EvadeTask perfect = false @@ -1762,7 +1774,7 @@ api.wrap = (user, main=true) -> dailyChecked += fractionChecked else dailyDueUnchecked += 1 - delta = user.ops.score({params:{id:task.id, direction:'down'}, query:{times:(scheduleMisses-EvadeTask), cron:true}}) + delta = user.ops.score({params:{id:task.id, direction:'down'}, query:{times:(multiDaysCountAsOneDay ? 1 : (scheduleMisses-EvadeTask)), cron:true}}) # Apply damage from a boss, less damage for Trivial priority (difficulty) user.party.quest.progress.down += delta * (if task.priority < 1 then task.priority else 1) diff --git a/test/common/dailies.coffee b/test/common/dailies.coffee index fc88adfbf3..9a9498d24e 100644 --- a/test/common/dailies.coffee +++ b/test/common/dailies.coffee @@ -49,8 +49,8 @@ newUser = (addTasks=true)-> user.ops.addTask {body: {type: task, id: shared.uuid()}} user -cron = (usr) -> - usr.lastCron = moment().subtract(1,'days') +cron = (usr, missedDays=1) -> + usr.lastCron = moment().subtract(missedDays,'days') usr.fns.cron() describe 'daily/weekly that repeats everyday (default)', -> diff --git a/website/views/shared/footer.jade b/website/views/shared/footer.jade index 2e81898d9c..256a33894b 100644 --- a/website/views/shared/footer.jade +++ b/website/views/shared/footer.jade @@ -79,6 +79,15 @@ footer.footer(ng-controller='FooterCtrl') a.btn.btn-default(ng-click='setHealthLow()') Health = 1 a.btn.btn-default(ng-click='addMissedDay(1)') +1 Missed Day a.btn.btn-default(ng-click='addMissedDay(2)') +2 Missed Days + // XXX Alys to remove these excess ones when testing is done: + a.btn.btn-default(ng-click='addMissedDay(3)') +3 Missed Days + a.btn.btn-default(ng-click='addMissedDay(4)') +4 Missed Days + a.btn.btn-default(ng-click='addMissedDay(5)') +5 Missed Days + a.btn.btn-default(ng-click='addMissedDay(6)') +6 Missed Days + a.btn.btn-default(ng-click='addMissedDay(7)') +7 Missed Days + a.btn.btn-default(ng-click='addMissedDay(8)') +8 Missed Days + a.btn.btn-default(ng-click='addMissedDay(9)') +9 Missed Days + a.btn.btn-default(ng-click='addMissedDay(10)') +10 Missed Day a.btn.btn-default(ng-click='addTenGems()') +10 Gems a.btn.btn-default(ng-click='addGold()') +GP a.btn.btn-default(ng-click='addMana()') +MP