// Generated by CoffeeScript 1.3.3 var content, expModifier, hpModifier, score, statsNotification, updateStats; content = require('./content'); statsNotification = function(html, type) { return $.bootstrapGrowl(html, { type: type, top_offset: 20, align: 'center', width: 250, delay: 3000, allow_dismiss: true, stackup_spacing: 10 }); }; expModifier = function(user, value) { var dmg, modified; dmg = user.get('items.weapon') * .03; dmg += user.get('stats.lvl') * .03; modified = value + (value * dmg); return modified; }; hpModifier = function(user, value) { var ac, modified; ac = user.get('items.armor') * .03; ac += user.get('stats.lvl') * .03; modified = value - (value * ac); return modified; }; updateStats = function(user, stats) { var money, tnl; if (stats.hp != null) { if (stats.hp < 0) { user.set('stats.lvl', 0); } else { user.set('stats.hp', stats.hp); } } if (stats.exp != null) { tnl = user.get('_tnl'); if (stats.exp >= tnl) { stats.exp -= tnl; user.set('stats.lvl', user.get('stats.lvl') + 1); statsNotification(' Level Up!', 'info'); } if (!user.get('items.itemsEnabled') && stats.exp >= 15) { user.set('items.itemsEnabled', true); $('ul.items').popover({ title: content.items.unlockedMessage.title, placement: 'left', trigger: 'manual', html: true, content: "
" + content.items.unlockedMessage.content + " [Close]
" }); $('ul.items').popover('show'); } user.set('stats.exp', stats.exp); } if (stats.money != null) { if (!(typeof money !== "undefined" && money !== null) || money < 0) { money = 0.0; } return user.set('stats.money', stats.money); } }; module.exports.score = score = function(spec) { var adjustvalue, cron, delta, diff, direction, exp, hp, lvl, modified, money, num, sign, task, type, user, value, _ref, _ref1, _ref2; if (spec == null) { spec = { user: null, task: null, direction: null, cron: null }; } _ref = [spec.user, spec.task, spec.direction, spec.cron], user = _ref[0], task = _ref[1], direction = _ref[2], cron = _ref[3]; if (!task) { _ref1 = [user.get('stats.money'), user.get('stats.hp'), user.get('stats.exp')], money = _ref1[0], hp = _ref1[1], exp = _ref1[2]; if (direction === "up") { modified = expModifier(user, 1); money += modified; exp += modified; statsNotification("Exp,GP +" + (modified.toFixed(2)), 'success'); } else { modified = hpModifier(user, 1); hp -= modified; statsNotification("HP " + (modified.toFixed(2)), 'error'); } updateStats(user, { hp: hp, exp: exp, money: money }); return; } sign = direction === "up" ? 1 : -1; value = task.get('value'); delta = value < 0 ? (-0.1 * value + 1) * sign : (Math.pow(0.9, value)) * sign; type = task.get('type'); adjustvalue = type !== 'reward'; if ((type === 'habit') && (task.get("up") === false || task.get("down") === false)) { adjustvalue = false; } if (adjustvalue) { value += delta; } if (type === 'habit') { if (task.get('value') !== value) { task.push('history', { date: new Date(), value: value }); } } task.set('value', value); _ref2 = [user.get('stats.money'), user.get('stats.hp'), user.get('stats.exp'), user.get('stats.lvl')], money = _ref2[0], hp = _ref2[1], exp = _ref2[2], lvl = _ref2[3]; if (type === 'reward') { money -= task.get('value'); num = task.get('value').toFixed(2); statsNotification("GP -" + num, 'success'); if (money < 0) { diff = hp + money; hp = diff; statsNotification("HP -" + (diff.toFixed(2)), 'error'); money = 0; } } if ((delta > 0 || (type === 'daily' || type === 'todo')) && !cron) { modified = expModifier(user, delta); exp += modified; money += modified; statsNotification("Exp,GP +" + (modified.toFixed(2)), 'success'); } else if (type !== 'reward' && type !== 'todo') { modified = hpModifier(user, delta); hp += modified; statsNotification("HP " + (modified.toFixed(2)), 'error'); } updateStats(user, { hp: hp, exp: exp, money: money }); return delta; }; module.exports.tally = function(user) { var expTally, lvl, todoTally; todoTally = 0; _.each(user.get('tasks'), function(taskObj, taskId, list) { var absVal, completed, task, type, value, _ref; if (taskObj.id == null) { return; } _ref = [taskObj.type, taskObj.value, taskObj.completed], type = _ref[0], value = _ref[1], completed = _ref[2]; task = user.at("tasks." + taskId); if (type === 'todo' || type === 'daily') { if (!completed) { score({ user: user, task: task, direction: 'down', cron: true }); } if (type === 'daily') { task.push("history", { date: new Date(), value: value }); } else { absVal = completed ? Math.abs(value) : value; todoTally += absVal; } if (type === 'daily') { return task.pass({ cron: true }).set('completed', false); } } }); user.push('history.todos', { date: new Date(), value: todoTally }); expTally = user.get('stats.exp'); lvl = 0; while (lvl < (user.get('stats.lvl') - 1)) { lvl++; expTally += 50 * Math.pow(lvl, 2) - 150 * lvl + 200; } return user.push('history.exp', { date: new Date(), value: expTally }); };