feat(event): Summer Splash 2019
59
migrations/archive/2019/20190618_summer_splash_orcas.js
Normal file
@@ -0,0 +1,59 @@
|
||||
/* eslint-disable no-console */
|
||||
const MIGRATION_NAME = '20190618_summer_splash_orcas';
|
||||
|
||||
import { model as User } from '../../../website/server/models/user';
|
||||
|
||||
const progressCount = 1000;
|
||||
let count = 0;
|
||||
|
||||
async function updateUser (user) {
|
||||
count++;
|
||||
|
||||
let set;
|
||||
|
||||
if (user && user.items && user.items.pets && typeof user.items.pets['Orca-Base'] !== 'undefined') {
|
||||
set = { migration: MIGRATION_NAME };
|
||||
} else if (user && user.items && user.items.mounts && typeof user.items.mounts['Orca-Base'] !== 'undefined') {
|
||||
set = { migration: MIGRATION_NAME, 'items.pets.Orca-Base': 5 };
|
||||
} else {
|
||||
set = { migration: MIGRATION_NAME, 'items.mounts.Orca-Base': true };
|
||||
}
|
||||
|
||||
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
|
||||
|
||||
return await User.update({ _id: user._id }, { $set: set }).exec();
|
||||
}
|
||||
|
||||
module.exports = async function processUsers () {
|
||||
let query = {
|
||||
migration: {$ne: MIGRATION_NAME},
|
||||
'auth.timestamps.loggedin': {$gt: new Date('2019-05-18')},
|
||||
};
|
||||
|
||||
const fields = {
|
||||
_id: 1,
|
||||
items: 1,
|
||||
};
|
||||
|
||||
while (true) { // eslint-disable-line no-constant-condition
|
||||
const users = await User // eslint-disable-line no-await-in-loop
|
||||
.find(query)
|
||||
.limit(250)
|
||||
.sort({_id: 1})
|
||||
.select(fields)
|
||||
.lean()
|
||||
.exec();
|
||||
|
||||
if (users.length === 0) {
|
||||
console.warn('All appropriate users found and modified.');
|
||||
console.warn(`\n${count} users processed\n`);
|
||||
break;
|
||||
} else {
|
||||
query._id = {
|
||||
$gt: users[users.length - 1],
|
||||
};
|
||||
}
|
||||
|
||||
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
|
||||
}
|
||||
};
|
||||
@@ -2,8 +2,8 @@
|
||||
// possible values are: normal, fall, habitoween, thanksgiving, winter, nye, birthday, valentines, spring, summer
|
||||
// more to be added on future seasons
|
||||
|
||||
$npc_market_flavor: 'normal';
|
||||
$npc_quests_flavor: 'normal';
|
||||
$npc_seasonal_flavor: 'normal';
|
||||
$npc_timetravelers_flavor: 'normal';
|
||||
$npc_tavern_flavor: 'normal';
|
||||
$npc_market_flavor: 'summer';
|
||||
$npc_quests_flavor: 'summer';
|
||||
$npc_seasonal_flavor: 'summer';
|
||||
$npc_timetravelers_flavor: 'summer';
|
||||
$npc_tavern_flavor: 'summer';
|
||||
|
||||
@@ -164,30 +164,31 @@ export default {
|
||||
classGear (heroClass) {
|
||||
if (heroClass === 'rogue') {
|
||||
return {
|
||||
armor: 'armor_rogue_5',
|
||||
head: 'head_rogue_5',
|
||||
shield: 'shield_rogue_6',
|
||||
weapon: 'weapon_rogue_6',
|
||||
armor: 'armor_special_summer2019Rogue',
|
||||
head: 'head_special_summer2019Rogue',
|
||||
shield: 'shield_special_summer2019Rogue',
|
||||
weapon: 'weapon_special_summer2019Rogue',
|
||||
};
|
||||
} else if (heroClass === 'wizard') {
|
||||
return {
|
||||
armor: 'armor_wizard_5',
|
||||
head: 'head_wizard_5',
|
||||
weapon: 'weapon_wizard_6',
|
||||
armor: 'armor_special_summer2019Mage',
|
||||
head: 'head_special_summer2019Mage',
|
||||
shield: 'shield_special_summer2019Mage',
|
||||
weapon: 'weapon_special_summer2019Mage',
|
||||
};
|
||||
} else if (heroClass === 'healer') {
|
||||
return {
|
||||
armor: 'armor_healer_5',
|
||||
head: 'head_healer_5',
|
||||
shield: 'shield_healer_5',
|
||||
weapon: 'weapon_healer_6',
|
||||
armor: 'armor_special_summer2019Healer',
|
||||
head: 'head_special_summer2019Healer',
|
||||
shield: 'shield_special_summer2019Healer',
|
||||
weapon: 'weapon_special_summer2019Healer',
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
armor: 'armor_warrior_5',
|
||||
head: 'head_warrior_5',
|
||||
shield: 'shield_warrior_5',
|
||||
weapon: 'weapon_warrior_6',
|
||||
armor: 'armor_special_summer2019Warrior',
|
||||
head: 'head_special_summer2019Warrior',
|
||||
shield: 'shield_special_summer2019Warrior',
|
||||
weapon: 'weapon_special_summer2019Warrior',
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
@@ -321,6 +321,15 @@
|
||||
"weaponSpecialSpring2019HealerText": "Spring Song",
|
||||
"weaponSpecialSpring2019HealerNotes": "Your song of flowers and rain will soothe the spirits of all who hear. Increases Intelligence by <%= int %>. Limited Edition 2019 Spring Gear.",
|
||||
|
||||
"weaponSpecialSummer2019RogueText": "Antiquated Anchor",
|
||||
"weaponSpecialSummer2019RogueNotes": "This ancient and formidable weapon will help you win any undersea battle. Increases Strength by <%= str %>. Limited Edition 2019 Summer Gear.",
|
||||
"weaponSpecialSummer2019WarriorText": "Red Coral",
|
||||
"weaponSpecialSummer2019WarriorNotes": "Now you're fighting with fractals! Increases Strength by <%= str %>. Limited Edition 2019 Summer Gear.",
|
||||
"weaponSpecialSummer2019MageText": "Brilliant Bloom",
|
||||
"weaponSpecialSummer2019MageNotes": "Fruit of your labors, first picked from the pool, this little treasure empowers and inspires. Increases Intelligence by <%= int %>. Limited Edition 2019 Summer Gear.",
|
||||
"weaponSpecialSummer2019HealerText": "Bubble Wand",
|
||||
"weaponSpecialSummer2019HealerNotes": "The bubbles from this wand capture healing energy and ancient oceanic magic. Increases Intelligence by <%= int %>. Limited Edition 2019 Summer Gear.",
|
||||
|
||||
"weaponMystery201411Text": "Pitchfork of Feasting",
|
||||
"weaponMystery201411Notes": "Stab your enemies or dig in to your favorite foods - this versatile pitchfork does it all! Confers no benefit. November 2014 Subscriber Item.",
|
||||
"weaponMystery201502Text": "Shimmery Winged Staff of Love and Also Truth",
|
||||
@@ -718,6 +727,15 @@
|
||||
"armorSpecialWinter2019HealerText": "Midnight Robe",
|
||||
"armorSpecialWinter2019HealerNotes": "Without darkness, there wouldn't be any light. These dark robes help bring peace and rest to promote healing. Increases Constitution by <%= con %>. Limited Edition 2018-2019 Winter Gear.",
|
||||
|
||||
"armorSpecialSummer2019RogueText": "Hammerhead Tail",
|
||||
"armorSpecialSummer2019RogueNotes": "This sinuous tail is perfect for making tight turns during daring aquatic escapes. Increases Perception by <%= per %>. Limited Edition 2019 Summer Gear.",
|
||||
"armorSpecialSummer2019WarriorText": "Carapace Armor",
|
||||
"armorSpecialSummer2019WarriorNotes": "Warriors are known for their sturdy defenses. Turtles are known for their thick shells. It's a perfect match! Just... try not to fall over backward, ever. Increases Constitution by <%= con %>. Limited Edition 2019 Summer Gear.",
|
||||
"armorSpecialSummer2019MageText": "Floral Frock",
|
||||
"armorSpecialSummer2019MageNotes": "The lilies will know you as one of their own, and will not fear your approach. Increases Intelligence by <%= int %>. Limited Edition 2019 Summer Gear.",
|
||||
"armorSpecialSummer2019HealerText": "Tropical Tides Tail",
|
||||
"armorSpecialSummer2019HealerNotes": "Glide sleekly through warm coastal waters with this elegant tail. Increases Constitution by <%= con %>. Limited Edition 2019 Summer Gear.",
|
||||
|
||||
"armorSpecialSpring2019RogueText": "Cloud Armor",
|
||||
"armorSpecialSpring2019RogueNotes": "Some very tuff fluff. Increases Perception by <%= per %>. Limited Edition 2019 Spring Gear.",
|
||||
"armorSpecialSpring2019WarriorText": "Orchid Armor",
|
||||
@@ -1222,6 +1240,15 @@
|
||||
"headSpecialSpring2019HealerText": "Robin Helm",
|
||||
"headSpecialSpring2019HealerNotes": "Be ready for the first day of spring with this cute beaky helm. Increases Intelligence by <%= int %>. Limited Edition 2019 Spring Gear.",
|
||||
|
||||
"headSpecialSummer2019RogueText": "Hammerhead Helm",
|
||||
"headSpecialSummer2019RogueNotes": "This helm gives you a 360 degree view of surrounding waters, which is perfect for sneaking up on unsuspecting red Dailies. Increases Perception by <%= per %>. Limited Edition 2019 Summer Gear.",
|
||||
"headSpecialSummer2019WarriorText": "Turtle Helm",
|
||||
"headSpecialSummer2019WarriorNotes": "It won't let you pull your head down between your shoulders, but it will protect you if you bonk the bottom of a boat. Increases Strength by <%= str %>. Limited Edition 2019 Summer Gear.",
|
||||
"headSpecialSummer2019MageText": "Lily Pad Hat",
|
||||
"headSpecialSummer2019MageNotes": "Contrary to popular belief, your head is not an appropriate place for frogs to perch. Increases Perception by <%= per %>. Limited Edition 2019 Summer Gear.",
|
||||
"headSpecialSummer2019HealerText": "Conch Crown",
|
||||
"headSpecialSummer2019HealerNotes": "The spiraling structure of this shell will help you hear any cry for help across the seven seas. Increases Intelligence by <%= int %>. Limited Edition 2019 Summer Gear.",
|
||||
|
||||
"headSpecialGaymerxText": "Rainbow Warrior Helm",
|
||||
"headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.",
|
||||
|
||||
@@ -1626,6 +1653,13 @@
|
||||
"shieldSpecialSpring2019HealerText": "Eggshell Shield",
|
||||
"shieldSpecialSpring2019HealerNotes": "This bright shield is actually made of candy-coated chocolate. Increases Constitution by <%= con %>. Limited Edition 2019 Spring Gear.",
|
||||
|
||||
"shieldSpecialSummer2019WarriorText": "Half-Shell Shield",
|
||||
"shieldSpecialSummer2019WarriorNotes": "Turtle up behind this hefty round shield, etched in the pattern of your favorite reptile's back. Increases Constitution by <%= con %>. Limited Edition 2019 Summer Gear.",
|
||||
"shieldSpecialSummer2019HealerText": "Conch Trumpet",
|
||||
"shieldSpecialSummer2019HealerNotes": "Let those who need help know you're coming with the loud blast of this shell trumpet. Limited Edition 2019 Summer Gear. Increases Constitution by 9. ",
|
||||
"shieldSpecialSummer2019MageText": "Drops of Pure Water",
|
||||
"shieldSpecialSummer2019MageNotes": "Sweating in the summer sun? No! Performing a simple elemental conjuration to fill the lily pond. Increases Perception by <%= per %>. Limited Edition 2019 Summer Gear.",
|
||||
|
||||
"shieldMystery201601Text": "Resolution Slayer",
|
||||
"shieldMystery201601Notes": "This blade can be used to parry away all distractions. Confers no benefit. January 2016 Subscriber Item.",
|
||||
"shieldMystery201701Text": "Time-Freezer Shield",
|
||||
|
||||
@@ -138,6 +138,10 @@
|
||||
"spring2019AmberMageSet": "Amber (Mage)",
|
||||
"spring2019RobinHealerSet": "Robin (Healer)",
|
||||
"spring2019CloudRogueSet": "Cloud (Rogue)",
|
||||
"summer2019SeaTurtleWarriorSet": "Sea Turtle (Warrior)",
|
||||
"summer2019WaterLilyMageSet": "Water Lily (Mage)",
|
||||
"summer2019ConchHealerSet": "Conch (Healer)",
|
||||
"summer2019HammerheadRogueSet": "Hammerhead (Rogue)",
|
||||
"eventAvailability": "Available for purchase until <%= date(locale) %>.",
|
||||
"dateEndMarch": "April 30",
|
||||
"dateEndApril": "April 19",
|
||||
|
||||
@@ -36,6 +36,7 @@ export const EVENTS = {
|
||||
fall2018: { start: '2018-09-20', end: '2018-11-02' },
|
||||
winter2019: { start: '2018-12-19', end: '2019-02-02' },
|
||||
spring2019: { start: '2019-03-19', end: '2019-05-02' },
|
||||
summer2019: { start: '2019-06-18', end: '2019-07-02' },
|
||||
};
|
||||
|
||||
export const SEASONAL_SETS = {
|
||||
@@ -143,6 +144,12 @@ export const SEASONAL_SETS = {
|
||||
'summer2018LionfishMageSet',
|
||||
'summer2018MerfolkMonarchSet',
|
||||
'summer2018FisherRogueSet',
|
||||
|
||||
// summer 2019
|
||||
'summer2019SeaTurtleWarriorSet',
|
||||
'summer2019WaterLilyMageSet',
|
||||
'summer2019ConchHealerSet',
|
||||
'summer2019HammerheadRogueSet',
|
||||
],
|
||||
fall: [
|
||||
// fall 2014
|
||||
|
||||
@@ -8,7 +8,7 @@ import takeThisGear from './special-takeThis';
|
||||
import wonderconGear from './special-wondercon';
|
||||
import t from '../../../translation';
|
||||
|
||||
const CURRENT_SEASON = '_NONE_';
|
||||
const CURRENT_SEASON = 'summer';
|
||||
|
||||
let armor = {
|
||||
0: backerGear.armorSpecial0,
|
||||
@@ -1013,6 +1013,9 @@ let armor = {
|
||||
notes: t('armorSpecialSummer2018RogueNotes', { per: 15 }),
|
||||
value: 90,
|
||||
per: 15,
|
||||
canBuy: () => {
|
||||
return CURRENT_SEASON === 'summer';
|
||||
},
|
||||
},
|
||||
summer2018Warrior: {
|
||||
event: EVENTS.summer2018,
|
||||
@@ -1022,6 +1025,9 @@ let armor = {
|
||||
notes: t('armorSpecialSummer2018WarriorNotes', { con: 9 }),
|
||||
value: 90,
|
||||
con: 9,
|
||||
canBuy: () => {
|
||||
return CURRENT_SEASON === 'summer';
|
||||
},
|
||||
},
|
||||
summer2018Mage: {
|
||||
event: EVENTS.summer2018,
|
||||
@@ -1031,6 +1037,9 @@ let armor = {
|
||||
notes: t('armorSpecialSummer2018MageNotes', { int: 9 }),
|
||||
value: 90,
|
||||
int: 9,
|
||||
canBuy: () => {
|
||||
return CURRENT_SEASON === 'summer';
|
||||
},
|
||||
},
|
||||
summer2018Healer: {
|
||||
event: EVENTS.summer2018,
|
||||
@@ -1040,6 +1049,9 @@ let armor = {
|
||||
notes: t('armorSpecialSummer2018HealerNotes', { con: 15 }),
|
||||
value: 90,
|
||||
con: 15,
|
||||
canBuy: () => {
|
||||
return CURRENT_SEASON === 'summer';
|
||||
},
|
||||
},
|
||||
fall2018Rogue: {
|
||||
event: EVENTS.fall2018,
|
||||
@@ -1161,6 +1173,42 @@ let armor = {
|
||||
value: 90,
|
||||
con: 15,
|
||||
},
|
||||
summer2019Rogue: {
|
||||
event: EVENTS.summer2019,
|
||||
specialClass: 'rogue',
|
||||
set: 'summer2019HammerheadRogueSet',
|
||||
text: t('armorSpecialSummer2019RogueText'),
|
||||
notes: t('armorSpecialSummer2019RogueNotes', { per: 15 }),
|
||||
value: 90,
|
||||
per: 15,
|
||||
},
|
||||
summer2019Warrior: {
|
||||
event: EVENTS.summer2019,
|
||||
specialClass: 'warrior',
|
||||
set: 'summer2019SeaTurtleWarriorSet',
|
||||
text: t('armorSpecialSummer2019WarriorText'),
|
||||
notes: t('armorSpecialSummer2019WarriorNotes', { con: 9 }),
|
||||
value: 90,
|
||||
con: 9,
|
||||
},
|
||||
summer2019Mage: {
|
||||
event: EVENTS.summer2019,
|
||||
specialClass: 'wizard',
|
||||
set: 'summer2019WaterLilyMageSet',
|
||||
text: t('armorSpecialSummer2019MageText'),
|
||||
notes: t('armorSpecialSummer2019MageNotes', { int: 9 }),
|
||||
value: 90,
|
||||
int: 9,
|
||||
},
|
||||
summer2019Healer: {
|
||||
event: EVENTS.summer2019,
|
||||
specialClass: 'healer',
|
||||
set: 'summer2019ConchHealerSet',
|
||||
text: t('armorSpecialSummer2019HealerText'),
|
||||
notes: t('armorSpecialSummer2019HealerNotes', { con: 15 }),
|
||||
value: 90,
|
||||
con: 15,
|
||||
},
|
||||
};
|
||||
|
||||
let back = {
|
||||
@@ -2503,6 +2551,9 @@ let head = {
|
||||
notes: t('headSpecialSummer2018RogueNotes', { per: 9 }),
|
||||
value: 60,
|
||||
per: 9,
|
||||
canBuy: () => {
|
||||
return CURRENT_SEASON === 'summer';
|
||||
},
|
||||
},
|
||||
summer2018Warrior: {
|
||||
event: EVENTS.summer2018,
|
||||
@@ -2512,6 +2563,9 @@ let head = {
|
||||
notes: t('headSpecialSummer2018WarriorNotes', { str: 9 }),
|
||||
value: 60,
|
||||
str: 9,
|
||||
canBuy: () => {
|
||||
return CURRENT_SEASON === 'summer';
|
||||
},
|
||||
},
|
||||
summer2018Mage: {
|
||||
event: EVENTS.summer2018,
|
||||
@@ -2521,6 +2575,9 @@ let head = {
|
||||
notes: t('headSpecialSummer2018MageNotes', { per: 7 }),
|
||||
value: 60,
|
||||
per: 7,
|
||||
canBuy: () => {
|
||||
return CURRENT_SEASON === 'summer';
|
||||
},
|
||||
},
|
||||
summer2018Healer: {
|
||||
event: EVENTS.summer2018,
|
||||
@@ -2530,6 +2587,9 @@ let head = {
|
||||
notes: t('headSpecialSummer2018HealerNotes', { int: 7 }),
|
||||
value: 60,
|
||||
int: 7,
|
||||
canBuy: () => {
|
||||
return CURRENT_SEASON === 'summer';
|
||||
},
|
||||
},
|
||||
fall2018Rogue: {
|
||||
event: EVENTS.fall2018,
|
||||
@@ -2657,6 +2717,42 @@ let head = {
|
||||
value: 60,
|
||||
int: 7,
|
||||
},
|
||||
summer2019Rogue: {
|
||||
event: EVENTS.summer2019,
|
||||
specialClass: 'rogue',
|
||||
set: 'summer2019HammerheadRogueSet',
|
||||
text: t('headSpecialSummer2019RogueText'),
|
||||
notes: t('headSpecialSummer2019RogueNotes', { per: 9 }),
|
||||
value: 60,
|
||||
per: 9,
|
||||
},
|
||||
summer2019Warrior: {
|
||||
event: EVENTS.summer2019,
|
||||
specialClass: 'warrior',
|
||||
set: 'summer2019SeaTurtleWarriorSet',
|
||||
text: t('headSpecialSummer2019WarriorText'),
|
||||
notes: t('headSpecialSummer2019WarriorNotes', { str: 9 }),
|
||||
value: 60,
|
||||
str: 9,
|
||||
},
|
||||
summer2019Mage: {
|
||||
event: EVENTS.summer2019,
|
||||
specialClass: 'wizard',
|
||||
set: 'summer2019WaterLilyMageSet',
|
||||
text: t('headSpecialSummer2019MageText'),
|
||||
notes: t('headSpecialSummer2019MageNotes', { per: 7 }),
|
||||
value: 60,
|
||||
per: 7,
|
||||
},
|
||||
summer2019Healer: {
|
||||
event: EVENTS.summer2019,
|
||||
specialClass: 'healer',
|
||||
set: 'summer2019ConchHealerSet',
|
||||
text: t('headSpecialSummer2019HealerText'),
|
||||
notes: t('headSpecialSummer2019HealerNotes', { int: 7 }),
|
||||
value: 60,
|
||||
int: 7,
|
||||
},
|
||||
};
|
||||
|
||||
let headAccessory = {
|
||||
@@ -3684,6 +3780,9 @@ let shield = {
|
||||
notes: t('weaponSpecialSummer2018RogueNotes', { str: 8 }),
|
||||
value: 80,
|
||||
str: 8,
|
||||
canBuy: () => {
|
||||
return CURRENT_SEASON === 'summer';
|
||||
},
|
||||
},
|
||||
summer2018Warrior: {
|
||||
event: EVENTS.summer2018,
|
||||
@@ -3693,6 +3792,9 @@ let shield = {
|
||||
notes: t('shieldSpecialSummer2018WarriorNotes', { con: 7 }),
|
||||
value: 70,
|
||||
con: 7,
|
||||
canBuy: () => {
|
||||
return CURRENT_SEASON === 'summer';
|
||||
},
|
||||
},
|
||||
summer2018Healer: {
|
||||
event: EVENTS.summer2018,
|
||||
@@ -3702,6 +3804,9 @@ let shield = {
|
||||
notes: t('shieldSpecialSummer2018HealerNotes', { con: 9 }),
|
||||
value: 70,
|
||||
con: 9,
|
||||
canBuy: () => {
|
||||
return CURRENT_SEASON === 'summer';
|
||||
},
|
||||
},
|
||||
fall2018Rogue: {
|
||||
event: EVENTS.fall2018,
|
||||
@@ -3790,6 +3895,42 @@ let shield = {
|
||||
value: 70,
|
||||
con: 9,
|
||||
},
|
||||
summer2019Rogue: {
|
||||
event: EVENTS.summer2019,
|
||||
specialClass: 'rogue',
|
||||
set: 'summer2019HammerheadRogueSet',
|
||||
text: t('weaponSpecialSummer2019RogueText'),
|
||||
notes: t('weaponSpecialSummer2019RogueNotes', { str: 8 }),
|
||||
value: 80,
|
||||
str: 8,
|
||||
},
|
||||
summer2019Warrior: {
|
||||
event: EVENTS.summer2019,
|
||||
specialClass: 'warrior',
|
||||
set: 'summer2019SeaTurtleWarriorSet',
|
||||
text: t('shieldSpecialSummer2019WarriorText'),
|
||||
notes: t('shieldSpecialSummer2019WarriorNotes', { con: 7 }),
|
||||
value: 70,
|
||||
con: 7,
|
||||
},
|
||||
summer2019Healer: {
|
||||
event: EVENTS.summer2019,
|
||||
specialClass: 'healer',
|
||||
set: 'summer2019ConchHealerSet',
|
||||
text: t('shieldSpecialSummer2019HealerText'),
|
||||
notes: t('shieldSpecialSummer2019HealerNotes', { con: 9 }),
|
||||
value: 70,
|
||||
con: 9,
|
||||
},
|
||||
summer2019Mage: {
|
||||
event: EVENTS.summer2019,
|
||||
specialClass: 'wizard',
|
||||
set: 'summer2019WaterLilyMageSet',
|
||||
text: t('shieldSpecialSummer2019MageText'),
|
||||
notes: t('shieldSpecialSummer2019MageNotes', { per: 7 }),
|
||||
value: 70,
|
||||
per: 7,
|
||||
},
|
||||
};
|
||||
|
||||
let weapon = {
|
||||
@@ -4801,6 +4942,9 @@ let weapon = {
|
||||
notes: t('weaponSpecialSummer2018RogueNotes', { str: 8 }),
|
||||
value: 80,
|
||||
str: 8,
|
||||
canBuy: () => {
|
||||
return CURRENT_SEASON === 'summer';
|
||||
},
|
||||
},
|
||||
summer2018Warrior: {
|
||||
event: EVENTS.summer2018,
|
||||
@@ -4810,6 +4954,9 @@ let weapon = {
|
||||
notes: t('weaponSpecialSummer2018WarriorNotes', { str: 15 }),
|
||||
value: 90,
|
||||
str: 15,
|
||||
canBuy: () => {
|
||||
return CURRENT_SEASON === 'summer';
|
||||
},
|
||||
},
|
||||
summer2018Mage: {
|
||||
event: EVENTS.summer2018,
|
||||
@@ -4821,6 +4968,9 @@ let weapon = {
|
||||
value: 160,
|
||||
int: 15,
|
||||
per: 7,
|
||||
canBuy: () => {
|
||||
return CURRENT_SEASON === 'summer';
|
||||
},
|
||||
},
|
||||
summer2018Healer: {
|
||||
event: EVENTS.summer2018,
|
||||
@@ -4830,6 +4980,9 @@ let weapon = {
|
||||
notes: t('weaponSpecialSummer2018HealerNotes', { int: 9 }),
|
||||
value: 90,
|
||||
int: 9,
|
||||
canBuy: () => {
|
||||
return CURRENT_SEASON === 'summer';
|
||||
},
|
||||
},
|
||||
fall2018Rogue: {
|
||||
event: EVENTS.fall2018,
|
||||
@@ -4945,6 +5098,42 @@ let weapon = {
|
||||
value: 90,
|
||||
int: 9,
|
||||
},
|
||||
summer2019Rogue: {
|
||||
event: EVENTS.summer2019,
|
||||
specialClass: 'rogue',
|
||||
set: 'summer2019HammerheadRogueSet',
|
||||
text: t('weaponSpecialSummer2019RogueText'),
|
||||
notes: t('weaponSpecialSummer2019RogueNotes', { str: 8 }),
|
||||
value: 80,
|
||||
str: 8,
|
||||
},
|
||||
summer2019Warrior: {
|
||||
event: EVENTS.summer2019,
|
||||
specialClass: 'warrior',
|
||||
set: 'summer2019SeaTurtleWarriorSet',
|
||||
text: t('weaponSpecialSummer2019WarriorText'),
|
||||
notes: t('weaponSpecialSummer2019WarriorNotes', { str: 15 }),
|
||||
value: 90,
|
||||
str: 15,
|
||||
},
|
||||
summer2019Mage: {
|
||||
event: EVENTS.summer2019,
|
||||
specialClass: 'wizard',
|
||||
set: 'summer2019WaterLilyMageSet',
|
||||
text: t('weaponSpecialSummer2019MageText'),
|
||||
notes: t('weaponSpecialSummer2019MageNotes', { int: 15 }),
|
||||
value: 160,
|
||||
int: 15,
|
||||
},
|
||||
summer2019Healer: {
|
||||
event: EVENTS.summer2019,
|
||||
specialClass: 'healer',
|
||||
set: 'summer2019ConchHealerSet',
|
||||
text: t('weaponSpecialSummer2019HealerText'),
|
||||
notes: t('weaponSpecialSummer2019HealerNotes', { int: 9 }),
|
||||
value: 90,
|
||||
int: 9,
|
||||
},
|
||||
};
|
||||
|
||||
let specialSet = {
|
||||
|
||||
@@ -34,7 +34,7 @@ const featuredItems = {
|
||||
path: 'quests.dolphin',
|
||||
},
|
||||
],
|
||||
seasonal: 'spring2018Healer',
|
||||
seasonal: 'summer2019Mage',
|
||||
timeTravelers: [
|
||||
// TODO
|
||||
],
|
||||
|
||||
@@ -1,16 +1,21 @@
|
||||
// import { SEASONAL_SETS } from '../content/constants';
|
||||
import { SEASONAL_SETS } from '../content/constants';
|
||||
|
||||
module.exports = {
|
||||
opened: false,
|
||||
opened: true,
|
||||
|
||||
currentSeason: 'Closed',
|
||||
currentSeason: 'Summer',
|
||||
|
||||
dateRange: { start: '2018-09-20', end: '2018-10-31' },
|
||||
dateRange: { start: '2019-06-18', end: '2019-07-30' },
|
||||
|
||||
availableSets: [
|
||||
...SEASONAL_SETS.summer,
|
||||
],
|
||||
|
||||
pinnedSets: {
|
||||
wizard: 'summer2019WaterLilyMageSet',
|
||||
warrior: 'summer2019SeaTurtleWarriorSet',
|
||||
rogue: 'summer2019HammerheadRogueSet',
|
||||
healer: 'summer2019ConchHealerSet',
|
||||
},
|
||||
|
||||
availableSpells: [
|
||||
@@ -19,5 +24,5 @@ module.exports = {
|
||||
availableQuests: [
|
||||
],
|
||||
|
||||
featuredSet: 'mummyMedicSet',
|
||||
featuredSet: 'summer2018BettaFishWarriorSet',
|
||||
};
|
||||
|
||||
|
After Width: | Height: | Size: 886 B |
|
After Width: | Height: | Size: 948 B |
|
After Width: | Height: | Size: 720 B |
|
After Width: | Height: | Size: 704 B |
|
After Width: | Height: | Size: 723 B |
|
After Width: | Height: | Size: 840 B |
|
After Width: | Height: | Size: 748 B |
|
After Width: | Height: | Size: 673 B |
|
After Width: | Height: | Size: 389 B |
|
After Width: | Height: | Size: 642 B |
|
After Width: | Height: | Size: 715 B |
|
After Width: | Height: | Size: 511 B |
|
After Width: | Height: | Size: 778 B |
|
After Width: | Height: | Size: 600 B |
|
After Width: | Height: | Size: 607 B |
|
After Width: | Height: | Size: 556 B |
|
After Width: | Height: | Size: 632 B |
|
After Width: | Height: | Size: 537 B |
|
After Width: | Height: | Size: 647 B |
|
After Width: | Height: | Size: 529 B |
|
After Width: | Height: | Size: 343 B |
|
After Width: | Height: | Size: 363 B |
|
After Width: | Height: | Size: 595 B |
|
After Width: | Height: | Size: 354 B |
|
After Width: | Height: | Size: 504 B |
|
After Width: | Height: | Size: 413 B |
|
After Width: | Height: | Size: 597 B |
|
After Width: | Height: | Size: 382 B |
|
After Width: | Height: | Size: 872 B |
|
After Width: | Height: | Size: 907 B |
|
After Width: | Height: | Size: 689 B |
|
After Width: | Height: | Size: 670 B |
|
After Width: | Height: | Size: 582 B |
|
After Width: | Height: | Size: 720 B |
|
After Width: | Height: | Size: 706 B |
|
After Width: | Height: | Size: 873 B |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 6.9 KiB |
BIN
website/raw_sprites/spritesmith_large/promo_orcas.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
website/raw_sprites/spritesmith_large/promo_seasonal_shop.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 17 KiB |
@@ -3,7 +3,7 @@ import { authWithHeaders } from '../../middlewares/auth';
|
||||
let api = {};
|
||||
|
||||
// @TODO export this const, cannot export it from here because only routes are exported from controllers
|
||||
const LAST_ANNOUNCEMENT_TITLE = 'NEW PET QUEST, NEW ACHIEVEMENTS, AND THE RETURN OF THE ODDBALLS BUNDLE';
|
||||
const LAST_ANNOUNCEMENT_TITLE = 'SUMMER SPLASH BEGINS! CLASS OUTFITS, SEASONAL SHOP, ORCAS, AND NPC DECORATIONS';
|
||||
const worldDmg = { // @TODO
|
||||
bailey: false,
|
||||
};
|
||||
@@ -30,22 +30,27 @@ api.getNews = {
|
||||
<div class="mr-3 ${baileyClass}"></div>
|
||||
<div class="media-body">
|
||||
<h1 class="align-self-center">${res.t('newStuff')}</h1>
|
||||
<h2>6/11/2019 - ${LAST_ANNOUNCEMENT_TITLE}</h2>
|
||||
<h2>6/18/2019 - ${LAST_ANNOUNCEMENT_TITLE}</h2>
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="promo_dolphin_quest center-block"></div>
|
||||
<h3>New Pet Quest: Dolphin! And New Pet Collection and Pet Quest Achievement Badges</h3>
|
||||
<p>Feeling doubtful about your ability to tackle your tasks? Could be you have dolphin doldrums! Get the latest pet quest, <a href='/shops/quests'>The Dolphin of Doubt</a>, and earn some chipper dolphin pets by completing your real-life tasks.</p>
|
||||
<p>An important announcement regarding quests: We’ll be adding new types of quests with exciting rewards like Magic Hatching Potions! We’ll also continue releasing Pet Quest Bundles so you can work on completing your collection. However, "The Dolphin of Doubt" is the final pet quest we'll be releasing in the Quest Shop for the forseeable future.</p>
|
||||
<p>We're also releasing new achievements so you can celebrate your successes in the world of Habitican pet collecting! Now you can earn badges for your profile when you complete certain categories of pet quests and for collecting pets and mounts in the classic pet colors. We're kicking off with: Cover Your Bases and All Your Base for collecting all the classic Base pets and mounts, Just Add Water for completing quests for aquatic pets (including the new Dolphins!), and Mind over Matter for completing all pet quests for (normally) inanimate objects.</p>
|
||||
<p>If you’ve already completed the required Quests for a newly released achievement, you don’t have to do them all again! Just complete any one of the relevant Quests and the Achievement will unlock.</p>
|
||||
<div class="small mb-3">by Shogirlgeek, mewrose, Aries Faries, khdarkwolf, confusedcicada, Lady Tabletop, OuttaMyMind, and the Habitica Team</div>
|
||||
<div class="promo_oddballs_bundle center-block"></div>
|
||||
<h3>Discounted Pet Quest Bundle: Oddballs!</h3>
|
||||
<p>In celebration of our new pet quest achievements, the Oddballs Pet Quest Bundle is back! From now until June 30, you can purchase it and receive the Rock, Marshmallow Slime, and Yarn quests, all for only 7 Gems! That's a discount of 5 Gems from the price of purchasing them separately. Check it out in the <a href='/shops/quests'>Quest Shop</a> today!</p>
|
||||
<div class="small">Art by PainterProphet, Pfeffernusse, Zorelya, intune, starsystemic, Leephon, Arcosine, stefalupagus, Hachiseiko, TheMushroomKing, khdarkwolf, Vampitch, JinjooHat, UncommonCriminal, Oranges, Darkly, overomega, celticdragon, and Shaner</div>
|
||||
<div class="small mb-3">Writing by Bartelmy, Faelwyn the Rising Phoenix, Theothermeme, Bethany Woll, itokro, and Lemoness</div>
|
||||
<p>To escape the summer heat in Habit City, everyone's moved down to the undersea city of Dilatory. The Summer Splash event has begun!</p>
|
||||
<div class="promo_summer_splash_2019 center-block"></div>
|
||||
<h3>Summer Class Outfits</h3>
|
||||
<p>From now until July 31st, limited edition outfits are available in the Rewards column. Depending on your class, you can be a Sea Turtle Warrior, Hammerhead Rogue, Conch Healer, or Water Lily Mage! You'd better get productive to earn enough gold before they disappear. Good luck!</p>
|
||||
<div class="small mb-3">by AnnDeLune, gawrone, Vikte, and SabreCat</div>
|
||||
<div class="promo_seasonal_shop center-block"></div>
|
||||
<h3>Seasonal Shop is Open!</h3>
|
||||
<p>The <a href='/shops/seasonal'>Seasonal Shop</a> has opened! The Seasonal Sorceress is stocking the seasonal edition versions of previous summer outfits, now available for Gems instead of Gold. Plus, there will be more fun things in the shop as the event progresses. The Seasonal Shop will only be open until July 31st, so don't wait!</p>
|
||||
<div class="small mb-3">by SabreCat, Lemoness, Giu09, JaizakAripaik, Teto Forever, Kai, AnnDeLune, Vampitch, TheDudeAbides, Lalaitha, nonight, tricksy.fox, and Beffymaroo</div>
|
||||
<div class="promo_orcas center-block"></div>
|
||||
<h3>Orcas for Everyone!</h3>
|
||||
<p>Dolphins aren't the only animals riding the waves around the city of Dilatory: it looks like some friendly Orcas are swimming into Habiticans' stables! In honor of the Summer Splash event, everyone who didn't already have an Orca gets either the mount or the pet. Enjoy!</p>
|
||||
<div class="small mb-3">by Beffymaroo and UncommonCriminal</div>
|
||||
<div class="npc_matt center-block"></div>
|
||||
<h3>NPC Costumes</h3>
|
||||
<p>Looks like the NPCs are really getting in to the cheery summer mood around the site. Who wouldn't? After all, there's plenty more celebration to come...</p>
|
||||
<div class="small mb-3">by Lemoness</div>
|
||||
</div>
|
||||
`,
|
||||
});
|
||||
|
||||