2013-04-16 18:38:48 +00:00
_ = require ' underscore '
{ randomVal } = require ' ./helpers '
2013-05-19 17:01:50 +00:00
{ pets , hatchingPotions } = require ( ' habitrpg-shared/script/items ' ) . items
2013-04-16 18:38:48 +00:00
2013-04-16 17:46:44 +00:00
# ##
Listeners to enabled flags , set notifications to the user when they ' ve unlocked features
# ##
module.exports.app = (appExports, model) ->
user = model . at ( ' _user ' )
2013-04-16 19:42:59 +00:00
alreadyShown = (before, after) -> ! ( ! before and after is true )
2013-04-16 17:46:44 +00:00
showPopover = (selector, title, html, placement='bottom') ->
$ ( selector ) . popover ( ' destroy ' )
html += " <a href= ' # ' onClick= \" $( ' #{ selector } ' ).popover( ' hide ' );return false; \" >[Close]</a> "
$ ( selector ) . popover ( {
title: title
placement: placement
trigger: ' manual '
html: true
content: html
} ) . popover ' show '
user . on ' set ' , ' flags.customizationsNotification ' , (after, before) ->
return if alreadyShown ( before , after )
$ ( ' .main-herobox ' ) . popover ( ' destroy ' ) #remove previous popovers
html = " Click your avatar to customize your appearance. "
showPopover ' .main-herobox ' , ' Customize Your Avatar ' , html , ' bottom '
user . on ' set ' , ' flags.itemsEnabled ' , (after, before) ->
return if alreadyShown ( before , after )
html = """
< img src = ' /vendor/BrowserQuest/client/img/1/chest.png ' / >
Congratulations , you have unlocked the Item Store ! You can now buy weapons , armor , potions , etc . Read each item ' s comment for more information.
"""
showPopover ' div.rewards ' , ' Item Store Unlocked ' , html , ' left '
user . on ' set ' , ' flags.petsEnabled ' , (after, before) ->
return if alreadyShown ( before , after )
html = """
< img src = ' /img/sprites/wolf_border.png ' style = ' width:30px;height:30px;float:left;padding-right:5px ' / >
2013-05-10 16:30:13 +00:00
You have unlocked Pets ! You can now buy pets with Gems ( note , you replenish Gems with real - life money - so chose your pets wisely ! )
2013-04-16 17:46:44 +00:00
"""
showPopover ' # rewardsTabs ' , ' Pets Unlocked ' , html , ' left '
user . on ' set ' , ' flags.partyEnabled ' , (after, before) ->
return if user . get ( ' party.current ' ) or alreadyShown ( before , after )
html = """
2013-05-02 16:42:35 +00:00
Be social , join a party and play Habit with your friends ! You ' ll be better at your habits with accountability partners. Click User -> Options -> Party, and follow the instructions. LFG anyone?
2013-04-16 17:46:44 +00:00
"""
showPopover ' .user-menu ' , ' Party System ' , html , ' bottom '
user . on ' set ' , ' flags.dropsEnabled ' , (after, before) ->
return if alreadyShown ( before , after )
egg = randomVal pets
dontPersist = model . _dontPersist
model._dontPersist = false
user . push ' items.eggs ' , egg
model._dontPersist = dontPersist
$ ( ' # drops-enabled-modal ' ) . modal ' show '
2013-05-03 15:06:25 +00:00
user . on ' push ' , ' items.pets ' , (after, before) ->
return if user . get ( ' achievements.beastMaster ' )
if before >= 90 # evidently before is the count?
2013-05-03 17:18:28 +00:00
dontPersist = model . _dontPersist ; model._dontPersist = false
user . set ' achievements.beastMaster ' , true , ( -> model._dontPersist = dontPersist )
2013-05-03 15:06:25 +00:00
$ ( ' # beastmaster-achievement-modal ' ) . modal ( ' show ' )
2013-05-03 15:19:19 +00:00
user . on ' set ' , ' items.* ' , (after, before) ->
return if user . get ( ' achievements.ultimateGear ' )
items = user . get ( ' items ' )
if parseInt ( items . weapon ) == 6 and parseInt ( items . armor ) == 5 and parseInt ( items . head ) == 5 and parseInt ( items . shield ) == 5
2013-05-03 17:18:28 +00:00
dontPersist = model . _dontPersist ; model._dontPersist = false
user . set ' achievements.ultimateGear ' , true , ( -> model._dontPersist = dontPersist )
2013-05-03 15:19:19 +00:00
$ ( ' # max-gear-achievement-modal ' ) . modal ( ' show ' )
2013-05-04 09:35:30 +00:00
user . on ' set ' , ' tasks.*.streak ' , (id, after, before) ->
if after > 0
# 21-day streak, as per the old philosophy of doign a thing 21-days in a row makes a habit
if ( after % 21 ) is 0
dontPersist = model . _dontPersist ; model._dontPersist = false
user . incr ' achievements.streak ' , 1 , ( -> model._dontPersist = dontPersist )
$ ( ' # streak-achievement-modal ' ) . modal ( ' show ' )
# they're undoing a task at the 21 mark, take back their badge
2013-05-04 09:44:06 +00:00
else if ( before - after is 1 ) and ( before % 21 is 0 )
2013-05-04 09:35:30 +00:00
dontPersist = model . _dontPersist ; model._dontPersist = false
user . incr ' achievements.streak ' , - 1 , ( -> model._dontPersist = dontPersist )