mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-08-05 03:52:14 +00:00
Merge pull request #570 from lefnire/priority-multiplier
Priority multiplier
This commit is contained in:
commit
34651083ec
6 changed files with 77 additions and 34 deletions
|
|
@ -1,6 +1,13 @@
|
|||
|
||||
MODIFIER = .02
|
||||
|
||||
priorityValue = (priority='!') ->
|
||||
switch priority
|
||||
when '!' then 1
|
||||
when '!!' then 1.5
|
||||
when '!!!' then 2
|
||||
else 1
|
||||
|
||||
module.exports.tnl = (level) ->
|
||||
return (Math.pow(level,2)*10)+(level*10)+80
|
||||
|
||||
|
|
@ -9,12 +16,13 @@ module.exports.tnl = (level) ->
|
|||
{value} task.value for exp gain
|
||||
{weaponStrength) weapon strength
|
||||
{level} current user level
|
||||
{priority} user-defined priority multiplier
|
||||
###
|
||||
module.exports.expModifier = (value, weaponStrength, level) ->
|
||||
levelModifier = (level-1) * MODIFIER
|
||||
weaponModifier = weaponStrength / 100
|
||||
strength = 1 + weaponModifier + levelModifier
|
||||
return value * strength
|
||||
module.exports.expModifier = (value, weaponStrength, level, priority='!') ->
|
||||
levelModifier = (level-1) * MODIFIER
|
||||
weaponModifier = weaponStrength / 100
|
||||
strength = 1 + weaponModifier + levelModifier
|
||||
return value * strength * priorityValue(priority)
|
||||
|
||||
###
|
||||
Calculates HP modification based on level and armor defence
|
||||
|
|
@ -22,18 +30,20 @@ module.exports.expModifier = (value, weaponStrength, level) ->
|
|||
{armorDefense} defense from armor
|
||||
{helmDefense} defense from helm
|
||||
{level} current user level
|
||||
{priority} user-defined priority multiplier
|
||||
###
|
||||
module.exports.hpModifier = (value, armorDefense, helmDefense, shieldDefense, level) ->
|
||||
levelModifier = (level-1) * MODIFIER
|
||||
armorModifier = (armorDefense + helmDefense + shieldDefense) / 100
|
||||
defense = 1 - levelModifier + armorModifier
|
||||
return value * defense
|
||||
module.exports.hpModifier = (value, armorDefense, helmDefense, shieldDefense, level, priority='!') ->
|
||||
levelModifier = (level-1) * MODIFIER
|
||||
armorModifier = (armorDefense + helmDefense + shieldDefense) / 100
|
||||
defense = 1 - levelModifier + armorModifier
|
||||
return value * defense * priorityValue(priority)
|
||||
|
||||
###
|
||||
Future use
|
||||
{priority} user-defined priority multiplier
|
||||
###
|
||||
module.exports.gpModifier = (value, modifier) ->
|
||||
return value * modifier
|
||||
module.exports.gpModifier = (value, modifier, priority='!') ->
|
||||
return value * modifier * priorityValue(priority)
|
||||
|
||||
###
|
||||
Calculates the next task.value based on direction
|
||||
|
|
|
|||
|
|
@ -63,6 +63,9 @@ module.exports.app = (appExports, model) ->
|
|||
appExports.closeOnliesNotification = (e, el) ->
|
||||
user.set('flags.onliesNotification', 'hide')
|
||||
|
||||
appExports.closePriorityNotification = (e, el) ->
|
||||
user.set('flags.priorityNotification', 'hide')
|
||||
|
||||
appExports.customizeGender = (e, el) ->
|
||||
user.set 'preferences.gender', $(el).attr('data-value')
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ score = (model, taskId, direction, times, batch, cron) ->
|
|||
taskPath = "tasks.#{taskId}"
|
||||
taskObj = obj.tasks[taskId]
|
||||
{type, value} = taskObj
|
||||
priority = taskObj.priority or '!'
|
||||
|
||||
# If they're trying to purhcase a too-expensive reward, confirm they want to take a hit for it
|
||||
if taskObj.value > obj.stats.gp and taskObj.type is 'reward'
|
||||
|
|
@ -51,16 +52,16 @@ score = (model, taskId, direction, times, batch, cron) ->
|
|||
addPoints = ->
|
||||
level = user.get('stats.lvl')
|
||||
weaponStrength = items.items.weapon[user.get('items.weapon')].strength
|
||||
modified = algos.expModifier(delta,weaponStrength,level)
|
||||
modified = algos.expModifier(delta,weaponStrength,level, priority)
|
||||
exp += modified*10
|
||||
gp += delta
|
||||
gp += algos.gpModifier(delta, 1, priority)
|
||||
|
||||
subtractPoints = ->
|
||||
level = user.get('stats.lvl')
|
||||
armorDefense = items.items.armor[user.get('items.armor')].defense
|
||||
helmDefense = items.items.head[user.get('items.head')].defense
|
||||
shieldDefense = items.items.shield[user.get('items.shield')].defense
|
||||
modified = algos.hpModifier(delta,armorDefense,helmDefense,shieldDefense,level)
|
||||
modified = algos.hpModifier(delta,armorDefense,helmDefense,shieldDefense,level, priority)
|
||||
hp += modified
|
||||
|
||||
switch type
|
||||
|
|
|
|||
|
|
@ -177,3 +177,8 @@ module.exports.app = (appExports, model) ->
|
|||
# When they update their notes, re-establish tooltip & popover
|
||||
$('[rel=tooltip]').tooltip()
|
||||
$('[rel=popover]').popover()
|
||||
|
||||
appExports.tasksSetPriority = (e, el) ->
|
||||
dataId = $(el).parent('[data-id]').attr('data-id')
|
||||
#"_user.tasks.#{dataId}"
|
||||
model.at(e.target).set 'priority', $(el).attr('data-priority')
|
||||
|
|
@ -22,5 +22,11 @@
|
|||
chime in with your recommendations on this mechanic.
|
||||
</p>
|
||||
</div>
|
||||
{/}
|
||||
|
||||
{#if equal(_user.flags.priorityNotification, 'show')}
|
||||
<div class='alert alert-success'>
|
||||
<a x-bind="click:closePriorityNotification" class=pull-right>[x]</a>
|
||||
<p>New Feature: Priority Multiplier! You can now multiply "more important" tasks on a 1x, 1.5x, or 2x scale. <a target="_blank" href="https://trello.com/card/priority-multiplier/50e5d3684fe3a7266b0036d6/17">See details</a>.</p>
|
||||
</div>
|
||||
{/}
|
||||
|
|
@ -176,37 +176,55 @@
|
|||
<label>Notes</label><textarea rows=3>{:task.notes}</textarea>
|
||||
</div>
|
||||
{#if equal(:task.type, 'habit')}
|
||||
<div class="control-group">
|
||||
<label class="checkbox inline"><input type=checkbox checked={:task.up}>Up</label>
|
||||
<label class="checkbox inline"><input type=checkbox checked={:task.down}>Down</label>
|
||||
</div>
|
||||
<hr/>
|
||||
<label>Direction</label>
|
||||
<div class="control-group">
|
||||
<label class="checkbox inline"><input type=checkbox checked={:task.up}>Up</label>
|
||||
<label class="checkbox inline"><input type=checkbox checked={:task.down}>Down</label>
|
||||
</div>
|
||||
{else if equal(:task.type, 'daily')}
|
||||
<label>Repeat</label>
|
||||
<div class="control-group btn-group repeat-days">
|
||||
<!-- note, does not use data-toggle="buttons-checkbox" - it would interfere with our own click binding -->
|
||||
<button type="button" class="btn btn-info {#if :task.repeat.su}active{/}" data-day='su' x-bind=click:toggleDay>Su</button>
|
||||
<button type="button" class="btn btn-info {#if :task.repeat.m}active{/}" data-day='m' x-bind=click:toggleDay>M</button>
|
||||
<button type="button" class="btn btn-info {#if :task.repeat.t}active{/}" data-day='t' x-bind=click:toggleDay>T</button>
|
||||
<button type="button" class="btn btn-info {#if :task.repeat.w}active{/}" data-day='w' x-bind=click:toggleDay>W</button>
|
||||
<button type="button" class="btn btn-info {#if :task.repeat.th}active{/}" data-day='th' x-bind=click:toggleDay>Th</button>
|
||||
<button type="button" class="btn btn-info {#if :task.repeat.f}active{/}" data-day='f' x-bind=click:toggleDay>F</button>
|
||||
<button type="button" class="btn btn-info {#if :task.repeat.s}active{/}" data-day='s' x-bind=click:toggleDay>S</button>
|
||||
</div>
|
||||
<hr/>
|
||||
<label>Repeat</label>
|
||||
<div class="control-group btn-group repeat-days">
|
||||
<!-- note, does not use data-toggle="buttons-checkbox" - it would interfere with our own click binding -->
|
||||
<button type="button" class="btn btn-info {#if :task.repeat.su}active{/}" data-day='su' x-bind=click:toggleDay>Su</button>
|
||||
<button type="button" class="btn btn-info {#if :task.repeat.m}active{/}" data-day='m' x-bind=click:toggleDay>M</button>
|
||||
<button type="button" class="btn btn-info {#if :task.repeat.t}active{/}" data-day='t' x-bind=click:toggleDay>T</button>
|
||||
<button type="button" class="btn btn-info {#if :task.repeat.w}active{/}" data-day='w' x-bind=click:toggleDay>W</button>
|
||||
<button type="button" class="btn btn-info {#if :task.repeat.th}active{/}" data-day='th' x-bind=click:toggleDay>Th</button>
|
||||
<button type="button" class="btn btn-info {#if :task.repeat.f}active{/}" data-day='f' x-bind=click:toggleDay>F</button>
|
||||
<button type="button" class="btn btn-info {#if :task.repeat.s}active{/}" data-day='s' x-bind=click:toggleDay>S</button>
|
||||
</div>
|
||||
{else if equal(:task.type, 'reward')}
|
||||
<div class=control-group>
|
||||
<label>Price
|
||||
<hr/>
|
||||
<div class=control-group>
|
||||
<label>Price</label>
|
||||
<div class="input-append">
|
||||
<input class="span5" size="16" type="number" min="0" value={:task.value}><span class="add-on">Gold</span>
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{else if equal(:task.type, 'todo')}
|
||||
<hr/>
|
||||
<div class=control-group>
|
||||
<label>Due Date</label>
|
||||
<input type="text" value="{:task.date}" data-date-format="mm/dd/yyyy" class="datepicker" />
|
||||
<div><small>Enter as date, eg 02/19/2013 or 02-19-2013</small></div>
|
||||
</div>
|
||||
{/}
|
||||
|
||||
{#unless equal(:task.type, 'reward')}
|
||||
<hr/>
|
||||
<div>
|
||||
<div class="control-group btn-group priority-multiplier" data-id="{{:task.id}}">
|
||||
<label>Priority <a href="https://trello.com/card/priority-multiplier/50e5d3684fe3a7266b0036d6/17" target="_blank"><i class='icon-question-sign'></i></a></label>
|
||||
<button type="button" class="btn btn-info {#if equal(:task.priority,'!')}active{/}{#unless :task.priority}active{/}" data-priority='!' x-bind=click:tasksSetPriority>!</button>
|
||||
<button type="button" class="btn btn-info {#if equal(:task.priority,'!!')}active{/}" data-priority='!!' x-bind=click:tasksSetPriority>!!</button>
|
||||
<button type="button" class="btn btn-info {#if equal(:task.priority,'!!!')}active{/}" data-priority='!!!' x-bind=click:tasksSetPriority>!!!</button>
|
||||
</div>
|
||||
</div>
|
||||
{/}
|
||||
<hr/>
|
||||
<button type=submit class="btn" x-bind="click:tasksSaveAndClose">Save & Close</button>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Reference in a new issue