mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-08-04 01:29:21 +00:00
82 lines
2.8 KiB
CoffeeScript
82 lines
2.8 KiB
CoffeeScript
###
|
|
1) clone the repo
|
|
2) npm install
|
|
3) coffee ./tests/math_samples.coffee
|
|
|
|
Current results at https://gist.github.com/lefnire/8049676
|
|
###
|
|
|
|
shared = require '../../../common/script/index.coffee'
|
|
_ = require 'lodash'
|
|
$w = (s)->s.split(' ')
|
|
|
|
id = shared.uuid()
|
|
user =
|
|
stats:
|
|
class: 'warrior'
|
|
lvl:1, hp:50, gp:0, exp:10
|
|
per:0, int:0, con:0, str:0
|
|
buffs: {per:0, int:0, con:0, str:0}
|
|
training: {int:0,con:0,per:0,str:0}
|
|
preferences: automaticAllocation: false
|
|
party: quest: key:'evilsanta', progress: {up:0,down:0}
|
|
achievements: {}
|
|
items:
|
|
eggs: {}
|
|
hatchingPotions: {}
|
|
food: {}
|
|
gear:
|
|
equipped:
|
|
weapon: 'weapon_warrior_4'
|
|
armor: 'armor_warrior_4'
|
|
shield: 'shield_warrior_4'
|
|
head: 'head_warrior_4'
|
|
habits: [
|
|
# we're gonna change this habit's attribute to mess with taskbased allo. Add the others to make sure our _.reduce is legit
|
|
{id:'a',value:1,type:'habit',attribute:'str'}
|
|
]
|
|
dailys: [
|
|
{id:'b',value:1,type:'daily',attribute:'str'}
|
|
]
|
|
todos: [
|
|
{id:'c',value:1,type:'todo',attribute:'con'}
|
|
{id:'d',value:1,type:'todo',attribute:'per'}
|
|
{id:'e',value:1,type:'todo',attribute:'int'}
|
|
]
|
|
rewards: []
|
|
|
|
modes =
|
|
flat: _.cloneDeep user
|
|
classbased_warrior: _.cloneDeep user
|
|
classbased_rogue: _.cloneDeep user
|
|
classbased_wizard: _.cloneDeep user
|
|
classbased_healer: _.cloneDeep user
|
|
taskbased: _.cloneDeep user
|
|
|
|
modes.classbased_warrior.stats.class = 'warrior'
|
|
modes.classbased_rogue.stats.class = 'rogue'
|
|
modes.classbased_wizard.stats.class = 'wizard'
|
|
modes.classbased_healer.stats.class = 'healer'
|
|
|
|
_.each $w('flat classbased_warrior classbased_rogue classbased_wizard classbased_healer taskbased'), (mode) ->
|
|
_.merge modes[mode].preferences,
|
|
automaticAllocation: true
|
|
allocationMode: if mode.indexOf('classbased') is 0 then 'classbased' else mode
|
|
shared.wrap(modes[mode])
|
|
|
|
console.log "\n\n================================================"
|
|
console.log "New Simulation"
|
|
console.log "================================================\n\n"
|
|
|
|
|
|
_.times [20], (lvl) ->
|
|
console.log ("[lvl #{lvl}]\n--------------\n")
|
|
_.each $w('flat classbased_warrior classbased_rogue classbased_wizard classbased_healer taskbased'), (mode) ->
|
|
u = modes[mode] #local var
|
|
u.stats.exp = shared.tnl(lvl)+1 # level up
|
|
_.merge u.stats, {per:0,con:0,int:0,str:0} if mode is 'taskbased' # if task-based, clear stat so we can see clearly which stat got +1
|
|
u.habits[0].attribute = u.fns.randomVal({str:'str',int:'int',per:'per',con:'con'})
|
|
u.ops.score {params:{id:u.habits[0].id},direction:'up'}
|
|
u.fns.updateStats(u.stats) # trigger stats update
|
|
str = mode + (if mode is 'taskbased' then " (#{u.habits[0].attribute})" else "")
|
|
console.log str, _.pick(u.stats, $w 'per int con str')
|