diff --git a/website/assets/img/project_files/npcs/summer/npc_timetravelers_active.png b/website/assets/img/project_files/npcs/summer/npc_timetravelers_active.png
new file mode 100644
index 0000000000..e14e0d32ba
Binary files /dev/null and b/website/assets/img/project_files/npcs/summer/npc_timetravelers_active.png differ
diff --git a/website/assets/sprites/css/index.css b/website/assets/sprites/css/index.css
index 85e142f21f..03c9d1de1d 100644
--- a/website/assets/sprites/css/index.css
+++ b/website/assets/sprites/css/index.css
@@ -1,9 +1,9 @@
/* Comment out for holiday events */
-.npc_ian {
+/* .npc_ian {
background: url("/npc_ian.gif") no-repeat;
width: 78px;
height: 135px;
-}
+} */
.quest_burnout {
background: url("/quest_burnout.gif") no-repeat;
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/broad_armor_special_summer2017Healer.png b/website/assets/sprites/spritesmith/gear/events/summer/broad_armor_special_summer2017Healer.png
new file mode 100644
index 0000000000..928d0e4179
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/broad_armor_special_summer2017Healer.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/broad_armor_special_summer2017Mage.png b/website/assets/sprites/spritesmith/gear/events/summer/broad_armor_special_summer2017Mage.png
new file mode 100644
index 0000000000..a1c7781225
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/broad_armor_special_summer2017Mage.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/broad_armor_special_summer2017Rogue.png b/website/assets/sprites/spritesmith/gear/events/summer/broad_armor_special_summer2017Rogue.png
new file mode 100644
index 0000000000..dd1a36e8e2
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/broad_armor_special_summer2017Rogue.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/broad_armor_special_summer2017Warrior.png b/website/assets/sprites/spritesmith/gear/events/summer/broad_armor_special_summer2017Warrior.png
new file mode 100644
index 0000000000..8288ed499d
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/broad_armor_special_summer2017Warrior.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/head_special_summer2017Healer.png b/website/assets/sprites/spritesmith/gear/events/summer/head_special_summer2017Healer.png
new file mode 100644
index 0000000000..7573713518
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/head_special_summer2017Healer.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/head_special_summer2017Mage.png b/website/assets/sprites/spritesmith/gear/events/summer/head_special_summer2017Mage.png
new file mode 100644
index 0000000000..087edf89de
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/head_special_summer2017Mage.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/head_special_summer2017Rogue.png b/website/assets/sprites/spritesmith/gear/events/summer/head_special_summer2017Rogue.png
new file mode 100644
index 0000000000..37f59d34e4
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/head_special_summer2017Rogue.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/head_special_summer2017Warrior.png b/website/assets/sprites/spritesmith/gear/events/summer/head_special_summer2017Warrior.png
new file mode 100644
index 0000000000..84719ec13f
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/head_special_summer2017Warrior.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/shield_special_summer2017Healer.png b/website/assets/sprites/spritesmith/gear/events/summer/shield_special_summer2017Healer.png
new file mode 100644
index 0000000000..6a25f4f42f
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/shield_special_summer2017Healer.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/shield_special_summer2017Rogue.png b/website/assets/sprites/spritesmith/gear/events/summer/shield_special_summer2017Rogue.png
new file mode 100644
index 0000000000..fb16b90abe
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/shield_special_summer2017Rogue.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/shield_special_summer2017Warrior.png b/website/assets/sprites/spritesmith/gear/events/summer/shield_special_summer2017Warrior.png
new file mode 100644
index 0000000000..62d87c09e2
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/shield_special_summer2017Warrior.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_armor_special_summer2017Healer.png b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_armor_special_summer2017Healer.png
new file mode 100644
index 0000000000..37f9b454b3
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_armor_special_summer2017Healer.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_armor_special_summer2017Mage.png b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_armor_special_summer2017Mage.png
new file mode 100644
index 0000000000..8c2e6b8167
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_armor_special_summer2017Mage.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_armor_special_summer2017Rogue.png b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_armor_special_summer2017Rogue.png
new file mode 100644
index 0000000000..a85c8969c7
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_armor_special_summer2017Rogue.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_armor_special_summer2017Warrior.png b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_armor_special_summer2017Warrior.png
new file mode 100644
index 0000000000..fae83dc90d
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_armor_special_summer2017Warrior.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_head_special_summer2017Healer.png b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_head_special_summer2017Healer.png
new file mode 100644
index 0000000000..545317e412
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_head_special_summer2017Healer.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_head_special_summer2017Mage.png b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_head_special_summer2017Mage.png
new file mode 100644
index 0000000000..b4370ab7d1
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_head_special_summer2017Mage.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_head_special_summer2017Rogue.png b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_head_special_summer2017Rogue.png
new file mode 100644
index 0000000000..1b721c9491
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_head_special_summer2017Rogue.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_head_special_summer2017Warrior.png b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_head_special_summer2017Warrior.png
new file mode 100644
index 0000000000..9d84b08636
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_head_special_summer2017Warrior.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_shield_special_summer2017Healer.png b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_shield_special_summer2017Healer.png
new file mode 100644
index 0000000000..02cc838339
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_shield_special_summer2017Healer.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_shield_special_summer2017Rogue.png b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_shield_special_summer2017Rogue.png
new file mode 100644
index 0000000000..dce06bb1bd
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_shield_special_summer2017Rogue.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_shield_special_summer2017Warrior.png b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_shield_special_summer2017Warrior.png
new file mode 100644
index 0000000000..86fcba3156
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_shield_special_summer2017Warrior.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_weapon_special_summer2017Healer.png b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_weapon_special_summer2017Healer.png
new file mode 100644
index 0000000000..929f4cdb6a
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_weapon_special_summer2017Healer.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_weapon_special_summer2017Mage.png b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_weapon_special_summer2017Mage.png
new file mode 100644
index 0000000000..837776ebbe
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_weapon_special_summer2017Mage.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_weapon_special_summer2017Rogue.png b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_weapon_special_summer2017Rogue.png
new file mode 100644
index 0000000000..654617f719
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_weapon_special_summer2017Rogue.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_weapon_special_summer2017Warrior.png b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_weapon_special_summer2017Warrior.png
new file mode 100644
index 0000000000..e616785925
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/shop/shop_weapon_special_summer2017Warrior.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/slim_armor_special_summer2017Healer.png b/website/assets/sprites/spritesmith/gear/events/summer/slim_armor_special_summer2017Healer.png
new file mode 100644
index 0000000000..ded9bfaffd
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/slim_armor_special_summer2017Healer.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/slim_armor_special_summer2017Mage.png b/website/assets/sprites/spritesmith/gear/events/summer/slim_armor_special_summer2017Mage.png
new file mode 100644
index 0000000000..6f5a67f8ac
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/slim_armor_special_summer2017Mage.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/slim_armor_special_summer2017Rogue.png b/website/assets/sprites/spritesmith/gear/events/summer/slim_armor_special_summer2017Rogue.png
new file mode 100644
index 0000000000..02ee609291
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/slim_armor_special_summer2017Rogue.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/slim_armor_special_summer2017Warrior.png b/website/assets/sprites/spritesmith/gear/events/summer/slim_armor_special_summer2017Warrior.png
new file mode 100644
index 0000000000..1140883cd1
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/slim_armor_special_summer2017Warrior.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/weapon_special_summer2017Healer.png b/website/assets/sprites/spritesmith/gear/events/summer/weapon_special_summer2017Healer.png
new file mode 100644
index 0000000000..fae4fd4b1b
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/weapon_special_summer2017Healer.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/weapon_special_summer2017Mage.png b/website/assets/sprites/spritesmith/gear/events/summer/weapon_special_summer2017Mage.png
new file mode 100644
index 0000000000..d4604545c9
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/weapon_special_summer2017Mage.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/weapon_special_summer2017Rogue.png b/website/assets/sprites/spritesmith/gear/events/summer/weapon_special_summer2017Rogue.png
new file mode 100644
index 0000000000..daa8c1e613
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/weapon_special_summer2017Rogue.png differ
diff --git a/website/assets/sprites/spritesmith/gear/events/summer/weapon_special_summer2017Warrior.png b/website/assets/sprites/spritesmith/gear/events/summer/weapon_special_summer2017Warrior.png
new file mode 100644
index 0000000000..6c58b3d5db
Binary files /dev/null and b/website/assets/sprites/spritesmith/gear/events/summer/weapon_special_summer2017Warrior.png differ
diff --git a/website/assets/sprites/spritesmith/npcs/npc_alex.png b/website/assets/sprites/spritesmith/npcs/npc_alex.png
index 67b7476d33..b5175c697b 100644
Binary files a/website/assets/sprites/spritesmith/npcs/npc_alex.png and b/website/assets/sprites/spritesmith/npcs/npc_alex.png differ
diff --git a/website/assets/sprites/spritesmith/npcs/npc_bailey.png b/website/assets/sprites/spritesmith/npcs/npc_bailey.png
index d5940b986b..f6ce232f91 100644
Binary files a/website/assets/sprites/spritesmith/npcs/npc_bailey.png and b/website/assets/sprites/spritesmith/npcs/npc_bailey.png differ
diff --git a/website/assets/sprites/spritesmith/npcs/npc_daniel.png b/website/assets/sprites/spritesmith/npcs/npc_daniel.png
index b12dd9e254..4e79603122 100644
Binary files a/website/assets/sprites/spritesmith/npcs/npc_daniel.png and b/website/assets/sprites/spritesmith/npcs/npc_daniel.png differ
diff --git a/website/assets/sprites/spritesmith/npcs/npc_ian.png b/website/assets/sprites/spritesmith/npcs/npc_ian.png
index 86860dfa1b..db4b9883bf 100644
Binary files a/website/assets/sprites/spritesmith/npcs/npc_ian.png and b/website/assets/sprites/spritesmith/npcs/npc_ian.png differ
diff --git a/website/assets/sprites/spritesmith/npcs/npc_justin.png b/website/assets/sprites/spritesmith/npcs/npc_justin.png
index 08ba7025c2..28a58235d3 100644
Binary files a/website/assets/sprites/spritesmith/npcs/npc_justin.png and b/website/assets/sprites/spritesmith/npcs/npc_justin.png differ
diff --git a/website/assets/sprites/spritesmith/npcs/npc_matt.png b/website/assets/sprites/spritesmith/npcs/npc_matt.png
index 2531f1084b..5ef1f87124 100644
Binary files a/website/assets/sprites/spritesmith/npcs/npc_matt.png and b/website/assets/sprites/spritesmith/npcs/npc_matt.png differ
diff --git a/website/assets/sprites/spritesmith/npcs/npc_timetravelers_active.png b/website/assets/sprites/spritesmith/npcs/npc_timetravelers_active.png
index f84a5ba2e0..e14e0d32ba 100644
Binary files a/website/assets/sprites/spritesmith/npcs/npc_timetravelers_active.png and b/website/assets/sprites/spritesmith/npcs/npc_timetravelers_active.png differ
diff --git a/website/assets/sprites/spritesmith/npcs/seasonalshop_open.png b/website/assets/sprites/spritesmith/npcs/seasonalshop_open.png
index e1f811893e..d66bf56d46 100644
Binary files a/website/assets/sprites/spritesmith/npcs/seasonalshop_open.png and b/website/assets/sprites/spritesmith/npcs/seasonalshop_open.png differ
diff --git a/website/assets/sprites/spritesmith_large/promo/promo_summer_classes_2017.png b/website/assets/sprites/spritesmith_large/promo/promo_summer_classes_2017.png
new file mode 100644
index 0000000000..8f3877bee5
Binary files /dev/null and b/website/assets/sprites/spritesmith_large/promo/promo_summer_classes_2017.png differ
diff --git a/website/common/locales/en/gear.json b/website/common/locales/en/gear.json
index 15564f8da7..6afa9fab76 100644
--- a/website/common/locales/en/gear.json
+++ b/website/common/locales/en/gear.json
@@ -232,6 +232,15 @@
"weaponSpecialSpring2017HealerText": "Egg Wand",
"weaponSpecialSpring2017HealerNotes": "The true magic of this wand is the secret of new life inside the colorful shell. Increases Intelligence by <%= int %>. Limited Edition 2017 Spring Gear.",
+ "weaponSpecialSummer2017RogueText": "Sea Dragon Fins",
+ "weaponSpecialSummer2017RogueNotes": "The edges of these fins are razor-sharp. Increases Strength by <%= str %>. Limited Edition 2017 Summer Gear.",
+ "weaponSpecialSummer2017WarriorText": "The Mightiest Beach Umbrella",
+ "weaponSpecialSummer2017WarriorNotes": "All fear it. Increases Strength by <%= str %>. Limited Edition 2017 Summer Gear.",
+ "weaponSpecialSummer2017MageText": "Whirlpool Whips",
+ "weaponSpecialSummer2017MageNotes": "Summon up magical whips of boiling water to smite your tasks! Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2017 Summer Gear.",
+ "weaponSpecialSummer2017HealerText": "Pearl Wand",
+ "weaponSpecialSummer2017HealerNotes": "A single touch from this pearl-tipped wand soothes away all wounds. Increases Intelligence by <%= int %>. Limited Edition 2017 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",
@@ -516,6 +525,15 @@
"armorSpecialSpring2017HealerText": "Robes of Repose",
"armorSpecialSpring2017HealerNotes": "The softness of these robes comforts you as well as any who need your healing help! Increases Constitution by <%= con %>. Limited Edition 2017 Spring Gear.",
+ "armorSpecialSummer2017RogueText": "Sea Dragon Tail",
+ "armorSpecialSummer2017RogueNotes": "This colorful garment transforms its wearer into a real Sea Dragon! Increases Perception by <%= per %>. Limited Edition 2017 Summer Gear.",
+ "armorSpecialSummer2017WarriorText": "Sandy Armor",
+ "armorSpecialSummer2017WarriorNotes": "Don't be fooled by the crumbly exterior: this armor is harder than steel. Increases Constitution by <%= con %>. Limited Edition 2017 Summer Gear.",
+ "armorSpecialSummer2017MageText": "Whirlpool Robes",
+ "armorSpecialSummer2017MageNotes": "Careful not to get splashed by these robes woven of enchanted water! Increases Intelligence by <%= int %>. Limited Edition 2017 Summer Gear.",
+ "armorSpecialSummer2017HealerText": "Silversea Tail",
+ "armorSpecialSummer2017HealerNotes": "This garment of silvery scales transforms its wearer into a real Seahealer! Increases Constitution by <%= con %>. Limited Edition 2017 Summer Gear.",
+
"armorMystery201402Text": "Messenger Robes",
"armorMystery201402Notes": "Shimmering and strong, these robes have many pockets to carry letters. Confers no benefit. February 2014 Subscriber Item.",
"armorMystery201403Text": "Forest Walker Armor",
@@ -853,6 +871,15 @@
"headSpecialSpring2017HealerText": "Petal Circlet",
"headSpecialSpring2017HealerNotes": "This delicate crown emits the comforting scent of new Spring blooms. Increases Intelligence by <%= int %>. Limited Edition 2017 Spring Gear.",
+ "headSpecialSummer2017RogueText": "Sea Dragon Helm",
+ "headSpecialSummer2017RogueNotes": "This helm changes colors to help you blend in with your surroundings. Increases Perception by <%= per %>. Limited Edition 2017 Summer Gear.",
+ "headSpecialSummer2017WarriorText": "Sandcastle Helm",
+ "headSpecialSummer2017WarriorNotes": "The finest helm anyone could hope to wear... at least, until the tide comes in. Increases Strength by <%= str %>. Limited Edition 2017 Summer Gear.",
+ "headSpecialSummer2017MageText": "Whirlpool Hat",
+ "headSpecialSummer2017MageNotes": "This hat is composed entirely of a swirling, inverted whirlpool. Increases Perception by <%= per %>. Limited Edition 2017 Summer Gear.",
+ "headSpecialSummer2017HealerText": "Crown of Sea Creatures",
+ "headSpecialSummer2017HealerNotes": "This helm is made up of friendly sea creatures who are temporarily resting on your head, giving you sage advice. Increases Intelligence by <%= int %>. Limited Edition 2017 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.",
@@ -1139,6 +1166,13 @@
"shieldSpecialSpring2017HealerText": "Basket Shield",
"shieldSpecialSpring2017HealerNotes": "Protective and also handy for holding your many healing herbs and accoutrements. Increases Constitution by <%= con %>. Limited Edition 2017 Spring Gear.",
+ "shieldSpecialSummer2017RogueText": "Sea Dragon Fins",
+ "shieldSpecialSummer2017RogueNotes": "The edges of these fins are razor-sharp. Increases Strength by <%= str %>. Limited Edition 2017 Summer Gear.",
+ "shieldSpecialSummer2017WarriorText": "Scallop Shield",
+ "shieldSpecialSummer2017WarriorNotes": "This shell that you just found is both decorative AND defensive! Increases Constitution by <%= con %>. Limited Edition 2017 Summer Gear.",
+ "shieldSpecialSummer2017HealerText": "Oyster Shield",
+ "shieldSpecialSummer2017HealerNotes": "This magical oyster constantly generates pearls as well as protection. Increases Constitution by <%= con %>. Limited Edition 2017 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",
diff --git a/website/common/locales/en/limited.json b/website/common/locales/en/limited.json
index 86d3989ff5..e9653c7d4a 100644
--- a/website/common/locales/en/limited.json
+++ b/website/common/locales/en/limited.json
@@ -88,10 +88,10 @@
"grandMalkinSet": "Grand Malkin (Mage)",
"cleverDogSet": "Clever Dog (Rogue)",
"braveMouseSet": "Brave Mouse (Warrior)",
- "summmer2016SharkWarriorSet": "Shark Warrior (Warrior)",
- "summmer2016DolphinMageSet": "Dolphin Mage (Mage)",
- "summmer2016SeahorseHealerSet": "Seahorse Healer (Healer)",
- "summmer2016EelSet": "Eel Rogue (Rogue)",
+ "summer2016SharkWarriorSet": "Shark Warrior (Warrior)",
+ "summer2016DolphinMageSet": "Dolphin Mage (Mage)",
+ "summer2016SeahorseHealerSet": "Seahorse Healer (Healer)",
+ "summer2016EelSet": "Eel Rogue (Rogue)",
"fall2016SwampThingSet": "Swamp Thing (Warrior)",
"fall2016WickedSorcererSet": "Wicked Sorcerer (Mage)",
"fall2016GorgonHealerSet": "Gorgon Healer (Healer)",
@@ -104,6 +104,10 @@
"spring2017CanineConjurorSet": "Canine Conjuror (Mage)",
"spring2017FloralMouseSet": "Floral Mouse (Healer)",
"spring2017SneakyBunnySet": "Sneaky Bunny (Rogue)",
+ "summer2017SandcastleWarriorSet": "Sandcastle Warrior (Warrior)",
+ "summer2017WhirlpoolMageSet": "Whirlpool Mage (Mage)",
+ "summer2017SeashellSeahealerSet": "Seashell Seahealer (Healer)",
+ "summer2017SeaDragonSet": "Sea Dragon (Rogue)",
"eventAvailability": "Available for purchase until <%= date(locale) %>.",
"dateEndApril": "April 19",
"dateEndMay": "May 17",
diff --git a/website/common/script/content/constants.js b/website/common/script/content/constants.js
index 177a3a688c..23291ff205 100644
--- a/website/common/script/content/constants.js
+++ b/website/common/script/content/constants.js
@@ -28,6 +28,7 @@ export const EVENTS = {
fall2016: { start: '2016-09-20', end: '2016-11-02' },
winter2017: { start: '2016-12-16', end: '2017-02-02' },
spring2017: { start: '2017-03-21', end: '2017-05-02' },
+ summer2017: { start: '2017-06-20', end: '2017-08-02' },
};
export const GEAR_TYPES = [
diff --git a/website/common/script/content/gear/sets/special/index.js b/website/common/script/content/gear/sets/special/index.js
index 718e7ae4fc..2c7da33c6c 100644
--- a/website/common/script/content/gear/sets/special/index.js
+++ b/website/common/script/content/gear/sets/special/index.js
@@ -8,6 +8,8 @@ import takeThisGear from './special-takeThis';
import wonderconGear from './special-wondercon';
import t from '../../../translation';
+const CURRENT_SEASON = 'summer';
+
let armor = {
0: backerGear.armorSpecial0,
1: contributorGear.armorSpecial1,
@@ -142,9 +144,6 @@ let armor = {
notes: t('armorSpecialSpringRogueNotes', { per: 15 }),
value: 90,
per: 15,
- canBuy: () => {
- return true;
- },
},
springWarrior: {
event: EVENTS.spring,
@@ -153,9 +152,6 @@ let armor = {
notes: t('armorSpecialSpringWarriorNotes', { con: 9 }),
value: 90,
con: 9,
- canBuy: () => {
- return true;
- },
},
springMage: {
event: EVENTS.spring,
@@ -164,9 +160,6 @@ let armor = {
notes: t('armorSpecialSpringMageNotes', { int: 9 }),
value: 90,
int: 9,
- canBuy: () => {
- return true;
- },
},
springHealer: {
event: EVENTS.spring,
@@ -175,9 +168,6 @@ let armor = {
notes: t('armorSpecialSpringHealerNotes', { con: 15 }),
value: 90,
con: 15,
- canBuy: () => {
- return true;
- },
},
summerRogue: {
event: EVENTS.summer,
@@ -186,6 +176,9 @@ let armor = {
notes: t('armorSpecialSummerRogueNotes', { per: 15 }),
value: 90,
per: 15,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summerWarrior: {
event: EVENTS.summer,
@@ -194,6 +187,9 @@ let armor = {
notes: t('armorSpecialSummerWarriorNotes', { con: 9 }),
value: 90,
con: 9,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summerMage: {
event: EVENTS.summer,
@@ -202,6 +198,9 @@ let armor = {
notes: t('armorSpecialSummerMageNotes', { int: 9 }),
value: 90,
int: 9,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summerHealer: {
event: EVENTS.summer,
@@ -210,6 +209,9 @@ let armor = {
notes: t('armorSpecialSummerHealerNotes', { con: 15 }),
value: 90,
con: 15,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
fallRogue: {
event: EVENTS.fall,
@@ -288,9 +290,6 @@ let armor = {
notes: t('armorSpecialSpring2015RogueNotes', { per: 15 }),
value: 90,
per: 15,
- canBuy: () => {
- return true;
- },
},
spring2015Warrior: {
event: EVENTS.spring2015,
@@ -299,9 +298,6 @@ let armor = {
notes: t('armorSpecialSpring2015WarriorNotes', { con: 9 }),
value: 90,
con: 9,
- canBuy: () => {
- return true;
- },
},
spring2015Mage: {
event: EVENTS.spring2015,
@@ -310,9 +306,6 @@ let armor = {
notes: t('armorSpecialSpring2015MageNotes', { int: 9 }),
value: 90,
int: 9,
- canBuy: () => {
- return true;
- },
},
spring2015Healer: {
event: EVENTS.spring2015,
@@ -321,9 +314,6 @@ let armor = {
notes: t('armorSpecialSpring2015HealerNotes', { con: 15 }),
value: 90,
con: 15,
- canBuy: () => {
- return true;
- },
},
summer2015Rogue: {
event: EVENTS.summer2015,
@@ -332,6 +322,9 @@ let armor = {
notes: t('armorSpecialSummer2015RogueNotes', { per: 15 }),
value: 90,
per: 15,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2015Warrior: {
event: EVENTS.summer2015,
@@ -340,6 +333,9 @@ let armor = {
notes: t('armorSpecialSummer2015WarriorNotes', { con: 9 }),
value: 90,
con: 9,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2015Mage: {
event: EVENTS.summer2015,
@@ -348,6 +344,9 @@ let armor = {
notes: t('armorSpecialSummer2015MageNotes', { int: 9 }),
value: 90,
int: 9,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2015Healer: {
event: EVENTS.summer2015,
@@ -356,6 +355,9 @@ let armor = {
notes: t('armorSpecialSummer2015HealerNotes', { con: 15 }),
value: 90,
con: 15,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
fall2015Rogue: {
event: EVENTS.fall2015,
@@ -440,9 +442,6 @@ let armor = {
notes: t('armorSpecialSpring2016RogueNotes', { per: 15 }),
value: 90,
per: 15,
- canBuy: () => {
- return true;
- },
},
spring2016Warrior: {
event: EVENTS.spring2016,
@@ -451,9 +450,6 @@ let armor = {
notes: t('armorSpecialSpring2016WarriorNotes', { con: 9 }),
value: 90,
con: 9,
- canBuy: () => {
- return true;
- },
},
spring2016Mage: {
event: EVENTS.spring2016,
@@ -462,9 +458,6 @@ let armor = {
notes: t('armorSpecialSpring2016MageNotes', { int: 9 }),
value: 90,
int: 9,
- canBuy: () => {
- return true;
- },
},
spring2016Healer: {
event: EVENTS.spring2016,
@@ -473,9 +466,6 @@ let armor = {
notes: t('armorSpecialSpring2016HealerNotes', { con: 15 }),
value: 90,
con: 15,
- canBuy: () => {
- return true;
- },
},
summer2016Rogue: {
event: EVENTS.summer2016,
@@ -484,6 +474,9 @@ let armor = {
notes: t('armorSpecialSummer2016RogueNotes', { per: 15 }),
value: 90,
per: 15,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2016Warrior: {
event: EVENTS.summer2016,
@@ -492,6 +485,9 @@ let armor = {
notes: t('armorSpecialSummer2016WarriorNotes', { con: 9 }),
value: 90,
con: 9,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2016Mage: {
event: EVENTS.summer2016,
@@ -500,6 +496,9 @@ let armor = {
notes: t('armorSpecialSummer2016MageNotes', { int: 9 }),
value: 90,
int: 9,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2016Healer: {
event: EVENTS.summer2016,
@@ -508,6 +507,9 @@ let armor = {
notes: t('armorSpecialSummer2016HealerNotes', { con: 15 }),
value: 90,
con: 15,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
fall2016Rogue: {
event: EVENTS.fall2016,
@@ -611,6 +613,38 @@ let armor = {
value: 90,
con: 15,
},
+ summer2017Rogue: {
+ event: EVENTS.summer2017,
+ specialClass: 'rogue',
+ text: t('armorSpecialSummer2017RogueText'),
+ notes: t('armorSpecialSummer2017RogueNotes', { per: 15 }),
+ value: 90,
+ per: 15,
+ },
+ summer2017Warrior: {
+ event: EVENTS.summer2017,
+ specialClass: 'warrior',
+ text: t('armorSpecialSummer2017WarriorText'),
+ notes: t('armorSpecialSummer2017WarriorNotes', { con: 9 }),
+ value: 90,
+ con: 9,
+ },
+ summer2017Mage: {
+ event: EVENTS.summer2017,
+ specialClass: 'wizard',
+ text: t('armorSpecialSummer2017MageText'),
+ notes: t('armorSpecialSummer2017MageNotes', { int: 9 }),
+ value: 90,
+ int: 9,
+ },
+ summer2017Healer: {
+ event: EVENTS.summer2017,
+ specialClass: 'healer',
+ text: t('armorSpecialSummer2017HealerText'),
+ notes: t('armorSpecialSummer2017HealerNotes', { con: 15 }),
+ value: 90,
+ con: 15,
+ },
};
let back = {
@@ -635,6 +669,9 @@ let body = {
text: t('bodySpecialSummerHealerText'),
notes: t('bodySpecialSummerHealerNotes'),
value: 20,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summerMage: {
event: EVENTS.summer,
@@ -642,6 +679,9 @@ let body = {
text: t('bodySpecialSummerMageText'),
notes: t('bodySpecialSummerMageNotes'),
value: 20,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2015Healer: {
event: EVENTS.summer2015,
@@ -649,6 +689,9 @@ let body = {
text: t('bodySpecialSummer2015HealerText'),
notes: t('bodySpecialSummer2015HealerNotes'),
value: 20,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2015Mage: {
event: EVENTS.summer2015,
@@ -656,6 +699,9 @@ let body = {
text: t('bodySpecialSummer2015MageText'),
notes: t('bodySpecialSummer2015MageNotes'),
value: 20,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2015Rogue: {
event: EVENTS.summer2015,
@@ -663,6 +709,9 @@ let body = {
text: t('bodySpecialSummer2015RogueText'),
notes: t('bodySpecialSummer2015RogueNotes'),
value: 20,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2015Warrior: {
event: EVENTS.summer2015,
@@ -670,6 +719,9 @@ let body = {
text: t('bodySpecialSummer2015WarriorText'),
notes: t('bodySpecialSummer2015WarriorNotes'),
value: 20,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
};
@@ -682,6 +734,9 @@ let eyewear = {
text: t('eyewearSpecialSummerRogueText'),
notes: t('eyewearSpecialSummerRogueNotes'),
value: 20,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summerWarrior: {
event: EVENTS.summer,
@@ -689,6 +744,9 @@ let eyewear = {
text: t('eyewearSpecialSummerWarriorText'),
notes: t('eyewearSpecialSummerWarriorNotes'),
value: 20,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
blackTopFrame: {
gearSet: 'glasses',
@@ -877,9 +935,6 @@ let head = {
notes: t('headSpecialSpringRogueNotes', { per: 9 }),
value: 60,
per: 9,
- canBuy: () => {
- return true;
- },
},
springWarrior: {
event: EVENTS.spring,
@@ -888,9 +943,6 @@ let head = {
notes: t('headSpecialSpringWarriorNotes', { str: 9 }),
value: 60,
str: 9,
- canBuy: () => {
- return true;
- },
},
springMage: {
event: EVENTS.spring,
@@ -899,9 +951,6 @@ let head = {
notes: t('headSpecialSpringMageNotes', { per: 7 }),
value: 60,
per: 7,
- canBuy: () => {
- return true;
- },
},
springHealer: {
event: EVENTS.spring,
@@ -910,9 +959,6 @@ let head = {
notes: t('headSpecialSpringHealerNotes', { int: 7 }),
value: 60,
int: 7,
- canBuy: () => {
- return true;
- },
},
summerRogue: {
event: EVENTS.summer,
@@ -921,6 +967,9 @@ let head = {
notes: t('headSpecialSummerRogueNotes', { per: 9 }),
value: 60,
per: 9,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summerWarrior: {
event: EVENTS.summer,
@@ -929,6 +978,9 @@ let head = {
notes: t('headSpecialSummerWarriorNotes', { str: 9 }),
value: 60,
str: 9,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summerMage: {
event: EVENTS.summer,
@@ -937,6 +989,9 @@ let head = {
notes: t('headSpecialSummerMageNotes', { per: 7 }),
value: 60,
per: 7,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summerHealer: {
event: EVENTS.summer,
@@ -945,6 +1000,9 @@ let head = {
notes: t('headSpecialSummerHealerNotes', { int: 7 }),
value: 60,
int: 7,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
fallRogue: {
event: EVENTS.fall,
@@ -1023,9 +1081,6 @@ let head = {
notes: t('headSpecialSpring2015RogueNotes', { per: 9 }),
value: 60,
per: 9,
- canBuy: () => {
- return true;
- },
},
spring2015Warrior: {
event: EVENTS.spring2015,
@@ -1034,9 +1089,6 @@ let head = {
notes: t('headSpecialSpring2015WarriorNotes', { str: 9 }),
value: 60,
str: 9,
- canBuy: () => {
- return true;
- },
},
spring2015Mage: {
event: EVENTS.spring2015,
@@ -1045,9 +1097,6 @@ let head = {
notes: t('headSpecialSpring2015MageNotes', { per: 7 }),
value: 60,
per: 7,
- canBuy: () => {
- return true;
- },
},
spring2015Healer: {
event: EVENTS.spring2015,
@@ -1056,9 +1105,6 @@ let head = {
notes: t('headSpecialSpring2015HealerNotes', { int: 7 }),
value: 60,
int: 7,
- canBuy: () => {
- return true;
- },
},
summer2015Rogue: {
event: EVENTS.summer2015,
@@ -1067,6 +1113,9 @@ let head = {
notes: t('headSpecialSummer2015RogueNotes', { per: 9 }),
value: 60,
per: 9,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2015Warrior: {
event: EVENTS.summer2015,
@@ -1075,6 +1124,9 @@ let head = {
notes: t('headSpecialSummer2015WarriorNotes', { str: 9 }),
value: 60,
str: 9,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2015Mage: {
event: EVENTS.summer2015,
@@ -1083,6 +1135,9 @@ let head = {
notes: t('headSpecialSummer2015MageNotes', { per: 7 }),
value: 60,
per: 7,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2015Healer: {
event: EVENTS.summer2015,
@@ -1091,6 +1146,9 @@ let head = {
notes: t('headSpecialSummer2015HealerNotes', { int: 7 }),
value: 60,
int: 7,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
fall2015Rogue: {
event: EVENTS.fall2015,
@@ -1175,9 +1233,6 @@ let head = {
notes: t('headSpecialSpring2016RogueNotes', { per: 9 }),
value: 60,
per: 9,
- canBuy: () => {
- return true;
- },
},
spring2016Warrior: {
event: EVENTS.spring2016,
@@ -1186,9 +1241,6 @@ let head = {
notes: t('headSpecialSpring2016WarriorNotes', { str: 9 }),
value: 60,
str: 9,
- canBuy: () => {
- return true;
- },
},
spring2016Mage: {
event: EVENTS.spring2016,
@@ -1197,9 +1249,6 @@ let head = {
notes: t('headSpecialSpring2016MageNotes', { per: 7 }),
value: 60,
per: 7,
- canBuy: () => {
- return true;
- },
},
spring2016Healer: {
event: EVENTS.spring2016,
@@ -1208,9 +1257,6 @@ let head = {
notes: t('headSpecialSpring2016HealerNotes', { int: 7 }),
value: 60,
int: 7,
- canBuy: () => {
- return true;
- },
},
summer2016Rogue: {
event: EVENTS.summer2016,
@@ -1219,6 +1265,9 @@ let head = {
notes: t('headSpecialSummer2016RogueNotes', { per: 9 }),
value: 60,
per: 9,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2016Warrior: {
event: EVENTS.summer2016,
@@ -1227,6 +1276,9 @@ let head = {
notes: t('headSpecialSummer2016WarriorNotes', { str: 9 }),
value: 60,
str: 9,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2016Mage: {
event: EVENTS.summer2016,
@@ -1235,6 +1287,9 @@ let head = {
notes: t('headSpecialSummer2016MageNotes', { per: 7 }),
value: 60,
per: 7,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2016Healer: {
event: EVENTS.summer2016,
@@ -1243,6 +1298,9 @@ let head = {
notes: t('headSpecialSummer2016HealerNotes', { int: 7 }),
value: 60,
int: 7,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
fall2016Rogue: {
event: EVENTS.fall2016,
@@ -1346,6 +1404,38 @@ let head = {
value: 60,
int: 7,
},
+ summer2017Rogue: {
+ event: EVENTS.summer2017,
+ specialClass: 'rogue',
+ text: t('headSpecialSummer2017RogueText'),
+ notes: t('headSpecialSummer2017RogueNotes', { per: 9 }),
+ value: 60,
+ per: 9,
+ },
+ summer2017Warrior: {
+ event: EVENTS.summer2017,
+ specialClass: 'warrior',
+ text: t('headSpecialSummer2017WarriorText'),
+ notes: t('headSpecialSummer2017WarriorNotes', { str: 9 }),
+ value: 60,
+ str: 9,
+ },
+ summer2017Mage: {
+ event: EVENTS.summer2017,
+ specialClass: 'wizard',
+ text: t('headSpecialSummer2017MageText'),
+ notes: t('headSpecialSummer2017MageNotes', { per: 7 }),
+ value: 60,
+ per: 7,
+ },
+ summer2017Healer: {
+ event: EVENTS.summer2017,
+ specialClass: 'healer',
+ text: t('headSpecialSummer2017HealerText'),
+ notes: t('headSpecialSummer2017HealerNotes', { int: 7 }),
+ value: 60,
+ int: 7,
+ },
};
let headAccessory = {
@@ -1355,9 +1445,6 @@ let headAccessory = {
text: t('headAccessorySpecialSpringRogueText'),
notes: t('headAccessorySpecialSpringRogueNotes'),
value: 20,
- canBuy: () => {
- return true;
- },
},
springWarrior: {
event: EVENTS.spring,
@@ -1365,9 +1452,6 @@ let headAccessory = {
text: t('headAccessorySpecialSpringWarriorText'),
notes: t('headAccessorySpecialSpringWarriorNotes'),
value: 20,
- canBuy: () => {
- return true;
- },
},
springMage: {
event: EVENTS.spring,
@@ -1375,9 +1459,6 @@ let headAccessory = {
text: t('headAccessorySpecialSpringMageText'),
notes: t('headAccessorySpecialSpringMageNotes'),
value: 20,
- canBuy: () => {
- return true;
- },
},
springHealer: {
event: EVENTS.spring,
@@ -1385,9 +1466,6 @@ let headAccessory = {
text: t('headAccessorySpecialSpringHealerText'),
notes: t('headAccessorySpecialSpringHealerNotes'),
value: 20,
- canBuy: () => {
- return true;
- },
},
spring2015Rogue: {
event: EVENTS.spring2015,
@@ -1395,9 +1473,6 @@ let headAccessory = {
text: t('headAccessorySpecialSpring2015RogueText'),
notes: t('headAccessorySpecialSpring2015RogueNotes'),
value: 20,
- canBuy: () => {
- return true;
- },
},
spring2015Warrior: {
event: EVENTS.spring2015,
@@ -1405,9 +1480,6 @@ let headAccessory = {
text: t('headAccessorySpecialSpring2015WarriorText'),
notes: t('headAccessorySpecialSpring2015WarriorNotes'),
value: 20,
- canBuy: () => {
- return true;
- },
},
spring2015Mage: {
event: EVENTS.spring2015,
@@ -1415,9 +1487,6 @@ let headAccessory = {
text: t('headAccessorySpecialSpring2015MageText'),
notes: t('headAccessorySpecialSpring2015MageNotes'),
value: 20,
- canBuy: () => {
- return true;
- },
},
spring2015Healer: {
event: EVENTS.spring2015,
@@ -1425,9 +1494,6 @@ let headAccessory = {
text: t('headAccessorySpecialSpring2015HealerText'),
notes: t('headAccessorySpecialSpring2015HealerNotes'),
value: 20,
- canBuy: () => {
- return true;
- },
},
bearEars: {
gearSet: 'animal',
@@ -1515,9 +1581,6 @@ let headAccessory = {
text: t('headAccessorySpecialSpring2016RogueText'),
notes: t('headAccessorySpecialSpring2016RogueNotes'),
value: 20,
- canBuy: () => {
- return true;
- },
},
spring2016Warrior: {
event: EVENTS.spring2016,
@@ -1525,9 +1588,6 @@ let headAccessory = {
text: t('headAccessorySpecialSpring2016WarriorText'),
notes: t('headAccessorySpecialSpring2016WarriorNotes'),
value: 20,
- canBuy: () => {
- return true;
- },
},
spring2016Mage: {
event: EVENTS.spring2016,
@@ -1535,9 +1595,6 @@ let headAccessory = {
text: t('headAccessorySpecialSpring2016MageText'),
notes: t('headAccessorySpecialSpring2016MageNotes'),
value: 20,
- canBuy: () => {
- return true;
- },
},
spring2016Healer: {
event: EVENTS.spring2016,
@@ -1545,9 +1602,6 @@ let headAccessory = {
text: t('headAccessorySpecialSpring2016HealerText'),
notes: t('headAccessorySpecialSpring2016HealerNotes'),
value: 20,
- canBuy: () => {
- return true;
- },
},
spring2017Rogue: {
event: EVENTS.spring2017,
@@ -1671,9 +1725,6 @@ let shield = {
notes: t('shieldSpecialSpringRogueNotes', { str: 8 }),
value: 80,
str: 8,
- canBuy: () => {
- return true;
- },
},
springWarrior: {
event: EVENTS.spring,
@@ -1682,9 +1733,6 @@ let shield = {
notes: t('shieldSpecialSpringWarriorNotes', { con: 7 }),
value: 70,
con: 7,
- canBuy: () => {
- return true;
- },
},
springHealer: {
event: EVENTS.spring,
@@ -1693,9 +1741,6 @@ let shield = {
notes: t('shieldSpecialSpringHealerNotes', { con: 9 }),
value: 70,
con: 9,
- canBuy: () => {
- return true;
- },
},
summerRogue: {
event: EVENTS.summer,
@@ -1704,6 +1749,9 @@ let shield = {
notes: t('shieldSpecialSummerRogueNotes', { str: 8 }),
value: 80,
str: 8,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summerWarrior: {
event: EVENTS.summer,
@@ -1712,6 +1760,9 @@ let shield = {
notes: t('shieldSpecialSummerWarriorNotes', { con: 7 }),
value: 70,
con: 7,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summerHealer: {
event: EVENTS.summer,
@@ -1720,6 +1771,9 @@ let shield = {
notes: t('shieldSpecialSummerHealerNotes', { con: 9 }),
value: 70,
con: 9,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
fallRogue: {
event: EVENTS.fall,
@@ -1776,9 +1830,6 @@ let shield = {
notes: t('shieldSpecialSpring2015RogueNotes', { str: 8 }),
value: 80,
str: 8,
- canBuy: () => {
- return true;
- },
},
spring2015Warrior: {
event: EVENTS.spring2015,
@@ -1787,9 +1838,6 @@ let shield = {
notes: t('shieldSpecialSpring2015WarriorNotes', { con: 7 }),
value: 70,
con: 7,
- canBuy: () => {
- return true;
- },
},
spring2015Healer: {
event: EVENTS.spring2015,
@@ -1798,9 +1846,6 @@ let shield = {
notes: t('shieldSpecialSpring2015HealerNotes', { con: 9 }),
value: 70,
con: 9,
- canBuy: () => {
- return true;
- },
},
summer2015Rogue: {
event: EVENTS.summer2015,
@@ -1809,6 +1854,9 @@ let shield = {
notes: t('shieldSpecialSummer2015RogueNotes', { str: 8 }),
value: 80,
str: 8,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2015Warrior: {
event: EVENTS.summer2015,
@@ -1817,6 +1865,9 @@ let shield = {
notes: t('shieldSpecialSummer2015WarriorNotes', { con: 7 }),
value: 70,
con: 7,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2015Healer: {
event: EVENTS.summer2015,
@@ -1825,6 +1876,9 @@ let shield = {
notes: t('shieldSpecialSummer2015HealerNotes', { con: 9 }),
value: 70,
con: 9,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
fall2015Rogue: {
event: EVENTS.fall2015,
@@ -1881,9 +1935,6 @@ let shield = {
notes: t('shieldSpecialSpring2016RogueNotes', { str: 8 }),
value: 80,
str: 8,
- canBuy: () => {
- return true;
- },
},
spring2016Warrior: {
event: EVENTS.spring2016,
@@ -1892,9 +1943,6 @@ let shield = {
notes: t('shieldSpecialSpring2016WarriorNotes', { con: 7 }),
value: 70,
con: 7,
- canBuy: () => {
- return true;
- },
},
spring2016Healer: {
event: EVENTS.spring2016,
@@ -1903,9 +1951,6 @@ let shield = {
notes: t('shieldSpecialSpring2016HealerNotes', { con: 9 }),
value: 70,
con: 9,
- canBuy: () => {
- return true;
- },
},
summer2016Rogue: {
event: EVENTS.summer2016,
@@ -1914,6 +1959,9 @@ let shield = {
notes: t('shieldSpecialSummer2016RogueNotes', { str: 8 }),
value: 80,
str: 8,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2016Warrior: {
event: EVENTS.summer2016,
@@ -1922,6 +1970,9 @@ let shield = {
notes: t('shieldSpecialSummer2016WarriorNotes', { con: 7 }),
value: 70,
con: 7,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2016Healer: {
event: EVENTS.summer2016,
@@ -1930,6 +1981,9 @@ let shield = {
notes: t('shieldSpecialSummer2016HealerNotes', { con: 9 }),
value: 70,
con: 9,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
fall2016Rogue: {
event: EVENTS.fall2016,
@@ -2003,6 +2057,30 @@ let shield = {
value: 70,
con: 9,
},
+ summer2017Rogue: {
+ event: EVENTS.summer2017,
+ specialClass: 'rogue',
+ text: t('shieldSpecialSummer2017RogueText'),
+ notes: t('shieldSpecialSummer2017RogueNotes', { str: 8 }),
+ value: 80,
+ str: 8,
+ },
+ summer2017Warrior: {
+ event: EVENTS.summer2017,
+ specialClass: 'warrior',
+ text: t('shieldSpecialSummer2017WarriorText'),
+ notes: t('shieldSpecialSummer2017WarriorNotes', { con: 7 }),
+ value: 70,
+ con: 7,
+ },
+ summer2017Healer: {
+ event: EVENTS.summer2017,
+ specialClass: 'healer',
+ text: t('shieldSpecialSummer2017HealerText'),
+ notes: t('shieldSpecialSummer2017HealerNotes', { con: 9 }),
+ value: 70,
+ con: 9,
+ },
};
let weapon = {
@@ -2136,9 +2214,6 @@ let weapon = {
notes: t('weaponSpecialSpringRogueNotes', { str: 8 }),
value: 80,
str: 8,
- canBuy: () => {
- return true;
- },
},
springWarrior: {
event: EVENTS.spring,
@@ -2147,9 +2222,6 @@ let weapon = {
notes: t('weaponSpecialSpringWarriorNotes', { str: 15 }),
value: 90,
str: 15,
- canBuy: () => {
- return true;
- },
},
springMage: {
event: EVENTS.spring,
@@ -2160,9 +2232,6 @@ let weapon = {
value: 160,
int: 15,
per: 7,
- canBuy: () => {
- return true;
- },
},
springHealer: {
event: EVENTS.spring,
@@ -2171,9 +2240,6 @@ let weapon = {
notes: t('weaponSpecialSpringHealerNotes', { int: 9 }),
value: 90,
int: 9,
- canBuy: () => {
- return true;
- },
},
summerRogue: {
event: EVENTS.summer,
@@ -2182,6 +2248,9 @@ let weapon = {
notes: t('weaponSpecialSummerRogueNotes', { str: 8 }),
value: 80,
str: 8,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summerWarrior: {
event: EVENTS.summer,
@@ -2190,6 +2259,9 @@ let weapon = {
notes: t('weaponSpecialSummerWarriorNotes', { str: 15 }),
value: 90,
str: 15,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summerMage: {
event: EVENTS.summer,
@@ -2200,6 +2272,9 @@ let weapon = {
value: 160,
int: 15,
per: 7,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summerHealer: {
event: EVENTS.summer,
@@ -2208,6 +2283,9 @@ let weapon = {
notes: t('weaponSpecialSummerHealerNotes', { int: 9 }),
value: 90,
int: 9,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
fallRogue: {
event: EVENTS.fall,
@@ -2284,9 +2362,6 @@ let weapon = {
notes: t('weaponSpecialSpring2015RogueNotes', { str: 8 }),
value: 80,
str: 8,
- canBuy: () => {
- return true;
- },
},
spring2015Warrior: {
event: EVENTS.spring2015,
@@ -2295,9 +2370,6 @@ let weapon = {
notes: t('weaponSpecialSpring2015WarriorNotes', { str: 15 }),
value: 90,
str: 15,
- canBuy: () => {
- return true;
- },
},
spring2015Mage: {
event: EVENTS.spring2015,
@@ -2308,9 +2380,6 @@ let weapon = {
value: 160,
int: 15,
per: 7,
- canBuy: () => {
- return true;
- },
},
spring2015Healer: {
event: EVENTS.spring2015,
@@ -2319,9 +2388,6 @@ let weapon = {
notes: t('weaponSpecialSpring2015HealerNotes', { int: 9 }),
value: 90,
int: 9,
- canBuy: () => {
- return true;
- },
},
summer2015Rogue: {
event: EVENTS.summer2015,
@@ -2330,6 +2396,9 @@ let weapon = {
notes: t('weaponSpecialSummer2015RogueNotes', { str: 8 }),
value: 80,
str: 8,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2015Warrior: {
event: EVENTS.summer2015,
@@ -2338,6 +2407,9 @@ let weapon = {
notes: t('weaponSpecialSummer2015WarriorNotes', { str: 15 }),
value: 90,
str: 15,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2015Mage: {
event: EVENTS.summer2015,
@@ -2348,6 +2420,9 @@ let weapon = {
value: 160,
int: 15,
per: 7,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2015Healer: {
event: EVENTS.summer2015,
@@ -2356,6 +2431,9 @@ let weapon = {
notes: t('weaponSpecialSummer2015HealerNotes', { int: 9 }),
value: 90,
int: 9,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
fall2015Rogue: {
event: EVENTS.fall2015,
@@ -2432,9 +2510,6 @@ let weapon = {
notes: t('weaponSpecialSpring2016RogueNotes', { str: 8 }),
value: 80,
str: 8,
- canBuy: () => {
- return true;
- },
},
spring2016Warrior: {
event: EVENTS.spring2016,
@@ -2443,9 +2518,6 @@ let weapon = {
notes: t('weaponSpecialSpring2016WarriorNotes', { str: 15 }),
value: 90,
str: 15,
- canBuy: () => {
- return true;
- },
},
spring2016Mage: {
event: EVENTS.spring2016,
@@ -2456,9 +2528,6 @@ let weapon = {
value: 160,
int: 15,
per: 7,
- canBuy: () => {
- return true;
- },
},
spring2016Healer: {
event: EVENTS.spring2016,
@@ -2467,9 +2536,6 @@ let weapon = {
notes: t('weaponSpecialSpring2016HealerNotes', { int: 9 }),
value: 90,
int: 9,
- canBuy: () => {
- return true;
- },
},
summer2016Rogue: {
event: EVENTS.summer2016,
@@ -2478,6 +2544,9 @@ let weapon = {
notes: t('weaponSpecialSummer2016RogueNotes', { str: 8 }),
value: 80,
str: 8,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2016Warrior: {
event: EVENTS.summer2016,
@@ -2486,6 +2555,9 @@ let weapon = {
notes: t('weaponSpecialSummer2016WarriorNotes', { str: 15 }),
value: 90,
str: 15,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2016Mage: {
event: EVENTS.summer2016,
@@ -2496,6 +2568,9 @@ let weapon = {
value: 160,
int: 15,
per: 7,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
summer2016Healer: {
event: EVENTS.summer2016,
@@ -2504,6 +2579,9 @@ let weapon = {
notes: t('weaponSpecialSummer2016HealerNotes', { int: 9 }),
value: 90,
int: 9,
+ canBuy: () => {
+ return CURRENT_SEASON === 'summer';
+ },
},
fall2016Rogue: {
event: EVENTS.fall2016,
@@ -2607,6 +2685,40 @@ let weapon = {
value: 90,
int: 9,
},
+ summer2017Rogue: {
+ event: EVENTS.summer2017,
+ specialClass: 'rogue',
+ text: t('weaponSpecialSummer2017RogueText'),
+ notes: t('weaponSpecialSummer2017RogueNotes', { str: 8 }),
+ value: 80,
+ str: 8,
+ },
+ summer2017Warrior: {
+ event: EVENTS.summer2017,
+ specialClass: 'warrior',
+ text: t('weaponSpecialSummer2017WarriorText'),
+ notes: t('weaponSpecialSummer2017WarriorNotes', { str: 15 }),
+ value: 90,
+ str: 15,
+ },
+ summer2017Mage: {
+ event: EVENTS.summer2017,
+ specialClass: 'wizard',
+ twoHanded: true,
+ text: t('weaponSpecialSummer2017MageText'),
+ notes: t('weaponSpecialSummer2017MageNotes', { int: 15, per: 7 }),
+ value: 160,
+ int: 15,
+ per: 7,
+ },
+ summer2017Healer: {
+ event: EVENTS.summer2017,
+ specialClass: 'healer',
+ text: t('weaponSpecialSummer2017HealerText'),
+ notes: t('weaponSpecialSummer2017HealerNotes', { int: 9 }),
+ value: 90,
+ int: 9,
+ },
};
let specialSet = {
diff --git a/website/common/script/libs/shops.js b/website/common/script/libs/shops.js
index e92f1ffb73..e0bca9e112 100644
--- a/website/common/script/libs/shops.js
+++ b/website/common/script/libs/shops.js
@@ -297,6 +297,18 @@ shops.getTimeTravelersCategories = function getTimeTravelersCategories (user, la
// };
shops.getSeasonalShopCategories = function getSeasonalShopCategories (user, language) {
const AVAILABLE_SETS = {
+ summerHealer: i18n.t('reefSeahealerSet', language),
+ summer2015Healer: i18n.t('strappingSailorSet', language),
+ summer2016Healer: i18n.t('summer2016SeahorseHealerSet', language),
+ summerMage: i18n.t('emeraldMermageSet', language),
+ summer2015Mage: i18n.t('shipSoothsayerSet', language),
+ summer2016Mage: i18n.t('summer2016DolphinMageSet', language),
+ summerRogue: i18n.t('roguishPirateSet', language),
+ summer2015Rogue: i18n.t('reefRenegadeSet', language),
+ summer2016Rogue: i18n.t('summer2016EelSet', language),
+ summerWarrior: i18n.t('daringSwashbucklerSet', language),
+ summer2015Warrior: i18n.t('sunfishWarriorSet', language),
+ summer2016Warrior: i18n.t('summer2016SharkWarriorSet', language),
};
const AVAILABLE_SPELLS = [
diff --git a/website/server/controllers/api-v3/shops.js b/website/server/controllers/api-v3/shops.js
index 4eded39970..be664af643 100644
--- a/website/server/controllers/api-v3/shops.js
+++ b/website/server/controllers/api-v3/shops.js
@@ -107,8 +107,8 @@ api.getSeasonalShopItems = {
let resObject = {
identifier: 'seasonalShop',
text: res.t('seasonalShop'),
- notes: res.t('seasonalShopClosedText'),
- imageName: 'seasonalshop_closed',
+ notes: res.t('seasonalShopSummerText'),
+ imageName: 'seasonalshop_open',
categories: shops.getSeasonalShopCategories(user, req.language),
};
diff --git a/website/views/options/inventory/seasonal-shop.jade b/website/views/options/inventory/seasonal-shop.jade
index 83823f4f47..fb82c3024b 100644
--- a/website/views/options/inventory/seasonal-shop.jade
+++ b/website/views/options/inventory/seasonal-shop.jade
@@ -1,12 +1,12 @@
.container-fluid
.stable.row: .col-xs-12
- div(class="#{env.worldDmg.seasonalShop ? 'seasonalshop_broken' : 'seasonalshop_closed'}").pull-left-sm.col-centered
+ div(class="#{env.worldDmg.seasonalShop ? 'seasonalshop_broken' : 'seasonalshop_open'}").pull-left-sm.col-centered
.popover.static-popover.fade.right.in.pull-left-sm.col-centered
.arrow.hidden-xs
- h3.popover-title!=env.t('seasonalShopClosedTitle', {linkStart:"", linkEnd: ""})
+ h3.popover-title!=env.t('seasonalShopTitle', {linkStart:"", linkEnd: ""})
.popover-content
- p(ng-if='!env.worldDmg.seasonalShop')!=env.t('seasonalShopClosedText')
- p(ng-if='env.worldDmg.seasonalShop')!=env.t('seasonalShopClosedText')
+ p(ng-if='!env.worldDmg.seasonalShop')!=env.t('seasonalShopSummerText')
+ p(ng-if='env.worldDmg.seasonalShop')!=env.t('seasonalShopSummerText')
li.customize-menu.inventory-gear
menu.pets-menu(label='{{category.text}}', ng-repeat='category in seasonalShopCategories')
@@ -19,7 +19,7 @@
div
| {{item.value}}
span(ng-class="{ 'shop_gold': item.currency === 'gold', 'Pet_Currency_Gem1x inline-gems': item.currency === 'gems'}")
- // div(ng-if='category.identifier === "spells"')
+ div(ng-if='category.identifier === "spells"')
button.customize-option(class='inventory_special_nye',
popover='{{::Content.spells.special.nye.notes()}}',
popover-title='{{::Content.spells.special.nye.text()}}',
diff --git a/website/views/shared/new-stuff.jade b/website/views/shared/new-stuff.jade
index 57c4023450..8c92c91509 100644
--- a/website/views/shared/new-stuff.jade
+++ b/website/views/shared/new-stuff.jade
@@ -1,22 +1,45 @@
-h2 6/19/2017 - HABITICA BLOG: BEHIND THE SCENES AT HABITICA HOUSE, FEATURED WIKI ON CUSTOM REWARDS
+.promo_summer_classes_2017.pull-right
+h2 6/20/2017 - SUMMER SPLASH BEGINS: SUMMER CLASS OUTFITS, SEASONAL SHOP, AND NPC DECORATIONS!
hr
tr
td
- .scene_habitica_house.center-block
- h3 Behind the Scenes: Habitica House
- p There's a new Behind the Scenes post on the Habitica blog about our recent Staff Retreat. Come check out some great photos and anecdotes from the trip, and find more fun by searching #HabiticaHouse on Twitter and Instagram!
+ h3 Summer Splash Begins!
+ 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!
tr
td
- .scene_buying_rewards.pull-right
- h3 Featured Wiki Article: Sample Rewards
- p This month's featured Wiki article is about Sample Rewards! We hope that it will help you as you treat yourself in recognition of your hard work! Be sure to check it out, and let us know what you think by reaching out on Twitter, Tumblr, and Facebook.
- p.small.muted by Beffymaroo and the Wiki Wizards
+ h3 Summer Class Outfits
+ p From now until July 31st, limited edition outfits are available in the Rewards column. Depending on your class, you can be a Seashell Healer, Sea Dragon Rogue, Sandcastle Warrior, or Whirlpool Mage! You'd better get productive to earn enough gold before they disappear. Good luck!
+ p.small.muted by AnnDeLune, tricksy.fox, Vampitch, and nonight
+ tr
+ td
+ .seasonalshop_open.pull-left.slight-right-margin
+ h3 Seasonal Shop Is Open!
+ p The Seasonal Shop 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.small.muted by SabreCat, Lemoness, Giu09, JaizakAripaik, Teto Forever, and Kai
+ tr
+ td
+ .npc_matt.pull-right
+ h3 NPC Costumes
+ 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.small.muted by Lemoness
if menuItem !== 'oldNews'
hr
a(href='/static/old-news', target='_blank') Read older news
mixin oldNews
+ h2 6/19/2017 - HABITICA BLOG: BEHIND THE SCENES AT HABITICA HOUSE, FEATURED WIKI ON CUSTOM REWARDS
+ tr
+ td
+ .scene_habitica_house.center-block
+ h3 Behind the Scenes: Habitica House
+ p There's a new Behind the Scenes post on the Habitica blog about our recent Staff Retreat. Come check out some great photos and anecdotes from the trip, and find more fun by searching #HabiticaHouse on Twitter and Instagram!
+ tr
+ td
+ .scene_buying_rewards.pull-right
+ h3 Featured Wiki Article: Sample Rewards
+ p This month's featured Wiki article is about Sample Rewards! We hope that it will help you as you treat yourself in recognition of your hard work! Be sure to check it out, and let us know what you think by reaching out on Twitter, Tumblr, and Facebook.
+ p.small.muted by Beffymaroo and the Wiki Wizards
h2 6/16/2017 - NEW AUDIO THEMES AND GREETING CARDS, CHALLENGE JOINING ACHIEVEMENT, AND REDUCED COLLECTION QUEST DIFFICULTY
tr
td