diff --git a/common/img/sprites/spritesmith/misc/welcome_to_Habit_1.png b/common/img/sprites/spritesmith/misc/welcome_to_Habit_1.png
new file mode 100644
index 0000000000..1830fb00e2
Binary files /dev/null and b/common/img/sprites/spritesmith/misc/welcome_to_Habit_1.png differ
diff --git a/common/img/sprites/spritesmith/misc/welcome_to_Habit_2.png b/common/img/sprites/spritesmith/misc/welcome_to_Habit_2.png
new file mode 100644
index 0000000000..cacb1bc564
Binary files /dev/null and b/common/img/sprites/spritesmith/misc/welcome_to_Habit_2.png differ
diff --git a/common/img/sprites/spritesmith/misc/welcome_to_Habit_3.png b/common/img/sprites/spritesmith/misc/welcome_to_Habit_3.png
new file mode 100644
index 0000000000..937fc6f1e6
Binary files /dev/null and b/common/img/sprites/spritesmith/misc/welcome_to_Habit_3.png differ
diff --git a/common/img/sprites/spritesmith/misc/welcome_to_Habit_4.png b/common/img/sprites/spritesmith/misc/welcome_to_Habit_4.png
new file mode 100644
index 0000000000..2c0afb2743
Binary files /dev/null and b/common/img/sprites/spritesmith/misc/welcome_to_Habit_4.png differ
diff --git a/common/locales/en/defaultTasks.json b/common/locales/en/defaultTasks.json
index 0cf2f31550..48e405ab6f 100644
--- a/common/locales/en/defaultTasks.json
+++ b/common/locales/en/defaultTasks.json
@@ -1,11 +1,12 @@
{
- "defaultHabit1Text": "Good Habit",
+ "defaultTaskNotes": " ",
+ "defaultHabit1Text": "Productive Work (Click the pencil to edit)",
"defaultHabit1Notes": "Sample Good Habits: + Eat a vegetable +15 minutes productive work",
- "defaultHabit2Text": "Bad Habit",
+ "defaultHabit2Text": "Eat Junk Food (Click the pencil to edit)",
"defaultHabit2Notes": "Sample Bad Habits: - Smoke - Procrastinate",
- "defaultHabit3Text": "Good or Bad Habit",
+ "defaultHabit3Text": "Take the Stairs/Elevator (Click the pencil to edit)",
"defaultHabit3Notes": "Sample Good or Bad Habits: +/- Took Stairs/Elevator ; +/- Drank Water/Soda",
"defaultDaily1Text": "1h Personal Project",
@@ -44,7 +45,7 @@
"defaultTodo5Text": "Start a Party (private group) with your friends (Social > Party)",
- "defaultReward1Text": "1 Episode of Game of Thrones",
+ "defaultReward1Text": "15 minute break",
"defaultReward1Notes": "Custom rewards can come in many forms. Some people will hold off watching their favorite show unless they have the gold to pay for it.",
"defaultReward2Text": "Cake",
diff --git a/common/locales/en/generic.json b/common/locales/en/generic.json
index 576a7bed2c..6febe9241f 100644
--- a/common/locales/en/generic.json
+++ b/common/locales/en/generic.json
@@ -54,7 +54,7 @@
"gems": "Gems",
"gemButton": "You have <%= number %> Gems.",
"moreInfo": "More Info",
- "gemsWhatFor": "Purchased using real money. Used for buying special items and services (eggs, hatching potions, Fortify, etc.). You'll need to unlock those features before being able to use Gems.",
+ "gemsWhatFor": "Click to buy Gems! Gems let you purchase special items like Quests, avatar customizations, and seasonal equipment.",
"veteran": "Veteran",
"veteranText": "Has weathered Habit The Grey (our pre Angular website), and has gained many battle-scars from its bugs.",
"originalUser": "Original User!",
diff --git a/common/locales/en/npc.json b/common/locales/en/npc.json
index e0a6403dcf..213d85ea8f 100644
--- a/common/locales/en/npc.json
+++ b/common/locales/en/npc.json
@@ -50,8 +50,34 @@
"tourStatsPage": "This is your Stats page! Earn achievements by completing the listed tasks.",
"tourTavernPage": "Welcome to the Tavern, an all-ages chatroom! You can freeze your account in case of illness or travel by clicking \"Rest in the Inn.\" Come say hi!",
"tourPartyPage": "Your Party will help you stay accountable. Invite friends to unlock a Quest Scroll!",
- "tourGuildsPage": "Guilds are social groups with common themes. Search for the subjects that interest you! We recommend the Newbies Guild.",
- "tourChallengesPage": "Joining a Challenge will add tasks to your account. Compete against other users to win gem prizes!",
- "tourMarketPage": "Starting at Level 4, eggs and hatching potions drop randomly when you complete tasks. They appear here - use them to hatch pets! You can also buy items from the Market."
+ "tourGuildsPage": "Guilds are common-interest chat groups created by the players, for the players. Browse through the list and join the Guilds that interest you. Be sure to check out the popular Newbies Guild, where anyone can ask questions about HabitRPG!",
+ "tourChallengesPage": "Joining a Challenge will add tasks to your account. Compete against other users to win Gem prizes!",
+ "tourMarketPage": "Starting at Level 4, eggs and hatching potions drop randomly when you complete tasks. They appear here - use them to hatch pets! You can also buy items from the Market.",
+ "tourHallPage": "Welcome to the Hall of Heroes, where open-source contributors to HabitRPG are honored. Whether through code, art, music, writing, or even just helpfulness, they have earned Gems, exclusive equipment, and prestigious titles. You can contribute to HabitRPG, too!",
+ "tourPetsPage": "This is the Stable! After level 4, you can hatch pets using eggs and potions. When you hatch a pet in the Market, it will appear here! Click a pet's image to add it to your avatar. Feed them with the food you find after level 4, and they'll grow into powerful mounts.",
+ "tourMountsPage": "Once you've fed a pet enough food to turn it into a mount, it will appear here. (Pets, mounts, and food are available after level 4.) Click a mount to saddle up!",
+ "tourEquipmentPage": "This is where your Equipment is stored! Your Battle Gear affects your stats. If you want to show different Equipment on your avatar without changing your stats, click \"Enable Costume.\"",
+ "tourOkay": "Okay!",
+
+ "tourAvatar1": "Your Avatar
Your avatar lives at the top of the task dashboard.
Click on your avatar at any time to customize it!
",
+ "tourAvatar1Proceed": "Take me there!",
+ "tourAvatar2": "Customize Avatar
This is the page for basic avatar customization.
You can buy Equipment for your avatar later, once you've earned Gold.
",
+ "tourToDosBrief": "To-Do List
Check off To-Dos for Gold & Experience!
To-Dos never make your avatar lose Health
",
+ "tourDailiesBrief": "Daily Tasks
Dailies repeat every day
You lose Health if you skip Dailies
",
+ "tourDailiesProceed": "I'll be careful!",
+ "tourHabitsBrief": "Good & Bad Habits
Good Habits award Gold & Experience
Bad Habits make you lose Health
",
+ "tourHabitsProceed": "Makes sense!",
+ "tourRewardsBrief": "Reward List
Spend your Gold here
Purchase Equipment for your avatar, or set custom Rewards
';
},
- storage: false,
+ storage: false
//onEnd: function(){
// User.set({'flags.showTour': false});
//}
@@ -218,6 +232,7 @@ function($rootScope, User, $timeout, $state) {
var goto = function(chapter, page, force) {
//return; // TODO temporarily remove old tutorial system while experimenting with leslie's new gettup
+ if (chapter == 'intro') User.set({'flags.welcomed': true});
var curr = User.user.flags.tour[chapter];
if (page != curr+1 && !force) return;
var updates = {};updates['flags.tour.'+chapter] = page;
@@ -243,21 +258,27 @@ function($rootScope, User, $timeout, $state) {
if (!updateFn) return; // only run after user has been wrapped
watcher(); // deregister watcher
if (window.env.IS_MOBILE) return; // Don't show tour immediately on mobile devices
- goto('intro', 0); // kick off first step on first visit
+ if (User.user.flags.welcomed == false) {
+ $rootScope.openModal('welcome', {size: 'lg', backdrop: 'static', keyboard: false});
+ }
var alreadyShown = function(before, after) { return !(!before && after === true) };
//$rootScope.$watch('user.flags.dropsEnabled', _.flow(alreadyShown, function(already) { //FIXME requires lodash@~3.2.0
$rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams){
switch (toState.name) {
- case 'options.profile.avatar': return goto('intro', 5);
- case 'options.profile.stats': return goto('stats', 0);
- case 'options.social.tavern': return goto('tavern', 0);
- case 'options.social.party': return goto('party', 0);
- case 'options.social.guilds': return goto('guilds', 0);
- case 'options.social.challenges':return goto('challenges', 0);
- case 'options.inventory.drops': return goto('market', 0);
+ // case 'options.profile.avatar': return goto('intro', 5);
+ case 'options.profile.stats': return goto('stats', 0);
+ case 'options.social.tavern': return goto('tavern', 0);
+ case 'options.social.party': return goto('party', 0);
+ case 'options.social.guilds.public': return goto('guilds', 0);
+ case 'options.social.challenges': return goto('challenges', 0);
+ case 'options.social.hall.heroes': return goto('hall', 0);
+ case 'options.inventory.drops': return goto('market', 0);
+ case 'options.inventory.pets': return goto('pets', 0);
+ case 'options.inventory.mounts': return goto('mounts', 0);
+ case 'options.inventory.equipment': return goto('equipment', 0);
}
- })
+ });
$rootScope.$watch('user.flags.dropsEnabled', function(after, before) {
if (alreadyShown(before,after)) return;
var eggs = User.user.items.eggs || {};
diff --git a/website/src/models/user.js b/website/src/models/user.js
index 60385abfbb..070ab2701f 100644
--- a/website/src/models/user.js
+++ b/website/src/models/user.js
@@ -129,7 +129,11 @@ var UserSchema = new Schema({
party: {type: Number, 'default': -1},
guilds: {type: Number, 'default': -1},
challenges: {type: Number, 'default': -1},
- market: {type: Number, 'default': -1}
+ market: {type: Number, 'default': -1},
+ pets: {type: Number, 'default': -1},
+ mounts: {type: Number, 'default': -1},
+ hall: {type: Number, 'default': -1},
+ equipment: {type: Number, 'default': -1}
},
dropsEnabled: {type: Boolean, 'default': false},
itemsEnabled: {type: Boolean, 'default': false},
@@ -149,7 +153,8 @@ var UserSchema = new Schema({
// Needed to track the tip to send inside the email
weeklyRecapEmailsPhase: {type: Number, 'default': 0},
communityGuidelinesAccepted: {type: Boolean, 'default': false},
- cronCount: {type:Number, 'default':0}
+ cronCount: {type:Number, 'default':0},
+ welcomed: {type: Boolean, 'default': false}
},
history: {
exp: Array, // [{date: Date, value: Number}], // big peformance issues if these are defined
diff --git a/website/views/shared/modals/index.jade b/website/views/shared/modals/index.jade
index f8f5433996..a64701f60c 100644
--- a/website/views/shared/modals/index.jade
+++ b/website/views/shared/modals/index.jade
@@ -11,3 +11,4 @@ include ./quests
include ./rebirth
include ./limited
include ./invite-friends
+include ./welcome.jade
diff --git a/website/views/shared/modals/welcome.jade b/website/views/shared/modals/welcome.jade
new file mode 100644
index 0000000000..bf8fe48dd1
--- /dev/null
+++ b/website/views/shared/modals/welcome.jade
@@ -0,0 +1,18 @@
+// Created by sabrecat on 5/18/15.
+
+script(type='text/ng-template', id='modals/welcome.html')
+ .modal-header
+ h4=env.t('welcomeToHabit')
+ .modal-body.text-center
+ h4=env.t('welcome1')
+ .welcome_to_Habit_1.center-block
+ h4=env.t('welcome2')
+ .welcome_to_Habit_2.center-block
+ h4=env.t('welcome3')
+ .welcome_to_Habit_3.center-block
+ h4=env.t('welcome4')
+ .welcome_to_Habit_4.center-block
+ .modal-footer
+ span.h4=env.t('welcome5')
+ |
+ span.button.btn.btn-primary(ng-click='$close(); Guide.goto("intro",0)')=env.t('imReady')
\ No newline at end of file
diff --git a/website/views/shared/tasks/lists.jade b/website/views/shared/tasks/lists.jade
index 4bd9629a21..242e531436 100644
--- a/website/views/shared/tasks/lists.jade
+++ b/website/views/shared/tasks/lists.jade
@@ -25,35 +25,32 @@ script(id='templates/habitrpg-tasks.html', type="text/ng-template")
div(ng-if='list.help', ng-switch='::list.type')
div(ng-switch-when='habit')
ul
- li Good Habits are things that you do often. They award gold and experience every time you click the +.
- li Bad Habits are things you want to avoid doing. They remove health every time you click the -.
- li For inspiration, check out these sample Habits
- li More questions? Ask in the Newbies Guild!
+ li!=env.t('habitHelp1', {plusIcon:""})
+ li!=env.t('habitHelp2', {minusIcon:""})
+ li!=env.t('habitHelp3')
+ li!=env.t('newbieGuild', {linkStart:"", linkEnd: ""})
div(ng-switch-when='daily')
ul
- li Dailies repeat every day that they are active. Click the pencil icon to change the days a Daily is active.
- li If you don’t complete active Dailies, they will hurt your avatar when your day rolls over.
- li Dailies turn redder when you miss them, and bluer when you complete them. The redder the Daily, the more it will reward you... and hurt you.
- li To change when your day rolls over, go to Settings > Site > Custom Day Start.
- li For inspiration, check out these sample Dailies!
- li More questions? Ask in the Newbies Guild!
-
+ li!=env.t('dailyHelp1', {emphasisStart:"", emphasisEnd:"", pencilIcon:""})
+ li!=env.t('dailyHelp2')
+ li!=env.t('dailyHelp3', {emphasisStart:"", emphasisEnd:""})
+ li!=env.t('dailyHelp4', {linkStart:"", linkEnd:""})
+ li!=env.t('dailyHelp5')
+ li!=env.t('newbieGuild', {linkStart:"", linkEnd: ""})
div(ng-switch-when='todo')
ul
- li To-Dos start yellow, and get redder (more valuable) the longer it takes to complete them.
- li To-Dos never hurt you! They only award gold and experience.
- li Breaking a To-Do down into a small checklist will make it less scary, and will increase your points!
- li For inspiration, check out these sample To-Dos!
- li More questions? Ask in the Newbies Guild!
-
+ li!=env.t('toDoHelp1')
+ li!=env.t('toDoHelp2')
+ li!=env.t('toDoHelp3')
+ li!=env.t('toDoHelp4')
+ li!=env.t('newbieGuild', {linkStart:"", linkEnd: ""})
div(ng-switch-when='reward')
ul
- li The Equipment you buy for your avatar is stored in Inventory > Equipment.
- li Equipment affects your stats (Avatar > Stats).
- li There will be special equipment here during World Events.
- li Don't be afraid to set custom rewards! Check out some samples here
- li More questions? Ask in the Newbies Guild!
-
+ li!=env.t('rewardHelp1', {linkStart:"", linkEnd: ""})
+ li!=env.t('rewardHelp2', {linkStart:"", linkEnd: ""})
+ li!=env.t('rewardHelp3')
+ li!=env.t('rewardHelp4')
+ li!=env.t('newbieGuild', {linkStart:"", linkEnd: ""})
// Todo Chart
.todos-chart(ng-if='::list.type == "todo"', ng-show='charts.todos')