_ = require 'underscore' items = weapon: [ {index: 0, text: "Sword 1", classes: "weapon_0", notes:'Training weapon.', modifier: 0.0, value:0} {index: 1, text: "Sword 2", classes:'weapon_1', notes:'Increases experience gain by 3%.', modifier: 0.3, value:20} {index: 2, text: "Axe", classes:'weapon_2', notes:'Increases experience gain by 6%.', modifier: 0.6, value:30} {index: 3, text: "Morningstar", classes:'weapon_3', notes:'Increases experience gain by 9%.', modifier: 0.9, value:45} {index: 4, text: "Blue Sword", classes:'weapon_4', notes:'Increases experience gain by 12%.', modifier: 1.2, value:65} {index: 5, text: "Red Sword", classes:'weapon_5', notes:'Increases experience gain by 15%.', modifier: 1.5, value:90} {index: 6, text: "Golden Sword", classes:'weapon_6', notes:'Increases experience gain by 18%.', modifier: 1.8, value:120} ] armor: [ {index: 0, text: "Cloth Armor", classes: 'armor_0', notes:'Training armor.', modifier: 0.0, value:0} {index: 1, text: "Leather Armor", classes: 'armor_1', notes:'Decreases HP loss by 3%.', modifier: 0.3, value:30} {index: 2, text: "Chain Mail", classes: 'armor_2', notes:'Decreases HP loss by 6%.', modifier: 0.6, value:45} {index: 3, text: "Plate Mail", classes: 'armor_3', notes:'Decreases HP loss by 9%.', modifier: 0.9, value:65} {index: 4, text: "Red Armor", classes: 'armor_4', notes:'Decreases HP loss by 12%.', modifier: 1.2, value:90} {index: 5, text: "Golden Armor", classes: 'armor_5', notes:'Decreases HP loss by 15%.', modifier: 1.5, value:120} ] head: [ {index: 0, text: "No Helm", classes: 'head_0', notes:'Training armor.', modifier: 0.0, value:0} {index: 1, text: "Leather Helm", classes: 'head_1', notes:'Decreases HP loss by 3%.', modifier: 0.3, value:30} {index: 2, text: "Chain Coif", classes: 'head_2', notes:'Decreases HP loss by 6%.', modifier: 0.6, value:45} {index: 3, text: "Plate Helm", classes: 'head_3', notes:'Decreases HP loss by 9%.', modifier: 0.9, value:65} {index: 4, text: "Red Helm", classes: 'head_4', notes:'Decreases HP loss by 12%.', modifier: 1.2, value:90} {index: 5, text: "Golden Helm", classes: 'head_5', notes:'Decreases HP loss by 15%.', modifier: 1.5, value:120} ] shield: [ {index: 0, text: "Shield 1", classes: 'shield_0', notes:'Training armor.', value:0} {index: 1, text: "Shield 2", classes: 'shield_1', notes:'Decreases HP loss by 3%.', modifier: 0.3, value:30} {index: 2, text: "Shield 3", classes: 'shield_2', notes:'Decreases HP loss by 6%.', modifier: 0.6, value:45} {index: 3, text: "Shield 4", classes: 'shield_3', notes:'Decreases HP loss by 9%.', modifier: 0.9, value:65} {index: 4, text: "Shielf 5", classes: 'shield_4', notes:'Decreases HP loss by 12%.', modifier: 1.2, value:90} ] potion: {text: "Potion", notes: "Recover 15 HP", value: 25, icon: 'item-flask.png'} reroll: text: "Re-Roll" icon: 'favicon.png' notes: "Resets your tasks. When you're struggling and everything's red, use for a clean slate." value:0 # add "type" to each item, so we can reference that as "weapon" or "armor" in the html _.each items, (category, key) -> _.each category, (item) -> item.type = key ### view exports ### module.exports.view = (view) -> view.fn 'equipped', (user, type) -> {gender, armorSet} = user?.preferences || {'m', 'v1'} if type=='armor' armor = user?.items?.armor || 0 if gender == 'f' return if (parseInt(armor) == 0) then "f_armor_#{armor}_#{armorSet}" else "f_armor_#{armor}" else return "m_armor_#{armor}" else if type=='head' head = user?.items?.head || 0 if gender == 'f' return if (parseInt(head) > 1) then "f_head_#{head}_#{armorSet}" else "f_head_#{head}" else return "m_head_#{head}" ### server exports ### module.exports.server = (model) -> updateStore(model) ### app exports ### module.exports.app = (appExports, model) -> user = model.at '_user' appExports.buyItem = (e, el, next) -> user = model.at '_user' #TODO: this should be working but it's not. so instead, i'm passing all needed values as data-attrs # item = model.at(e.target) gp = user.get 'stats.gp' [type, value, index] = [ $(el).attr('data-type'), $(el).attr('data-value'), $(el).attr('data-index') ] return if gp < value user.set 'stats.gp', gp - value if type == 'weapon' user.set 'items.weapon', index updateStore model else if type == 'armor' user.set 'items.armor', index updateStore model else if type == 'head' user.set 'items.head', index updateStore model else if type == 'shield' user.set 'items.shield', index updateStore model else if type == 'potion' hp = user.get 'stats.hp' hp += 15 hp = 50 if hp > 50 user.set 'stats.hp', hp user.on 'set', 'flags.itemsEnabled', (captures, args) -> return unless captures == true console.log "IH" html = """
Congratulations, you have unlocked the Item Store! You can now buy weapons, armor, potions, etc. Read each item's comment for more information. [Close]
""" $('ul.items').popover title: "Item Store Unlocked" placement: 'left' trigger: 'manual' html: true content: html $('ul.items').popover 'show' ### update store ### module.exports.updateStore = updateStore = (model) -> obj = model.get('_user') [nextWeapon, nextArmor, nextHead, nextShield] = [null, null, null, null] i = parseInt(obj.items.weapon) + 1 nextWeapon = if (i == _.size items.weapon) then {hide:true} else items.weapon[i] model.set '_view.items.weapon', i = parseInt(obj?.items?.armor || 0) + 1 if i == _.size items.armor nextArmor = {hide:true} else nextArmor = items.armor[i] nextArmor.classes = obj.preferences.gender + "_armor_#{i}" model.set '_view.items.armor', nextArmor i = parseInt(parseInt(obj?.items?.head || 0) + 1) if i == _.size items.armor nextHead = {hide:true} else nextHead = items.head[i] nextHead.classes = obj.preferences.gender + "_head_#{i}" nextHead.classes += "_#{obj.preferences.armorSet}" if obj.preferences.gender == 'f' model.set '_view.items.head', nextHead i = parseInt(obj?.items?.shield || 0) + 1 if i == _.size items.shield nextShield = {hide:true} else nextShield = items.shield[i] nextShield.classes = obj.preferences.gender + "_" + nextShield.classes model.set '_vie.items.shield', nextShield model.set '_view.items.potion', items.potion model.set '_view.items.reroll', items.reroll