Merge branch 'develop' of github.com:HabitRPG/habitrpg into mountmaster

This commit is contained in:
Blade Barringer 2015-01-10 09:25:18 -06:00
commit 2b20c52a8d
32 changed files with 120 additions and 39 deletions

View file

@ -12,6 +12,8 @@
margin-right:0px
.npc_bailey
float:left
.npc_bailey_broken
float:left
.npc_bailey_head
position: absolute
top: -17px
@ -22,6 +24,10 @@
float: left
margin-right: 5px
margin-bottom: 5px
.npc_justin_broken.float-left
float: left
margin-right: 5px
margin-bottom: 5px
.static-popover
z-index 0

View file

@ -74,7 +74,11 @@ angular.module('guideServices', []).
}
];
_.each(tourSteps, function(step){
step.content = "<div><div class='npc_justin float-left'></div>" + step.content + "</div>"; // add Justin NPC img
if (env.worldDmg.guide) {
step.content = "<div><div class='npc_justin_broken float-left'></div>" + step.content + "</div>";
} else {
step.content = "<div><div class='npc_justin float-left'></div>" + step.content + "</div>";
}
});
$('.main-herobox').popover('destroy');
var tour = new Tour({
@ -104,7 +108,11 @@ angular.module('guideServices', []).
if (!placement) placement = 'bottom';
$(selector).popover('destroy');
var button = "<button class='btn btn-sm btn-default' onClick=\"$('" + selector + "').popover('hide');return false;\">" + window.env.t('close') + "</button>";
html = "<div><div class='npc_justin float-left'></div>" + html + '<br/>' + button + '</div>';
if (env.worldDmg.guide) {
html = "<div><div class='npc_justin_broken float-left'></div>" + html + '<br/>' + button + '</div>';
} else {
html = "<div><div class='npc_justin float-left'></div>" + html + '<br/>' + button + '</div>';
}
$(selector).popover({
title: title,
placement: placement,
@ -186,7 +194,11 @@ angular.module('guideServices', []).
}
];
_.each(tourSteps, function(step){
step.content = "<div><div class='npc_justin float-left'></div>" + step.content + "</div>"; // add Justin NPC img
if (env.worldDmg.guide) {
step.content = "<div><div class='npc_justin_broken float-left'></div>" + step.content + "</div>";
} else {
step.content = "<div><div class='npc_justin float-left'></div>" + step.content + "</div>";
}
});
$('.allocate-stats').popover('destroy');
var tour = new Tour({

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

BIN
public/presskit/PROMOdevices2.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

View file

@ -256,7 +256,7 @@ GroupSchema.statics.tavernBoss = function(user,progress) {
var quest = shared.content.quests[tavern.quest.key];
if (tavern.quest.progress.hp <= 0) {
tavern.sendChat(quest.completion('en'));
tavern.sendChat(quest.completionChat('en'));
tavern.finishQuest(quest, function(){});
tavern.save(cb);
module.exports.tavern = undefined;
@ -269,13 +269,15 @@ GroupSchema.statics.tavernBoss = function(user,progress) {
if (tavern.quest.progress.rage >= quest.boss.rage.value) {
if (!tavern.quest.extra.worldDmg) tavern.quest.extra.worldDmg = {};
var wd = tavern.quest.extra.worldDmg;
var scene = wd.tavern ? wd.stables ? wd.market ? false : 'market' : 'stables' : 'tavern';
// var scene = wd.tavern ? wd.stables ? wd.market ? false : 'market' : 'stables' : 'tavern'; // Dilatory attacks tavern, stables, market
var scene = wd.stables ? wd.bailey ? wd.guide ? false : 'guide' : 'bailey' : 'stables'; // Stressbeast attacks stables, Bailey, Justin
if (!scene) {
tavern.sendChat('`'+quest.boss.name('en')+' tries to unleash '+quest.boss.rage.title('en')+', but is too tired.`');
tavern.quest.progress.rage = 0 //quest.boss.rage.value;
} else {
tavern.sendChat(quest.boss.rage[scene]('en'));
tavern.quest.extra.worldDmg[scene] = true;
tavern.quest.extra.worldDmg.recent = scene;
tavern.markModified('quest.extra.worldDmg');
tavern.quest.progress.rage = 0;
}

View file

@ -20,7 +20,7 @@ router.get('/', i18n.getUserLanguage, middleware.locals, function(req, res) {
// -------- Marketing --------
var pages = ['front', 'privacy', 'terms', 'api', 'features', 'videos', 'contact', 'plans', 'new-stuff', 'community-guidelines', 'old-news'];
var pages = ['front', 'privacy', 'terms', 'api', 'features', 'videos', 'contact', 'plans', 'new-stuff', 'community-guidelines', 'old-news', 'press-kit'];
_.each(pages, function(name){
router.get('/static/' + name, i18n.getUserLanguage, middleware.locals, function(req, res) {

View file

@ -7,12 +7,11 @@ utils.setupConfig();
var logging = require('./logging');
var isProd = nconf.get('NODE_ENV') === 'production';
var isDev = nconf.get('NODE_ENV') === 'development';
var cores = +nconf.get("CORES");
if (cluster.isMaster && (isDev || isProd)) {
if (cores!==0 && cluster.isMaster && (isDev || isProd)) {
// Fork workers. If config.json has CORES=x, use that - otherwise, use all cpus-1 (production)
var cpus = require('os').cpus(),
cores = +nconf.get("CORES");
_.times(cores || cpus.length-1, cluster.fork);
_.times(cores || require('os').cpus().length-1, cluster.fork);
cluster.on('disconnect', function(worker, code, signal) {
var w = cluster.fork(); // replace the dead worker

View file

@ -36,7 +36,10 @@ mixin boss(tavern, mobile)
div(ng-if='group.quest.active==true')
div(ng-if='::Content.quests[group.quest.key].boss',ng-init='boss=Content.quests[group.quest.key].boss;progress=group.quest.progress')
div(class="quest_{{::group.quest.key}}")
if tavern
div(class="quest_{{group.quest.key}} quest_{{group.quest.key}}_#{env.worldDmg.recent}")
else
div(class="quest_{{::group.quest.key}}")
//-
.progress
.bar(style='width: {{Shared.percent(group.quest.hp, Content.quests[group.quest.key].hp)}}%;')
@ -85,8 +88,8 @@ mixin boss(tavern, mobile)
// =env.t('questOwnerNotInRunningQuest')
// span(ng-if=':: ! group.quest.leader || ! isMemberOfGroup(group.quest.leader,group)')
// =env.t('questOwnerNotInRunningQuestParty')
quest-rewards(key='{{::group.quest.key}}')
unless tavern
quest-rewards(key='{{::group.quest.key}}')
div(ng-if='::Content.quests[group.quest.key].boss')
.npc_ian.pull-left

View file

@ -12,7 +12,7 @@ div.chat-form.guidelines-not-accepted(ng-if='!user.flags.communityGuidelinesAcce
form.chat-form(ng-if='user.flags.communityGuidelinesAccepted' ng-submit='postChat(group,message.content)')
div(ng-controller='AutocompleteCtrl')
textarea.form-control(rows=4, ui-keypress='{13:"postChat(group,message.content)"}', ng-model='message.content', updateinterval='250', flag='@', at-user, auto-complete)
textarea.form-control(rows=4, ui-keydown='{"meta-enter":"postChat(group,message.content)"}', ui-keypress='{13:"postChat(group,message.content)"}', ng-model='message.content', updateinterval='250', flag='@', at-user, auto-complete)
span.user-list(ng-show='!isAtListHidden')
ul.list-at-user
li(ng-repeat='user in response | filter:query.text | limitTo: 5', ng-click='autoComplete(user)')

View file

@ -1,7 +0,0 @@
a.pull-right.gem-wallet(ng-click=( isGemsModal ? '' : 'openModal("buyGems",{track:"Gems > Wallet"})'), popover-trigger='mouseenter', popover-title=env.t('gems'), popover=env.t('gemsWhatFor'), popover-placement='bottom')
if !isGemsModal
span.task-action-btn.tile.flush.bright.add-gems-btn
span.task-action-btn.tile.flush.neutral
.Pet_Currency_Gem2x.Gems
| {{user.balance * 4 | number:0}}
=env.t('gems')

View file

@ -47,7 +47,7 @@ script(id='modals/achievements/contributor.html', type='text/ng-template')
.modal-header
h4=env.t('modalContribAchievement')
.modal-body
.npc_justin.float-left
div(class="#{env.worldDmg.guide ? 'npc_justin_broken.float-left' : 'npc_justin.float-left'}")
p
!=env.t('contribModal', {name: "{{user.profile.name}}", level: "{{user.contributor.level}}"}) + ' '
a(href='http://habitrpg.wikia.com/wiki/Contributor_Rewards' target='_blank')=env.t('contribLink')

View file

@ -46,7 +46,7 @@ script(type='text/ng-template', id='modals/private-message.html')
.modal-header
h4=env.t('pmHeading', {name: "{{profile.profile.name}}"})
.modal-body
textarea.form-control(type='text',rows='5',ng-model='_message')
textarea.form-control(type='text',rows='5',ui-keydown='{"meta-enter":"sendPrivateMessage(profile._id, _message)"}',ng-model='_message')
.modal-footer
button.btn.btn-primary(ng-click='sendPrivateMessage(profile._id, _message)')=env.t("send")
button.btn.btn-default(ng-click='$close()')=env.t('cancel')

View file

@ -3,7 +3,7 @@ script(type='text/ng-template', id='modals/newStuff.html')
| #{env.t('newStuff')} by&nbsp;
a(target='_blank', href='https://twitter.com/Mihakuu') Bailey
.modal-body.new-stuff-modal.modal-fixed-height
.npc_bailey
div(class="#{env.worldDmg.bailey ? 'npc_bailey_broken' : 'npc_bailey'}")
br
br
include ../new-stuff

View file

@ -1,24 +1,41 @@
h5 JANUARY BACKGROUNDS, TESTING CRON BUG FIX, AND DATE FORMAT ADJUSTMENT!
h5 WORLD BOSS BATTLE BEGINS!
tr
td
h5 January Backgrounds
p There are three new avatar backgrounds in the <a href='https://habitrpg.com/#/options/profile/backgrounds' target='_blank'>Background Shop</a>! Now your avatar can summit a Frigid Peak, shiver in an Ice Cave, or wander through the Snowy Pines!
p.small.muted by Kiwibot, Sunstroke, and Rattify
h5 World Boss: The Abominable Stressbeast!
.quest_stressbeast.pull-right
p A new World Boss has appeared in the <a href='https://habitrpg.com/#/options/groups/tavern' target='_blank'>Tavern</a>! All of the completed Dailies and To-Dos of Habiticans damage the World Boss. Incomplete Dailies fill the Stress Strike Bar. When the Stress Strike bar is full, the World Boss will attack an NPC.
p A World Boss will never damage individual players or accounts in any way. Only active accounts who are not resting in the inn will have their incomplete Dailies tallied. Read on for the details!
tr
td
h5 Testing Fix for Cron Bug
p Today we will be testing a possible fix for a bug that sometimes causes Dailies to not reset correctly on the following day. It's a big change, so we will be keeping a close watch on the site to make sure that it doesn't break anything. If you experience any problems with day start or Dailies reseting in the next few days, please let us know immediately on <a href='https://github.com/HabitRPG/habitrpg/issues/1057' target='_blank'>GitHub</a>. Thanks!
tr
td
h5 Date Format Adjustment
p There's a new option under <a href='https://habitrpg.com/#/options/settings/settings' target='_blank'>Settings</a> that lets you adjust the date format. Now you can list dates as MM/DD/YYYY, DD/MM/YYYY, or YYYY/MM/DD.
p.small.muted by Verabird
h5 Winter Plot-Line: The Abominable Stressbeast Attacks!
p The first thing we hear are the footsteps, slower and more thundering than the stampede. One by one, Habiticans look outside their doors, and words fail us.
p We've all seen Stressbeasts before, of course - tiny vicious creatures that attack during difficult times. But this? This towers taller than the buildings, with paws that could crush a dragon with ease. Frost swings from its stinking fur, and as it roars, the icy blast rips the roofs off our houses. A monster of this magnitude has never been mentioned outside of distant legend.
p "Beware, Habiticans!" SabreCat cries. "Barricade yourselves indoors - this is the Abominable Stressbeast itself!"
p "That thing must be made of centuries of stress!" Kiwibot says, locking the Tavern door tightly and shuttering the windows.
p "The Stoïkalm Steppes," Lemoness says, face grim. "All this time, we thought they were placid and untroubled, but they must have been secretly hiding their stress somewhere. Over generations, it grew into this, and now it's broken free and attacked them - and us!"
p There's only one way to drive away a Stressbeast, Abominable or otherwise, and that's to attack it with completed Dailies and To-Dos! Let's all band together and fight off this fearsome foe - but be sure not to slack on your tasks, or our undone Dailies may enrage it so much that it lashes out...
p.small.muted by Lemoness, Kiwibot, and SabreCat
hr
a(href='/static/old-news', target='_blank') Read older news
mixin oldNews
h5 1/3/2015 - January Mystery Items, Spread the Word Challenge, Winter Plot-Line Continued
h5 1/5/2015
tr
td
h5 January Backgrounds
p There are three new avatar backgrounds in the <a href='https://habitrpg.com/#/options/profile/backgrounds' target='_blank'>Background Shop</a>! Now your avatar can summit a Frigid Peak, shiver in an Ice Cave, or wander through the Snowy Pines!
p.small.muted by Kiwibot, Sunstroke, and Rattify
tr
td
h5 Testing Fix for Cron Bug
p Today we will be testing a possible fix for a bug that sometimes causes Dailies to not reset correctly on the following day. It's a big change, so we will be keeping a close watch on the site to make sure that it doesn't break anything. If you experience any problems with day start or Dailies reseting in the next few days, please let us know immediately on <a href='https://github.com/HabitRPG/habitrpg/issues/1057' target='_blank'>GitHub</a>. Thanks!
tr
td
h5 Date Format Adjustment
p There's a new option under <a href='https://habitrpg.com/#/options/settings/settings' target='_blank'>Settings</a> that lets you adjust the date format. Now you can list dates as MM/DD/YYYY, DD/MM/YYYY, or YYYY/MM/DD.
p.small.muted by Verabird
h5 1/3/2015
tr
td
h5 January Mystery Item Set
@ -36,7 +53,7 @@ mixin oldNews
p A thundering herd of mammoths charges past, sabertooths roar, and dinosaurs both feathery and scaly slither by at top speed. Habiticans stare open-mouthed, but before anyone can react, the stampede has swept through Habit City and is gone into the distance, leaving only pawprints in the snow, the howling wind, and some trampled New Year's cards.
p Habiticans are advised to keep calm and not give in to stress during this confusing and difficult time. We've sent SabreCat after the frightened animals from the Stoïkalm Steppes, and he is working to calm them down so that we can bring them back to the safety of the Stables. We hope to have an explanation for this strangeness soon. In the meantime, keep all of your own pets and mounts indoors.
p.small.muted Read the previous installments of the Winter Plot-Line <a href='http://habitrpg.wikia.com/wiki/Winter_Wonderland#Winter_Mystery_Plot' target='_blank'>here</a>!
h5 12/31/2014 - New Year's Eve Celebration
h5 12/31/2014
tr
td
h5 Party Hats
@ -55,7 +72,7 @@ mixin oldNews
.inventory_special_snowball.pull-right
p The <a href='https://habitrpg.com/#/options/inventory/seasonalshop' target='_blank'>Seasonal Shop</a> is also stocking Snowballs for gold! Throw them at your friends to have an exciting effect. Anyone hit with a snowball earns the Annoying Friends badge. The results of being hit with a Snowball will last until the end of your day, but you can also reverse them early by buying Salt from the Rewards column. Snowballs are available until January 31st.
p.small.muted by Shaner, Lemoness, and SabreCat
h5 12/25/2014 - December Subscriber Item Set and Seasonal Shop! Plus, Flagging Posts and Winter Plot-Line Continues
h5 12/25/2014
tr
td
h5 December Subscriber Item Set

View file

@ -180,7 +180,6 @@ div(ng-if='::profile.achievements.quests.dilatory')
=env.t('achievementDilatoryText')
hr
//- FIXME add these strings to locales
div(ng-if='::profile.achievements.costumeContest')
.achievement.achievement-costumeContest
h5=env.t('costumeContest')
@ -194,3 +193,10 @@ div(ng-if='::profile.achievements.nye')
small
=env.t('auldAcquaintanceText', {cards: "{{::profile.achievements.nye}}"})
hr
div(ng-if='::profile.achievements.quests.stressbeast')
.achievement.achievement-stoikalm
h5=env.t('achievementStressbeast')
small
=env.t('achievementStressbeastText')
hr

View file

@ -39,6 +39,8 @@ html(ng-app='habitrpgStatic')
a(href='http://blog.habitrpg.com/')=env.t('companyBlog')
li(class='#{menuItem=="plans" ? "active" : ""}')
a(href='/static/plans')=env.t('groupPlans')
li(class='#{menuItem=="pressKit" ? "active" : ""}')
a(href='/static/press-kit') Press Kit
li(class='#{menuItem=="contact" ? "active" : ""}')
a(href='/static/contact')=env.t('contactUs')

View file

@ -0,0 +1,41 @@
extends ./layout
block vars
- var layoutEnv = env
- var menuItem = 'pressKit'
block title
title Press Kit
block extraHead
style.
.press-img {
max-width: 500px;
}
block content
h2 Press Kit
p Thanks for your interest in HabitRPG! The following images can be used for articles or videos about HabitRPG. For more information, please contact Siena Leslie at leslie@habitrpg.com.
p Download all image: <a class='btn btn-success' href='/presskit/presskit.zip'>presskit.zip</a>
- var imgs = ['habitrpg_pixel', 'HabitRPGdevices', 'Market Sample Screen', 'Challenges Sample Screen', 'Equipment Sample Screen', 'Guilds Sample Screen', 'HabitRPGPromoPostCard6', 'HabitRPGPromoThin', 'Laundromancer_by_Arcosine', 'promo mobile inventorySTILL1', 'promo mobile inventorySTILL2', 'PROMOdevices2', 'SnackLessMonster_by_Arcosine', 'stag_battle_by_leephon', 'stagnant_dishes_by_kiwibot', 'vice_reborn_by_baconsaur']
//-#carousel.carousel.slide(data-ride='carousel')
ol.carousel-indicators
each img, i in imgs
li(class=i==0?'active':'', data-target='#carousel', data-slide-to=i)
.carousel-inner(role='listbox')
each img, i in imgs
.item(class=i==0?'active':'')
img(src="/presskit/#{img}.png")
//.carousel-caption=img
a.left.carousel-control(href='#carousel', role='button', data-slide='prev')
span.glyphicon.glyphicon-chevron-left(aria-hidden='true')
span.sr-only Previous
a.right.carousel-control(href='#carousel', role='button', data-slide='next')
span.glyphicon.glyphicon-chevron-right(aria-hidden='true')
span.sr-only Next
ul.list-unstyled
each img in imgs
li
img.press-img(src="/presskit/#{img}.png")